D6853: amend: add option to update to the current user

mharbison72 (Matt Harbison) phabricator at mercurial-scm.org
Sat Sep 14 22:23:32 UTC 2019


mharbison72 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This is also from the evolve extension's version of amend.  A side effect of
  this refactoring is for uncommit to support `rewrite.update-timestamp`.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  hgext/amend.py
  mercurial/cmdutil.py
  mercurial/help/config.txt
  relnotes/next

CHANGE DETAILS

diff --git a/relnotes/next b/relnotes/next
--- a/relnotes/next
+++ b/relnotes/next
@@ -1,5 +1,8 @@
 == New Features ==
 
+ * The amend extension supports the `--currentuser` argument.
+
+ * The uncommit extension supports the `rewrite.update-timestamp` config option.
 
 == New Experimental Features ==
 
diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt
--- a/mercurial/help/config.txt
+++ b/mercurial/help/config.txt
@@ -1853,7 +1853,8 @@
 
 ``update-timestamp``
     If true, updates the date and time of the changeset to current. It is only
-    applicable for hg amend in current version.
+    applicable for `hg amend`, `hg commit --amend` and `hg uncommit` in the
+    current version.
 
 ``storage``
 -----------
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -184,6 +184,9 @@
 
 def resolvecommitoptions(ui, opts):
     """modify commit options dict to handle related options
+
+    The return value indicates that ``rewrite.update-timestamp`` is the reason
+    the ``date`` option is set.
     """
     if opts.get('date') and opts.get('currentdate'):
         raise error.Abort(_('--date and --currentdate are mutually '
@@ -192,12 +195,21 @@
         raise error.Abort(_('--user and --currentuser are mutually '
                             'exclusive'))
 
-    # N.B. this is extremely similar to setupheaderopts() in mq.py
+    datemaydiffer = False  # date-only change should be ignored?
+
     if opts.get(b'currentdate'):
         opts[b'date'] = b'%d %d' % dateutil.makedate()
+    elif (not opts.get('date')
+          and ui.configbool('rewrite', 'update-timestamp')
+          and opts.get('currentdate') is None):
+        opts[b'date'] = b'%d %d' % dateutil.makedate()
+        datemaydiffer = True
+
     if opts.get(b'currentuser'):
         opts[b'user'] = ui.username()
 
+    return datemaydiffer
+
 def ishunk(x):
     hunkclasses = (crecordmod.uihunk, patch.recordhunk)
     return isinstance(x, hunkclasses)
@@ -2470,22 +2482,13 @@
         # Also update it from the from the wctx
         extra.update(wctx.extra())
 
-        user = opts.get('user') or old.user()
-
-        datemaydiffer = False  # date-only change should be ignored?
-        if opts.get('date') and opts.get('currentdate'):
-            raise error.Abort(_('--date and --currentdate are mutually '
-                                'exclusive'))
+        # date-only change should be ignored?
+        datemaydiffer = resolvecommitoptions(ui, opts)
+
+        date = old.date()
         if opts.get('date'):
             date = dateutil.parsedate(opts.get('date'))
-        elif opts.get('currentdate'):
-            date = dateutil.makedate()
-        elif (ui.configbool('rewrite', 'update-timestamp')
-              and opts.get('currentdate') is None):
-            date = dateutil.makedate()
-            datemaydiffer = True
-        else:
-            date = old.date()
+        user = opts.get('user') or old.user()
 
         if len(old.parents()) > 1:
             # ctx.files() isn't reliable for merges, so fall back to the
diff --git a/hgext/amend.py b/hgext/amend.py
--- a/hgext/amend.py
+++ b/hgext/amend.py
@@ -36,9 +36,8 @@
      ('e', 'edit', None, _('invoke editor on commit messages')),
      ('i', 'interactive', None, _('use interactive mode')),
      ('n', 'note', '', _('store a note on the amend')),
-     ('D', 'currentdate', None,
-      _('record the current date as commit date')),
-    ] + cmdutil.walkopts + cmdutil.commitopts + cmdutil.commitopts2,
+    ] + cmdutil.walkopts + cmdutil.commitopts + cmdutil.commitopts2
+      + cmdutil.commitopts3,
     _('[OPTION]... [FILE]...'),
     helpcategory=command.CATEGORY_COMMITTING,
     inferrepo=True)



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


More information about the Mercurial-devel mailing list