[PATCH] histedit: delete to drop
Augie Fackler
raf at durin42.com
Wed Dec 9 20:05:07 CST 2015
> On Dec 9, 2015, at 6:19 PM, Mateusz Kwapich <mitrandir at fb.com> wrote:
>
>
>
>
>
>
> 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?
I meant your commit message, not the hint. :)
>
>
>
>>>
>>>> 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?
It’s still not trivial for novice users to recover hidden commits - especially if obsolete is off. In any event, I think I like the ‘dropmissing' a little better than ‘deletetodrop’.
Thanks for working on this!
>
>>
>>>> +
>>>> """
>>>>
>>>> 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20151209/204c991c/attachment.pgp>
More information about the Mercurial-devel
mailing list