Submitter | Mateusz Kwapich |
---|---|
Date | Dec. 15, 2015, 9:42 p.m. |
Message ID | <1b06a38d0bc02461481d.1450215740@mitrandir-mbp1.local> |
Download | mbox | patch |
Permalink | /patch/12059/ |
State | Accepted |
Delegated to: | Augie Fackler |
Headers | show |
Comments
On Tue, Dec 15, 2015 at 01:42:20PM -0800, Mateusz Kwapich wrote: > # HG changeset patch > # User Mateusz Kwapich <mitrandir@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@selenic.com > https://selenic.com/mailman/listinfo/mercurial-devel
Patch
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 +