[PATCH] histedit: improve documentation and behaviour of dates (issue4820)

Augie Fackler raf at durin42.com
Sun Feb 19 20:23:27 EST 2017


On Sun, Feb 19, 2017 at 02:51:46PM +1100, Ben Schmidt wrote:
> # HG changeset patch
> # User Ben Schmidt <insightfuls at users.noreply.github.com>
> # Date 1487413828 -39600
> #      Sat Feb 18 21:30:28 2017 +1100
> # Node ID 4037ff1c9713d73b21ddc182580eacacba254ea7
> # Parent  1f51b4658f21bbb797e922d155c1046eddccf91d
> histedit: improve documentation and behaviour of dates (issue4820)
>
> This clarifies in the histedit documentation that the 'edit' action preserves
> the date and that the 'fold' action uses the later date. The documentation was
> previously silent on this issue which left users in doubt.

Wow, that's a great fix.

> It also adjusts and documents the new behaviour of 'roll'. It now fits nicely
> with the behaviour of 'commit --amend' and the 'edit' action, by discarding the
> date as well as the commit message of the second commit. Previously it used the
> later date, like 'fold', but this often wasn't desirable, for example, in the
> common use case of using 'roll' to add forgotten changes to a changeset
> (because 'hg add' was previously forgotten or not all changes were identified
> while using 'hg record').

This...could stand to be its own patch (generally any time a commit
message contains the word "also" that's a sign you've really got two patches).

I'm also not sure I'm sold: why shouldn't roll advance the date?

