Mercurial – Korruptes Repository

Aufgrund eines Plattencrash war ein HG(Mercurial)-Repository beschädigt. Eine Datei im fehlte im HG-Store Verzeichnis. Aufgrund dieses Fehlers konnte das Repository nicht mehr geclont werden, obwohl die „reale“ Datei im Dateisystem noch existierte.

Die Fehlermeldung lautete bei einem „hg clone repository“ folgendermassen:

httpdocs/static/hp_animation/en.png.i@99f16d456d18: no match found!

Im Datastore sah das Verzeichnis so aus:

drwxr-xr-x 2 4096 2013-04-12 17:16 .
drwxr-xr-x 6 4096 2013-04-12 17:16 ..
-rw-r--r-- 1 243 2013-04-12 17:16 arrow.png.i
-rw-r--r-- 1 1390 2013-04-12 17:16 de.png.i
-rw-r--r-- 1 0 2013-04-12 17:16 en.png.i

Wenn die Datei noch existiert, dann kann man diese HG-Index Datei „manuell“ nach dieser Anleitung neuanlegen.


# hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
data/httpdocs/static/hp_animation/en.png.i@4713: missing revlog!
4713: empty or missing httpdocs/static/hp_animation/en.png
httpdocs/static/hp_animation/en.png@4713: 99f16d456d18 in manifests not found
8773 files, 4715 changesets, 14795 total revisions
3 integrity errors encountered!
(first damaged changeset appears to be 4713)

Wichtig in dieser Ausgabe ist die Versionsnummer. In meinem Fall 4713, also clont man die Version n-1 => 4712

Lösung:

hg clone -r 4712 broken fixed
cp broken/httpdocs/static/hp_animation/en.png fixed/httpdocs/static/hp_animation/en.png
cd fixed
hg add httpdocs/static/hp_animation/en.png
hg ci -m "Correct httpdocs/static/hp_animation/en.png"
cd ..
cp fixed/.hg/store/data/httpdocs/static/hp__animation/en.png.i cp broken/.hg/store/data/httpdocs/static/hp__animation/en.png.i
cd broken
hg up
hg verify

Bemerkung: der doppelte Unterstrich im Pfad ist der Pfadkorrektur im Mercurial-Store geschuldet