diff --git a/hg b/hg --- a/hg +++ b/hg @@ -417,7 +417,6 @@ elif cmd == "verify": manifestchangeset[changes[0]] = n for f in changes[3]: - revisions += 1 filelinkrevs.setdefault(f, []).append(i) ui.status("checking manifests\n") @@ -468,6 +467,7 @@ elif cmd == "verify": fl = repo.file(f) nodes = { hg.nullid: 1 } for i in range(fl.count()): + revisions += 1 n = fl.node(i) if n not in filenodes[f]: @@ -505,10 +505,6 @@ elif cmd == "verify": nodes[n] = 1 # cross-check - for flr in filelinkrevs[f]: - ui.warn("changeset rev %d not in %s\n" % (flr, f)) - errors += 1 - for node in filenodes[f]: ui.warn("node %s in manifests not in %s\n" % (hg.hex(n), f)) errors += 1 diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -814,7 +814,7 @@ class localrepository: # pull off the changeset group self.ui.status("adding changesets\n") co = self.changelog.tip() - cn = self.changelog.addgroup(getgroup(), csmap, tr) + cn = self.changelog.addgroup(getgroup(), csmap, tr, 1) # unique changesets = self.changelog.rev(cn) - self.changelog.rev(co) # pull off the manifest group diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -433,7 +433,7 @@ class revlog: yield struct.pack(">l", 0) - def addgroup(self, revs, linkmapper, transaction): + def addgroup(self, revs, linkmapper, transaction, unique = 0): # given a set of deltas, add them to the revision log. the # first delta is against its parent, which should be in our # log, the rest are against the previous delta. @@ -463,7 +463,10 @@ class revlog: node, p1, p2, cs = struct.unpack("20s20s20s20s", chunk[:80]) link = linkmapper(cs) if node in self.nodemap: - raise "already have %s" % hex(node[:4]) + # this can happen if two branches make the same change + if unique: + raise "already have %s" % hex(node[:4]) + continue delta = chunk[80:] if not chain: