[PATCH evolve-ext] fold: disallow multiple revisions without --exact

Pierre-Yves David pierre-yves.david at ens-lyon.org
Sat Dec 17 02:53:22 EST 2016



On 11/05/2016 12:58 AM, Martin von Zweigbergk via Mercurial-devel wrote:
> # HG changeset patch
> # User Martin von Zweigbergk <martinvonz at google.com>
> # Date 1478303512 25200
> #      Fri Nov 04 16:51:52 2016 -0700
> # Node ID bb80851fe9a6e14263f0076074108556377141f9
> # Parent  cb2bac3253fbd52894ffcb4719a148fe6a3da38b
> fold: disallow multiple revisions without --exact
>
> It's very easy to think that "hg fold 4::6" will fold exactly those
> revisions. In reality, it will fold those *and* any revisions between
> them and the working copy. It seems very likely that users who pass
> more than one revision wants to fold exactly those revisions, so let's
> abort and hint that they may be looking for --exact.

That seems a good first step to take in all cases. Unfortunately, the 
patch fails to apply for an unclear reason. Can you send me a new version?

In addition, I suggest the following changes:

- we should allow multiple revision if '.' is one of them. They will be 
no surprise in this case.

- update to the commit message,

abort: multiple revisions specified
(do you want --exact?, see "hg help fold" for details)


(I'll tell more about possible changes to the default in the rest of the 
thread)

> diff -r cb2bac3253fb -r bb80851fe9a6 hgext/evolve.py
> --- a/hgext/evolve.py    Wed Nov 02 18:56:44 2016 +0100
> +++ b/hgext/evolve.py    Fri Nov 04 16:51:52 2016 -0700
> @@ -3115,6 +3115,11 @@
>      revs = scmutil.revrange(repo, revs)
>
>      if not opts['exact']:
> +        if len(revs) > 1:
> +            raise error.Abort(_("cannot fold from working directory to "
> +                                "more than one revision"),
> +                              hint=_("did you mean to use --exact?"))
> +
>          # Try to extend given revision starting from the working directory
>          extrevs = repo.revs('(%ld::.) or (.::%ld)', revs, revs)
>          discardedrevs = [r for r in revs if r not in extrevs]
> diff -r cb2bac3253fb -r bb80851fe9a6 tests/test-evolve.t
> --- a/tests/test-evolve.t    Wed Nov 02 18:56:44 2016 +0100
> +++ b/tests/test-evolve.t    Fri Nov 04 16:51:52 2016 -0700
> @@ -688,7 +688,11 @@
>    $ hg fold -r 4 -r 6 --exact
>    abort: cannot fold non-linear revisions (multiple roots given)
>    [255]
> -  $ hg fold 10 1
> +  $ hg fold 4::5
> +  abort: cannot fold from working directory to more than one revision
> +  (did you mean to use --exact?)
> +  [255]
> +  $ hg fold 1
>    abort: cannot fold non-linear revisions
>    (given revisions are unrelated to parent of working directory)
>    [255]
> diff -r cb2bac3253fb -r bb80851fe9a6 tests/test-userguide.t
> --- a/tests/test-userguide.t    Wed Nov 02 18:56:44 2016 +0100
> +++ b/tests/test-userguide.t    Fri Nov 04 16:51:52 2016 -0700
> @@ -109,7 +109,7 @@
>    7:05e61aab8294  step 1
>    8:be6d5bc8e4cc  step 2
>    9:35f432d9f7c1  step 3
> -  $ hg fold -d '0 0' -m 'fix bug 64' -r 7::
> +  $ hg fold -d '0 0' -m 'fix bug 64' -r 7
>    3 changesets folded
>    1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>    $ hg --hidden shortlog -G -r 6::


-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list