Patchwork D5491: amend: added config option to update time to current and avoid update when other attribs are unchanged (issue5828)

login
register
mail settings
Submitter phabricator
Date Jan. 5, 2019, 8:37 p.m.
Message ID <056256bb60afc32d535f1e477e3593aa@localhost.localdomain>
Download mbox | patch
Permalink /patch/37485/
State Not Applicable
Headers show

Comments

phabricator - Jan. 5, 2019, 8:37 p.m.
taapas1128 updated this revision to Diff 13012.
taapas1128 retitled this revision from "amend: added config option to update time to current in hg amend (issue5828)" to "amend: added config option to update time to current and avoid update when other attribs are unchanged (issue5828)".

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D5491?vs=13010&id=13012

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

AFFECTED FILES
  mercurial/cmdutil.py
  mercurial/configitems.py
  mercurial/help/config.txt
  tests/test-amend.t

CHANGE DETAILS




To: taapas1128, #hg-reviewers
Cc: pulkit, mercurial-devel

Patch

diff --git a/tests/test-amend.t b/tests/test-amend.t
--- a/tests/test-amend.t
+++ b/tests/test-amend.t
@@ -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
diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt
--- a/mercurial/help/config.txt
+++ b/mercurial/help/config.txt
@@ -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 --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -961,6 +961,9 @@ 
 coreconfigitem('push', 'pushvars.server',
     default=False,
 )
+coreconfigitem('rewrite', 'update-timestamp',
+    default=False,
+)
 coreconfigitem('storage', 'new-repo-backend',
     default='revlogv1',
 )
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -2444,6 +2444,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)
 
@@ -2559,13 +2565,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'):