[PATCH V3] histedit: delete to drop

Augie Fackler raf at durin42.com
Fri Dec 18 10:25:56 CST 2015


On Tue, Dec 15, 2015 at 01:42:20PM -0800, Mateusz Kwapich wrote:
> # HG changeset patch
> # User Mateusz Kwapich <mitrandir at fb.com>
> # Date 1450214829 28800
> #      Tue Dec 15 13:27:09 2015 -0800
> # Node ID 1b06a38d0bc02461481d9b23e5d3adf41e852e46
> # Parent  3870f0e279ebcab96996d796c073b69d0c2f45d2
> histedit: delete to drop

Queued, many thanks. Sorry for the slow review on this, it's been a
busy week for me.

>
> The default behaviour to forbid this makes a lot of sense for novice users
> because it's safeguarding them from dangerous behavior but making it
> configurable will be apprieciated by power users in at least one big
> organization.
>
> It allows an user to look an histedit rules from declarative perspective and
> make the rules reflect the state after histedit.  If we can move lines t move
> commits why can't we drop lines to drop commits?
>
> Let's put this behind config knob and inform users about this feature the very
> moment they are trying to use it so they can choose desired behaviour.
>
> diff --git a/hgext/histedit.py b/hgext/histedit.py
> --- a/hgext/histedit.py
> +++ b/hgext/histedit.py
> @@ -143,6 +143,9 @@
>  repository that Mercurial does not detect to be related to the source
>  repo, you can add a ``--force`` option.
>
> +Config
> +------
> +
>  Histedit rule lines are truncated to 80 characters by default. You
>  can customize this behavior by setting a different length in your
>  configuration file::
> @@ -156,6 +159,14 @@
>
>    [histedit]
>    defaultrev = only(.) & draft()
> +
> +By default each edited revision needs to be present in histedit commands.
> +To remove revision you need to use ``drop`` operation. You can configure
> +the drop to be implicit for missing commits by adding:
> +
> +  [histedit]
> +  dropmissing = True
> +
>  """
>
>  try:
> @@ -1262,10 +1273,17 @@
>                          ha[:12])
>              seen.add(ha)
>      missing = sorted(expected - seen)  # sort to stabilize output
> -    if missing:
> +
> +    if state.repo.ui.configbool('histedit', 'dropmissing'):
> +        drops = [drop(state, node.bin(n)) for n in missing]
> +        # put the in the beginning so they execute immediately and
> +        # don't show in the edit-plan in the future
> +        actions[:0] = drops
> +    elif missing:
>          raise error.Abort(_('missing rules for changeset %s') %
>                  missing[0][:12],
> -                hint=_('use "drop %s" to discard the change') % missing[0][:12])
> +                hint=_('use "drop %s" to discard, see also: '
> +                       '"hg help -e histedit.config"') % missing[0][:12])
>
>  def newnodestoabort(state):
>      """process the list of replacements to return
> 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
> @@ -164,7 +164,7 @@
>    > pick 08d98a8350f3 4 five
>    > EOF
>    abort: missing rules for changeset c8e68270e35a
> -  (use "drop c8e68270e35a" to discard the change)
> +  (use "drop c8e68270e35a" to discard, see also: "hg help -e histedit.config")
>    [255]
>
>  Test that extra revisions are detected
> diff --git a/tests/test-histedit-drop.t b/tests/test-histedit-drop.t
> --- a/tests/test-histedit-drop.t
> +++ b/tests/test-histedit-drop.t
> @@ -151,4 +151,27 @@
>       summary:     a
>
>
> -  $ cd ..
> +  $ hg histedit cb9a9f314b8b --commands - 2>&1 << EOF | fixbundle
> +  > pick cb9a9f314b8b a
> +  > pick ee283cb5f2d5 e
> +  > EOF
> +  abort: missing rules for changeset a4f7421b80f7
> +  (use "drop a4f7421b80f7" to discard, see also: "hg help -e histedit.config")
> +  $ hg --config histedit.dropmissing=True histedit  cb9a9f314b8b --commands - 2>&1 << EOF | fixbundle
> +  > pick cb9a9f314b8b a
> +  > pick ee283cb5f2d5 e
> +  > EOF
> +  0 files updated, 0 files merged, 3 files removed, 0 files unresolved
> +  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  $ hg log --graph
> +  @  changeset:   1:e99c679bf03e
> +  |  tag:         tip
> +  |  user:        test
> +  |  date:        Thu Jan 01 00:00:00 1970 +0000
> +  |  summary:     e
> +  |
> +  o  changeset:   0:cb9a9f314b8b
> +     user:        test
> +     date:        Thu Jan 01 00:00:00 1970 +0000
> +     summary:     a
> +
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list