[PATCH V2] histedit: delete to drop

Mateusz Kwapich mitrandir at fb.com
Fri Dec 11 18:34:23 CST 2015


This version doesn’t pass test-help.t. I’ll send V3.




On 12/11/15, 3:29 PM, "Mercurial-devel on behalf of Mateusz Kwapich" <mercurial-devel-bounces at selenic.com on behalf of mitrandir at fb.com> wrote:

># HG changeset patch
># User Mateusz Kwapich <mitrandir at fb.com>
># Date 1449876455 28800
>#      Fri Dec 11 15:27:35 2015 -0800
># Node ID cc9f2b9a222d3fb02c3f74edeac9e78a16d1863a
># Parent  94a215551b3f75c81052f6b490ecaf257a344185
>histedit: delete to drop
>
>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:
>@@ -1260,10 +1271,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-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