>
> diff --git a/hgext/histedit.py b/hgext/histedit.py
> --- a/hgext/histedit.py
> +++ b/hgext/histedit.py
> @@ -36,7 +36,7 @@
>   #  p, pick = use commit
>   #  e, edit = use commit, but stop for amending
>   #  f, fold = use commit, but combine it with the one above
> - #  r, roll = like fold, but discard this commit's description
> + #  r, roll = like fold, but discard this commit's description and date
>   #  d, drop = remove commit from history
>   #  m, mess = edit commit message without changing commit content
>   #
> @@ -58,7 +58,7 @@
>   #  p, pick = use commit
>   #  e, edit = use commit, but stop for amending
>   #  f, fold = use commit, but combine it with the one above
> - #  r, roll = like fold, but discard this commit's description
> + #  r, roll = like fold, but discard this commit's description and date
>   #  d, drop = remove commit from history
>   #  m, mess = edit commit message without changing commit content
>   #
> @@ -71,11 +71,11 @@
>   ***
>   Add delta
>
> -Edit the commit message to your liking, then close the editor. For
> -this example, let's assume that the commit message was changed to
> -``Add beta and delta.`` After histedit has run and had a chance to
> -remove any old or temporary revisions it needed, the history looks
> -like this::
> +Edit the commit message to your liking, then close the editor. The date used
> +for the commit will be the later of the two commits' dates. For this example,
> +let's assume that the commit message was changed to ``Add beta and delta.``
> +After histedit has run and had a chance to remove any old or temporary
> +revisions it needed, the history looks like this::
>
>   @  2[tip]   989b4d060121   2009-04-27 18:04 -0500   durin42
>   |    Add beta and delta.
> @@ -97,9 +97,10 @@
>  allowing you to edit files freely, or even use ``hg record`` to commit
>  some changes as a separate commit. When you're done, any remaining
>  uncommitted changes will be committed as well. When done, run ``hg
> -histedit --continue`` to finish this step. You'll be prompted for a
> -new commit message, but the default commit message will be the
> -original message for the ``edit`` ed revision.
> +histedit --continue`` to finish this step. If there are uncommitted
> +changes, you'll be prompted for a new commit message, but the default
> +commit message will be the original message for the ``edit`` ed
> +revision, and the date of the original commit will be preserved.
>
>  The ``message`` operation will give you a chance to revise a commit
>  message without changing the contents. It's a shortcut for doing
> @@ -724,6 +725,15 @@
>          """
>          return True
>
> +    def firstdate(self):
> +        """Returns true if the rule should preserve the date of the first
> +        change.
> +
> +        This exists mainly so that 'rollup' rules can be a subclass of
> +        'fold'.
> +        """
> +        return False
> +
>      def finishfold(self, ui, repo, ctx, oldctx, newnode, internalchanges):
>          parent = ctx.parents()[0].node()
>          repo.ui.pushbuffer()
> @@ -742,7 +752,10 @@
>                  [oldctx.description()]) + '\n'
>          commitopts['message'] = newmessage
>          # date
> -        commitopts['date'] = max(ctx.date(), oldctx.date())
> +        if self.firstdate():
> +            commitopts['date'] = ctx.date()
> +        else:
> +            commitopts['date'] = max(ctx.date(), oldctx.date())
>          extra = ctx.extra().copy()
>          # histedit_source
>          # note: ctx is likely a temporary commit but that the best we can do
> @@ -809,7 +822,7 @@
>          return True
>
>  @action(["roll", "r"],
> -        _("like fold, but discard this commit's description"))
> +        _("like fold, but discard this commit's description and date"))
>  class rollup(fold):
>      def mergedescs(self):
>          return False
> @@ -817,6 +830,9 @@
>      def skipprompt(self):
>          return True
>
> +    def firstdate(self):
> +        return True
> +
>  @action(["drop", "d"],
>          _('remove commit from history'))
>  class drop(histeditaction):
> @@ -884,11 +900,11 @@
>
>      - `mess` to reword the changeset commit message
>
> -    - `fold` to combine it with the preceding changeset
> +    - `fold` to combine it with the preceding changeset (using the later date)
>
> -    - `roll` like fold, but discarding this commit's description
> +    - `roll` like fold, but discarding this commit's description and date
>
> -    - `edit` to edit this changeset
> +    - `edit` to edit this changeset (preserving date)
>
>      There are a number of ways to select the root changeset:
>
> diff --git a/tests/test-histedit-arguments.t b/tests/test-histedit-arguments.t
> --- a/tests/test-histedit-arguments.t
> +++ b/tests/test-histedit-arguments.t
> @@ -72,7 +72,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>
>  Run on a revision not ancestors of the current working directory.
> @@ -308,7 +308,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>
>  Test --continue with --keep
> @@ -544,7 +544,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>
>    $ cd ..
> diff --git a/tests/test-histedit-bookmark-motion.t b/tests/test-histedit-bookmark-motion.t
> --- a/tests/test-histedit-bookmark-motion.t
> +++ b/tests/test-histedit-bookmark-motion.t
> @@ -78,7 +78,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>    $ hg histedit 1 --commands - --verbose << EOF | grep histedit
>    > pick 177f92b77385 2 c
> @@ -141,7 +141,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>    $ hg histedit 1 --commands - --verbose << EOF | grep histedit
>    > pick b346ab9a313d 1 c
> diff --git a/tests/test-histedit-commute.t b/tests/test-histedit-commute.t
> --- a/tests/test-histedit-commute.t
> +++ b/tests/test-histedit-commute.t
> @@ -72,7 +72,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>
>  edit the history
> @@ -350,7 +350,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>
>  should also work if a commit message is missing
> diff --git a/tests/test-histedit-edit.t b/tests/test-histedit-edit.t
> --- a/tests/test-histedit-edit.t
> +++ b/tests/test-histedit-edit.t
> @@ -478,5 +478,5 @@
>    #  p, fold = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
> diff --git a/tests/test-histedit-fold-non-commute.t b/tests/test-histedit-fold-non-commute.t
> --- a/tests/test-histedit-fold-non-commute.t
> +++ b/tests/test-histedit-fold-non-commute.t
> @@ -5,6 +5,12 @@
>    > histedit=
>    > EOF
>
> +  $ modwithdate ()
> +  > {
> +  >     echo $1 > $1
> +  >     hg ci -m $1 -d "$2 0"
> +  > }
> +
>    $ initrepo ()
>    > {
>    >     hg init $1
> @@ -14,12 +20,14 @@
>    >         hg add $x
>    >     done
>    >     hg ci -m 'Initial commit'
> -  >     for x in a b c d e f ; do
> -  >         echo $x > $x
> -  >         hg ci -m $x
> -  >     done
> +  >     modwithdate a 1
> +  >     modwithdate b 2
> +  >     modwithdate c 3
> +  >     modwithdate d 4
> +  >     modwithdate e 5
> +  >     modwithdate f 6
>    >     echo 'I can haz no commute' > e
> -  >     hg ci -m 'does not commute with e'
> +  >     hg ci -m 'does not commute with e' -d '7 0'
>    >     cd ..
>    > }
>
> @@ -34,48 +42,48 @@
>    $ hg log --template 'pick {node|short} {rev} {desc}\n' -r 5 >> $EDITED
>    $ hg log --template 'pick {node|short} {rev} {desc}\n' -r 6 >> $EDITED
>    $ cat $EDITED
> -  pick 65a9a84f33fd 3 c
> -  pick 00f1c5383965 4 d
> -  fold 39522b764e3d 7 does not commute with e
> -  pick 7b4e2f4b7bcd 5 e
> -  pick 500cac37a696 6 f
> +  pick 092e4ce14829 3 c
> +  pick ae78f4c9d74f 4 d
> +  fold 42abbb61bede 7 does not commute with e
> +  pick 7f3755409b00 5 e
> +  pick dd184f2faeb0 6 f
>
>  log before edit
>    $ hg log --graph
> -  @  changeset:   7:39522b764e3d
> +  @  changeset:   7:42abbb61bede
>    |  tag:         tip
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:07 1970 +0000
>    |  summary:     does not commute with e
>    |
> -  o  changeset:   6:500cac37a696
> +  o  changeset:   6:dd184f2faeb0
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:06 1970 +0000
>    |  summary:     f
>    |
> -  o  changeset:   5:7b4e2f4b7bcd
> +  o  changeset:   5:7f3755409b00
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:05 1970 +0000
>    |  summary:     e
>    |
> -  o  changeset:   4:00f1c5383965
> +  o  changeset:   4:ae78f4c9d74f
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:04 1970 +0000
>    |  summary:     d
>    |
> -  o  changeset:   3:65a9a84f33fd
> +  o  changeset:   3:092e4ce14829
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:03 1970 +0000
>    |  summary:     c
>    |
> -  o  changeset:   2:da6535b52e45
> +  o  changeset:   2:40ccdd8beb95
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:02 1970 +0000
>    |  summary:     b
>    |
> -  o  changeset:   1:c1f09da44841
> +  o  changeset:   1:cd997a145b29
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:01 1970 +0000
>    |  summary:     a
>    |
>    o  changeset:   0:1715188a53c7
> @@ -89,7 +97,7 @@
>    2 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    merging e
>    warning: conflicts while merging e! (edit, then use 'hg resolve --mark')
> -  Fix up the change (fold 39522b764e3d)
> +  Fix up the change (fold 42abbb61bede)
>    (hg histedit --continue to resume)
>
>  fix up
> @@ -113,7 +121,7 @@
>    HG: changed e
>    merging e
>    warning: conflicts while merging e! (edit, then use 'hg resolve --mark')
> -  Fix up the change (pick 7b4e2f4b7bcd)
> +  Fix up the change (pick 7f3755409b00)
>    (hg histedit --continue to resume)
>
>  just continue this time
> @@ -124,34 +132,34 @@
>    continue: hg histedit --continue
>    $ hg diff
>    $ hg histedit --continue 2>&1 | fixbundle
> -  7b4e2f4b7bcd: skipping changeset (no changes)
> +  7f3755409b00: skipping changeset (no changes)
>
>  log after edit
>    $ hg log --graph
> -  @  changeset:   5:d9cf42e54966
> +  @  changeset:   5:1300355b1a54
>    |  tag:         tip
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:06 1970 +0000
>    |  summary:     f
>    |
> -  o  changeset:   4:10486af2e984
> +  o  changeset:   4:e2ac33269083
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:07 1970 +0000
>    |  summary:     d
>    |
> -  o  changeset:   3:65a9a84f33fd
> +  o  changeset:   3:092e4ce14829
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:03 1970 +0000
>    |  summary:     c
>    |
> -  o  changeset:   2:da6535b52e45
> +  o  changeset:   2:40ccdd8beb95
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:02 1970 +0000
>    |  summary:     b
>    |
> -  o  changeset:   1:c1f09da44841
> +  o  changeset:   1:cd997a145b29
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:01 1970 +0000
>    |  summary:     a
>    |
>    o  changeset:   0:1715188a53c7
> @@ -175,7 +183,7 @@
>
>    $ cd ..
>
> -Repeat test using "roll", not "fold". "roll" folds in changes but drops message
> +Repeat test using "roll", not "fold". "roll" folds in changes but drops message and date
>
>    $ initrepo r2
>    $ cd r2
> @@ -189,48 +197,48 @@
>    $ hg log --template 'pick {node|short} {rev} {desc}\n' -r 5 >> $EDITED
>    $ hg log --template 'pick {node|short} {rev} {desc}\n' -r 6 >> $EDITED
>    $ cat $EDITED
> -  pick 65a9a84f33fd 3 c
> -  pick 00f1c5383965 4 d
> -  roll 39522b764e3d 7 does not commute with e
> -  pick 7b4e2f4b7bcd 5 e
> -  pick 500cac37a696 6 f
> +  pick 092e4ce14829 3 c
> +  pick ae78f4c9d74f 4 d
> +  roll 42abbb61bede 7 does not commute with e
> +  pick 7f3755409b00 5 e
> +  pick dd184f2faeb0 6 f
>
>  log before edit
>    $ hg log --graph
> -  @  changeset:   7:39522b764e3d
> +  @  changeset:   7:42abbb61bede
>    |  tag:         tip
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:07 1970 +0000
>    |  summary:     does not commute with e
>    |
> -  o  changeset:   6:500cac37a696
> +  o  changeset:   6:dd184f2faeb0
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:06 1970 +0000
>    |  summary:     f
>    |
> -  o  changeset:   5:7b4e2f4b7bcd
> +  o  changeset:   5:7f3755409b00
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:05 1970 +0000
>    |  summary:     e
>    |
> -  o  changeset:   4:00f1c5383965
> +  o  changeset:   4:ae78f4c9d74f
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:04 1970 +0000
>    |  summary:     d
>    |
> -  o  changeset:   3:65a9a84f33fd
> +  o  changeset:   3:092e4ce14829
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:03 1970 +0000
>    |  summary:     c
>    |
> -  o  changeset:   2:da6535b52e45
> +  o  changeset:   2:40ccdd8beb95
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:02 1970 +0000
>    |  summary:     b
>    |
> -  o  changeset:   1:c1f09da44841
> +  o  changeset:   1:cd997a145b29
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:01 1970 +0000
>    |  summary:     a
>    |
>    o  changeset:   0:1715188a53c7
> @@ -244,7 +252,7 @@
>    2 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    merging e
>    warning: conflicts while merging e! (edit, then use 'hg resolve --mark')
> -  Fix up the change (roll 39522b764e3d)
> +  Fix up the change (roll 42abbb61bede)
>    (hg histedit --continue to resume)
>
>  fix up
> @@ -255,7 +263,7 @@
>    $ hg histedit --continue 2>&1 | fixbundle | grep -v '2 files removed'
>    merging e
>    warning: conflicts while merging e! (edit, then use 'hg resolve --mark')
> -  Fix up the change (pick 7b4e2f4b7bcd)
> +  Fix up the change (pick 7f3755409b00)
>    (hg histedit --continue to resume)
>
>  just continue this time
> @@ -264,34 +272,34 @@
>    (no more unresolved files)
>    continue: hg histedit --continue
>    $ hg histedit --continue 2>&1 | fixbundle
> -  7b4e2f4b7bcd: skipping changeset (no changes)
> +  7f3755409b00: skipping changeset (no changes)
>
>  log after edit
>    $ hg log --graph
> -  @  changeset:   5:e7c4f5d4eb75
> +  @  changeset:   5:b538bcb461be
>    |  tag:         tip
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:06 1970 +0000
>    |  summary:     f
>    |
> -  o  changeset:   4:803d1bb561fc
> +  o  changeset:   4:317e37cb6d66
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:04 1970 +0000
>    |  summary:     d
>    |
> -  o  changeset:   3:65a9a84f33fd
> +  o  changeset:   3:092e4ce14829
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:03 1970 +0000
>    |  summary:     c
>    |
> -  o  changeset:   2:da6535b52e45
> +  o  changeset:   2:40ccdd8beb95
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:02 1970 +0000
>    |  summary:     b
>    |
> -  o  changeset:   1:c1f09da44841
> +  o  changeset:   1:cd997a145b29
>    |  user:        test
> -  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  date:        Thu Jan 01 00:00:01 1970 +0000
>    |  summary:     a
>    |
>    o  changeset:   0:1715188a53c7
> @@ -316,16 +324,16 @@
>  description is taken from rollup target commit
>
>    $ hg log --debug --rev 4
> -  changeset:   4:803d1bb561fceac3129ec778db9da249a3106fc3
> +  changeset:   4:317e37cb6d66c1c84628c00e5bf4c8c292831951
>    phase:       draft
> -  parent:      3:65a9a84f33fdeb1ad5679b3941ec885d2b24027b
> +  parent:      3:092e4ce14829f4974399ce4316d59f64ef0b6725
>    parent:      -1:0000000000000000000000000000000000000000
>    manifest:    4:b068a323d969f22af1296ec6a5ea9384cef437ac
>    user:        test
> -  date:        Thu Jan 01 00:00:00 1970 +0000
> +  date:        Thu Jan 01 00:00:04 1970 +0000
>    files:       d e
>    extra:       branch=default
> -  extra:       histedit_source=00f1c53839651fa5c76d423606811ea5455a79d0,39522b764e3d26103f08bd1fa2ccd3e3d7dbcf4e
> +  extra:       histedit_source=ae78f4c9d74ffa4b6cb5045001c303fe9204e890,42abbb61bede6f4366fa1e74a664343e5d558a70
>    description:
>    d
>
> diff --git a/tests/test-histedit-fold.t b/tests/test-histedit-fold.t
> --- a/tests/test-histedit-fold.t
> +++ b/tests/test-histedit-fold.t
> @@ -20,52 +20,60 @@
>
>  Simple folding
>  --------------------
> +  $ addwithdate ()
> +  > {
> +  >     echo $1 > $1
> +  >     hg add $1
> +  >     hg ci -m $1 -d "$2 0"
> +  > }
> +
>    $ initrepo ()
>    > {
>    >     hg init r
>    >     cd r
> -  >     for x in a b c d e f ; do
> -  >         echo $x > $x
> -  >         hg add $x
> -  >         hg ci -m $x
> -  >     done
> +  >     addwithdate a 1
> +  >     addwithdate b 2
> +  >     addwithdate c 3
> +  >     addwithdate d 4
> +  >     addwithdate e 5
> +  >     addwithdate f 6
>    > }
>
>    $ initrepo
>
>  log before edit
>    $ hg logt --graph
> -  @  5:652413bf663e f
> +  @  5:178e35e0ce73 f
>    |
> -  o  4:e860deea161a e
> +  o  4:1ddb6c90f2ee e
>    |
> -  o  3:055a42cdd887 d
> +  o  3:532247a8969b d
>    |
> -  o  2:177f92b77385 c
> +  o  2:ff2c9fa2018b c
>    |
> -  o  1:d2ae7f538514 b
> +  o  1:97d72e5f12c7 b
>    |
> -  o  0:cb9a9f314b8b a
> +  o  0:8580ff50825a a
>
>
> -  $ hg histedit 177f92b77385 --commands - 2>&1 <<EOF | fixbundle
> -  > pick e860deea161a e
> -  > pick 652413bf663e f
> -  > fold 177f92b77385 c
> -  > pick 055a42cdd887 d
> +  $ hg histedit ff2c9fa2018b --commands - 2>&1 <<EOF | fixbundle
> +  > pick 1ddb6c90f2ee e
> +  > pick 178e35e0ce73 f
> +  > fold ff2c9fa2018b c
> +  > pick 532247a8969b d
>    > EOF
>
>  log after edit
>    $ hg logt --graph
> -  @  4:9c277da72c9b d
> +  @  4:c4d7f3def76d d
>    |
> -  o  3:6de59d13424a f
> +  o  3:575228819b7e f
>    |
> -  o  2:ee283cb5f2d5 e
> +  o  2:505a591af19e e
>    |
> -  o  1:d2ae7f538514 b
> +  o  1:97d72e5f12c7 b
>    |
> -  o  0:cb9a9f314b8b a
> +  o  0:8580ff50825a a
>
>
>  post-fold manifest
> @@ -78,19 +86,19 @@
>    f
>
>
> -check histedit_source
> +check histedit_source, including that it uses the later date, from the first changeset
>
>    $ hg log --debug --rev 3
> -  changeset:   3:6de59d13424a8a13acd3e975514aed29dd0d9b2d
> +  changeset:   3:575228819b7e6ed69e8c0a6a383ee59a80db7358
>    phase:       draft
> -  parent:      2:ee283cb5f2d5955443f23a27b697a04339e9a39a
> +  parent:      2:505a591af19eed18f560af827b9e03d2076773dc
>    parent:      -1:0000000000000000000000000000000000000000
>    manifest:    3:81eede616954057198ead0b2c73b41d1f392829a
>    user:        test
> -  date:        Thu Jan 01 00:00:00 1970 +0000
> +  date:        Thu Jan 01 00:00:06 1970 +0000
>    files+:      c f
>    extra:       branch=default
> -  extra:       histedit_source=a4f7421b80f79fcc59fff01bcbf4a53d127dd6d3,177f92b773850b59254aa5e923436f921b55483b
> +  extra:       histedit_source=7cad1d7030207872dfd1c3a7cb430f24f2884086,ff2c9fa2018b15fa74b33363bda9527323e2a99f
>    description:
>    f
>    ***
> @@ -98,43 +106,43 @@
>
>
>
> -rollup will fold without preserving the folded commit's message
> +rollup will fold without preserving the folded commit's message or date
>
>    $ OLDHGEDITOR=$HGEDITOR
>    $ HGEDITOR=false
> -  $ hg histedit d2ae7f538514 --commands - 2>&1 <<EOF | fixbundle
> -  > pick d2ae7f538514 b
> -  > roll ee283cb5f2d5 e
> -  > pick 6de59d13424a f
> -  > pick 9c277da72c9b d
> +  $ hg histedit 97d72e5f12c7 --commands - 2>&1 <<EOF | fixbundle
> +  > pick 97d72e5f12c7 b
> +  > roll 505a591af19e e
> +  > pick 575228819b7e f
> +  > pick c4d7f3def76d d
>    > EOF
>
>    $ HGEDITOR=$OLDHGEDITOR
>
>  log after edit
>    $ hg logt --graph
> -  @  3:c4a9eb7989fc d
> +  @  3:bab801520cec d
>    |
> -  o  2:8e03a72b6f83 f
> +  o  2:58c8f2bfc151 f
>    |
> -  o  1:391ee782c689 b
> +  o  1:5d939c56c72e b
>    |
> -  o  0:cb9a9f314b8b a
> +  o  0:8580ff50825a a
>
>
>  description is taken from rollup target commit
>
>    $ hg log --debug --rev 1
> -  changeset:   1:391ee782c68930be438ccf4c6a403daedbfbffa5
> +  changeset:   1:5d939c56c72e77e29f5167696218e2131a40f5cf
>    phase:       draft
> -  parent:      0:cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
> +  parent:      0:8580ff50825a50c8f716709acdf8de0deddcd6ab
>    parent:      -1:0000000000000000000000000000000000000000
>    manifest:    1:b5e112a3a8354e269b1524729f0918662d847c38
>    user:        test
> -  date:        Thu Jan 01 00:00:00 1970 +0000
> +  date:        Thu Jan 01 00:00:02 1970 +0000
>    files+:      b e
>    extra:       branch=default
> -  extra:       histedit_source=d2ae7f538514cd87c17547b0de4cea71fe1af9fb,ee283cb5f2d5955443f23a27b697a04339e9a39a
> +  extra:       histedit_source=97d72e5f12c7e84f85064aa72e5a297142c36ed9,505a591af19eed18f560af827b9e03d2076773dc
>    description:
>    b
>
> @@ -163,13 +171,13 @@
>    > EOF
>
>    $ rm -f .hg/last-message.txt
> -  $ hg status --rev '8e03a72b6f83^1::c4a9eb7989fc'
> +  $ hg status --rev '58c8f2bfc151^1::bab801520cec'
>    A c
>    A d
>    A f
> -  $ HGEDITOR="sh $TESTTMP/editor.sh" hg histedit 8e03a72b6f83 --commands - 2>&1 <<EOF
> -  > pick 8e03a72b6f83 f
> -  > fold c4a9eb7989fc d
> +  $ HGEDITOR="sh $TESTTMP/editor.sh" hg histedit 58c8f2bfc151 --commands - 2>&1 <<EOF
> +  > pick 58c8f2bfc151 f
> +  > fold bab801520cec d
>    > EOF
>    allow non-folding commit
>    ==== before editing
> @@ -209,37 +217,37 @@
>    $ cd ..
>    $ rm -r r
>
> -folding preserves initial author
> ---------------------------------
> +folding preserves initial author but uses later date
> +----------------------------------------------------
>
>    $ initrepo
>
> -  $ hg ci --user "someone else" --amend --quiet
> +  $ hg ci -d '7 0' --user "someone else" --amend --quiet
>
>  tip before edit
>    $ hg log --rev .
> -  changeset:   5:a00ad806cb55
> +  changeset:   5:10c36dd37515
>    tag:         tip
>    user:        someone else
> -  date:        Thu Jan 01 00:00:00 1970 +0000
> +  date:        Thu Jan 01 00:00:07 1970 +0000
>    summary:     f
>
>
>    $ hg --config progress.debug=1 --debug \
> -  > histedit e860deea161a --commands - 2>&1 <<EOF | \
> +  > histedit 1ddb6c90f2ee --commands - 2>&1 <<EOF | \
>    > egrep 'editing|unresolved'
> -  > pick e860deea161a e
> -  > fold a00ad806cb55 f
> +  > pick 1ddb6c90f2ee e
> +  > fold 10c36dd37515 f
>    > EOF
> -  editing: pick e860deea161a 4 e 1/2 changes (50.00%)
> -  editing: fold a00ad806cb55 5 f 2/2 changes (100.00%)
> +  editing: pick 1ddb6c90f2ee 4 e 1/2 changes (50.00%)
> +  editing: fold 10c36dd37515 5 f 2/2 changes (100.00%)
>
> -tip after edit
> +tip after edit, which should use the later date, from the second changeset
>    $ hg log --rev .
> -  changeset:   4:698d4e8040a1
> +  changeset:   4:e4f3ec5d0b40
>    tag:         tip
>    user:        test
> -  date:        Thu Jan 01 00:00:00 1970 +0000
> +  date:        Thu Jan 01 00:00:07 1970 +0000
>    summary:     e
>
>
> diff --git a/tests/test-histedit-obsolete.t b/tests/test-histedit-obsolete.t
> --- a/tests/test-histedit-obsolete.t
> +++ b/tests/test-histedit-obsolete.t
> @@ -136,7 +136,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>    $ hg histedit 1 --commands - --verbose <<EOF | grep histedit
>    > pick 177f92b77385 2 c
> diff --git a/tests/test-histedit-outgoing.t b/tests/test-histedit-outgoing.t
> --- a/tests/test-histedit-outgoing.t
> +++ b/tests/test-histedit-outgoing.t
> @@ -54,7 +54,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>    $ cd ..
>
> @@ -88,7 +88,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>    $ cd ..
>
> @@ -114,7 +114,7 @@
>    #  p, pick = use commit
>    #  d, drop = remove commit from history
>    #  f, fold = use commit, but combine it with the one above
> -  #  r, roll = like fold, but discard this commit's description
> +  #  r, roll = like fold, but discard this commit's description and date
>    #
>
>  test to check number of roots in outgoing revisions
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list