# HG changeset patch # User Taapas Agrawal # Date 1546613837 -19800 # Node ID 79f8f032c706dc5b785b46bcf2354ba15f641d3a # Parent 685cf59a134f3a75e40aad312ac4b9cdf7ac4c00 amend: add config option to update time to current in hg amend (issue5828) The given config option i.e. `rewrite.update-timestamp` updates date to current when //True//. However when only date is to be updated to current with the working directory clean and no other attributes changing then it does not amend as stated in issue 5828. Further when `--date` flag is specified along with the new config option then `--date` is given priority over the config option. Differential Revision: https://phab.mercurial-scm.org/D5491 diff -r 685cf59a134f -r 79f8f032c706 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Sun Jan 06 15:25:10 2019 -0500 +++ b/mercurial/cmdutil.py Fri Jan 04 20:27:17 2019 +0530 @@ -2443,6 +2443,12 @@ user = opts.get('user') or old.user() date = opts.get('date') or old.date() + if ui.configbool('rewrite', 'update-timestamp'): + if opts.get('date'): + pass + else: + date = dateutil.makedate() + # Parse the date to allow comparison between date and old.date() date = dateutil.parsedate(date) @@ -2558,13 +2564,15 @@ if ((not changes) and newdesc == old.description() and user == old.user() - and date == old.date() and pureextra == old.extra()): # nothing changed. continuing here would create a new node # anyway because of the amend_source noise. # # This not what we expect from amend. - return old.node() + if (date == old.date() or + (ui.configbool('rewrite', 'update-timestamp') and + not opts.get('date'))): + return old.node() commitphase = None if opts.get('secret'): diff -r 685cf59a134f -r 79f8f032c706 mercurial/configitems.py --- a/mercurial/configitems.py Sun Jan 06 15:25:10 2019 -0500 +++ b/mercurial/configitems.py Fri Jan 04 20:27:17 2019 +0530 @@ -991,6 +991,9 @@ default='1MB', alias=[('experimental', 'mmapindexthreshold')], ) +coreconfigitem('rewrite', 'update-timestamp', + default=False, +) coreconfigitem('storage', 'new-repo-backend', default='revlogv1', ) diff -r 685cf59a134f -r 79f8f032c706 mercurial/help/config.txt --- a/mercurial/help/config.txt Sun Jan 06 15:25:10 2019 -0500 +++ b/mercurial/help/config.txt Fri Jan 04 20:27:17 2019 +0530 @@ -1806,6 +1806,13 @@ Alias definitions for revsets. See :hg:`help revsets` for details. +``rewrite`` +----------- + +``update-timestamp`` + If true, updates the date and time of the changeset to current. It is only + applicable for hg amend in current version. + ``storage`` ----------- diff -r 685cf59a134f -r 79f8f032c706 tests/test-amend.t --- a/tests/test-amend.t Sun Jan 06 15:25:10 2019 -0500 +++ b/tests/test-amend.t Fri Jan 04 20:27:17 2019 +0530 @@ -365,3 +365,128 @@ $ hg amend #endif +========================================== +Test update-timestamp config option| +========================================== + $ cat >> testmocks.py << EOF + > # mock out util.makedate() to supply testable values + > import os + > from mercurial import pycompat, util + > from mercurial.utils import dateutil + > + > def mockmakedate(): + > filename = os.path.join(os.environ['TESTTMP'], 'testtime') + > try: + > with open(filename, 'rb') as timef: + > time = float(timef.read()) + 1 + > except IOError: + > time = 0.0 + > with open(filename, 'wb') as timef: + > timef.write(pycompat.bytestr(time)) + > return (time, 0) + > + > dateutil.makedate = mockmakedate + > EOF + + $ cat >> $HGRCPATH << EOF + > [extensions] + > amend= + > testmocks=`pwd`/testmocks.py + > EOF + + $ hg init $TESTTMP/repo5 + $ cd $TESTTMP/repo5 + $ echo a>a + $ hg ci -Am 'commit 1' + adding a +#if obsstore-on + +When updatetimestamp is False + + $ hg amend --date '1997-1-1 0:1' + $ hg log --limit 1 + changeset: 1:036a159be19d + tag: tip + parent: -1:000000000000 + user: test + date: Wed Jan 01 00:01:00 1997 +0000 + summary: commit 1 + + When update-timestamp is True and no other change than the date + + $ hg amend --config rewrite.update-timestamp=True + nothing changed + [1] + $ hg log --limit 1 + changeset: 1:036a159be19d + tag: tip + parent: -1:000000000000 + user: test + date: Wed Jan 01 00:01:00 1997 +0000 + summary: commit 1 + +When update-timestamp is True and there is other change than the date + $ hg amend --user foobar --config rewrite.update-timestamp=True + $ hg log --limit 1 + changeset: 2:3ba48b892280 + tag: tip + parent: -1:000000000000 + user: foobar + date: Thu Jan 01 00:00:02 1970 +0000 + summary: commit 1 + + +When date option is applicable and update-timestamp is True + $ hg amend --date '1998-1-1 0:1' --config rewrite.update-timestamp=True + $ hg log --limit 1 + changeset: 3:626aee031885 + tag: tip + parent: -1:000000000000 + user: foobar + date: Thu Jan 01 00:01:00 1998 +0000 + summary: commit 1 + +#else + +When updatetimestamp is False + + $ hg amend --date '1997-1-1 0:1' + $ hg log --limit 1 + changeset: 0:036a159be19d + tag: tip + user: test + date: Wed Jan 01 00:01:00 1997 +0000 + summary: commit 1 + + When update-timestamp is True and no other change than the date + + $ hg amend --config rewrite.update-timestamp=True + nothing changed + [1] + $ hg log --limit 1 + changeset: 0:036a159be19d + tag: tip + user: test + date: Wed Jan 01 00:01:00 1997 +0000 + summary: commit 1 + +When update-timestamp is True and there is other change than the date + $ hg amend --user foobar --config rewrite.update-timestamp=True + $ hg log --limit 1 + changeset: 0:3ba48b892280 + tag: tip + user: foobar + date: Thu Jan 01 00:00:02 1970 +0000 + summary: commit 1 + + +When date option is applicable and update-timestamp is True + $ hg amend --date '1998-1-1 0:1' --config rewrite.update-timestamp=True + $ hg log --limit 1 + changeset: 0:626aee031885 + tag: tip + user: foobar + date: Thu Jan 01 00:01:00 1998 +0000 + summary: commit 1 + +#endif