Patchwork D9229: rebase: update commit hash references in the new commits

login
register
mail settings
Submitter phabricator
Date Oct. 20, 2020, 3:38 a.m.
Message ID <differential-rev-PHID-DREV-ne6qe6kkfbzf7rtoe6ur-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/47495/
State Superseded
Headers show

Comments

phabricator - Oct. 20, 2020, 3:38 a.m.
mharbison72 created this revision.
Herald added a reviewer: martinvonz.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  This excludes the --collapse case because degenerating to p1 is almost certainly
  as wrong as leaving the old hashes in place.  I expect most people to amend the
  message explicitly when using that.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D9229

AFFECTED FILES
  hgext/rebase.py
  tests/test-rebase-rename.t

CHANGE DETAILS




To: mharbison72, martinvonz, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/tests/test-rebase-rename.t b/tests/test-rebase-rename.t
--- a/tests/test-rebase-rename.t
+++ b/tests/test-rebase-rename.t
@@ -312,14 +312,14 @@ 
   $ hg commit --message "File b created as copy of a and modified"
   $ hg copy b c
   $ echo c > c
-  $ hg commit --message "File c created as copy of b and modified"
+  $ hg commit --message "File c created as copy of b and modified" ##
   $ hg copy c d
   $ echo d > d
-  $ hg commit --message "File d created as copy of c and modified"
+  $ hg commit --message "File d created as copy of c and modified (child of 327f772bc074)"
 
 Note that there are four entries in the log for d
   $ hg tglog --follow d
-  @  3: 421b7e82bb85 'File d created as copy of c and modified'
+  @  3: 6be224292cfa 'File d created as copy of c and modified (child of 327f772bc074)'
   |
   o  2: 327f772bc074 'File c created as copy of b and modified'
   |
@@ -342,14 +342,14 @@ 
   $ hg rebase --source 1 --dest 4
   rebasing 1:79d255d24ad2 "File b created as copy of a and modified"
   rebasing 2:327f772bc074 "File c created as copy of b and modified"
-  rebasing 3:421b7e82bb85 "File d created as copy of c and modified"
-  saved backup bundle to $TESTTMP/copy-gets-preserved/.hg/strip-backup/79d255d24ad2-a2265555-rebase.hg
+  rebasing 3:6be224292cfa "File d created as copy of c and modified (child of 327f772bc074)"
+  saved backup bundle to $TESTTMP/copy-gets-preserved/.hg/strip-backup/79d255d24ad2-a3e674e3-rebase.hg
   $ hg update 4
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
 There should still be four entries in the log for d
   $ hg tglog --follow d
-  @  4: dbb9ba033561 'File d created as copy of c and modified'
+  @  4: afbdde3a60d5 'File d created as copy of c and modified (child of af74b229bc02)'
   |
   o  3: af74b229bc02 'File c created as copy of b and modified'
   |
@@ -368,9 +368,9 @@ 
   rebasing 2:68bf06433839 "File b created as copy of a and modified"
   rebasing 3:af74b229bc02 "File c created as copy of b and modified"
   merging b and c to c
-  rebasing 4:dbb9ba033561 "File d created as copy of c and modified"
+  rebasing 4:afbdde3a60d5 "File d created as copy of c and modified (child of af74b229bc02)"
   merging c and d to d
-  saved backup bundle to $TESTTMP/copy-gets-preserved/.hg/strip-backup/68bf06433839-dde37595-rebase.hg
+  saved backup bundle to $TESTTMP/copy-gets-preserved/.hg/strip-backup/68bf06433839-29d5057f-rebase.hg
   $ hg co tip
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
@@ -378,11 +378,24 @@ 
 copy of 'a'.
 
   $ hg tglog --follow d
-  @  3: 5a46b94210e5 'Collapsed revision
+  @  3: 75708a266e56 'Collapsed revision
   :  * File b created as copy of a and modified
   :  * File c created as copy of b and modified
-  :  * File d created as copy of c and modified'
+  :  * File d created as copy of c and modified (child of af74b229bc02)'
   o  0: b220cd6d2326 'File a created'
   
+  $ hg log -G -Tcompact
+  @  3[tip]   75708a266e56   1970-01-01 00:00 +0000   test
+  |    Collapsed revision
+  |
+  o  2   15258cf0cf10   1970-01-01 00:00 +0000   test
+  |    unrelated commit is unrelated
+  |
+  o  1   1d689898494b   1970-01-01 00:00 +0000   test
+  |    Unrelated file created
+  |
+  o  0   b220cd6d2326   1970-01-01 00:00 +0000   test
+       File a created
+  
 
   $ cd ..
diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -526,6 +526,21 @@ 
         ctx = repo[rev]
         if commitmsg is None:
             commitmsg = ctx.description()
+
+        # Skip replacement if collapsing, as that degenerates to p1 for all
+        # nodes.
+        if not self.collapsef:
+            cl = repo.changelog
+            commitmsg = rewriteutil.update_hash_refs(
+                repo,
+                commitmsg,
+                {
+                    cl.node(oldrev): [cl.node(newrev)]
+                    for oldrev, newrev in self.state.items()
+                    if newrev != revtodo
+                },
+            )
+
         date = self.date
         if date is None:
             date = ctx.date()