changeset 42903:66048f6b5d0d

uncommit: add options to update to the current user or current date These are also from the evolve extension's version of uncommit. I tried adding validation that both forms of user or date can't be specified at the same time, but that fails because these show up in `opts` with a None value whether or not the option was given on the command line. Presumably that means the conditional in `resolvecommitoptions` could be simplified. But this is how both evolve and MQ handle it. Differential Revision: https://phab.mercurial-scm.org/D6828
author Matt Harbison <matt_harbison@yahoo.com>
date Sat, 07 Sep 2019 23:20:11 -0400
parents ff1ff2aae132
children d26a6706b070
files hgext/uncommit.py mercurial/cmdutil.py mercurial/commands.py tests/test-uncommit.t
diffstat 4 files changed, 23 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/uncommit.py	Sat Sep 07 13:44:29 2019 -0400
+++ b/hgext/uncommit.py	Sat Sep 07 23:20:11 2019 -0400
@@ -112,7 +112,8 @@
     [('', 'keep', None, _('allow an empty commit after uncommiting')),
      ('', 'allow-dirty-working-copy', False,
     _('allow uncommit with outstanding changes'))
-    ] + commands.walkopts + commands.commitopts + commands.commitopts2,
+    ] + commands.walkopts + commands.commitopts + commands.commitopts2
+    + commands.commitopts3,
     _('[OPTION]... [FILE]...'),
     helpcategory=command.CATEGORY_CHANGE_MANAGEMENT)
 def uncommit(ui, repo, *pats, **opts):
@@ -128,6 +129,8 @@
     """
     opts = pycompat.byteskwargs(opts)
 
+    cmdutil.resolvecommitoptions(ui, opts)
+
     with repo.wlock(), repo.lock():
 
         m, a, r, d = repo.status()[:4]
--- a/mercurial/cmdutil.py	Sat Sep 07 13:44:29 2019 -0400
+++ b/mercurial/cmdutil.py	Sat Sep 07 23:20:11 2019 -0400
@@ -100,6 +100,13 @@
      _('record the specified user as committer'), _('USER')),
 ]
 
+commitopts3 = [
+    (b'D', b'current-date', None,
+     _(b'record the current date as commit date')),
+    (b'U', b'current-user', None,
+     _(b'record the current user as committer')),
+]
+
 formatteropts = [
     ('T', 'template', '',
      _('display with template'), _('TEMPLATE')),
@@ -175,6 +182,15 @@
 # editor text
 _linebelow = "^HG: ------------------------ >8 ------------------------$"
 
+def resolvecommitoptions(ui, opts):
+    """modify commit options dict to handle related options
+    """
+    # N.B. this is extremely similar to setupheaderopts() in mq.py
+    if not opts.get(b'date') and opts.get(b'current_date'):
+        opts[b'date'] = b'%d %d' % dateutil.makedate()
+    if not opts.get(b'user') and opts.get(b'current_user'):
+        opts[b'user'] = ui.username()
+
 def ishunk(x):
     hunkclasses = (crecordmod.uihunk, patch.recordhunk)
     return isinstance(x, hunkclasses)
--- a/mercurial/commands.py	Sat Sep 07 13:44:29 2019 -0400
+++ b/mercurial/commands.py	Sat Sep 07 23:20:11 2019 -0400
@@ -118,6 +118,7 @@
 walkopts = cmdutil.walkopts
 commitopts = cmdutil.commitopts
 commitopts2 = cmdutil.commitopts2
+commitopts3 = cmdutil.commitopts3
 formatteropts = cmdutil.formatteropts
 templateopts = cmdutil.templateopts
 logopts = cmdutil.logopts
--- a/tests/test-uncommit.t	Sat Sep 07 13:44:29 2019 -0400
+++ b/tests/test-uncommit.t	Sat Sep 07 23:20:11 2019 -0400
@@ -42,6 +42,8 @@
    -l --logfile FILE             read commit message from file
    -d --date DATE                record the specified date as commit date
    -u --user USER                record the specified user as committer
+   -D --current-date             record the current date as commit date
+   -U --current-user             record the current user as committer
   
   (some details hidden, use --verbose to show complete help)