Patchwork [4,of,4] absorb: make it explicit if empty changeset was created

login
register
mail settings
Submitter Manuel Jacob
Date July 1, 2020, 9:39 p.m.
Message ID <1328059c6ff3a6834642.1593639543@tmp>
Download mbox | patch
Permalink /patch/46609/
State New
Headers show

Comments

Manuel Jacob - July 1, 2020, 9:39 p.m.
# HG changeset patch
# User Manuel Jacob <me@manueljacob.de>
# Date 1590998131 -7200
#      Mon Jun 01 09:55:31 2020 +0200
# Node ID 1328059c6ff3a68346429579a2920ffb959ec3e4
# Parent  b54d68403a5435161e294b9227bfb5059a25b3f0
# EXP-Topic createempty
absorb: make it explicit if empty changeset was created

If the absorb.createempty config is disabled, a message "became empty and was
dropped" is shown if the changeset became empty. If the absorb.createempty
config is enabled, absorb may create changesets even if they became empty. It’s
probably a good idea to make that explicit. Therefore the message is changed to
be a combination of both: "became empty and became ...".

Repeating the word "became" is not very elegant. This results from the fact
that "became" was and is overloaded to indicate both the change from non-empty
to empty and the successor relation. In the combinated message, both meanings
are used in one sentence.

Patch

diff --git a/hgext/absorb.py b/hgext/absorb.py
--- a/hgext/absorb.py
+++ b/hgext/absorb.py
@@ -783,10 +783,12 @@ 
                 # nothing changed, nothing commited
                 nextp1 = ctx
                 continue
+            willbecomenoop = ctx.files() and self._willbecomenoop(
+                memworkingcopy, ctx, nextp1
+            )
             if (
                 not self.ui.configbool(b'absorb', b'createempty')
-                and ctx.files()
-                and self._willbecomenoop(memworkingcopy, ctx, nextp1)
+                and willbecomenoop
             ):
                 # changeset is no longer necessary
                 self.replacemap[ctx.node()] = None
@@ -798,7 +800,14 @@ 
                 nextp1 = lastcommitted
                 self.replacemap[ctx.node()] = lastcommitted.node()
                 if memworkingcopy:
-                    msg = _(b'%d file(s) changed, became %s') % (
+                    if willbecomenoop:
+                        msg = _(
+                            b'%d file(s) changed, became empty '
+                            b'and became %s'
+                        )
+                    else:
+                        msg = _(b'%d file(s) changed, became %s')
+                    msg = msg % (
                         len(memworkingcopy),
                         self._ctx2str(lastcommitted),
                     )
diff --git a/tests/test-absorb.t b/tests/test-absorb.t
--- a/tests/test-absorb.t
+++ b/tests/test-absorb.t
@@ -509,6 +509,7 @@ 
   $ hg commit -m b3
   $ echo 4 >> b
   $ hg commit -m b4
+  $ hg commit -m empty --config ui.allowemptycommit=True
   $ echo 1 > b
   $ echo 3 >> a
   $ hg absorb -pn
@@ -527,16 +528,19 @@ 
   1154859 b12
   bfafb49 a12
   $ hg absorb -av --config absorb.createempty=True | grep became
-  0:bfafb49242db: 1 file(s) changed, became 4:1a2de97fc652
-  1:115485984805: 2 file(s) changed, became 5:0c930dfab74c
-  2:30970dbf7b40: 2 file(s) changed, became 6:df6574ae635c
-  3:a393a58b9a85: 2 file(s) changed, became 7:ad4bd3462c9e
+  0:bfafb49242db: 1 file(s) changed, became 5:1a2de97fc652
+  1:115485984805: 2 file(s) changed, became 6:0c930dfab74c
+  2:30970dbf7b40: 2 file(s) changed, became empty and became 7:df6574ae635c
+  3:a393a58b9a85: 2 file(s) changed, became empty and became 8:ad4bd3462c9e
+  4:1bb0e8cff87a: 2 file(s) changed, became 9:2dbed75af996
   $ hg log -T '{rev} {desc}\n' -Gp
-  @  7 b4
+  @  9 empty
+  |
+  o  8 b4
   |
-  o  6 b3
+  o  7 b3
   |
-  o  5 b12
+  o  6 b12
   |  diff --git a/b b/b
   |  new file mode 100644
   |  --- /dev/null
@@ -544,7 +548,7 @@ 
   |  @@ -0,0 +1,1 @@
   |  +1
   |
-  o  4 a12
+  o  5 a12
      diff --git a/a b/a
      new file mode 100644
      --- /dev/null