[PATCH] context: make changectx.mutable() benefit from .phase() logic

Patrick Mezard patrick at mezard.eu
Thu Apr 5 12:19:55 CDT 2012


# HG changeset patch
# User Patrick Mezard <patrick at mezard.eu>
# Date 1333646123 -7200
# Branch stable
# Node ID 02e20bff18ee4e4700b07f58eb54452c3120bcae
# Parent  8ca7187d479f87ac876f7371429bdd28c878f597
context: make changectx.mutable() benefit from .phase() logic

This fixes "hg qimport -r null". Previous versions used to:
- Traceback because null revision mutability was not defined
- Add an empty -1.diff patch to the series

The error message:

  abort: revision -1 is not mutable

is symptomatic of a deeper problem in phase command revision handling. It could
be fixed easily in the command itself but I feel a better fix must be done in
phase API which raises the issue of phase updates atomicity: aborting in
phases.advanceboundary/retractboundary requires a better rollback behaviour to
avoid partial changes.

diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -127,7 +127,7 @@
     def phasestr(self):
         return phases.phasenames[self.phase()]
     def mutable(self):
-        return self._repo._phaserev[self._rev] > phases.public
+        return self.phase() > phases.public
     def hidden(self):
         return self._rev in self._repo.changelog.hiddenrevs
 
diff --git a/tests/test-mq-qimport.t b/tests/test-mq-qimport.t
--- a/tests/test-mq-qimport.t
+++ b/tests/test-mq-qimport.t
@@ -28,6 +28,14 @@
   abort: unable to read file non-existing-file
   [255]
 
+qimport null revision
+
+  $ hg qimport -r null
+  abort: revision -1 is not mutable
+  (see "hg help phases" for details)
+  [255]
+  $ hg qseries
+
 import email
 
   $ hg qimport --push -n email - <<EOF


More information about the Mercurial-devel mailing list