Merge with mpm.
--- a/mercurial/commands.py Sun Nov 25 12:42:06 2007 +0100
+++ b/mercurial/commands.py Mon Nov 26 12:25:55 2007 -0800
@@ -1629,7 +1629,7 @@
if opts.get('exact'):
if hex(n) != nodeid:
repo.rollback()
- raise util.Abort(_('patch is damaged' +
+ raise util.Abort(_('patch is damaged'
' or loses information'))
finally:
os.unlink(tmpname)
@@ -1937,7 +1937,7 @@
if len(heads) == 1:
msg = _('there is nothing to merge')
if parent != repo.lookup(repo.workingctx().branch()):
- msg = _('%s - use "hg update" instead' % msg)
+ msg = _('%s - use "hg update" instead') % msg
raise util.Abort(msg)
if parent not in heads:
--- a/mercurial/dispatch.py Sun Nov 25 12:42:06 2007 +0100
+++ b/mercurial/dispatch.py Mon Nov 26 12:25:55 2007 -0800
@@ -125,7 +125,7 @@
ui.warn("\n%r\n" % util.ellipsis(inst[1]))
except ImportError, inst:
m = str(inst).split()[-1]
- ui.warn(_("abort: could not import module %s!\n" % m))
+ ui.warn(_("abort: could not import module %s!\n") % m)
if m in "mpatch bdiff".split():
ui.warn(_("(did you forget to compile extensions?)\n"))
elif m in "zlib".split():
--- a/mercurial/localrepo.py Sun Nov 25 12:42:06 2007 +0100
+++ b/mercurial/localrepo.py Mon Nov 26 12:25:55 2007 -0800
@@ -1710,6 +1710,8 @@
# Go through all our files in order sorted by name.
for fname in changedfiles:
filerevlog = self.file(fname)
+ if filerevlog.count() == 0:
+ raise util.abort(_("empty or missing revlog for %s") % fname)
# Toss out the filenodes that the recipient isn't really
# missing.
if msng_filenode_set.has_key(fname):
@@ -1794,6 +1796,8 @@
for fname in changedfiles:
filerevlog = self.file(fname)
+ if filerevlog.count() == 0:
+ raise util.abort(_("empty or missing revlog for %s") % fname)
nodeiter = gennodelst(filerevlog)
nodeiter = list(nodeiter)
if nodeiter:
--- a/mercurial/revlog.py Sun Nov 25 12:42:06 2007 +0100
+++ b/mercurial/revlog.py Mon Nov 26 12:25:55 2007 -0800
@@ -321,7 +321,7 @@
e = _unpack(indexformatv0, cur)
# transform to revlogv1 format
e2 = (offset_type(e[0], 0), e[1], -1, e[2], e[3],
- nodemap[e[4]], nodemap[e[5]], e[6])
+ nodemap.get(e[4], nullrev), nodemap.get(e[5], nullrev), e[6])
index.append(e2)
nodemap[e[6]] = n
n += 1
--- a/mercurial/verify.py Sun Nov 25 12:42:06 2007 +0100
+++ b/mercurial/verify.py Mon Nov 26 12:25:55 2007 -0800
@@ -62,9 +62,14 @@
repo.ui.status(_("repository uses revlog format %d\n") %
(revlogv1 and 1 or 0))
+ havecl = havemf = 1
seen = {}
repo.ui.status(_("checking changesets\n"))
- checksize(repo.changelog, "changelog")
+ if repo.changelog.count() == 0 and repo.manifest.count() > 1:
+ havecl = 0
+ err(0, _("empty or missing 00changelog.i"))
+ else:
+ checksize(repo.changelog, "changelog")
for i in xrange(repo.changelog.count()):
changesets += 1
@@ -96,14 +101,18 @@
seen = {}
repo.ui.status(_("checking manifests\n"))
- checkversion(repo.manifest, "manifest")
- checksize(repo.manifest, "manifest")
+ if repo.changelog.count() > 0 and repo.manifest.count() == 0:
+ havemf = 0
+ err(0, _("empty or missing 00manifest.i"))
+ else:
+ checkversion(repo.manifest, "manifest")
+ checksize(repo.manifest, "manifest")
for i in xrange(repo.manifest.count()):
n = repo.manifest.node(i)
l = repo.manifest.linkrev(n)
- if l < 0 or l >= repo.changelog.count():
+ if l < 0 or (havecl and l >= repo.changelog.count()):
err(None, _("bad link (%d) at manifest revision %d") % (l, i))
if n in neededmanifests:
@@ -132,38 +141,51 @@
repo.ui.status(_("crosschecking files in changesets and manifests\n"))
- nm = neededmanifests.items()
- nm.sort()
- for m, c in nm:
- err(m, _("changeset refers to unknown manifest %s") % short(c))
- del neededmanifests, nm
+ if havemf > 0:
+ nm = [(c, m) for m, c in neededmanifests.items()]
+ nm.sort()
+ for c, m in nm:
+ err(c, _("changeset refers to unknown manifest %s") % short(m))
+ del neededmanifests, nm
- for f in filenodes:
- if f not in filelinkrevs:
- lrs = [repo.manifest.linkrev(n) for n in filenodes[f]]
- lrs.sort()
- err(lrs[0], _("in manifest but not in changeset"), f)
+ if havecl:
+ fl = filenodes.keys()
+ fl.sort()
+ for f in fl:
+ if f not in filelinkrevs:
+ lrs = [repo.manifest.linkrev(n) for n in filenodes[f]]
+ lrs.sort()
+ err(lrs[0], _("in manifest but not in changeset"), f)
+ del fl
- for f in filelinkrevs:
- if f not in filenodes:
- lr = filelinkrevs[f][0]
- err(lr, _("in changeset but not in manifest"), f)
+ if havemf:
+ fl = filelinkrevs.keys()
+ fl.sort()
+ for f in fl:
+ if f not in filenodes:
+ lr = filelinkrevs[f][0]
+ err(lr, _("in changeset but not in manifest"), f)
+ del fl
repo.ui.status(_("checking files\n"))
- ff = filenodes.keys()
+ ff = dict.fromkeys(filenodes.keys() + filelinkrevs.keys()).keys()
ff.sort()
for f in ff:
if f == "/dev/null":
continue
files += 1
if not f:
- lr = repo.manifest.linkrev(filenodes[f][0])
- err(lr, _("file without name in manifest %s") % short(ff[n]))
+ lr = filelinkrevs[f][0]
+ err(lr, _("file without name in manifest"))
continue
fl = repo.file(f)
checkversion(fl, f)
checksize(fl, f)
+ if fl.count() == 0:
+ err(filelinkrevs[f][0], _("empty or missing revlog"), f)
+ continue
+
seen = {}
nodes = {nullid: 1}
for i in xrange(fl.count()):
@@ -171,7 +193,7 @@
n = fl.node(i)
flr = fl.linkrev(n)
- if flr not in filelinkrevs.get(f, []):
+ if flr < 0 or (havecl and flr not in filelinkrevs.get(f, [])):
if flr < 0 or flr >= repo.changelog.count():
err(None, _("rev %d point to nonexistent changeset %d")
% (i, flr), f)
@@ -182,14 +204,16 @@
warn(_(" (expected %s)") % filelinkrevs[f][0])
flr = None # can't be trusted
else:
- filelinkrevs[f].remove(flr)
+ if havecl:
+ filelinkrevs[f].remove(flr)
if n in seen:
err(flr, _("duplicate revision %d") % i, f)
- if n not in filenodes[f]:
- err(flr, _("%s not in manifests") % (short(n)), f)
- else:
- del filenodes[f][n]
+ if f in filenodes:
+ if havemf and n not in filenodes[f]:
+ err(flr, _("%s not in manifests") % (short(n)), f)
+ else:
+ del filenodes[f][n]
# verify contents
try:
@@ -230,11 +254,12 @@
(short(n), inst), f)
# cross-check
- fns = [(repo.manifest.linkrev(filenodes[f][n]), n)
- for n in filenodes[f]]
- fns.sort()
- for lr, node in fns:
- err(lr, _("%s in manifests not found") % short(node), f)
+ if f in filenodes:
+ fns = [(repo.manifest.linkrev(filenodes[f][n]), n)
+ for n in filenodes[f]]
+ fns.sort()
+ for lr, node in fns:
+ err(lr, _("%s in manifests not found") % short(node), f)
repo.ui.status(_("%d files, %d changesets, %d total revisions\n") %
(files, changesets, revisions))
@@ -247,4 +272,3 @@
repo.ui.warn(_("(first damaged changeset appears to be %d)\n")
% firstbad[0])
return 1
-