diff --git a/contrib/dumprevlog b/contrib/dumprevlog --- a/contrib/dumprevlog +++ b/contrib/dumprevlog @@ -17,7 +17,7 @@ for f in sys.argv[1:]: p = r.parents(n) d = r.revision(n) print "node:", node.hex(n) - print "linkrev:", r.linkrev(n) + print "linkrev:", r.linkrev(i) print "parents:", node.hex(p[0]), node.hex(p[1]) print "length:", len(d) print "-start-" diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -1017,7 +1017,7 @@ def walkchangerevs(ui, repo, pats, chang revs = [] for j in xrange(i - window, i + 1): n = filelog.node(j) - revs.append((filelog.linkrev(n), + revs.append((filelog.linkrev(j), follow and filelog.renamed(n))) revs.reverse() for rev in revs: diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -829,7 +829,7 @@ def debugindex(ui, file_): except: pp = [nullid, nullid] ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % ( - i, r.start(i), r.length(i), r.base(i), r.linkrev(node), + i, r.start(i), r.length(i), r.base(i), r.linkrev(i), short(node), short(pp[0]), short(pp[1]))) def debugindexdot(ui, file_): @@ -1833,7 +1833,7 @@ def log(ui, repo, *pats, **opts): fl = repo.file(fn) for i in fl: node = fl.node(i) - lr = fl.linkrev(node) + lr = fl.linkrev(i) renamed = fl.renamed(node) rcache[fn][lr] = renamed if renamed: @@ -2053,7 +2053,7 @@ def parents(ui, repo, file_=None, **opts if not filenodes: raise util.Abort(_("'%s' not found in manifest!") % file_) fl = repo.file(file_) - p = [repo.lookup(fl.linkrev(fn)) for fn in filenodes] + p = [repo.lookup(fl.linkrev(fl.rev(fn))) for fn in filenodes] else: p = [cp.node() for cp in ctx.parents()] diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -200,7 +200,7 @@ class filectx(object): if '_changectx' in self.__dict__: self._changeid = self._changectx.rev() else: - self._changeid = self._filelog.linkrev(self._filenode) + self._changeid = self._filelog.linkrev(self._filerev) return self._changeid elif name == '_filenode': if '_fileid' in self.__dict__: @@ -263,9 +263,9 @@ class filectx(object): return self._changectx.rev() if '_changeid' in self.__dict__: return self._changectx.rev() - return self._filelog.linkrev(self._filenode) + return self._filelog.linkrev(self._filerev) - def linkrev(self): return self._filelog.linkrev(self._filenode) + def linkrev(self): return self._filelog.linkrev(self._filerev) def node(self): return self._changectx.node() def user(self): return self._changectx.user() def date(self): return self._changectx.date() @@ -647,7 +647,7 @@ class workingfilectx(filectx): def rev(self): if '_changectx' in self.__dict__: return self._changectx.rev() - return self._filelog.linkrev(self._filenode) + return self._filelog.linkrev(self._filerev) def data(self): return self._repo.wread(self._path) def renamed(self): diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py --- a/mercurial/hgweb/webcommands.py +++ b/mercurial/hgweb/webcommands.py @@ -526,13 +526,13 @@ def filelog(web, req, tmpl): if not numrevs: # file doesn't exist at all raise rev = webutil.changectx(web.repo, req).rev() - first = fl.linkrev(fl.node(0)) + first = fl.linkrev(0) if rev < first: # current rev is from before file existed raise frev = numrevs - 1 - while fl.linkrev(fl.node(frev)) > rev: + while fl.linkrev(frev) > rev: frev -= 1 - fctx = web.repo.filectx(f, fl.linkrev(fl.node(frev))) + fctx = web.repo.filectx(f, fl.linkrev(frev)) count = fctx.filerev() + 1 pagelen = web.maxshortchanges diff --git a/mercurial/hgweb/webutil.py b/mercurial/hgweb/webutil.py --- a/mercurial/hgweb/webutil.py +++ b/mercurial/hgweb/webutil.py @@ -126,7 +126,7 @@ def changectx(repo, req): ctx = repo[changeid] except RepoError: man = repo.manifest - ctx = repo[man.linkrev(man.lookup(changeid))] + ctx = repo[man.linkrev(man.rev(man.lookup(changeid)))] return ctx diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1703,7 +1703,7 @@ class localrepository(repo.repository): # If a 'missing' manifest thinks it belongs to a changenode # the recipient is assumed to have, obviously the recipient # must have that manifest. - linknode = cl.node(mnfst.linkrev(n)) + linknode = cl.node(mnfst.linkrev(mnfst.rev(n))) if linknode in has_cl_set: has_mnfst_set[n] = 1 prune_parents(mnfst, has_mnfst_set, msng_mnfst_set) @@ -1769,7 +1769,7 @@ class localrepository(repo.repository): # assume the recipient must have, then the recipient must have # that filenode. for n in msngset: - clnode = cl.node(filerevlog.linkrev(n)) + clnode = cl.node(filerevlog.linkrev(filerevlog.rev(n))) if clnode in has_cl_set: hasset[n] = 1 prune_parents(filerevlog, hasset, msngset) @@ -1892,9 +1892,8 @@ class localrepository(repo.repository): def gennodelst(log): for r in log: - n = log.node(r) - if log.linkrev(n) in revset: - yield n + if log.linkrev(r) in revset: + yield log.node(r) def changed_file_collector(changedfileset): def collect_changed_files(clnode): @@ -1905,7 +1904,7 @@ class localrepository(repo.repository): def lookuprevlink_func(revlog): def lookuprevlink(n): - return cl.node(revlog.linkrev(n)) + return cl.node(revlog.linkrev(revlog.rev(n))) return lookuprevlink def gengroup(): diff --git a/mercurial/repair.py b/mercurial/repair.py --- a/mercurial/repair.py +++ b/mercurial/repair.py @@ -41,8 +41,7 @@ def _collectextranodes(repo, files, link startrev = count = len(revlog) # find the truncation point of the revlog for i in xrange(0, count): - node = revlog.node(i) - lrev = revlog.linkrev(node) + lrev = revlog.linkrev(i) if lrev >= link: startrev = i + 1 break @@ -51,7 +50,7 @@ def _collectextranodes(repo, files, link # (we have to manually save these guys) for i in xrange(startrev, count): node = revlog.node(i) - lrev = revlog.linkrev(node) + lrev = revlog.linkrev(i) if lrev < link: extra.append((node, cl.node(lrev))) diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -500,8 +500,8 @@ class revlog(object): raise LookupError(node, self.indexfile, _('no node')) def node(self, rev): return self.index[rev][7] - def linkrev(self, node): - return self.index[self.rev(node)][4] + def linkrev(self, rev): + return self.index[rev][4] def parents(self, node): d = self.index[self.rev(node)][5:7] return (self.node(d[0]), self.node(d[1])) diff --git a/mercurial/verify.py b/mercurial/verify.py --- a/mercurial/verify.py +++ b/mercurial/verify.py @@ -70,7 +70,7 @@ def _verify(repo): warn(_("warning: `%s' uses revlog format 0") % name) def checkentry(obj, i, node, seen, linkrevs, f): - lr = obj.linkrev(node) + lr = obj.linkrev(obj.rev(node)) if lr < 0 or (havecl and lr not in linkrevs): t = "unexpected" if lr < 0 or lr >= len(cl): @@ -135,7 +135,7 @@ def _verify(repo): elif f != "/dev/null": fns = filenodes.setdefault(f, {}) if fn not in fns: - fns[fn] = n + fns[fn] = i except Exception, inst: exc(lr, _("reading manifest delta %s") % short(n), inst) @@ -155,7 +155,8 @@ def _verify(repo): for f in util.sort(filenodes): if f not in filelinkrevs: try: - lr = min([repo.file(f).linkrev(n) for n in filenodes[f]]) + fl = repo.file(f) + lr = min([fl.linkrev(fl.rev(n)) for n in filenodes[f]]) except: lr = None err(lr, _("in manifest but not in changeset"), f)