histedit: support editing of the first commit (issue3767)
authorBryan O'Sullivan <bryano@fb.com>
Fri, 12 Apr 2013 16:01:18 -0700
changeset 18913 79580b3140cd
parent 18912 4e1ae55e63ef
child 18914 05d5821e0dc8
histedit: support editing of the first commit (issue3767)
hgext/histedit.py
tests/test-histedit-edit.t
--- a/hgext/histedit.py	Fri Apr 12 17:00:42 2013 -0400
+++ b/hgext/histedit.py	Fri Apr 12 16:01:18 2013 -0700
@@ -580,14 +580,15 @@
     # note: does not take non linear new change in account (but previous
     #       implementation didn't used them anyway (issue3655)
     newchildren = [c.node() for c in repo.set('(%d::.)', parentctx)]
-    if not newchildren:
-        # `parentctxnode` should match but no result. This means that
-        # currentnode is not a descendant from parentctxnode.
-        msg = _('%s is not an ancestor of working directory')
-        hint = _('update to %s or descendant and run "hg histedit '
-                 '--continue" again') % parentctx
-        raise util.Abort(msg % parentctx, hint=hint)
-    newchildren.pop(0)  # remove parentctxnode
+    if parentctx.node() != node.nullid:
+        if not newchildren:
+            # `parentctxnode` should match but no result. This means that
+            # currentnode is not a descendant from parentctxnode.
+            msg = _('%s is not an ancestor of working directory')
+            hint = _('update to %s or descendant and run "hg histedit '
+                     '--continue" again') % parentctx
+            raise util.Abort(msg % parentctx, hint=hint)
+        newchildren.pop(0)  # remove parentctxnode
     # Commit dirty working directory if necessary
     new = None
     m, a, r, d = repo.status()[:4]
--- a/tests/test-histedit-edit.t	Fri Apr 12 17:00:42 2013 -0400
+++ b/tests/test-histedit-edit.t	Fri Apr 12 16:01:18 2013 -0700
@@ -209,3 +209,16 @@
   [1]
 
   $ cd ..
+  $ hg clone -qr0 r r0
+  $ cd r0
+  $ echo edit cb9a9f314b8b a > $EDITED
+  $ hg phase -fdr0
+  $ HGEDITOR="cat \"$EDITED\" > " hg histedit 0 2>&1
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  adding a
+  abort: Make changes as needed, you may commit or record as needed now.
+  When you are finished, run hg histedit --continue to resume.
+  [255]
+  $ HGEDITOR=true hg histedit --continue
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  saved backup bundle to $TESTTMP/r0/.hg/strip-backup/cb9a9f314b8b-backup.hg (glob)