[Updated] D9257: commit: warn the user when a commit already exists

danchr (Dan Villiom Podlaski Christiansen) phabricator at mercurial-scm.org
Thu Oct 29 12:57:46 UTC 2020


danchr edited the summary of this revision.
danchr retitled this revision from "commit, backout: warn the user when a commit already exists" to "commit: warn the user when a commit already exists".
danchr updated this revision to Diff 23363.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D9257?vs=23356&id=23363

BRANCH
  stable

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D9257/new/

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

AFFECTED FILES
  mercurial/cmdutil.py
  mercurial/commands.py
  tests/test-backout.t
  tests/test-merge-tools.t
  tests/test-phases.t
  tests/test-remotefilelog-local.t
  tests/test-unamend.t

CHANGE DETAILS

diff --git a/tests/test-unamend.t b/tests/test-unamend.t
--- a/tests/test-unamend.t
+++ b/tests/test-unamend.t
@@ -405,8 +405,10 @@
   $ hg co -q 0
   $ hg mv a b
   $ hg ci -qm 'move to a b'
+  warning: commit already existed in the repository!
   $ hg mv b c
   $ hg amend
+  warning: commit already existed in the repository!
   $ hg mv c d
   $ hg unamend
   $ hg st --copies --change .
diff --git a/tests/test-remotefilelog-local.t b/tests/test-remotefilelog-local.t
--- a/tests/test-remotefilelog-local.t
+++ b/tests/test-remotefilelog-local.t
@@ -204,5 +204,6 @@
   $ hg update -r '.^' -q
   $ echo 1 > A
   $ hg commit -m foo -A A
+  warning: commit already existed in the repository!
   $ hg log -r . -T '{node}\n'
   383ce605500277f879b7460a16ba620eb6930b7f
diff --git a/tests/test-phases.t b/tests/test-phases.t
--- a/tests/test-phases.t
+++ b/tests/test-phases.t
@@ -1010,7 +1010,7 @@
   $ hg up -C 1
   0 files updated, 0 files merged, 4 files removed, 0 files unresolved
   $ mkcommit C
-  created new head
+  warning: commit already existed in the repository!
   $ hg phase -r 2
   2: public
 
@@ -1027,6 +1027,7 @@
   7: draft
   $ mkcommit F
   test-debug-phase: new rev 8:  x -> 2
+  warning: commit already existed in the repository!
   test-hook-close-phase: de414268ec5ce2330c590b942fbb5ff0b0ca1a0a:   -> secret
   $ hg phase -r tip
   8: secret
@@ -1037,7 +1038,7 @@
   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
   $ mkcommit H
   test-debug-phase: new rev 5:  x -> 2
-  created new head
+  warning: commit already existed in the repository!
   test-hook-close-phase: a030c6be5127abc010fcbff1851536552e6951a8:   -> secret
   $ hg phase -r 5
   5: secret
diff --git a/tests/test-merge-tools.t b/tests/test-merge-tools.t
--- a/tests/test-merge-tools.t
+++ b/tests/test-merge-tools.t
@@ -1868,6 +1868,7 @@
   $ hg update -q -C 1
   $ hg mv f f.txt
   $ hg ci -qm "f.txt"
+  warning: commit already existed in the repository!
   $ hg update -q -C 2
   $ hg merge -y -r tip --tool echo \
   >    --config merge-tools.echo.args='$base $local $other $output' \
diff --git a/tests/test-backout.t b/tests/test-backout.t
--- a/tests/test-backout.t
+++ b/tests/test-backout.t
@@ -819,5 +819,5 @@
   1 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg backout 2
   removing 3
-  created new head
+  warning: commit already existed in the repository!
   changeset 3:8f188de730d9 backs out changeset 2:cccc23d9d68f
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -850,11 +850,14 @@
             message, opts.get(b'user'), opts.get(b'date'), match, editor=e
         )
 
+    # save to detect changes
+    tip = repo.changelog.tip()
+
     newnode = cmdutil.commit(ui, repo, commitfunc, [], opts)
     if not newnode:
         ui.status(_(b"nothing changed\n"))
         return 1
-    cmdutil.commitstatus(repo, newnode, branch, bheads)
+    cmdutil.commitstatus(repo, newnode, branch, bheads, tip)
 
     def nice(node):
         return b'%d:%s' % (repo.changelog.rev(node), short(node))
@@ -2024,6 +2027,7 @@
 
     branch = repo[None].branch()
     bheads = repo.branchheads(branch)
+    tip = repo.changelog.tip()
 
     extra = {}
     if opts.get(b'close_branch') or opts.get(b'force_close_branch'):
@@ -2113,7 +2117,7 @@
                 ui.status(_(b"nothing changed\n"))
             return 1
 
-    cmdutil.commitstatus(repo, node, branch, bheads, opts)
+    cmdutil.commitstatus(repo, node, branch, bheads, tip, opts)
 
     if not ui.quiet and ui.configbool(b'commands', b'commit.post-status'):
         status(
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -3089,13 +3089,18 @@
     return b"\n".join(edittext)
 
 
-def commitstatus(repo, node, branch, bheads=None, opts=None):
+def commitstatus(repo, node, branch, bheads=None, tip=None, opts=None):
     if opts is None:
         opts = {}
     ctx = repo[node]
     parents = ctx.parents()
 
-    if (
+    if tip is not None and repo.changelog.tip() == tip:
+        # avoid reporting something like "committed new head" when
+        # recommitting old changesets, and issue a helpful warning
+        # for most instances
+        repo.ui.warn(_("warning: commit already existed in the repository!\n"))
+    elif (
         not opts.get(b'amend')
         and bheads
         and node not in bheads



To: danchr, #hg-reviewers
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20201029/a4fc12a9/attachment-0002.html>


More information about the Mercurial-patches mailing list