[PATCH V2] context: override workingctx.hex() to avoid a crash

Matt Harbison mharbison72 at gmail.com
Mon Jun 15 21:33:10 CDT 2015

# HG changeset patch
# User Matt Harbison <matt_harbison at yahoo.com>
# Date 1434333857 14400
#      Sun Jun 14 22:04:17 2015 -0400
# Node ID e8aad4e14a74b6034d48183d737d52e78ba4c6b4
# Parent  a69983942fb4dbfdf5ca8c7a123120ed09ead5db
context: override workingctx.hex() to avoid a crash

Since node is None for workingctx, it can't use the base class implementation of

It doesn't appear that there are any current callers of this, but there will be
when archive supports 'wdir()'.  My first thought was to use "{p1node}+", but
that would cause headaches elsewhere [1].

We should probably fix up localrepository.__getitem__ to accept this hash for
consistency, as a followup.  This works, if the full hash is specified:

  @@ -480,7 +480,7 @@
           return dirstate.dirstate(self.vfs, self.ui, self.root, validate)

       def __getitem__(self, changeid):
  -        if changeid is None:
  +        if changeid is None or changeid == 'ff' * 20:
               return context.workingctx(self)
           if isinstance(changeid, slice):
               return [context.changectx(self, i)

That differs from null, where it will accept any number of 0s, as long as it
isn't ambiguous.

[1] https://www.selenic.com/pipermail/mercurial-devel/2015-June/071166.html

diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -1334,6 +1334,9 @@
     def __contains__(self, key):
         return self._repo.dirstate[key] not in "?r"
+    def hex(self):
+        return "ff" * 20
     def _parents(self):
         p = self._repo.dirstate.parents()

More information about the Mercurial-devel mailing list