# HG changeset patch # User Joerg Sonnenberger # Date 2020-12-01 20:54:46 # Node ID 59fa3890d40a1318fbb6664faaf022d0c7b2f60d # Parent d6afa9c149c34518c729feff1a148d4b1d9a60dd node: import symbols explicitly There is no point in lazy importing mercurial.node, it is used all over the place anyway. So consistently import the used symbols directly. Fix one file using symbols indirectly via mercurial.revlog. Differential Revision: https://phab.mercurial-scm.org/D9480 diff --git a/contrib/dumprevlog b/contrib/dumprevlog --- a/contrib/dumprevlog +++ b/contrib/dumprevlog @@ -5,9 +5,9 @@ from __future__ import absolute_import, print_function import sys +from mercurial.node import hex from mercurial import ( encoding, - node, pycompat, revlog, ) @@ -38,9 +38,9 @@ for f in sys.argv[1:]: n = r.node(i) p = r.parents(n) d = r.revision(n) - printb(b"node: %s" % node.hex(n)) + printb(b"node: %s" % hex(n)) printb(b"linkrev: %d" % r.linkrev(i)) - printb(b"parents: %s %s" % (node.hex(p[0]), node.hex(p[1]))) + printb(b"parents: %s %s" % (hex(p[0]), hex(p[1]))) printb(b"length: %d" % len(d)) printb(b"-start-") printb(d) diff --git a/contrib/undumprevlog b/contrib/undumprevlog --- a/contrib/undumprevlog +++ b/contrib/undumprevlog @@ -6,9 +6,9 @@ from __future__ import absolute_import, print_function import sys +from mercurial.node import bin from mercurial import ( encoding, - node, revlog, transaction, vfs as vfsmod, @@ -31,13 +31,13 @@ while True: r = revlog.revlog(opener, f) procutil.stdout.write(b'%s\n' % f) elif l.startswith("node:"): - n = node.bin(l[6:-1]) + n = bin(l[6:-1]) elif l.startswith("linkrev:"): lr = int(l[9:-1]) elif l.startswith("parents:"): p = l[9:-1].split() - p1 = node.bin(p[0]) - p2 = node.bin(p[1]) + p1 = bin(p[0]) + p2 = bin(p[1]) elif l.startswith("length:"): length = int(l[8:-1]) sys.stdin.readline() # start marker diff --git a/hgext/absorb.py b/hgext/absorb.py --- a/hgext/absorb.py +++ b/hgext/absorb.py @@ -36,6 +36,11 @@ from __future__ import absolute_import import collections from mercurial.i18n import _ +from mercurial.node import ( + hex, + nullid, + short, +) from mercurial import ( cmdutil, commands, @@ -44,7 +49,6 @@ from mercurial import ( error, linelog, mdiff, - node, obsolete, patch, phases, @@ -102,7 +106,7 @@ class emptyfilecontext(object): return b'' def node(self): - return node.nullid + return nullid def uniq(lst): @@ -367,7 +371,7 @@ class filefixupstate(object): idx = (max(rev - 1, 0)) // 2 self.ui.write( _(b'%s: chunk %d:%d -> %d lines\n') - % (node.short(self.fctxs[idx].node()), a1, a2, len(blines)) + % (short(self.fctxs[idx].node()), a1, a2, len(blines)) ) self.linelog.replacelines(rev, a1, a2, b1, b2) if self.opts.get(b'edit_lines', False): @@ -486,7 +490,7 @@ class filefixupstate(object): editortext += _(b'HG: %s/%s %s %s\n') % ( b'|' * i, b'-' * (len(visiblefctxs) - i + 1), - node.short(f.node()), + short(f.node()), f.description().split(b'\n', 1)[0], ) editortext += _(b'HG: %s\n') % (b'|' * len(visiblefctxs)) @@ -816,7 +820,7 @@ class fixupstate(object): if self.ui.debugflag: return b'%d:%s' % (ctx.rev(), ctx.hex()) else: - return b'%d:%s' % (ctx.rev(), node.short(ctx.node())) + return b'%d:%s' % (ctx.rev(), short(ctx.node())) def _getnewfilecontents(self, ctx): """(ctx) -> {path: str} @@ -849,7 +853,7 @@ class fixupstate(object): changes.append((name, hsh)) if self.ui.verbose: self.ui.write( - _(b'moving bookmark %s to %s\n') % (name, node.hex(hsh)) + _(b'moving bookmark %s to %s\n') % (name, hex(hsh)) ) else: changes.append((name, None)) @@ -920,7 +924,7 @@ class fixupstate(object): the commit is a clone from ctx, with a (optionally) different p1, and different file contents replaced by memworkingcopy. """ - parents = p1 and (p1, node.nullid) + parents = p1 and (p1, nullid) extra = ctx.extra() if self._useobsolete and self.ui.configbool(b'absorb', b'add-noise'): extra[b'absorb_source'] = ctx.hex() diff --git a/hgext/convert/git.py b/hgext/convert/git.py --- a/hgext/convert/git.py +++ b/hgext/convert/git.py @@ -9,10 +9,10 @@ from __future__ import absolute_import import os from mercurial.i18n import _ +from mercurial.node import nullhex from mercurial import ( config, error, - node as nodemod, pycompat, ) @@ -192,7 +192,7 @@ class convert_git(common.converter_sourc return heads def catfile(self, rev, ftype): - if rev == nodemod.nullhex: + if rev == nullhex: raise IOError self.catfilepipe[0].write(rev + b'\n') self.catfilepipe[0].flush() @@ -214,7 +214,7 @@ class convert_git(common.converter_sourc return data def getfile(self, name, rev): - if rev == nodemod.nullhex: + if rev == nullhex: return None, None if name == b'.hgsub': data = b'\n'.join([m.hgsub() for m in self.submoditer()]) @@ -228,7 +228,7 @@ class convert_git(common.converter_sourc return data, mode def submoditer(self): - null = nodemod.nullhex + null = nullhex for m in sorted(self.submodules, key=lambda p: p.path): if m.node != null: yield m @@ -316,7 +316,7 @@ class convert_git(common.converter_sourc subexists[0] = True if entry[4] == b'D' or renamesource: subdeleted[0] = True - changes.append((b'.hgsub', nodemod.nullhex)) + changes.append((b'.hgsub', nullhex)) else: changes.append((b'.hgsub', b'')) elif entry[1] == b'160000' or entry[0] == b':160000': @@ -324,7 +324,7 @@ class convert_git(common.converter_sourc subexists[0] = True else: if renamesource: - h = nodemod.nullhex + h = nullhex self.modecache[(f, h)] = (p and b"x") or (s and b"l") or b"" changes.append((f, h)) @@ -361,7 +361,7 @@ class convert_git(common.converter_sourc if subexists[0]: if subdeleted[0]: - changes.append((b'.hgsubstate', nodemod.nullhex)) + changes.append((b'.hgsubstate', nullhex)) else: self.retrievegitmodules(version) changes.append((b'.hgsubstate', b'')) diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py --- a/hgext/convert/hg.py +++ b/hgext/convert/hg.py @@ -24,6 +24,12 @@ import time from mercurial.i18n import _ from mercurial.pycompat import open +from mercurial.node import ( + bin, + hex, + nullhex, + nullid, +) from mercurial import ( bookmarks, context, @@ -32,7 +38,6 @@ from mercurial import ( hg, lock as lockmod, merge as mergemod, - node as nodemod, phases, pycompat, scmutil, @@ -155,7 +160,7 @@ class mercurial_sink(common.converter_si continue revid = revmap.get(source.lookuprev(s[0])) if not revid: - if s[0] == nodemod.nullhex: + if s[0] == nullhex: revid = s[0] else: # missing, but keep for hash stability @@ -174,7 +179,7 @@ class mercurial_sink(common.converter_si revid = s[0] subpath = s[1] - if revid != nodemod.nullhex: + if revid != nullhex: revmap = self.subrevmaps.get(subpath) if revmap is None: revmap = mapfile( @@ -295,13 +300,13 @@ class mercurial_sink(common.converter_si parents = pl nparents = len(parents) if self.filemapmode and nparents == 1: - m1node = self.repo.changelog.read(nodemod.bin(parents[0]))[0] + m1node = self.repo.changelog.read(bin(parents[0]))[0] parent = parents[0] if len(parents) < 2: - parents.append(nodemod.nullid) + parents.append(nullid) if len(parents) < 2: - parents.append(nodemod.nullid) + parents.append(nullid) p2 = parents.pop(0) text = commit.desc @@ -332,12 +337,12 @@ class mercurial_sink(common.converter_si # Only transplant stores its reference in binary if label == b'transplant_source': - node = nodemod.hex(node) + node = hex(node) newrev = revmap.get(node) if newrev is not None: if label == b'transplant_source': - newrev = nodemod.bin(newrev) + newrev = bin(newrev) extra[label] = newrev @@ -351,7 +356,7 @@ class mercurial_sink(common.converter_si p2 = parents.pop(0) p1ctx = self.repo[p1] p2ctx = None - if p2 != nodemod.nullid: + if p2 != nullid: p2ctx = self.repo[p2] fileset = set(files) if full: @@ -389,7 +394,7 @@ class mercurial_sink(common.converter_si origctx = commit.ctx else: origctx = None - node = nodemod.hex(self.repo.commitctx(ctx, origctx=origctx)) + node = hex(self.repo.commitctx(ctx, origctx=origctx)) # If the node value has changed, but the phase is lower than # draft, set it back to draft since it hasn't been exposed @@ -406,7 +411,7 @@ class mercurial_sink(common.converter_si if self.filemapmode and nparents == 1: man = self.repo.manifestlog.getstorage(b'') - mnode = self.repo.changelog.read(nodemod.bin(p2))[0] + mnode = self.repo.changelog.read(bin(p2))[0] closed = b'close' in commit.extra if not closed and not man.cmp(m1node, man.revision(mnode)): self.ui.status(_(b"filtering out empty revision\n")) @@ -416,7 +421,7 @@ class mercurial_sink(common.converter_si def puttags(self, tags): tagparent = self.repo.branchtip(self.tagsbranch, ignoremissing=True) - tagparent = tagparent or nodemod.nullid + tagparent = tagparent or nullid oldlines = set() for branch, heads in pycompat.iteritems(self.repo.branchmap()): @@ -468,7 +473,7 @@ class mercurial_sink(common.converter_si extra, ) node = self.repo.commitctx(ctx) - return nodemod.hex(node), nodemod.hex(tagparent) + return hex(node), hex(tagparent) def setfilemapmode(self, active): self.filemapmode = active @@ -484,7 +489,7 @@ class mercurial_sink(common.converter_si self.ui.status(_(b"updating bookmarks\n")) destmarks = self.repo._bookmarks changes = [ - (bookmark, nodemod.bin(updatedbookmark[bookmark])) + (bookmark, bin(updatedbookmark[bookmark])) for bookmark in updatedbookmark ] destmarks.applychanges(self.repo, tr, changes) @@ -577,7 +582,7 @@ class mercurial_source(common.converter_ return [p for p in ctx.parents() if p and self.keep(p.node())] def getheads(self): - return [nodemod.hex(h) for h in self._heads if self.keep(h)] + return [hex(h) for h in self._heads if self.keep(h)] def getfile(self, name, rev): try: @@ -678,9 +683,7 @@ class mercurial_source(common.converter_ for t in self.repo.tagslist() if self.repo.tagtype(t[0]) == b'global' ] - return { - name: nodemod.hex(node) for name, node in tags if self.keep(node) - } + return {name: hex(node) for name, node in tags if self.keep(node)} def getchangedfiles(self, rev, i): ctx = self._changectx(rev) @@ -718,7 +721,7 @@ class mercurial_source(common.converter_ def lookuprev(self, rev): try: - return nodemod.hex(self.repo.lookup(rev)) + return hex(self.repo.lookup(rev)) except (error.RepoError, error.LookupError): return None diff --git a/hgext/fastannotate/context.py b/hgext/fastannotate/context.py --- a/hgext/fastannotate/context.py +++ b/hgext/fastannotate/context.py @@ -17,12 +17,16 @@ from mercurial.pycompat import ( open, setattr, ) +from mercurial.node import ( + bin, + hex, + short, +) from mercurial import ( error, linelog as linelogmod, lock as lockmod, mdiff, - node, pycompat, scmutil, util, @@ -150,7 +154,7 @@ def hashdiffopts(diffopts): diffoptstr = stringutil.pprint( sorted((k, getattr(diffopts, k)) for k in mdiff.diffopts.defaults) ) - return node.hex(hashutil.sha1(diffoptstr).digest())[:6] + return hex(hashutil.sha1(diffoptstr).digest())[:6] _defaultdiffopthash = hashdiffopts(mdiff.defaultopts) @@ -308,7 +312,7 @@ class _annotatecontext(object): # command could give us a revision number even if the user passes a # commit hash. if isinstance(rev, int): - rev = node.hex(self.repo.changelog.node(rev)) + rev = hex(self.repo.changelog.node(rev)) # fast path: if rev is in the main branch already directly, revfctx = self.canannotatedirectly(rev) @@ -493,7 +497,7 @@ class _annotatecontext(object): result = True f = None if not isinstance(rev, int) and rev is not None: - hsh = {20: bytes, 40: node.bin}.get(len(rev), lambda x: None)(rev) + hsh = {20: bytes, 40: bin}.get(len(rev), lambda x: None)(rev) if hsh is not None and (hsh, self.path) in self.revmap: f = hsh if f is None: @@ -598,7 +602,7 @@ class _annotatecontext(object): self.ui.debug( b'fastannotate: reading %s line #%d ' b'to resolve lines %r\n' - % (node.short(hsh), linenum, idxs) + % (short(hsh), linenum, idxs) ) fctx = self._resolvefctx(hsh, revmap.rev2path(rev)) lines = mdiff.splitnewlines(fctx.data()) @@ -610,8 +614,7 @@ class _annotatecontext(object): # run the annotate and the lines should match to the file content self.ui.debug( - b'fastannotate: annotate %s to resolve lines\n' - % node.short(hsh) + b'fastannotate: annotate %s to resolve lines\n' % short(hsh) ) linelog.annotate(rev) fctx = self._resolvefctx(hsh, revmap.rev2path(rev)) @@ -640,12 +643,10 @@ class _annotatecontext(object): hsh = f.node() llrev = self.revmap.hsh2rev(hsh) if not llrev: - raise faerror.CorruptedFileError( - b'%s is not in revmap' % node.hex(hsh) - ) + raise faerror.CorruptedFileError(b'%s is not in revmap' % hex(hsh)) if (self.revmap.rev2flag(llrev) & revmapmod.sidebranchflag) != 0: raise faerror.CorruptedFileError( - b'%s is not in revmap mainbranch' % node.hex(hsh) + b'%s is not in revmap mainbranch' % hex(hsh) ) self.linelog.annotate(llrev) result = [ diff --git a/hgext/fastannotate/formatter.py b/hgext/fastannotate/formatter.py --- a/hgext/fastannotate/formatter.py +++ b/hgext/fastannotate/formatter.py @@ -6,9 +6,12 @@ # GNU General Public License version 2 or any later version. from __future__ import absolute_import +from mercurial.node import ( + hex, + short, +) from mercurial import ( encoding, - node, pycompat, templatefilters, util, @@ -116,9 +119,9 @@ class defaultformatter(object): @util.propertycache def _hexfunc(self): if self.ui.debugflag or self.opts.get(b'long_hash'): - return node.hex + return hex else: - return node.short + return short def end(self): pass @@ -168,7 +171,7 @@ class jsonformatter(defaultformatter): @util.propertycache def _hexfunc(self): - return node.hex + return hex def end(self): self.ui.write(b'\n]\n') diff --git a/hgext/git/dirstate.py b/hgext/git/dirstate.py --- a/hgext/git/dirstate.py +++ b/hgext/git/dirstate.py @@ -4,11 +4,11 @@ import contextlib import errno import os +from mercurial.node import nullid from mercurial import ( error, extensions, match as matchmod, - node as nodemod, pycompat, scmutil, util, @@ -81,14 +81,14 @@ class gitdirstate(object): except pygit2.GitError: # Typically happens when peeling HEAD fails, as in an # empty repository. - return nodemod.nullid + return nullid def p2(self): # TODO: MERGE_HEAD? something like that, right? - return nodemod.nullid + return nullid - def setparents(self, p1, p2=nodemod.nullid): - assert p2 == nodemod.nullid, b'TODO merging support' + def setparents(self, p1, p2=nullid): + assert p2 == nullid, b'TODO merging support' self.git.head.set_target(gitutil.togitnode(p1)) @util.propertycache @@ -102,7 +102,7 @@ class gitdirstate(object): def parents(self): # TODO how on earth do we find p2 if a merge is in flight? - return self.p1(), nodemod.nullid + return self.p1(), nullid def __iter__(self): return (pycompat.fsencode(f.path) for f in self.git.index) diff --git a/hgext/git/gitlog.py b/hgext/git/gitlog.py --- a/hgext/git/gitlog.py +++ b/hgext/git/gitlog.py @@ -2,6 +2,14 @@ from __future__ import absolute_import from mercurial.i18n import _ +from mercurial.node import ( + bin, + hex, + nullhex, + nullid, + nullrev, + wdirhex, +) from mercurial import ( ancestor, changelog as hgchangelog, @@ -9,7 +17,6 @@ from mercurial import ( encoding, error, manifest, - node as nodemod, pycompat, ) from mercurial.interfaces import ( @@ -39,7 +46,7 @@ class baselog(object): # revlog.revlog) ) def rev(self, n): - if n == nodemod.nullid: + if n == nullid: return -1 t = self._db.execute( 'SELECT rev FROM changelog WHERE node = ?', (gitutil.togitnode(n),) @@ -49,14 +56,14 @@ class baselog(object): # revlog.revlog) return t[0] def node(self, r): - if r == nodemod.nullrev: - return nodemod.nullid + if r == nullrev: + return nullid t = self._db.execute( 'SELECT node FROM changelog WHERE rev = ?', (r,) ).fetchone() if t is None: raise error.LookupError(r, b'00changelog.i', _(b'no node')) - return nodemod.bin(t[0]) + return bin(t[0]) def hasnode(self, n): t = self._db.execute( @@ -123,10 +130,10 @@ class changelog(baselog): @property def nodemap(self): r = { - nodemod.bin(v[0]): v[1] + bin(v[0]): v[1] for v in self._db.execute('SELECT node, rev FROM changelog') } - r[nodemod.nullid] = nodemod.nullrev + r[nullid] = nullrev return r def tip(self): @@ -134,8 +141,8 @@ class changelog(baselog): 'SELECT node FROM changelog ORDER BY rev DESC LIMIT 1' ).fetchone() if t: - return nodemod.bin(t[0]) - return nodemod.nullid + return bin(t[0]) + return nullid def revs(self, start=0, stop=None): if stop is None: @@ -155,16 +162,16 @@ class changelog(baselog): return next(t) def _partialmatch(self, id): - if nodemod.wdirhex.startswith(id): + if wdirhex.startswith(id): raise error.WdirUnsupported candidates = [ - nodemod.bin(x[0]) + bin(x[0]) for x in self._db.execute( 'SELECT node FROM changelog WHERE node LIKE ?', (id + b'%',) ) ] - if nodemod.nullhex.startswith(id): - candidates.append(nodemod.nullid) + if nullhex.startswith(id): + candidates.append(nullid) if len(candidates) > 1: raise error.AmbiguousPrefixLookupError( id, b'00changelog.i', _(b'ambiguous identifier') @@ -177,7 +184,7 @@ class changelog(baselog): return 0 def shortest(self, node, minlength=1): - nodehex = nodemod.hex(node) + nodehex = hex(node) for attempt in pycompat.xrange(minlength, len(nodehex) + 1): candidate = nodehex[:attempt] matches = int( @@ -209,7 +216,7 @@ class changelog(baselog): else: n = nodeorrev # handle looking up nullid - if n == nodemod.nullid: + if n == nullid: return hgchangelog._changelogrevision(extra={}) hn = gitutil.togitnode(n) # We've got a real commit! @@ -226,7 +233,7 @@ class changelog(baselog): for r in self._db.execute( 'SELECT filename FROM changedfiles ' 'WHERE node = ? and filenode = ?', - (hn, nodemod.nullhex), + (hn, nullhex), ) ] c = self.gitrepo[hn] @@ -267,7 +274,7 @@ class changelog(baselog): nullrev. """ if common is None: - common = [nodemod.nullrev] + common = [nullrev] return ancestor.incrementalmissingancestors(self.parentrevs, common) @@ -287,7 +294,7 @@ class changelog(baselog): not supplied, uses all of the revlog's heads. If common is not supplied, uses nullid.""" if common is None: - common = [nodemod.nullid] + common = [nullid] if heads is None: heads = self.heads() @@ -302,12 +309,12 @@ class changelog(baselog): c = [] p = self.rev(node) for r in self.revs(start=p + 1): - prevs = [pr for pr in self.parentrevs(r) if pr != nodemod.nullrev] + prevs = [pr for pr in self.parentrevs(r) if pr != nullrev] if prevs: for pr in prevs: if pr == p: c.append(self.node(r)) - elif p == nodemod.nullrev: + elif p == nullrev: c.append(self.node(r)) return c @@ -323,7 +330,7 @@ class changelog(baselog): # Cleanup opportunity: this is *identical* to the revlog.py version def isancestorrev(self, a, b): - if a == nodemod.nullrev: + if a == nullrev: return True elif a == b: return True @@ -337,8 +344,8 @@ class changelog(baselog): if hn != gitutil.nullgit: c = self.gitrepo[hn] else: - return nodemod.nullrev, nodemod.nullrev - p1 = p2 = nodemod.nullrev + return nullrev, nullrev + p1 = p2 = nullrev if c.parents: p1 = self.rev(c.parents[0].id.raw) if len(c.parents) > 2: @@ -386,9 +393,9 @@ class changelog(baselog): ): parents = [] hp1, hp2 = gitutil.togitnode(p1), gitutil.togitnode(p2) - if p1 != nodemod.nullid: + if p1 != nullid: parents.append(hp1) - if p2 and p2 != nodemod.nullid: + if p2 and p2 != nullid: parents.append(hp2) assert date is not None timestamp, tz = date @@ -419,7 +426,7 @@ class manifestlog(baselog): return self.get(b'', node) def get(self, relpath, node): - if node == nodemod.nullid: + if node == nullid: # TODO: this should almost certainly be a memgittreemanifestctx return manifest.memtreemanifestctx(self, relpath) commit = self.gitrepo[gitutil.togitnode(node)] @@ -440,7 +447,7 @@ class filelog(baselog): self.path = path def read(self, node): - if node == nodemod.nullid: + if node == nullid: return b'' return self.gitrepo[gitutil.togitnode(node)].data @@ -450,7 +457,7 @@ class filelog(baselog): if isinstance(node, int): assert False, b'todo revnums for nodes' if len(node) == 40: - node = nodemod.bin(node) + node = bin(node) hnode = gitutil.togitnode(node) if hnode in self.gitrepo: return node @@ -500,7 +507,7 @@ WHERE changelog.rev = ? AND filename = ? ).fetchone() if maybe is None: raise IndexError('gitlog %r out of range %d' % (self.path, rev)) - return nodemod.bin(maybe[0]) + return bin(maybe[0]) def parents(self, node): gn = gitutil.togitnode(node) @@ -525,7 +532,7 @@ WHERE filenode = ? AND filename = ? index.fill_in_filelog(self.gitrepo, self._db, commit, gp, gn) return self.parents(node) else: - ps.append(nodemod.bin(p)) + ps.append(bin(p)) return ps def renamed(self, node): diff --git a/hgext/git/index.py b/hgext/git/index.py --- a/hgext/git/index.py +++ b/hgext/git/index.py @@ -5,11 +5,14 @@ import os import sqlite3 from mercurial.i18n import _ +from mercurial.node import ( + nullhex, + nullid, +) from mercurial import ( encoding, error, - node as nodemod, pycompat, ) @@ -278,7 +281,7 @@ def _index_repo( for pos, commit in enumerate(walker): if prog is not None: prog.update(pos) - p1 = p2 = nodemod.nullhex + p1 = p2 = nullhex if len(commit.parents) > 2: raise error.ProgrammingError( ( @@ -315,9 +318,7 @@ def _index_repo( ) new_files = (p.delta.new_file for p in patchgen) files = { - nf.path: nf.id.hex - for nf in new_files - if nf.id.raw != nodemod.nullid + nf.path: nf.id.hex for nf in new_files if nf.id.raw != nullid } for p, n in files.items(): # We intentionally set NULLs for any file parentage diff --git a/hgext/gpg.py b/hgext/gpg.py --- a/hgext/gpg.py +++ b/hgext/gpg.py @@ -11,12 +11,17 @@ import binascii import os from mercurial.i18n import _ +from mercurial.node import ( + bin, + hex, + nullid, + short, +) from mercurial import ( cmdutil, error, help, match, - node as hgnode, pycompat, registrar, ) @@ -155,7 +160,7 @@ def sigwalk(repo): # read the heads fl = repo.file(b".hgsigs") for r in reversed(fl.heads()): - fn = b".hgsigs|%s" % hgnode.short(r) + fn = b".hgsigs|%s" % short(r) for item in parsefile(fl.read(r).splitlines(), fn): yield item try: @@ -172,7 +177,7 @@ def getkeys(ui, repo, mygpg, sigdata, co fn, ln = context node, version, sig = sigdata prefix = b"%s:%d" % (fn, ln) - node = hgnode.bin(node) + node = bin(node) data = node2txt(repo, node, version) sig = binascii.a2b_base64(sig) @@ -223,7 +228,7 @@ def sigs(ui, repo): revs[r].extend(keys) for rev in sorted(revs, reverse=True): for k in revs[rev]: - r = b"%5d:%s" % (rev, hgnode.hex(repo.changelog.node(rev))) + r = b"%5d:%s" % (rev, hex(repo.changelog.node(rev))) ui.write(b"%-30s %s\n" % (keystr(ui, k), r)) @@ -232,7 +237,7 @@ def sigcheck(ui, repo, rev): """verify all the signatures there may be for a particular revision""" mygpg = newgpg(ui) rev = repo.lookup(rev) - hexrev = hgnode.hex(rev) + hexrev = hex(rev) keys = [] for data, context in sigwalk(repo): @@ -243,11 +248,11 @@ def sigcheck(ui, repo, rev): keys.extend(k) if not keys: - ui.write(_(b"no valid signature for %s\n") % hgnode.short(rev)) + ui.write(_(b"no valid signature for %s\n") % short(rev)) return # print summary - ui.write(_(b"%s is signed by:\n") % hgnode.short(rev)) + ui.write(_(b"%s is signed by:\n") % short(rev)) for key in keys: ui.write(b" %s\n" % keystr(ui, key)) @@ -309,9 +314,7 @@ def _dosign(ui, repo, *revs, **opts): if revs: nodes = [repo.lookup(n) for n in revs] else: - nodes = [ - node for node in repo.dirstate.parents() if node != hgnode.nullid - ] + nodes = [node for node in repo.dirstate.parents() if node != nullid] if len(nodes) > 1: raise error.Abort( _(b'uncommitted merge - please provide a specific revision') @@ -320,10 +323,8 @@ def _dosign(ui, repo, *revs, **opts): nodes = [repo.changelog.tip()] for n in nodes: - hexnode = hgnode.hex(n) - ui.write( - _(b"signing %d:%s\n") % (repo.changelog.rev(n), hgnode.short(n)) - ) + hexnode = hex(n) + ui.write(_(b"signing %d:%s\n") % (repo.changelog.rev(n), short(n))) # build data data = node2txt(repo, n, sigver) sig = mygpg.sign(data) @@ -360,10 +361,7 @@ def _dosign(ui, repo, *revs, **opts): if not message: # we don't translate commit messages message = b"\n".join( - [ - b"Added signature for changeset %s" % hgnode.short(n) - for n in nodes - ] + [b"Added signature for changeset %s" % short(n) for n in nodes] ) try: editor = cmdutil.getcommiteditor( @@ -379,7 +377,7 @@ def _dosign(ui, repo, *revs, **opts): def node2txt(repo, node, ver): """map a manifest into some text""" if ver == b"0": - return b"%s\n" % hgnode.hex(node) + return b"%s\n" % hex(node) else: raise error.Abort(_(b"unknown signature version")) diff --git a/hgext/histedit.py b/hgext/histedit.py --- a/hgext/histedit.py +++ b/hgext/histedit.py @@ -209,6 +209,11 @@ from mercurial.pycompat import ( getattr, open, ) +from mercurial.node import ( + bin, + hex, + short, +) from mercurial import ( bundle2, cmdutil, @@ -225,7 +230,6 @@ from mercurial import ( merge as mergemod, mergestate as mergestatemod, mergeutil, - node, obsolete, pycompat, registrar, @@ -404,8 +408,8 @@ class histeditstate(object): def _write(self, fp): fp.write(b'v1\n') - fp.write(b'%s\n' % node.hex(self.parentctxnode)) - fp.write(b'%s\n' % node.hex(self.topmost)) + fp.write(b'%s\n' % hex(self.parentctxnode)) + fp.write(b'%s\n' % hex(self.topmost)) fp.write(b'%s\n' % (b'True' if self.keep else b'False')) fp.write(b'%d\n' % len(self.actions)) for action in self.actions: @@ -415,8 +419,8 @@ class histeditstate(object): fp.write( b'%s%s\n' % ( - node.hex(replacement[0]), - b''.join(node.hex(r) for r in replacement[1]), + hex(replacement[0]), + b''.join(hex(r) for r in replacement[1]), ) ) backupfile = self.backupfile @@ -432,10 +436,10 @@ class histeditstate(object): lines[index] # version number index += 1 - parentctxnode = node.bin(lines[index]) + parentctxnode = bin(lines[index]) index += 1 - topmost = node.bin(lines[index]) + topmost = bin(lines[index]) index += 1 keep = lines[index] == b'True' @@ -458,9 +462,9 @@ class histeditstate(object): index += 1 for i in pycompat.xrange(replacementlen): replacement = lines[index] - original = node.bin(replacement[:40]) + original = bin(replacement[:40]) succ = [ - node.bin(replacement[i : i + 40]) + bin(replacement[i : i + 40]) for i in range(40, len(replacement), 40) ] replacements.append((original, succ)) @@ -494,12 +498,12 @@ class histeditaction(object): # ruleid can be anything from rev numbers, hashes, "bookmarks" etc # Check for validation of rule ids and get the rulehash try: - rev = node.bin(ruleid) + rev = bin(ruleid) except TypeError: try: _ctx = scmutil.revsingle(state.repo, ruleid) rulehash = _ctx.hex() - rev = node.bin(rulehash) + rev = bin(rulehash) except error.RepoLookupError: raise error.ParseError(_(b"invalid changeset %s") % ruleid) return cls(state, rev) @@ -507,7 +511,7 @@ class histeditaction(object): def verify(self, prev, expected, seen): """ Verifies semantic correctness of the rule""" repo = self.repo - ha = node.hex(self.node) + ha = hex(self.node) self.node = scmutil.resolvehexnodeidprefix(repo, ha) if self.node is None: raise error.ParseError(_(b'unknown changeset %s listed') % ha[:12]) @@ -518,14 +522,13 @@ class histeditaction(object): if self.node not in expected: raise error.ParseError( _(b'%s "%s" changeset was not a candidate') - % (self.verb, node.short(self.node)), + % (self.verb, short(self.node)), hint=_(b'only use listed changesets'), ) # and only one command per node if self.node in seen: raise error.ParseError( - _(b'duplicated command for changeset %s') - % node.short(self.node) + _(b'duplicated command for changeset %s') % short(self.node) ) def torule(self): @@ -557,7 +560,7 @@ class histeditaction(object): """Print an action in format used by histedit state files (the first line is a verb, the remainder is the second) """ - return b"%s\n%s" % (self.verb, node.hex(self.node)) + return b"%s\n%s" % (self.verb, hex(self.node)) def run(self): """Runs the action. The default behavior is simply apply the action's @@ -578,8 +581,7 @@ class histeditaction(object): repo.dirstate.setbranch(rulectx.branch()) if stats.unresolvedcount: raise error.InterventionRequired( - _(b'Fix up the change (%s %s)') - % (self.verb, node.short(self.node)), + _(b'Fix up the change (%s %s)') % (self.verb, short(self.node)), hint=_(b'hg histedit --continue to resume'), ) @@ -614,8 +616,7 @@ class histeditaction(object): ctx = self.repo[b'.'] if ctx.node() == self.state.parentctxnode: self.repo.ui.warn( - _(b'%s: skipping changeset (no changes)\n') - % node.short(self.node) + _(b'%s: skipping changeset (no changes)\n') % short(self.node) ) return ctx, [(self.node, tuple())] if ctx.node() == self.node: @@ -684,7 +685,7 @@ def collapse(repo, firstctx, lastctx, co for c in ctxs: if not c.mutable(): raise error.ParseError( - _(b"cannot fold into public change %s") % node.short(c.node()) + _(b"cannot fold into public change %s") % short(c.node()) ) base = firstctx.p1() @@ -786,13 +787,17 @@ class pick(histeditaction): def run(self): rulectx = self.repo[self.node] if rulectx.p1().node() == self.state.parentctxnode: - self.repo.ui.debug(b'node %s unchanged\n' % node.short(self.node)) + self.repo.ui.debug(b'node %s unchanged\n' % short(self.node)) return rulectx, [] return super(pick, self).run() -@action([b'edit', b'e'], _(b'use commit, but allow edits before making new commit'), priority=True) +@action( + [b'edit', b'e'], + _(b'use commit, but allow edits before making new commit'), + priority=True, +) class edit(histeditaction): def run(self): repo = self.repo @@ -802,8 +807,8 @@ class edit(histeditaction): hint = _(b'to edit %s, `hg histedit --continue` after making changes') raise error.InterventionRequired( _(b'Editing (%s), commit as needed now to split the change') - % node.short(self.node), - hint=hint % node.short(self.node), + % short(self.node), + hint=hint % short(self.node), ) def commiteditor(self): @@ -824,7 +829,7 @@ class fold(histeditaction): c = repo[prev.node] if not c.mutable(): raise error.ParseError( - _(b"cannot fold into public change %s") % node.short(c.node()) + _(b"cannot fold into public change %s") % short(c.node()) ) def continuedirty(self): @@ -833,7 +838,7 @@ class fold(histeditaction): commit = commitfuncfor(repo, rulectx) commit( - text=b'fold-temp-revision %s' % node.short(self.node), + text=b'fold-temp-revision %s' % short(self.node), user=rulectx.user(), date=rulectx.date(), extra=rulectx.extra(), @@ -845,7 +850,7 @@ class fold(histeditaction): rulectx = repo[self.node] parentctxnode = self.state.parentctxnode if ctx.node() == parentctxnode: - repo.ui.warn(_(b'%s: empty changeset\n') % node.short(self.node)) + repo.ui.warn(_(b'%s: empty changeset\n') % short(self.node)) return ctx, [(self.node, (parentctxnode,))] parentctx = repo[parentctxnode] @@ -859,7 +864,7 @@ class fold(histeditaction): b'%s: cannot fold - working copy is not a ' b'descendant of previous commit %s\n' ) - % (node.short(self.node), node.short(parentctxnode)) + % (short(self.node), short(parentctxnode)) ) return ctx, [(self.node, (ctx.node(),))] @@ -973,7 +978,7 @@ class base(histeditaction): if self.node in expected: msg = _(b'%s "%s" changeset was an edited list candidate') raise error.ParseError( - msg % (self.verb, node.short(self.node)), + msg % (self.verb, short(self.node)), hint=_(b'base must only use unlisted changesets'), ) @@ -1717,8 +1722,7 @@ def _chistedit(ui, repo, freeargs, opts) revs = between(repo, root, topmost, keep) if not revs: raise error.Abort( - _(b'%s is not an ancestor of working directory') - % node.short(root) + _(b'%s is not an ancestor of working directory') % short(root) ) ctxs = [] @@ -2071,16 +2075,16 @@ def _finishhistedit(ui, repo, state, fm) if mapping: for prec, succs in pycompat.iteritems(mapping): if not succs: - ui.debug(b'histedit: %s is dropped\n' % node.short(prec)) + ui.debug(b'histedit: %s is dropped\n' % short(prec)) else: ui.debug( b'histedit: %s is replaced by %s\n' - % (node.short(prec), node.short(succs[0])) + % (short(prec), short(succs[0])) ) if len(succs) > 1: m = b'histedit: %s' for n in succs[1:]: - ui.debug(m % node.short(n)) + ui.debug(m % short(n)) if not state.keep: if mapping: @@ -2125,7 +2129,7 @@ def _aborthistedit(ui, repo, state, noba try: state.read() __, leafs, tmpnodes, __ = processreplacement(state) - ui.debug(b'restore wc to old parent %s\n' % node.short(state.topmost)) + ui.debug(b'restore wc to old parent %s\n' % short(state.topmost)) # Recover our old commits if necessary if not state.topmost in repo and state.backupfile: @@ -2179,7 +2183,7 @@ def _edithisteditplan(ui, repo, state, r state.read() if not rules: comment = geteditcomment( - ui, node.short(state.parentctxnode), node.short(state.topmost) + ui, short(state.parentctxnode), short(state.topmost) ) rules = ruleeditor(repo, ui, state.actions, comment) else: @@ -2220,7 +2224,7 @@ def _newhistedit(ui, repo, state, revs, revs = between(repo, root, topmost, state.keep) if not revs: raise error.Abort( - _(b'%s is not an ancestor of working directory') % node.short(root) + _(b'%s is not an ancestor of working directory') % short(root) ) ctxs = [repo[r] for r in revs] @@ -2257,7 +2261,7 @@ def _newhistedit(ui, repo, state, revs, ) if not rules: - comment = geteditcomment(ui, node.short(root), node.short(topmost)) + comment = geteditcomment(ui, short(root), short(topmost)) actions = [pick(state, r) for r in revs] rules = ruleeditor(repo, ui, actions, comment) else: @@ -2461,12 +2465,12 @@ def verifyactions(actions, state, ctxs): actions[:0] = drops elif missing: raise error.ParseError( - _(b'missing rules for changeset %s') % node.short(missing[0]), + _(b'missing rules for changeset %s') % short(missing[0]), hint=_( b'use "drop %s" to discard, see also: ' b"'hg help -e histedit.config'" ) - % node.short(missing[0]), + % short(missing[0]), ) @@ -2620,7 +2624,7 @@ def stripwrapper(orig, ui, repo, nodelis if common_nodes: raise error.Abort( _(b"histedit in progress, can't strip %s") - % b', '.join(node.short(x) for x in common_nodes) + % b', '.join(short(x) for x in common_nodes) ) return orig(ui, repo, nodelist, *args, **kwargs) diff --git a/hgext/infinitepush/bundleparts.py b/hgext/infinitepush/bundleparts.py --- a/hgext/infinitepush/bundleparts.py +++ b/hgext/infinitepush/bundleparts.py @@ -6,13 +6,13 @@ from __future__ import absolute_import from mercurial.i18n import _ +from mercurial.node import hex from mercurial import ( bundle2, changegroup, error, extensions, - node as nodemod, pycompat, revsetlang, util, @@ -54,7 +54,7 @@ def getscratchbranchparts(repo, peer, ou params[b'bookprevnode'] = b'' bookmarks = repo._bookmarks if bookmark in bookmarks: - params[b'bookprevnode'] = nodemod.hex(bookmarks[bookmark]) + params[b'bookprevnode'] = hex(bookmarks[bookmark]) # Do not send pushback bundle2 part with bookmarks if remotenames extension # is enabled. It will be handled manually in `_push()` diff --git a/hgext/infinitepush/store.py b/hgext/infinitepush/store.py --- a/hgext/infinitepush/store.py +++ b/hgext/infinitepush/store.py @@ -9,11 +9,9 @@ import abc import os import subprocess +from mercurial.node import hex from mercurial.pycompat import open -from mercurial import ( - node, - pycompat, -) +from mercurial import pycompat from mercurial.utils import ( hashutil, procutil, @@ -86,7 +84,7 @@ class filebundlestore(object): return os.path.join(self._dirpath(filename), filename) def write(self, data): - filename = node.hex(hashutil.sha1(data).digest()) + filename = hex(hashutil.sha1(data).digest()) dirpath = self._dirpath(filename) if not os.path.exists(dirpath): diff --git a/hgext/journal.py b/hgext/journal.py --- a/hgext/journal.py +++ b/hgext/journal.py @@ -19,6 +19,11 @@ import os import weakref from mercurial.i18n import _ +from mercurial.node import ( + bin, + hex, + nullid, +) from mercurial import ( bookmarks, @@ -31,7 +36,6 @@ from mercurial import ( localrepo, lock, logcmdutil, - node, pycompat, registrar, util, @@ -113,8 +117,8 @@ def recorddirstateparents(dirstate, old, new = list(new) if util.safehasattr(dirstate, 'journalstorage'): # only record two hashes if there was a merge - oldhashes = old[:1] if old[1] == node.nullid else old - newhashes = new[:1] if new[1] == node.nullid else new + oldhashes = old[:1] if old[1] == nullid else old + newhashes = new[:1] if new[1] == nullid else new dirstate.journalstorage.record( wdirparenttype, b'.', oldhashes, newhashes ) @@ -127,7 +131,7 @@ def recordbookmarks(orig, store, fp): if util.safehasattr(repo, 'journal'): oldmarks = bookmarks.bmstore(repo) for mark, value in pycompat.iteritems(store): - oldvalue = oldmarks.get(mark, node.nullid) + oldvalue = oldmarks.get(mark, nullid) if value != oldvalue: repo.journal.record(bookmarktype, mark, oldvalue, value) return orig(store, fp) @@ -248,8 +252,8 @@ class journalentry( ) = line.split(b'\n') timestamp, tz = time.split() timestamp, tz = float(timestamp), int(tz) - oldhashes = tuple(node.bin(hash) for hash in oldhashes.split(b',')) - newhashes = tuple(node.bin(hash) for hash in newhashes.split(b',')) + oldhashes = tuple(bin(hash) for hash in oldhashes.split(b',')) + newhashes = tuple(bin(hash) for hash in newhashes.split(b',')) return cls( (timestamp, tz), user, @@ -263,8 +267,8 @@ class journalentry( def __bytes__(self): """bytes representation for storage""" time = b' '.join(map(pycompat.bytestr, self.timestamp)) - oldhashes = b','.join([node.hex(hash) for hash in self.oldhashes]) - newhashes = b','.join([node.hex(hash) for hash in self.newhashes]) + oldhashes = b','.join([hex(hash) for hash in self.oldhashes]) + newhashes = b','.join([hex(hash) for hash in self.newhashes]) return b'\n'.join( ( time, diff --git a/hgext/largefiles/lfcommands.py b/hgext/largefiles/lfcommands.py --- a/hgext/largefiles/lfcommands.py +++ b/hgext/largefiles/lfcommands.py @@ -14,6 +14,11 @@ import os import shutil from mercurial.i18n import _ +from mercurial.node import ( + bin, + hex, + nullid, +) from mercurial import ( cmdutil, @@ -23,7 +28,6 @@ from mercurial import ( hg, lock, match as matchmod, - node, pycompat, scmutil, util, @@ -111,7 +115,7 @@ def lfconvert(ui, src, dest, *pats, **op rsrc[ctx] for ctx in rsrc.changelog.nodesbetween(None, rsrc.heads())[0] ) - revmap = {node.nullid: node.nullid} + revmap = {nullid: nullid} if tolfile: # Lock destination to prevent modification while it is converted to. # Don't need to lock src because we are just reading from its @@ -275,7 +279,7 @@ def _lfconvert_addchangeset( # largefile was modified, update standins m = hashutil.sha1(b'') m.update(ctx[f].data()) - hash = node.hex(m.digest()) + hash = hex(m.digest()) if f not in lfiletohash or lfiletohash[f] != hash: rdst.wwrite(f, ctx[f].data(), ctx[f].flags()) executable = b'x' in ctx[f].flags() @@ -336,7 +340,7 @@ def _commitcontext(rdst, parents, ctx, d # Generate list of changed files def _getchangedfiles(ctx, parents): files = set(ctx.files()) - if node.nullid not in parents: + if nullid not in parents: mc = ctx.manifest() for pctx in ctx.parents(): for fn in pctx.manifest().diff(mc): @@ -350,7 +354,7 @@ def _convertparents(ctx, revmap): for p in ctx.parents(): parents.append(revmap[p.node()]) while len(parents) < 2: - parents.append(node.nullid) + parents.append(nullid) return parents @@ -380,12 +384,12 @@ def _converttags(ui, revmap, data): ui.warn(_(b'skipping incorrectly formatted tag %s\n') % line) continue try: - newid = node.bin(id) + newid = bin(id) except TypeError: ui.warn(_(b'skipping incorrectly formatted id %s\n') % id) continue try: - newdata.append(b'%s %s\n' % (node.hex(revmap[newid]), name)) + newdata.append(b'%s %s\n' % (hex(revmap[newid]), name)) except KeyError: ui.warn(_(b'no mapping for id %s\n') % id) continue diff --git a/hgext/largefiles/lfutil.py b/hgext/largefiles/lfutil.py --- a/hgext/largefiles/lfutil.py +++ b/hgext/largefiles/lfutil.py @@ -15,7 +15,10 @@ import os import stat from mercurial.i18n import _ -from mercurial.node import hex +from mercurial.node import ( + hex, + nullid, +) from mercurial.pycompat import open from mercurial import ( @@ -24,7 +27,6 @@ from mercurial import ( error, httpconnection, match as matchmod, - node, pycompat, scmutil, sparse, @@ -610,7 +612,7 @@ def getlfilestoupload(repo, missing, add ) as progress: for i, n in enumerate(missing): progress.update(i) - parents = [p for p in repo[n].parents() if p != node.nullid] + parents = [p for p in repo[n].parents() if p != nullid] with lfstatus(repo, value=False): ctx = repo[n] diff --git a/hgext/lfs/__init__.py b/hgext/lfs/__init__.py --- a/hgext/lfs/__init__.py +++ b/hgext/lfs/__init__.py @@ -125,6 +125,7 @@ from __future__ import absolute_import import sys from mercurial.i18n import _ +from mercurial.node import bin from mercurial import ( bundlecaches, @@ -137,7 +138,6 @@ from mercurial import ( filesetlang, localrepo, minifileset, - node, pycompat, revlog, scmutil, @@ -260,11 +260,10 @@ def _reposetup(ui, repo): return 0 last = kwargs.get('node_last') - _bin = node.bin if last: - s = repo.set(b'%n:%n', _bin(kwargs['node']), _bin(last)) + s = repo.set(b'%n:%n', bin(kwargs['node']), bin(last)) else: - s = repo.set(b'%n', _bin(kwargs['node'])) + s = repo.set(b'%n', bin(kwargs['node'])) match = repo._storenarrowmatch for ctx in s: # TODO: is there a way to just walk the files in the commit? diff --git a/hgext/lfs/blobstore.py b/hgext/lfs/blobstore.py --- a/hgext/lfs/blobstore.py +++ b/hgext/lfs/blobstore.py @@ -17,12 +17,12 @@ import socket from mercurial.i18n import _ from mercurial.pycompat import getattr +from mercurial.node import hex from mercurial import ( encoding, error, httpconnection as httpconnectionmod, - node, pathutil, pycompat, url as urlmod, @@ -173,7 +173,7 @@ class local(object): ) raise LfsRemoteError(_(msg) % (size, int(content_length))) - realoid = node.hex(sha256.digest()) + realoid = hex(sha256.digest()) if realoid != oid: raise LfsCorruptionError( _(b'corrupt remote lfs object: %s') % oid @@ -224,7 +224,7 @@ class local(object): # Don't abort if corruption is detected, because `hg verify` will # give more useful info about the corruption- simply don't add the # hardlink. - if verify or node.hex(hashlib.sha256(blob).digest()) == oid: + if verify or hex(hashlib.sha256(blob).digest()) == oid: self.ui.note(_(b'lfs: found %s in the usercache\n') % oid) lfutil.link(self.cachevfs.join(oid), self.vfs.join(oid)) else: @@ -248,7 +248,7 @@ class local(object): for chunk in util.filechunkiter(fp, size=1048576): sha256.update(chunk) - return oid == node.hex(sha256.digest()) + return oid == hex(sha256.digest()) def has(self, oid): """Returns True if the local blobstore contains the requested blob, @@ -706,7 +706,7 @@ def _deduplicate(pointers): def _verify(oid, content): - realoid = node.hex(hashlib.sha256(content).digest()) + realoid = hex(hashlib.sha256(content).digest()) if realoid != oid: raise LfsCorruptionError( _(b'detected corrupt lfs object: %s') % oid, diff --git a/hgext/narrow/narrowcommands.py b/hgext/narrow/narrowcommands.py --- a/hgext/narrow/narrowcommands.py +++ b/hgext/narrow/narrowcommands.py @@ -10,6 +10,11 @@ import itertools import os from mercurial.i18n import _ +from mercurial.node import ( + hex, + nullid, + short, +) from mercurial import ( bundle2, cmdutil, @@ -21,7 +26,6 @@ from mercurial import ( extensions, hg, narrowspec, - node, pathutil, pycompat, registrar, @@ -184,9 +188,9 @@ def pullbundle2extraprepare(orig, pullop # we have all the nodes if wireprototypes.ELLIPSESCAP1 in pullop.remote.capabilities(): kwargs[b'known'] = [ - node.hex(ctx.node()) + hex(ctx.node()) for ctx in repo.set(b'::%ln', pullop.common) - if ctx.node() != node.nullid + if ctx.node() != nullid ] if not kwargs[b'known']: # Mercurial serializes an empty list as '' and deserializes it as @@ -239,10 +243,10 @@ def _narrow( maxnodes = 10 if ui.verbose or len(visibletostrip) <= maxnodes: for n in visibletostrip: - ui.status(b'%s\n' % node.short(n)) + ui.status(b'%s\n' % short(n)) else: for n in visibletostrip[:maxnodes]: - ui.status(b'%s\n' % node.short(n)) + ui.status(b'%s\n' % short(n)) ui.status( _(b'...and %d more, use --verbose to list all\n') % (len(visibletostrip) - maxnodes) @@ -362,7 +366,7 @@ def _widen( ds = repo.dirstate p1, p2 = ds.p1(), ds.p2() with ds.parentchange(): - ds.setparents(node.nullid, node.nullid) + ds.setparents(nullid, nullid) if isoldellipses: with wrappedextraprepare: exchange.pull(repo, remote, heads=common) @@ -372,7 +376,7 @@ def _widen( known = [ ctx.node() for ctx in repo.set(b'::%ln', common) - if ctx.node() != node.nullid + if ctx.node() != nullid ] with remote.commandexecutor() as e: bundle = e.callcommand( diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py --- a/hgext/patchbomb.py +++ b/hgext/patchbomb.py @@ -83,6 +83,7 @@ import socket from mercurial.i18n import _ from mercurial.pycompat import open +from mercurial.node import bin from mercurial import ( cmdutil, commands, @@ -91,7 +92,6 @@ from mercurial import ( formatter, hg, mail, - node as nodemod, patch, pycompat, registrar, @@ -306,7 +306,7 @@ def makepatch( p = mail.mimetextpatch( b'\n'.join(patchlines), 'x-patch', opts.get(b'test') ) - binnode = nodemod.bin(node) + binnode = bin(node) # if node is mq patch, it will have the patch file's name as a tag if not patchname: patchtags = [ diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -23,6 +23,7 @@ from mercurial.i18n import _ from mercurial.node import ( nullrev, short, + wdirrev, ) from mercurial.pycompat import open from mercurial import ( @@ -37,7 +38,6 @@ from mercurial import ( merge as mergemod, mergestate as mergestatemod, mergeutil, - node as nodemod, obsolete, obsutil, patch, @@ -1374,7 +1374,7 @@ def _definedestmap(ui, repo, inmemory, d ) return None - if nodemod.wdirrev in rebaseset: + if wdirrev in rebaseset: raise error.Abort(_(b'cannot rebase the working copy')) rebasingwcp = repo[b'.'].rev() in rebaseset ui.log( diff --git a/hgext/releasenotes.py b/hgext/releasenotes.py --- a/hgext/releasenotes.py +++ b/hgext/releasenotes.py @@ -19,12 +19,12 @@ import re from mercurial.i18n import _ from mercurial.pycompat import open +from mercurial.node import hex from mercurial import ( cmdutil, config, error, minirst, - node, pycompat, registrar, scmutil, @@ -381,7 +381,7 @@ def parsenotesfromrevisions(repo, direct if not paragraphs: repo.ui.warn( _(b"error parsing releasenotes for revision: '%s'\n") - % node.hex(ctx.node()) + % hex(ctx.node()) ) if title: notes.addtitleditem(directive, title, paragraphs) diff --git a/hgext/remotefilelog/__init__.py b/hgext/remotefilelog/__init__.py --- a/hgext/remotefilelog/__init__.py +++ b/hgext/remotefilelog/__init__.py @@ -130,7 +130,10 @@ import os import time import traceback -from mercurial.node import hex +from mercurial.node import ( + hex, + wdirrev, +) from mercurial.i18n import _ from mercurial.pycompat import open from mercurial import ( @@ -150,7 +153,6 @@ from mercurial import ( match as matchmod, merge, mergestate as mergestatemod, - node as nodemod, patch, pycompat, registrar, @@ -1091,7 +1093,7 @@ def _fileprefetchhook(repo, revmatches): if isenabled(repo): allfiles = [] for rev, match in revmatches: - if rev == nodemod.wdirrev or rev is None: + if rev == wdirrev or rev is None: continue ctx = repo[rev] mf = ctx.manifest() diff --git a/hgext/remotefilelog/basepack.py b/hgext/remotefilelog/basepack.py --- a/hgext/remotefilelog/basepack.py +++ b/hgext/remotefilelog/basepack.py @@ -12,8 +12,8 @@ from mercurial.pycompat import ( getattr, open, ) +from mercurial.node import hex from mercurial import ( - node as nodemod, policy, pycompat, util, @@ -429,7 +429,7 @@ class mutablebasepack(versionmixin): return try: - sha = nodemod.hex(self.sha.digest()) + sha = hex(self.sha.digest()) self.packfp.close() self.writeindex() diff --git a/hgext/remotefilelog/debugcommands.py b/hgext/remotefilelog/debugcommands.py --- a/hgext/remotefilelog/debugcommands.py +++ b/hgext/remotefilelog/debugcommands.py @@ -9,14 +9,18 @@ from __future__ import absolute_import import os import zlib -from mercurial.node import bin, hex, nullid, short +from mercurial.node import ( + bin, + hex, + nullid, + short, +) from mercurial.i18n import _ from mercurial.pycompat import open from mercurial import ( error, filelog, lock as lockmod, - node as nodemod, pycompat, revlog, ) @@ -61,7 +65,7 @@ def debugremotefilelog(ui, path, **opts) def buildtemprevlog(repo, file): # get filename key - filekey = nodemod.hex(hashutil.sha1(file).digest()) + filekey = hex(hashutil.sha1(file).digest()) filedir = os.path.join(repo.path, b'store/data', filekey) # sort all entries based on linkrev @@ -421,7 +425,7 @@ def dumpdeltachain(ui, deltachain, **opt % ( hashformatter(node), hashformatter(deltabasenode), - nodemod.hex(hashutil.sha1(delta).digest()), + hex(hashutil.sha1(delta).digest()), len(delta), ) ) diff --git a/hgext/remotefilelog/fileserverclient.py b/hgext/remotefilelog/fileserverclient.py --- a/hgext/remotefilelog/fileserverclient.py +++ b/hgext/remotefilelog/fileserverclient.py @@ -17,7 +17,6 @@ from mercurial.i18n import _ from mercurial.node import bin, hex, nullid from mercurial import ( error, - node, pycompat, revlog, sshpeer, @@ -47,12 +46,12 @@ fetchmisses = 0 def getcachekey(reponame, file, id): - pathhash = node.hex(hashutil.sha1(file).digest()) + pathhash = hex(hashutil.sha1(file).digest()) return os.path.join(reponame, pathhash[:2], pathhash[2:], id) def getlocalkey(file, id): - pathhash = node.hex(hashutil.sha1(file).digest()) + pathhash = hex(hashutil.sha1(file).digest()) return os.path.join(pathhash, id) diff --git a/hgext/remotefilelog/shallowutil.py b/hgext/remotefilelog/shallowutil.py --- a/hgext/remotefilelog/shallowutil.py +++ b/hgext/remotefilelog/shallowutil.py @@ -15,9 +15,9 @@ import tempfile from mercurial.i18n import _ from mercurial.pycompat import open +from mercurial.node import hex from mercurial import ( error, - node, pycompat, revlog, util, @@ -39,12 +39,12 @@ def isenabled(repo): def getcachekey(reponame, file, id): - pathhash = node.hex(hashutil.sha1(file).digest()) + pathhash = hex(hashutil.sha1(file).digest()) return os.path.join(reponame, pathhash[:2], pathhash[2:], id) def getlocalkey(file, id): - pathhash = node.hex(hashutil.sha1(file).digest()) + pathhash = hex(hashutil.sha1(file).digest()) return os.path.join(pathhash, id) diff --git a/hgext/transplant.py b/hgext/transplant.py --- a/hgext/transplant.py +++ b/hgext/transplant.py @@ -19,6 +19,12 @@ import os from mercurial.i18n import _ from mercurial.pycompat import open +from mercurial.node import ( + bin, + hex, + nullid, + short, +) from mercurial import ( bundlerepo, cmdutil, @@ -28,11 +34,9 @@ from mercurial import ( logcmdutil, match, merge, - node as nodemod, patch, pycompat, registrar, - revlog, revset, scmutil, smartset, @@ -95,7 +99,7 @@ class transplants(object): abspath = os.path.join(self.path, self.transplantfile) if self.transplantfile and os.path.exists(abspath): for line in self.opener.read(self.transplantfile).splitlines(): - lnode, rnode = map(revlog.bin, line.split(b':')) + lnode, rnode = map(bin, line.split(b':')) list = self.transplants.setdefault(rnode, []) list.append(transplantentry(lnode, rnode)) @@ -106,7 +110,7 @@ class transplants(object): fp = self.opener(self.transplantfile, b'w') for list in pycompat.itervalues(self.transplants): for t in list: - l, r = map(nodemod.hex, (t.lnode, t.rnode)) + l, r = map(hex, (t.lnode, t.rnode)) fp.write(l + b':' + r + b'\n') fp.close() self.dirty = False @@ -183,7 +187,7 @@ class transplanter(object): tr = repo.transaction(b'transplant') for rev in revs: node = revmap[rev] - revstr = b'%d:%s' % (rev, nodemod.short(node)) + revstr = b'%d:%s' % (rev, short(node)) if self.applied(repo, node, p1): self.ui.warn( @@ -216,11 +220,11 @@ class transplanter(object): exchange.pull(repo, source.peer(), heads=[node]) skipmerge = False - if parents[1] != revlog.nullid: + if parents[1] != nullid: if not opts.get(b'parent'): self.ui.note( _(b'skipping merge changeset %d:%s\n') - % (rev, nodemod.short(node)) + % (rev, short(node)) ) skipmerge = True else: @@ -228,7 +232,7 @@ class transplanter(object): if parent not in parents: raise error.Abort( _(b'%s is not a parent of %s') - % (nodemod.short(parent), nodemod.short(node)) + % (short(parent), short(node)) ) else: parent = parents[0] @@ -263,13 +267,12 @@ class transplanter(object): raise if n and domerge: self.ui.status( - _(b'%s merged at %s\n') - % (revstr, nodemod.short(n)) + _(b'%s merged at %s\n') % (revstr, short(n)) ) elif n: self.ui.status( _(b'%s transplanted to %s\n') - % (nodemod.short(node), nodemod.short(n)) + % (short(node), short(n)) ) finally: if patchfile: @@ -309,7 +312,7 @@ class transplanter(object): ), environ={ b'HGUSER': changelog[1], - b'HGREVISION': nodemod.hex(node), + b'HGREVISION': hex(node), }, onerr=error.Abort, errprefix=_(b'filter failed'), @@ -333,9 +336,9 @@ class transplanter(object): if log: # we don't translate messages inserted into commits - message += b'\n(transplanted from %s)' % nodemod.hex(node) + message += b'\n(transplanted from %s)' % hex(node) - self.ui.status(_(b'applying %s\n') % nodemod.short(node)) + self.ui.status(_(b'applying %s\n') % short(node)) self.ui.note(b'%s %s\n%s\n' % (user, date, message)) if not patchfile and not merge: @@ -377,9 +380,7 @@ class transplanter(object): editor=self.getcommiteditor(), ) if not n: - self.ui.warn( - _(b'skipping emptied changeset %s\n') % nodemod.short(node) - ) + self.ui.warn(_(b'skipping emptied changeset %s\n') % short(node)) return None if not merge: self.transplants.set(n, node) @@ -395,13 +396,11 @@ class transplanter(object): n, node = self.recover(repo, source, opts) if n: self.ui.status( - _(b'%s transplanted as %s\n') - % (nodemod.short(node), nodemod.short(n)) + _(b'%s transplanted as %s\n') % (short(node), short(n)) ) else: self.ui.status( - _(b'%s skipped due to empty diff\n') - % (nodemod.short(node),) + _(b'%s skipped due to empty diff\n') % (short(node),) ) seriespath = os.path.join(self.path, b'series') if not os.path.exists(seriespath): @@ -430,7 +429,7 @@ class transplanter(object): if parent not in parents: raise error.Abort( _(b'%s is not a parent of %s') - % (nodemod.short(parent), nodemod.short(node)) + % (short(parent), short(node)) ) else: merge = True @@ -441,7 +440,7 @@ class transplanter(object): if p1 != parent: raise error.Abort( _(b'working directory not at transplant parent %s') - % nodemod.hex(parent) + % hex(parent) ) if merge: repo.setparents(p1, parents[1]) @@ -494,7 +493,7 @@ class transplanter(object): if line.startswith(b'# Merges'): cur = merges continue - cur.append(revlog.bin(line)) + cur.append(bin(line)) return (nodes, merges) @@ -506,17 +505,17 @@ class transplanter(object): os.mkdir(self.path) series = self.opener(b'series', b'w') for rev in sorted(revmap): - series.write(nodemod.hex(revmap[rev]) + b'\n') + series.write(hex(revmap[rev]) + b'\n') if merges: series.write(b'# Merges\n') for m in merges: - series.write(nodemod.hex(m) + b'\n') + series.write(hex(m) + b'\n') series.close() def parselog(self, fp): parents = [] message = [] - node = revlog.nullid + node = nullid inmsg = False user = None date = None @@ -528,9 +527,9 @@ class transplanter(object): elif line.startswith(b'# Date '): date = line[7:] elif line.startswith(b'# Node ID '): - node = revlog.bin(line[10:]) + node = bin(line[10:]) elif line.startswith(b'# Parent '): - parents.append(revlog.bin(line[9:])) + parents.append(bin(line[9:])) elif not line.startswith(b'# '): inmsg = True message.append(line) @@ -548,10 +547,10 @@ class transplanter(object): fp = self.opener(b'journal', b'w') fp.write(b'# User %s\n' % user) fp.write(b'# Date %s\n' % date) - fp.write(b'# Node ID %s\n' % nodemod.hex(p2)) - fp.write(b'# Parent ' + nodemod.hex(p1) + b'\n') + fp.write(b'# Node ID %s\n' % hex(p2)) + fp.write(b'# Parent ' + hex(p1) + b'\n') if merge: - fp.write(b'# Parent ' + nodemod.hex(p2) + b'\n') + fp.write(b'# Parent ' + hex(p2) + b'\n') fp.write(message.rstrip() + b'\n') fp.close() @@ -568,7 +567,7 @@ class transplanter(object): def matchfn(node): if self.applied(repo, node, root): return False - if source.changelog.parents(node)[1] != revlog.nullid: + if source.changelog.parents(node)[1] != nullid: return False extra = source.changelog.read(node)[5] cnode = extra.get(b'transplant_source') @@ -804,7 +803,7 @@ def _dotransplant(ui, repo, *revs, **opt tp = transplanter(ui, repo, opts) p1 = repo.dirstate.p1() - if len(repo) > 0 and p1 == revlog.nullid: + if len(repo) > 0 and p1 == nullid: raise error.Abort(_(b'no revision checked out')) if opts.get(b'continue'): if not tp.canresume(): @@ -909,7 +908,7 @@ def kwtransplanted(context, mapping): changeset if any.""" ctx = context.resource(mapping, b'ctx') n = ctx.extra().get(b'transplant_source') - return n and nodemod.hex(n) or b'' + return n and hex(n) or b'' def extsetup(ui): diff --git a/hgext/uncommit.py b/hgext/uncommit.py --- a/hgext/uncommit.py +++ b/hgext/uncommit.py @@ -20,6 +20,7 @@ added and removed in the working directo from __future__ import absolute_import from mercurial.i18n import _ +from mercurial.node import nullid from mercurial import ( cmdutil, @@ -27,7 +28,6 @@ from mercurial import ( context, copies as copiesmod, error, - node, obsutil, pathutil, pycompat, @@ -113,7 +113,7 @@ def _commitfiltered( new = context.memctx( repo, - parents=[base.node(), node.nullid], + parents=[base.node(), nullid], text=message, files=files, filectxfn=filectxfn, diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py --- a/mercurial/bundle2.py +++ b/mercurial/bundle2.py @@ -156,12 +156,16 @@ import struct import sys from .i18n import _ +from .node import ( + hex, + nullid, + short, +) from . import ( bookmarks, changegroup, encoding, error, - node as nodemod, obsolete, phases, pushkey, @@ -2131,14 +2135,14 @@ def handlecheckbookmarks(op, inpart): currentnode = op.repo._bookmarks.get(book) if currentnode != node: if node is None: - finalmsg = msgexist % (book, nodemod.short(currentnode)) + finalmsg = msgexist % (book, short(currentnode)) elif currentnode is None: - finalmsg = msgmissing % (book, nodemod.short(node)) + finalmsg = msgmissing % (book, short(node)) else: finalmsg = msgstandard % ( book, - nodemod.short(node), - nodemod.short(currentnode), + short(node), + short(currentnode), ) raise error.PushRaced(finalmsg) @@ -2215,7 +2219,7 @@ def handlecheckphases(op, inpart): actualphase = phasecache.phase(unfi, cl.rev(n)) if actualphase != expectedphase: finalmsg = msg % ( - nodemod.short(n), + short(n), phases.phasenames[actualphase], phases.phasenames[expectedphase], ) @@ -2360,10 +2364,8 @@ def handlebookmark(op, inpart): hookargs[b'pushkeycompat'] = b'1' hookargs[b'namespace'] = b'bookmarks' hookargs[b'key'] = book - hookargs[b'old'] = nodemod.hex(bookstore.get(book, b'')) - hookargs[b'new'] = nodemod.hex( - node if node is not None else b'' - ) + hookargs[b'old'] = hex(bookstore.get(book, b'')) + hookargs[b'new'] = hex(node if node is not None else b'') allhooks.append(hookargs) for hookargs in allhooks: @@ -2569,7 +2571,7 @@ def widen_bundle( fullnodes=commonnodes, ) cgdata = packer.generate( - {nodemod.nullid}, + {nullid}, list(commonnodes), False, b'narrow_widen', diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py --- a/mercurial/bundlerepo.py +++ b/mercurial/bundlerepo.py @@ -17,7 +17,11 @@ import os import shutil from .i18n import _ -from .node import nullid, nullrev +from .node import ( + hex, + nullid, + nullrev, +) from . import ( bundle2, @@ -32,7 +36,6 @@ from . import ( localrepo, manifest, mdiff, - node as nodemod, pathutil, phases, pycompat, @@ -437,9 +440,9 @@ class bundlerepository(object): p2rev = self.changelog.rev(p2) msg = _(b"setting parent to node %s that only exists in the bundle\n") if self.changelog.repotiprev < p1rev: - self.ui.warn(msg % nodemod.hex(p1)) + self.ui.warn(msg % hex(p1)) if self.changelog.repotiprev < p2rev: - self.ui.warn(msg % nodemod.hex(p2)) + self.ui.warn(msg % hex(p2)) return super(bundlerepository, self).setparents(p1, p2) diff --git a/mercurial/chgserver.py b/mercurial/chgserver.py --- a/mercurial/chgserver.py +++ b/mercurial/chgserver.py @@ -54,13 +54,13 @@ from .pycompat import ( getattr, setattr, ) +from .node import hex from . import ( commandserver, encoding, error, extensions, - node, pycompat, util, ) @@ -74,7 +74,7 @@ from .utils import ( def _hashlist(items): """return sha1 hexdigest for a list""" - return node.hex(hashutil.sha1(stringutil.pprint(items)).digest()) + return hex(hashutil.sha1(stringutil.pprint(items)).digest()) # sensitive config sections affecting confighash diff --git a/mercurial/copies.py b/mercurial/copies.py --- a/mercurial/copies.py +++ b/mercurial/copies.py @@ -11,11 +11,13 @@ import collections import os from .i18n import _ - +from .node import ( + nullid, + nullrev, +) from . import ( match as matchmod, - node, pathutil, policy, pycompat, @@ -147,7 +149,7 @@ def _committedforwardcopies(a, b, base, # optimization, since the ctx.files() for a merge commit is not correct for # this comparison. forwardmissingmatch = match - if b.p1() == a and b.p2().node() == node.nullid: + if b.p1() == a and b.p2().node() == nullid: filesmatcher = matchmod.exact(b.files()) forwardmissingmatch = matchmod.intersectmatchers(match, filesmatcher) missing = _computeforwardmissing(a, b, match=forwardmissingmatch) @@ -233,7 +235,7 @@ def _revinfo_getter(repo, match): else: raw = None value = (p1, p2, raw) - if p1 != node.nullrev and p2 != node.nullrev: + if p1 != nullrev and p2 != nullrev: # XXX some case we over cache, IGNORE merge_caches[rev] = value return value @@ -250,7 +252,7 @@ def _revinfo_getter(repo, match): if flags(rev) & HASCOPIESINFO: changes = changelogrevision(rev).changes value = (p1, p2, changes) - if p1 != node.nullrev and p2 != node.nullrev: + if p1 != nullrev and p2 != nullrev: # XXX some case we over cache, IGNORE merge_caches[rev] = value return value @@ -277,7 +279,7 @@ def cached_is_ancestor(is_ancestor): def _changesetforwardcopies(a, b, match): - if a.rev() in (node.nullrev, b.rev()): + if a.rev() in (nullrev, b.rev()): return {} repo = a.repo().unfiltered() @@ -290,7 +292,7 @@ def _changesetforwardcopies(a, b, match) roots = set() for r in missingrevs: for p in cl.parentrevs(r): - if p == node.nullrev: + if p == nullrev: continue if p not in children: children[p] = [r] @@ -494,7 +496,7 @@ def _revinfo_getter_extra(repo): parents = fctx._filelog.parents(fctx._filenode) nb_parents = 0 for n in parents: - if n != node.nullid: + if n != nullid: nb_parents += 1 return nb_parents >= 2 @@ -668,7 +670,7 @@ def pathcopies(x, y, match=None): if debug: repo.ui.debug(b'debug.copies: search mode: combined\n') base = None - if a.rev() != node.nullrev: + if a.rev() != nullrev: base = x copies = _chain( _backwardrenames(x, a, match=match), diff --git a/mercurial/dagop.py b/mercurial/dagop.py --- a/mercurial/dagop.py +++ b/mercurial/dagop.py @@ -11,10 +11,10 @@ import heapq from .node import nullrev from .thirdparty import attr +from .node import nullrev from . import ( error, mdiff, - node, patch, pycompat, scmutil, @@ -77,7 +77,7 @@ def _walkrevtree(pfunc, revs, startdepth pdepth = curdepth + 1 if foundnew and pdepth < stopdepth: for prev in pfunc(currev): - if prev != node.nullrev: + if prev != nullrev: heapq.heappush(pendingheap, (heapsign * prev, pdepth)) @@ -183,7 +183,6 @@ def _genrevdescendants(repo, revs, follo cl = repo.changelog first = revs.min() - nullrev = node.nullrev if first == nullrev: # Are there nodes with a null first parent and a non-null # second one? Maybe. Do we care? Probably not. @@ -206,7 +205,6 @@ def _genrevdescendants(repo, revs, follo def _builddescendantsmap(repo, startrev, followfirst): """Build map of 'rev -> child revs', offset from startrev""" cl = repo.changelog - nullrev = node.nullrev descmap = [[] for _rev in pycompat.xrange(startrev, len(cl))] for currev in cl.revs(startrev + 1): p1rev, p2rev = cl.parentrevs(currev) @@ -971,7 +969,7 @@ def toposort(revs, parentsfunc, firstbra if rev == currentrev: # only display stuff in rev gr[0].append(rev) gr[1].remove(rev) - parents = [p for p in parentsfunc(rev) if p > node.nullrev] + parents = [p for p in parentsfunc(rev) if p > nullrev] gr[1].update(parents) for p in parents: if p not in pendingset: @@ -1030,7 +1028,7 @@ def headrevs(revs, parentsfn): the input set. """ headrevs = set(revs) - parents = {node.nullrev} + parents = {nullrev} up = parents.update for rev in revs: @@ -1104,7 +1102,7 @@ def linearize(revs, parentsfn): visit.append(-rev - 1) for prev in parentsfn(rev): - if prev == node.nullrev or prev not in revs or prev in finished: + if prev == nullrev or prev not in revs or prev in finished: continue visit.append(prev) diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -14,7 +14,12 @@ import shutil import stat from .i18n import _ -from .node import nullid +from .node import ( + hex, + nullhex, + nullid, + short, +) from .pycompat import getattr from . import ( @@ -35,7 +40,6 @@ from . import ( merge as mergemod, mergestate as mergestatemod, narrowspec, - node, phases, pycompat, requirements, @@ -108,7 +112,7 @@ def addbranchrevs(lrepo, other, branches raise error.Abort(_(b"dirstate branch not accessible")) branch = lrepo.dirstate.branch() if branch in branchmap: - revs.extend(node.hex(r) for r in reversed(branchmap[branch])) + revs.extend(hex(r) for r in reversed(branchmap[branch])) return True else: return False @@ -762,8 +766,8 @@ def clone( }, ).result() - if rootnode != node.nullid: - sharepath = os.path.join(sharepool, node.hex(rootnode)) + if rootnode != nullid: + sharepath = os.path.join(sharepool, hex(rootnode)) else: ui.status( _( @@ -780,7 +784,7 @@ def clone( ) elif sharenamemode == b'remote': sharepath = os.path.join( - sharepool, node.hex(hashutil.sha1(source).digest()) + sharepool, hex(hashutil.sha1(source).digest()) ) else: raise error.Abort( @@ -872,9 +876,7 @@ def clone( # we need to re-init the repo after manually copying the data # into it destpeer = peer(srcrepo, peeropts, dest) - srcrepo.hook( - b'outgoing', source=b'clone', node=node.hex(node.nullid) - ) + srcrepo.hook(b'outgoing', source=b'clone', node=nullhex) else: try: # only pass ui when no srcrepo @@ -1379,7 +1381,7 @@ def verify(repo, level=None): except Exception: repo.ui.warn( _(b'.hgsubstate is corrupt in revision %s\n') - % node.short(ctx.node()) + % short(ctx.node()) ) return ret diff --git a/mercurial/keepalive.py b/mercurial/keepalive.py --- a/mercurial/keepalive.py +++ b/mercurial/keepalive.py @@ -93,8 +93,8 @@ import threading from .i18n import _ from .pycompat import getattr +from .node import hex from . import ( - node, pycompat, urllibcompat, util, @@ -723,7 +723,7 @@ def continuity(url): foo = fo.read() fo.close() m = md5(foo) - print(format % (b'normal urllib', node.hex(m.digest()))) + print(format % (b'normal urllib', hex(m.digest()))) # now install the keepalive handler and try again opener = urlreq.buildopener(HTTPHandler()) @@ -733,7 +733,7 @@ def continuity(url): foo = fo.read() fo.close() m = md5(foo) - print(format % (b'keepalive read', node.hex(m.digest()))) + print(format % (b'keepalive read', hex(m.digest()))) fo = urlreq.urlopen(url) foo = b'' @@ -745,7 +745,7 @@ def continuity(url): break fo.close() m = md5(foo) - print(format % (b'keepalive readline', node.hex(m.digest()))) + print(format % (b'keepalive readline', hex(m.digest()))) def comp(N, url): diff --git a/mercurial/metadata.py b/mercurial/metadata.py --- a/mercurial/metadata.py +++ b/mercurial/metadata.py @@ -11,9 +11,12 @@ from __future__ import absolute_import, import multiprocessing import struct +from .node import ( + nullid, + nullrev, +) from . import ( error, - node, pycompat, util, ) @@ -239,11 +242,11 @@ def compute_all_files_changes(ctx): """compute the files changed by a revision""" p1 = ctx.p1() p2 = ctx.p2() - if p1.rev() == node.nullrev and p2.rev() == node.nullrev: + if p1.rev() == nullrev and p2.rev() == nullrev: return _process_root(ctx) - elif p1.rev() != node.nullrev and p2.rev() == node.nullrev: + elif p1.rev() != nullrev and p2.rev() == nullrev: return _process_linear(p1, ctx) - elif p1.rev() == node.nullrev and p2.rev() != node.nullrev: + elif p1.rev() == nullrev and p2.rev() != nullrev: # In the wild, one can encounter changeset where p1 is null but p2 is not return _process_linear(p1, ctx, parent=2) elif p1.rev() == p2.rev(): @@ -423,7 +426,7 @@ def _process_merge(p1_ctx, p2_ctx, ctx): p1_ctx.node(), p2_ctx.node() ) if not cahs: - cahs = [node.nullrev] + cahs = [nullrev] mas = [ctx.repo()[r].manifest() for r in cahs] copy_candidates = [] @@ -560,7 +563,7 @@ def get_removal_filter(ctx, x=None): p2n = p2.node() cahs = ctx.repo().changelog.commonancestorsheads(p1n, p2n) if not cahs: - cahs = [node.nullrev] + cahs = [nullrev] return [ctx.repo()[r].manifest() for r in cahs] def deletionfromparent(f): @@ -597,7 +600,7 @@ def computechangesetfilesmerged(ctx): if f in ctx: fctx = ctx[f] parents = fctx._filelog.parents(fctx._filenode) - if parents[1] != node.nullid: + if parents[1] != nullid: merged.append(f) return merged diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py --- a/mercurial/obsolete.py +++ b/mercurial/obsolete.py @@ -74,10 +74,14 @@ import struct from .i18n import _ from .pycompat import getattr +from .node import ( + bin, + hex, + nullid, +) from . import ( encoding, error, - node, obsutil, phases, policy, @@ -235,7 +239,7 @@ def _fm0readmarkers(data, off, stop): parents = () if parents is not None: try: - parents = tuple(node.bin(p) for p in parents) + parents = tuple(bin(p) for p in parents) # if parent content is not a nodeid, drop the data for p in parents: if len(p) != 20: @@ -262,7 +266,7 @@ def _fm0encodeonemarker(marker): # mark that we explicitly recorded no parents metadata[b'p0'] = b'' for i, p in enumerate(parents, 1): - metadata[b'p%i' % i] = node.hex(p) + metadata[b'p%i' % i] = hex(p) metadata = _fm0encodemeta(metadata) numsuc = len(sucs) format = _fm0fixed + (_fm0node * numsuc) @@ -529,7 +533,7 @@ def _checkinvalidmarkers(markers): subtle handling. """ for mark in markers: - if node.nullid in mark[1]: + if nullid in mark[1]: raise error.Abort( _( b'bad obsolescence marker detected: ' @@ -639,7 +643,7 @@ class obsstore(object): raise ValueError(succ) if prec in succs: raise ValueError( - 'in-marker cycle with %s' % pycompat.sysstr(node.hex(prec)) + 'in-marker cycle with %s' % pycompat.sysstr(hex(prec)) ) metadata = tuple(sorted(pycompat.iteritems(metadata))) @@ -1031,7 +1035,7 @@ def makefoldid(relation, user): folddigest.update(p.node()) # Since fold only has to compete against fold for the same successors, it # seems fine to use a small ID. Smaller ID save space. - return node.hex(folddigest.digest())[:8] + return hex(folddigest.digest())[:8] def createmarkers( diff --git a/mercurial/obsutil.py b/mercurial/obsutil.py --- a/mercurial/obsutil.py +++ b/mercurial/obsutil.py @@ -10,11 +10,14 @@ from __future__ import absolute_import import re from .i18n import _ +from .node import ( + hex, + short, +) from . import ( diffutil, encoding, error, - node as nodemod, phases, pycompat, util, @@ -957,13 +960,13 @@ def _getfilteredreason(repo, changeid, c elif fate == b'diverged': return filteredmsgtable[b'diverged'] % changeid elif fate == b'superseded': - single_successor = nodemod.short(successors[0][0]) + single_successor = short(successors[0][0]) return filteredmsgtable[b'superseded'] % (changeid, single_successor) elif fate == b'superseded_split': succs = [] for node_id in successors[0]: - succs.append(nodemod.short(node_id)) + succs.append(short(node_id)) if len(succs) <= 2: fmtsuccs = b', '.join(succs) @@ -1040,7 +1043,7 @@ def whyunstable(repo, ctx): b'instability': b'content-divergent', b'divergentnodes': divnodes, b'reason': b'predecessor', - b'node': nodemod.hex(dset[b'commonpredecessor']), + b'node': hex(dset[b'commonpredecessor']), } ) return result diff --git a/mercurial/revlogutils/nodemap.py b/mercurial/revlogutils/nodemap.py --- a/mercurial/revlogutils/nodemap.py +++ b/mercurial/revlogutils/nodemap.py @@ -14,10 +14,10 @@ import re import struct from ..i18n import _ +from ..node import hex from .. import ( error, - node as nodemod, util, ) @@ -278,7 +278,7 @@ def _make_uid(): """return a new unique identifier. The identifier is random and composed of ascii characters.""" - return nodemod.hex(os.urandom(ID_SIZE)) + return hex(os.urandom(ID_SIZE)) class NodeMapDocket(object): @@ -461,8 +461,8 @@ def _build_trie(index): """ root = Block() for rev in range(len(index)): - hex = nodemod.hex(index[rev][7]) - _insert_into_block(index, 0, root, rev, hex) + current_hex = hex(index[rev][7]) + _insert_into_block(index, 0, root, rev, current_hex) return root @@ -470,8 +470,8 @@ def _update_trie(index, root, last_rev): """consume""" changed = 0 for rev in range(last_rev + 1, len(index)): - hex = nodemod.hex(index[rev][7]) - changed += _insert_into_block(index, 0, root, rev, hex) + current_hex = hex(index[rev][7]) + changed += _insert_into_block(index, 0, root, rev, current_hex) return changed, root @@ -500,7 +500,7 @@ def _insert_into_block(index, level, blo else: # collision with a previously unique prefix, inserting new # vertices to fit both entry. - other_hex = nodemod.hex(index[entry][7]) + other_hex = hex(index[entry][7]) other_rev = entry new = Block() block[hex_digit] = new @@ -604,7 +604,7 @@ def check_data(ui, index, data): ret = 1 else: all_revs.remove(r) - nm_rev = _find_node(root, nodemod.hex(index[r][7])) + nm_rev = _find_node(root, hex(index[r][7])) if nm_rev is None: msg = b" revision node does not match any entries: %d\n" % r ui.write_err(msg) diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -11,6 +11,11 @@ import re from .i18n import _ from .pycompat import getattr +from .node import ( + bin, + nullrev, + wdirrev, +) from . import ( dagop, destutil, @@ -20,7 +25,6 @@ from . import ( grep as grepmod, hbisect, match as matchmod, - node, obsolete as obsmod, obsutil, pathutil, @@ -55,7 +59,7 @@ spanset = smartset.spanset fullreposet = smartset.fullreposet # revisions not included in all(), but populated if specified -_virtualrevs = (node.nullrev, node.wdirrev) +_virtualrevs = (nullrev, wdirrev) # Constants for ordering requirement, used in getset(): # @@ -177,9 +181,9 @@ def rangepost(repo, subset, x, order): def _makerangeset(repo, subset, m, n, order): if m == n: r = baseset([m]) - elif n == node.wdirrev: + elif n == wdirrev: r = spanset(repo, m, len(repo)) + baseset([n]) - elif m == node.wdirrev: + elif m == wdirrev: r = baseset([m]) + spanset(repo, repo.changelog.tiprev(), n - 1) elif m < n: r = spanset(repo, m, n + 1) @@ -597,7 +601,7 @@ def bookmark(repo, subset, x): bms.add(repo[bmrev].rev()) else: bms = {repo[r].rev() for r in repo._bookmarks.values()} - bms -= {node.nullrev} + bms -= {nullrev} return subset & bms @@ -722,7 +726,6 @@ def _children(repo, subset, parentset): cs = set() pr = repo.changelog.parentrevs minrev = parentset.min() - nullrev = node.nullrev for r in subset: if r <= minrev: continue @@ -1396,7 +1399,7 @@ def _matchfiles(repo, subset, x): b'_matchfiles expected at most one revision' ) if value == b'': # empty means working directory - rev = node.wdirrev + rev = wdirrev else: rev = value elif prefix == b'd:': @@ -1416,7 +1419,6 @@ def _matchfiles(repo, subset, x): # This directly read the changelog data as creating changectx for all # revisions is quite expensive. getfiles = repo.changelog.readfiles - wdirrev = node.wdirrev def matches(x): if x == wdirrev: @@ -1490,15 +1492,15 @@ def heads(repo, subset, x, order): order = followorder inputset = getset(repo, fullreposet(repo), x, order=order) wdirparents = None - if node.wdirrev in inputset: + if wdirrev in inputset: # a bit slower, but not common so good enough for now wdirparents = [p.rev() for p in repo[None].parents()] inputset = set(inputset) - inputset.discard(node.wdirrev) + inputset.discard(wdirrev) heads = repo.changelog.headrevs(inputset) if wdirparents is not None: heads.difference_update(wdirparents) - heads.add(node.wdirrev) + heads.add(wdirrev) heads = baseset(heads) return subset & heads @@ -1598,7 +1600,6 @@ def merge(repo, subset, x): # i18n: "merge" is a keyword getargs(x, 0, 0, _(b"merge takes no arguments")) cl = repo.changelog - nullrev = node.nullrev def ismerge(r): try: @@ -1692,7 +1693,7 @@ def named(repo, subset, x): if name not in ns.deprecated: names.update(repo[n].rev() for n in ns.nodes(repo, name)) - names -= {node.nullrev} + names -= {nullrev} return subset & names @@ -1705,9 +1706,9 @@ def node_(repo, subset, x): n = getstring(l[0], _(b"id requires a string")) if len(n) == 40: try: - rn = repo.changelog.rev(node.bin(n)) + rn = repo.changelog.rev(bin(n)) except error.WdirUnsupported: - rn = node.wdirrev + rn = wdirrev except (LookupError, TypeError): rn = None else: @@ -1719,7 +1720,7 @@ def node_(repo, subset, x): except LookupError: pass except error.WdirUnsupported: - rn = node.wdirrev + rn = wdirrev if rn is None: return baseset() @@ -1864,7 +1865,7 @@ def p1(repo, subset, x): ps.add(cl.parentrevs(r)[0]) except error.WdirUnsupported: ps.add(repo[r].p1().rev()) - ps -= {node.nullrev} + ps -= {nullrev} # XXX we should turn this into a baseset instead of a set, smartset may do # some optimizations from the fact this is a baseset. return subset & ps @@ -1892,7 +1893,7 @@ def p2(repo, subset, x): parents = repo[r].parents() if len(parents) == 2: ps.add(parents[1]) - ps -= {node.nullrev} + ps -= {nullrev} # XXX we should turn this into a baseset instead of a set, smartset may do # some optimizations from the fact this is a baseset. return subset & ps @@ -1919,7 +1920,7 @@ def parents(repo, subset, x): up(parentrevs(r)) except error.WdirUnsupported: up(p.rev() for p in repo[r].parents()) - ps -= {node.nullrev} + ps -= {nullrev} return subset & ps @@ -1994,7 +1995,7 @@ def parentspec(repo, subset, x, n, order else: try: parents = cl.parentrevs(r) - if parents[1] != node.nullrev: + if parents[1] != nullrev: ps.add(parents[1]) except error.WdirUnsupported: parents = repo[r].parents() @@ -2567,8 +2568,8 @@ def wdir(repo, subset, x): """Working directory. (EXPERIMENTAL)""" # i18n: "wdir" is a keyword getargs(x, 0, 0, _(b"wdir takes no arguments")) - if node.wdirrev in subset or isinstance(subset, fullreposet): - return baseset([node.wdirrev]) + if wdirrev in subset or isinstance(subset, fullreposet): + return baseset([wdirrev]) return baseset() @@ -2638,7 +2639,7 @@ def _orderedhexlist(repo, subset, x): if not s: return baseset() cl = repo.changelog - ls = [cl.rev(node.bin(r)) for r in s.split(b'\0')] + ls = [cl.rev(bin(r)) for r in s.split(b'\0')] s = subset return baseset([r for r in ls if r in s]) diff --git a/mercurial/revsetlang.py b/mercurial/revsetlang.py --- a/mercurial/revsetlang.py +++ b/mercurial/revsetlang.py @@ -11,9 +11,9 @@ import string from .i18n import _ from .pycompat import getattr +from .node import hex from . import ( error, - node, parser, pycompat, smartset, @@ -687,7 +687,7 @@ def _formatargtype(c, arg): parse(arg) # make sure syntax errors are confined return b'(%s)' % arg elif c == b'n': - return _quote(node.hex(arg)) + return _quote(hex(arg)) elif c == b'b': try: return _quote(arg.branch()) @@ -707,7 +707,7 @@ def _formatlistexp(s, t): elif t == b's': return b"_list(%s)" % _quote(b"\0".join(s)) elif t == b'n': - return b"_hexlist('%s')" % b"\0".join(node.hex(a) for a in s) + return b"_hexlist('%s')" % b"\0".join(hex(a) for a in s) elif t == b'b': try: return b"_list('%s')" % b"\0".join(a.branch() for a in s) diff --git a/mercurial/rewriteutil.py b/mercurial/rewriteutil.py --- a/mercurial/rewriteutil.py +++ b/mercurial/rewriteutil.py @@ -10,10 +10,13 @@ from __future__ import absolute_import import re from .i18n import _ +from .node import ( + hex, + nullrev, +) from . import ( error, - node, obsolete, obsutil, revset, @@ -30,7 +33,7 @@ def precheck(repo, revs, action=b'rewrit Make sure this function is called after taking the lock. """ - if node.nullrev in revs: + if nullrev in revs: msg = _(b"cannot %s null changeset") % action hint = _(b"no changeset checked out") raise error.InputError(msg, hint=hint) @@ -113,7 +116,7 @@ def update_hash_refs(repo, commitmsg, pe if len(successors) == 1 and len(successors[0]) == 1: successor = successors[0][0] if successor is not None: - newhash = node.hex(successor) + newhash = hex(successor) commitmsg = commitmsg.replace(h, newhash[: len(h)]) else: repo.ui.note( diff --git a/mercurial/shelve.py b/mercurial/shelve.py --- a/mercurial/shelve.py +++ b/mercurial/shelve.py @@ -29,6 +29,12 @@ import stat from .i18n import _ from .pycompat import open +from .node import ( + bin, + hex, + nullid, + nullrev, +) from . import ( bookmarks, bundle2, @@ -43,7 +49,6 @@ from . import ( mdiff, merge, mergestate as mergestatemod, - node as nodemod, patch, phases, pycompat, @@ -196,11 +201,11 @@ class shelvedstate(object): def _verifyandtransform(cls, d): """Some basic shelvestate syntactic verification and transformation""" try: - d[b'originalwctx'] = nodemod.bin(d[b'originalwctx']) - d[b'pendingctx'] = nodemod.bin(d[b'pendingctx']) - d[b'parents'] = [nodemod.bin(h) for h in d[b'parents'].split(b' ')] + d[b'originalwctx'] = bin(d[b'originalwctx']) + d[b'pendingctx'] = bin(d[b'pendingctx']) + d[b'parents'] = [bin(h) for h in d[b'parents'].split(b' ')] d[b'nodestoremove'] = [ - nodemod.bin(h) for h in d[b'nodestoremove'].split(b' ') + bin(h) for h in d[b'nodestoremove'].split(b' ') ] except (ValueError, TypeError, KeyError) as err: raise error.CorruptedState(pycompat.bytestr(err)) @@ -296,14 +301,10 @@ class shelvedstate(object): ): info = { b"name": name, - b"originalwctx": nodemod.hex(originalwctx.node()), - b"pendingctx": nodemod.hex(pendingctx.node()), - b"parents": b' '.join( - [nodemod.hex(p) for p in repo.dirstate.parents()] - ), - b"nodestoremove": b' '.join( - [nodemod.hex(n) for n in nodestoremove] - ), + b"originalwctx": hex(originalwctx.node()), + b"pendingctx": hex(pendingctx.node()), + b"parents": b' '.join([hex(p) for p in repo.dirstate.parents()]), + b"nodestoremove": b' '.join([hex(n) for n in nodestoremove]), b"branchtorestore": branchtorestore, b"keep": cls._keep if keep else cls._nokeep, b"activebook": activebook or cls._noactivebook, @@ -400,7 +401,7 @@ def mutableancestors(ctx): """return all mutable ancestors for ctx (included) Much faster than the revset ancestors(ctx) & draft()""" - seen = {nodemod.nullrev} + seen = {nullrev} visit = collections.deque() visit.append(ctx) while visit: @@ -464,7 +465,7 @@ def _nothingtoshelvemessaging(ui, repo, def _shelvecreatedcommit(repo, node, name, match): - info = {b'node': nodemod.hex(node)} + info = {b'node': hex(node)} shelvedfile(repo, name, b'shelve').writeinfo(info) bases = list(mutableancestors(repo[node])) shelvedfile(repo, name, b'hg').writebundle(bases, node) @@ -501,7 +502,7 @@ def _docreatecmd(ui, repo, pats, opts): parent = parents[0] origbranch = wctx.branch() - if parent.node() != nodemod.nullid: + if parent.node() != nullid: desc = b"changes to: %s" % parent.description().split(b'\n', 1)[0] else: desc = b'(changes in empty repository)' @@ -816,7 +817,7 @@ def unshelvecontinue(ui, repo, state, op pendingctx = state.pendingctx with repo.dirstate.parentchange(): - repo.setparents(state.pendingctx.node(), nodemod.nullid) + repo.setparents(state.pendingctx.node(), nullid) repo.dirstate.write(repo.currenttransaction()) targetphase = phases.internal @@ -825,7 +826,7 @@ def unshelvecontinue(ui, repo, state, op overrides = {(b'phases', b'new-commit'): targetphase} with repo.ui.configoverride(overrides, b'unshelve'): with repo.dirstate.parentchange(): - repo.setparents(state.parents[0], nodemod.nullid) + repo.setparents(state.parents[0], nullid) newnode, ispartialunshelve = _createunshelvectx( ui, repo, shelvectx, basename, interactive, opts ) @@ -901,7 +902,7 @@ def _unshelverestorecommit(ui, repo, tr, # We might not strip the unbundled changeset, so we should keep track of # the unshelve node in case we need to reuse it (eg: unshelve --keep) if node is None: - info = {b'node': nodemod.hex(shelvectx.node())} + info = {b'node': hex(shelvectx.node())} shelvedfile(repo, basename, b'shelve').writeinfo(info) else: shelvectx = repo[node] @@ -1020,7 +1021,7 @@ def _rebaserestoredcommit( raise error.ConflictResolutionRequired(b'unshelve') with repo.dirstate.parentchange(): - repo.setparents(tmpwctx.node(), nodemod.nullid) + repo.setparents(tmpwctx.node(), nullid) newnode, ispartialunshelve = _createunshelvectx( ui, repo, shelvectx, basename, interactive, opts ) diff --git a/mercurial/simplemerge.py b/mercurial/simplemerge.py --- a/mercurial/simplemerge.py +++ b/mercurial/simplemerge.py @@ -19,10 +19,10 @@ from __future__ import absolute_import from .i18n import _ +from .node import nullid from . import ( error, mdiff, - node as nodemod, pycompat, util, ) @@ -452,7 +452,7 @@ def _picklabels(defaults, overrides): def is_not_null(ctx): if not util.safehasattr(ctx, "node"): return False - return ctx.node() != nodemod.nullid + return ctx.node() != nullid def _mergediff(m3, name_a, name_b, name_base): diff --git a/mercurial/sslutil.py b/mercurial/sslutil.py --- a/mercurial/sslutil.py +++ b/mercurial/sslutil.py @@ -16,10 +16,10 @@ import ssl from .i18n import _ from .pycompat import getattr +from .node import hex from . import ( encoding, error, - node, pycompat, util, ) @@ -762,9 +762,9 @@ def validatesocket(sock): # If a certificate fingerprint is pinned, use it and only it to # validate the remote cert. peerfingerprints = { - b'sha1': node.hex(hashutil.sha1(peercert).digest()), - b'sha256': node.hex(hashlib.sha256(peercert).digest()), - b'sha512': node.hex(hashlib.sha512(peercert).digest()), + b'sha1': hex(hashutil.sha1(peercert).digest()), + b'sha256': hex(hashlib.sha256(peercert).digest()), + b'sha512': hex(hashlib.sha512(peercert).digest()), } def fmtfingerprint(s): diff --git a/mercurial/store.py b/mercurial/store.py --- a/mercurial/store.py +++ b/mercurial/store.py @@ -14,11 +14,11 @@ import stat from .i18n import _ from .pycompat import getattr +from .node import hex from . import ( changelog, error, manifest, - node, policy, pycompat, util, @@ -273,7 +273,7 @@ def _auxencode(path, dotencode): def _hashencode(path, dotencode): - digest = node.hex(hashutil.sha1(path).digest()) + digest = hex(hashutil.sha1(path).digest()) le = lowerencode(path[5:]).split(b'/') # skips prefix 'data/' or 'meta/' parts = _auxencode(le, dotencode) basename = parts[-1] diff --git a/mercurial/strip.py b/mercurial/strip.py --- a/mercurial/strip.py +++ b/mercurial/strip.py @@ -2,6 +2,7 @@ from __future__ import absolute_import from .i18n import _ from .pycompat import getattr +from .node import nullid from . import ( bookmarks as bookmarksmod, cmdutil, @@ -9,7 +10,6 @@ from . import ( hg, lock as lockmod, mergestate as mergestatemod, - node as nodemod, pycompat, registrar, repair, @@ -17,7 +17,6 @@ from . import ( util, ) -nullid = nodemod.nullid release = lockmod.release cmdtable = {} diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -18,6 +18,12 @@ import tarfile import xml.dom.minidom from .i18n import _ +from .node import ( + bin, + hex, + nullid, + short, +) from . import ( cmdutil, encoding, @@ -26,7 +32,6 @@ from . import ( logcmdutil, match as matchmod, merge as merge, - node, pathutil, phases, pycompat, @@ -61,7 +66,7 @@ def _expandedabspath(path): def _getstorehashcachename(remotepath): '''get a unique filename for the store hash cache of a remote repository''' - return node.hex(hashutil.sha1(_expandedabspath(remotepath)).digest())[0:12] + return hex(hashutil.sha1(_expandedabspath(remotepath)).digest())[0:12] class SubrepoAbort(error.Abort): @@ -508,7 +513,7 @@ class hgsubrepo(abstractsubrepo): yield b'# %s\n' % _expandedabspath(remotepath) vfs = self._repo.vfs for relname in filelist: - filehash = node.hex(hashutil.sha1(vfs.tryread(relname)).digest()) + filehash = hex(hashutil.sha1(vfs.tryread(relname)).digest()) yield b'%s = %s\n' % (relname, filehash) @propertycache @@ -601,11 +606,11 @@ class hgsubrepo(abstractsubrepo): @annotatesubrepoerror def diff(self, ui, diffopts, node2, match, prefix, **opts): try: - node1 = node.bin(self._state[1]) + node1 = bin(self._state[1]) # We currently expect node2 to come from substate and be # in hex format if node2 is not None: - node2 = node.bin(node2) + node2 = bin(node2) logcmdutil.diffordiffstat( ui, self._repo, @@ -669,7 +674,7 @@ class hgsubrepo(abstractsubrepo): n = self._repo.commit(text, user, date) if not n: return self._repo[b'.'].hex() # different version checked out - return node.hex(n) + return hex(n) @annotatesubrepoerror def phase(self, state): @@ -680,7 +685,7 @@ class hgsubrepo(abstractsubrepo): # we can't fully delete the repository as it may contain # local-only history self.ui.note(_(b'removing subrepo %s\n') % subrelpath(self)) - hg.clean(self._repo, node.nullid, False) + hg.clean(self._repo, nullid, False) def _get(self, state): source, revision, kind = state @@ -1019,7 +1024,7 @@ class hgsubrepo(abstractsubrepo): # explicit warning. msg = _(b"subrepo '%s' is hidden in revision %s") % ( self._relpath, - node.short(self._ctx.node()), + short(self._ctx.node()), ) if onpush: @@ -1032,7 +1037,7 @@ class hgsubrepo(abstractsubrepo): # don't treat this as an error for `hg verify`. msg = _(b"subrepo '%s' not found in revision %s") % ( self._relpath, - node.short(self._ctx.node()), + short(self._ctx.node()), ) if onpush: diff --git a/mercurial/tagmerge.py b/mercurial/tagmerge.py --- a/mercurial/tagmerge.py +++ b/mercurial/tagmerge.py @@ -75,16 +75,13 @@ from __future__ import absolute_import from .i18n import _ from .node import ( - hex, - nullid, + nullhex, ) from . import ( tags as tagsmod, util, ) -hexnullid = hex(nullid) - def readtagsformerge(ui, repo, lines, fn=b'', keeplinenums=False): """read the .hgtags file into a structure that is suitable for merging @@ -246,8 +243,8 @@ def merge(repo, fcd, fco, fca): pnlosttagset = basetagset - pntagset for t in pnlosttagset: pntags[t] = basetags[t] - if pntags[t][-1][0] != hexnullid: - pntags[t].append([hexnullid, None]) + if pntags[t][-1][0] != nullhex: + pntags[t].append([nullhex, None]) conflictedtags = [] # for reporting purposes mergedtags = util.sortdict(p1tags) diff --git a/mercurial/templatefilters.py b/mercurial/templatefilters.py --- a/mercurial/templatefilters.py +++ b/mercurial/templatefilters.py @@ -12,10 +12,10 @@ import re import time from .i18n import _ +from .node import hex from . import ( encoding, error, - node, pycompat, registrar, smartset, @@ -280,7 +280,7 @@ def hexfilter(text): """Any text. Convert a binary Mercurial node identifier into its long hexadecimal representation. """ - return node.hex(text) + return hex(text) @templatefilter(b'hgdate', intype=templateutil.date) diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -42,12 +42,12 @@ from .pycompat import ( open, setattr, ) +from .node import hex from hgdemandimport import tracing from . import ( encoding, error, i18n, - node as nodemod, policy, pycompat, urllibcompat, @@ -254,7 +254,7 @@ class digester(object): def __getitem__(self, key): if key not in DIGESTS: raise error.Abort(_(b'unknown digest type: %s') % k) - return nodemod.hex(self._hashes[key].digest()) + return hex(self._hashes[key].digest()) def __iter__(self): return iter(self._hashes) diff --git a/tests/drawdag.py b/tests/drawdag.py --- a/tests/drawdag.py +++ b/tests/drawdag.py @@ -86,11 +86,11 @@ import collections import itertools import re +from mercurial.node import nullid from mercurial.i18n import _ from mercurial import ( context, error, - node, obsolete, pycompat, registrar, @@ -299,7 +299,7 @@ class simplecommitctx(context.committabl self._added = added self._parents = parentctxs while len(self._parents) < 2: - self._parents.append(repo[node.nullid]) + self._parents.append(repo[nullid]) def filectx(self, key): return simplefilectx(key, self._added[key]) @@ -388,7 +388,7 @@ def debugdrawdag(ui, repo, **opts): content = content.replace(br'\n', b'\n').replace(br'\1', b'\1') files[name][path] = content - committed = {None: node.nullid} # {name: node} + committed = {None: nullid} # {name: node} # for leaf nodes, try to find existing nodes in repo for name, parents in edges.items(): diff --git a/tests/test-parseindex2.py b/tests/test-parseindex2.py --- a/tests/test-parseindex2.py +++ b/tests/test-parseindex2.py @@ -12,11 +12,12 @@ import sys import unittest from mercurial.node import ( + bin, + hex, nullid, nullrev, ) from mercurial import ( - node as nodemod, policy, pycompat, ) @@ -232,7 +233,7 @@ class parseindex2tests(unittest.TestCase self.assertEqual( ix[r[7]], i, - 'Reverse lookup inconsistent for %r' % nodemod.hex(r[7]), + 'Reverse lookup inconsistent for %r' % hex(r[7]), ) except TypeError: # pure version doesn't support this @@ -255,7 +256,7 @@ class parseindex2tests(unittest.TestCase if rev == nullrev: return b'\xff\xff\xff\xff' else: - return nodemod.bin('%08x' % rev) + return bin('%08x' % rev) def appendrev(p1, p2=nullrev): # node won't matter for this test, let's just make sure diff --git a/tests/test-revlog-raw.py b/tests/test-revlog-raw.py --- a/tests/test-revlog-raw.py +++ b/tests/test-revlog-raw.py @@ -6,9 +6,9 @@ import collections import hashlib import sys +from mercurial.node import nullid from mercurial import ( encoding, - node, revlog, transaction, vfs, @@ -93,7 +93,7 @@ def appendrev(rlog, text, tr, isext=Fals """ nextrev = len(rlog) p1 = rlog.node(nextrev - 1) - p2 = node.nullid + p2 = nullid if isext: flags = revlog.REVIDX_EXTSTORED else: @@ -127,7 +127,7 @@ def addgroupcopy(rlog, tr, destname=b'_d class dummychangegroup(object): @staticmethod def deltachunk(pnode): - pnode = pnode or node.nullid + pnode = pnode or nullid parentrev = rlog.rev(pnode) r = parentrev + 1 if r >= len(rlog): @@ -142,7 +142,7 @@ def addgroupcopy(rlog, tr, destname=b'_d return { b'node': rlog.node(r), b'p1': pnode, - b'p2': node.nullid, + b'p2': nullid, b'cs': rlog.node(rlog.linkrev(r)), b'flags': rlog.flags(r), b'deltabase': rlog.node(deltaparent), @@ -181,7 +181,7 @@ def lowlevelcopy(rlog, tr, destname=b'_d dlog = newrevlog(destname, recreate=True) for r in rlog: p1 = rlog.node(r - 1) - p2 = node.nullid + p2 = nullid if r == 0 or (rlog.flags(r) & revlog.REVIDX_EXTSTORED): text = rlog.rawdata(r) cachedelta = None diff --git a/tests/test-rust-ancestor.py b/tests/test-rust-ancestor.py --- a/tests/test-rust-ancestor.py +++ b/tests/test-rust-ancestor.py @@ -2,10 +2,8 @@ from __future__ import absolute_import import sys import unittest -from mercurial import ( - error, - node, -) +from mercurial.node import wdirrev +from mercurial import error from mercurial.testing import revlog as revlogtesting @@ -150,7 +148,7 @@ class rustancestorstest(revlogtesting.Re # WdirUnsupported directly idx = self.parseindex() with self.assertRaises(error.WdirUnsupported): - list(AncestorsIterator(idx, [node.wdirrev], -1, False)) + list(AncestorsIterator(idx, [wdirrev], -1, False)) def testheadrevs(self): idx = self.parseindex() diff --git a/tests/testlib/ext-sidedata.py b/tests/testlib/ext-sidedata.py --- a/tests/testlib/ext-sidedata.py +++ b/tests/testlib/ext-sidedata.py @@ -10,9 +10,12 @@ from __future__ import absolute_import import hashlib import struct +from mercurial.node import ( + nullid, + nullrev, +) from mercurial import ( extensions, - node, requirements, revlog, ) @@ -41,7 +44,7 @@ def wraprevision(orig, self, nodeorrev, text = orig(self, nodeorrev, *args, **kwargs) if getattr(self, 'sidedatanocheck', False): return text - if nodeorrev != node.nullrev and nodeorrev != node.nullid: + if nodeorrev != nullrev and nodeorrev != nullid: sd = self.sidedata(nodeorrev) if len(text) != struct.unpack('>I', sd[sidedata.SD_TEST1])[0]: raise RuntimeError('text size mismatch')