Patchwork [v2-dederpified] histedit: support editing of the first commit (issue3767)

login
register
mail settings
Submitter Bryan O'Sullivan
Date April 12, 2013, 9:20 p.m.
Message ID <0431c546a0afaad7fd72.1365801645@australite.local>
Download mbox | patch
Permalink /patch/1288/
State Accepted
Commit 79580b3140cd7376c16395236ca24f36d2baa99c
Headers show

Comments

Bryan O'Sullivan - April 12, 2013, 9:20 p.m.
# HG changeset patch
# User Bryan O'Sullivan <bryano@fb.com>
# Date 1365801616 25200
#      Fri Apr 12 14:20:16 2013 -0700
# Node ID 0431c546a0afaad7fd722f6af4bbe673a72ed392
# Parent  0b355eb5ac4142610f74c83347392beb598f2618
histedit: support editing of the first commit (issue3767)

Patch

diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -580,14 +580,15 @@  def bootstrapcontinue(ui, repo, parentct
     # 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]
diff --git a/tests/test-histedit-edit.t b/tests/test-histedit-edit.t
--- a/tests/test-histedit-edit.t
+++ b/tests/test-histedit-edit.t
@@ -209,3 +209,16 @@  rollback should not work after a histedi
   [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)