[PATCH] histedit: delete to drop

Mateusz Kwapich mitrandir at fb.com
Wed Dec 9 17:19:49 CST 2015






On 12/9/15, 12:32 PM, "Mercurial-devel on behalf of Mykola Nikishov" <mercurial-devel-bounces at selenic.com on behalf of mn at mn.com.ua> wrote:

>Augie Fackler <raf at durin42.com> writes:
>
>> On Tue, Dec 08, 2015 at 03:45:42PM -0800, Mateusz Kwapich wrote:
>>> # HG changeset patch
>>> # User Mateusz Kwapich <mitrandir at fb.com>
>>> # Date 1449618250 28800
>>> #      Tue Dec 08 15:44:10 2015 -0800
>>> # Node ID 764d610ac682526bdfc1fefd061e8ab24b9c8966
>>> # Parent  0b0425aed2d4c035f3cfd1c7b1a32351b1948b40
>>> histedit: delete to drop
>>>
>>> Some users prefer the histedit to drop the missing lines instead
>>> of requiring the drop command.
>>>
>>> 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?
>>
>> Is it worth mentioning in the log message that it's an intentional
>> footgun preventer that you have to be explicit about drop? Perhaps
>> also some warning verbiage in the documentation of the option about
>> how it means missing rule lines will result in deleted changes.

I’d be happy to include more information in the log message but I heard that we are trying
to keep all hints to one line. What do you suggest?



>>
>>> 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:
>
>What about:
>
>    By default each edited revision needs to be present in histedit commands
>    and to remove revision you need to use ``drop`` operation. You can
>    implicitly drop missing commits by adding:
Will use it.
>
>>> +
>>> +  [histedit]
>>> +  deletetodrop = True
>
>While this feature seems too dangerous to me, 'dropmissing' sounds better.

It’s not as scary as it sounds - nowadays it’s easy to recover stripped commits.
I’m fine with both names for the config option. Augie: do you have any preference?

>
>>> +
>>>  """
>>>
>>>  try:
>>> @@ -1261,10 +1272,17 @@
>>>                          ha[:12])
>>>              seen.add(ha)
>>>      missing = sorted(expected - seen)  # sort to stabilize output
>>> -    if missing:
>>> +
>>> +    if state.repo.ui.configbool('histedit', 'deletetodrop'):
>>> +        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-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.deletetodrop=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
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at selenic.com
>> https://selenic.com/mailman/listinfo/mercurial-devel
>
>_______________________________________________
>Mercurial-devel mailing list
>Mercurial-devel at selenic.com
>https://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list