octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: hg repo corruption -- anyone have a backup?


From: Daniel J Sebald
Subject: Re: hg repo corruption -- anyone have a backup?
Date: Fri, 31 Aug 2012 04:23:01 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.1.16-1.fc14 Thunderbird/3.1.16

On 08/31/2012 02:59 AM, John W. Eaton wrote:
On 30-Aug-2012, Judd Storrs wrote:

| I have a way old one:
|
| $ hg log | head
| changeset:   10952:18b0af0bbd6b
| tag:         tip
| user:        Ben Abbott<address@hidden>
| date:        Wed Sep 08 08:17:48 2010 -0400
| summary:     image.m: Fix axis limits for single dimension images, add demo.
|
| $ hg verify
| checking changesets
| checking manifests
| crosschecking files in changesets and manifests
| checking files
| 7772 files, 10953 changesets, 76766 total revisions

Thanks for checking.  I also had one from February 2010 that was
clean.

I'm also able to generate an archive that is clean up to this changeset:

   changeset:   13329:80f7564a3849
   user:        John W. Eaton<address@hidden>
   date:        Wed Oct 12 12:18:27 2011 -0400
   summary:     handle class objects in num2cell

from the current archive that seems to have problems.  The next
changeset is

   changeset:   13330:583c15dd487b
   parent:      -1:000000000000
   user:        Jacob Dawid<address@hidden>
   date:        Tue Apr 05 00:12:18 2011 +0200
   summary:     Initial commit.

The -v options adds this:

files: gui//Quint.pro gui//README gui//client.cpp gui//client.h gui//clientmanager.cpp gui//clientmanager.h gui//main.cpp gui//mainwindow.cpp gui//mainwindow.h gui//octaveterminal.cpp gui//octaveterminal.h


and this is where things start to go bad for me.  Note the strange
parent ID.  Is that correct?  I thought the gui branch was a clone of
Octave with the gui directory added?  Is that not correct?

I saved the log to a file and searched for other instances of "-1:00" and there are none. All other cases of "parent" list a previous changeset. I'm not sure if the "-1:00" is bad. Being referenced to a previous changeset probably would be cleaner, but it could be that some kind of bad merge or improper branch was done. Since changeset 13330:583c15dd487b only adds files (instead of diffs), not referencing a parent probably isn't a critical issue for Mercurial.

Here is another bit of information:

10649 files, 15271 changesets, 99682 total revisions
863 warnings encountered!
1654 integrity errors encountered!
(first damaged changeset appears to be 13495)

Changeset 13495 is the changeset that merged/pushed/added a bunch of files for the GUI:

changeset:   13495:11e03a76d8c0
user:        Jacob Dawid <address@hidden>
date:        Fri Apr 29 23:51:33 2011 +0200
files: gui//Quint.pro gui//src/BrowserWidget.cpp gui//src/BrowserWidget.h gui//src/MainWindow.cpp gui//src/MainWindow.h gui//src/OctaveTerminal.cpp gui//src/OctaveTerminal.h gui/src/BlockArray.cpp gui/src/BlockArray.h gui/src/BrowserWidget.cpp gui/src/BrowserWidget.h
[snip maybe 40 to fifty files]
gui/src/kpty.cpp gui/src/kpty.h gui/src/kpty_export.h gui/src/kpty_p.h gui/src/kptydevice.cpp gui/src/kptydevice.h gui/src/kptyprocess.cpp gui/src/kptyprocess.h
description:
Added source files.

What is peculiar is that in some cases I see gui// associated with the directory. Other times I see gui/ associated with the directory. And it is like this throughout the verbose log. It's as though the ones added early on have // and the later ones have /. I don't see any other files having // in the log record other than those few "gui" files.

Here is a reference about what you noticed, i.e., the "nullid" -1:000...

http://selenic.com/pipermail/mercurial/2006-November/011634.html

which describes this as not a branch, but as a whole new tree, i.e., two repositories within the same file. It says the two can be merged, but it might be wise to not mix and match file commits from the gui files and the conventional files for the time being.

I just noticed something else. The first complaint while doing a verify is 13674:

checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
 gui//address@hidden: rev 1 points to unexpected changeset 13674
 (expected 13357 13500)
 gui//address@hidden: 291538499e53 not in manifests
 gui//address@hidden: rev 37 points to unexpected changeset 13501
(expected 13330 13333 13347 13353 13356 13359 13360 13363 13365 13366 13367 13375 13377 13381 13382 13389 13390 13395 13401 13402 13407 13408 13412 13416 13440 13443 13445 13446 13453 13454 13459 13460 13468 13469 13483 13485 13495 13500)

and notice that HG is trying to find information on the gui//COPYING file, i.e., the one with the two slashes //. But when I look at the verbose log entry, the files are:

changeset:   13674:c0e66d6e3dc8
user:        Jacob Dawid <address@hidden>
date:        Sun Sep 25 10:52:42 2011 +0200
files: gui/COPYING gui/README gui/octave-gui.pro gui/src/BrowserWidget.cpp gui/src/BrowserWidget.h gui/src/CommandLineParser.cpp gui/src/CommandLineParser.h gui/src/FileEditorMdiSubWindow.cpp gui/src/FileEditorMdiSubWindow.h gui/src/Fi

i.e., gui/COPYING gui/README with a single slash. Recall above that changeset 13330 has double slashes, gui//README.

There looks to be a couple issues.

1) There might be two separate repository trees in the data record.
2) It looks as though some changes were made to file names because of redundant slashes, i.e., //. In an OS the // might be extraneous, but perhaps it is meaningful inside the repository itself.

Given that, maybe it is possible a second tree is present that is corrupt, and the tree most people have been working with is fine. I don't know mercurial well enough to figure out merging or (if possible) to strip one "tree" outside of the repository.

Dan


reply via email to

[Prev in Thread] Current Thread [Next in Thread]