# HG changeset patch # User Pierre-Yves David # Date 1438981159 25200 # Node ID bc4c7b1bb793aa497505d0397d86a1c5857a1ea1 # Parent 9603aa1ecdfd54b0d86e262318a72e0a2ffeb6cc# Parent 72eab894a89d636429f7487a9a6853237cb11bbd merge with stable diff -r 72eab894a89d -r bc4c7b1bb793 README --- a/README Fri Aug 07 11:39:51 2015 -0700 +++ b/README Fri Aug 07 13:59:19 2015 -0700 @@ -51,6 +51,10 @@ Changelog ========= +5.2.0 -- + +- split: add a new command to split changesets + 5.2.0 -- 2015-06-25 - evolve: gain a --rev option to control what revisions to evolve (issue4391) diff -r 72eab894a89d -r bc4c7b1bb793 hgext/evolve.py --- a/hgext/evolve.py Fri Aug 07 11:39:51 2015 -0700 +++ b/hgext/evolve.py Fri Aug 07 13:59:19 2015 -0700 @@ -2137,6 +2137,8 @@ ('r', 'rev', [], _("revisions to prune")), ('k', 'keep', None, _("does not modify working copy during prune")), ('', 'biject', False, _("do a 1-1 map between rev and successor ranges")), + ('', 'fold', False, _("record a fold (multiple precursors, one successors)")), + ('', 'split', False, _("record a split (on precursor, multiple successors)")), ('B', 'bookmark', '', _("remove revs only reachable from given" " bookmark"))] + metadataopts, _('[OPTION] [-r] REV...')) @@ -2159,12 +2161,22 @@ revisions to prune and successor changesets. This option may be removed in a future release (with the functionality absorbed automatically). + If you specify multiple revisions in --succ, you are recording a "split" + and have to acknowledge it by usng --split. The same logic apply when you + prune multiple changesets with a single successors, this will record a + "fold" requires a --fold flag. """ revs = scmutil.revrange(repo, list(revs) + opts.get('rev')) succs = opts['new'] + opts['succ'] bookmark = opts.get('bookmark') metadata = _getmetadata(**opts) biject = opts.get('biject') + fold = opts.get('fold') + split = opts.get('split') + + options = [o for o in ('biject', 'fold', 'split') if opts.get(o)] + if 1 < len(options): + raise util.Abort(_("can only specify one of %s") % ', '.join(options)) if bookmark: marks,revs = _reachablefrombookmark(repo, revs, bookmark) @@ -2204,15 +2216,20 @@ if not biject and len(sucs) > 1 and len(precs) > 1: msg = "Can't use multiple successors for multiple precursors" raise util.Abort(msg) - - if biject and len(sucs) != len(precs): + elif biject and len(sucs) != len(precs): msg = "Can't use %d successors for %d precursors" \ % (len(sucs), len(precs)) raise util.Abort(msg) - - relations = [(p, sucs) for p in precs] - if biject: + elif (len(precs) == 1 and len(sucs) > 1) and not split: + msg = "please add --split if you want to do a split" + raise util.Abort(msg) + elif len(sucs) == 1 and len(precs) > 1 and not fold: + msg = "please add --fold if you want to do a fold" + raise util.Abort(msg) + elif biject: relations = [(p, (s,)) for p, s in zip(precs, sucs)] + else: + relations = [(p, sucs) for p in precs] wdp = repo['.'] @@ -2537,6 +2554,76 @@ finally: lockmod.release(lock, wlock) +@command('^split', + [('r', 'rev', [], _("revision to fold")), + ] + commitopts + commitopts2, + _('hg split [OPTION]... [-r] REV')) +def cmdsplit(ui, repo, *revs, **opts): + """Split the current commit using interactive selection + + By default, split the current revision by prompting for all its hunk to be + redistributed into new changesets. + + Use --rev for splitting a given changeset instead. + """ + tr = wlock = lock = None + newcommits = [] + + revopt = opts.get('rev') + if revopt: + revs = scmutil.revrange(repo, revopt) + if len(revs) != 1: + raise util.Abort(_("you can only specify one revision to split")) + else: + rev = list(revs)[0] + commands.update(ui, repo, rev) + else: + rev = '.' + + try: + wlock = repo.wlock() + lock = repo.lock() + cmdutil.bailifchanged(repo) + tr = repo.transaction('split') + ctx = repo[rev] + r = ctx.rev() + disallowunstable = not obsolete.isenabled(repo, + obsolete.allowunstableopt) + if disallowunstable: + # XXX We should check head revs + if repo.revs("(%d::) - %d", rev, rev): + raise util.Abort(_("cannot split commit: %s not a head" % ctx)) + + if len(ctx.parents()) > 1: + raise util.Abort(_("cannot split merge commits")) + prev = ctx.p1() + hg.update(repo, prev) + + commands.revert(ui, repo, rev=r, all=True) + def haschanges(): + modified, added, removed, deleted = repo.status()[:4] + return modified or added or removed or deleted + while haschanges(): + pats = () + cmdutil.dorecord(ui, repo, commands.commit, 'commit', False, + cmdutil.recordfilter, *pats, **opts) + # TODO: Does no seem like the best way to do this + # We should make dorecord return the newly created commit + newcommits.append(repo['.']) + if haschanges(): + if ui.prompt('Done splitting? [yN]', default='n') == 'y': + commands.commit(ui, repo, **opts) + newcommits.append(repo['.']) + break + else: + ui.status("no more change to split\n") + + obsolete.createmarkers(repo, [(repo[r], newcommits)]) + tr.close() + finally: + lockmod.release(tr, lock, wlock) + + @eh.wrapcommand('strip', extension='strip', opts=[ ('', 'bundle', None, _("delete the commit entirely and move it to a " "backup bundle")), diff -r 72eab894a89d -r bc4c7b1bb793 hgext/inhibit.py --- a/hgext/inhibit.py Fri Aug 07 11:39:51 2015 -0700 +++ b/hgext/inhibit.py Fri Aug 07 13:59:19 2015 -0700 @@ -196,8 +196,11 @@ try: extensions.find('directaccess') except KeyError: - errormsg = _('Cannot use inhibit without the direct access extension') - raise error.Abort(errormsg) + errormsg = _('cannot use inhibit without the direct access extension\n') + hint = _("(please enable it or inhibit won\'t work)\n") + ui.warn(errormsg) + ui.warn(hint) + return # Wrapping this to inhibit obsolete revs resulting from a transaction extensions.wrapfunction(localrepo.localrepository, diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-amend.t --- a/tests/test-amend.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-amend.t Fri Aug 07 13:59:19 2015 -0700 @@ -115,6 +115,7 @@ branch: foo commit: 1 unknown (clean) update: (current) + phases: 3 draft Check the help $ hg amend -h diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-corrupt.t --- a/tests/test-corrupt.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-corrupt.t Fri Aug 07 13:59:19 2015 -0700 @@ -101,7 +101,7 @@ summary: add A - $ hg kill -n -1 -- -2 -3 + $ hg kill --fold -n -1 -- -2 -3 2 changesets pruned $ hg push ../other pushing to ../other @@ -110,8 +110,7 @@ adding manifests adding file changes added 1 changesets with 2 changes to 2 files - pushing 2 obsolescence markers (*) (glob) - 2 obsolescence markers added + 2 new obsolescence markers $ hg -R ../other verify checking changesets checking manifests diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-evolve-bumped.t --- a/tests/test-evolve-bumped.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-evolve-bumped.t Fri Aug 07 13:59:19 2015 -0700 @@ -49,7 +49,6 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pull obsolescence markers (run 'hg update' to get a working copy) $ hg log -r 'draft()' 1:4d1169d82e47@default(draft) modify a @@ -68,7 +67,6 @@ pulling from ../public searching for changes no changes found - pull obsolescence markers 1 new bumped changesets $ hg evolve -a -A --bumped diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-evolve-split.t --- a/tests/test-evolve-split.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-evolve-split.t Fri Aug 07 13:59:19 2015 -0700 @@ -43,7 +43,7 @@ $ printf "pp" > pp; $ hg add pp $ hg commit -m "_pp" - $ hg prune --succ "desc(_oo) + desc(_pp)" -r "desc('oo+pp')" + $ hg prune --succ "desc(_oo) + desc(_pp)" -r "desc('oo+pp')" --split 1 changesets pruned 1 new unstable changesets $ hg log -G diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-evolve.t --- a/tests/test-evolve.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-evolve.t Fri Aug 07 13:59:19 2015 -0700 @@ -474,7 +474,6 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pull obsolescence markers $ cd alpha $ cat << EOF > A @@ -531,8 +530,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pull obsolescence markers - 2 obsolescence markers added + 2 new obsolescence markers (run 'hg update' to get a working copy) $ hg up 2 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -1374,7 +1372,7 @@ $ printf "pp" > pp; $ hg add pp $ hg commit -m "_pp" - $ hg prune --succ "desc(_oo) + desc(_pp)" -r "desc('oo+pp')" + $ hg prune --succ "desc(_oo) + desc(_pp)" -r "desc('oo+pp')" --split 1 changesets pruned 1 new unstable changesets $ glog -r "18::" diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-inhibit.t --- a/tests/test-inhibit.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-inhibit.t Fri Aug 07 13:59:19 2015 -0700 @@ -133,6 +133,7 @@ branch: default commit: (clean) update: 1 new changesets, 2 branch heads (merge) + phases: 6 draft check public revision got cleared (when adding the second inhibitor, the first one is removed because it is public) @@ -352,7 +353,8 @@ +cD $ hg export 1 3 - abort: filtered revision '1' (not in 'visible-directaccess-nowarn' subset)! + abort: hidden revision '1'! + (use --hidden to access hidden revisions) [255] @@ -397,7 +399,8 @@ o 0:54ccbc537fc2 add cA $ hg rebase -s 10 -d 3 - abort: filtered revision '3' (not in 'visible-directaccess-warn' subset)! + abort: hidden revision '3'! + (use --hidden to access hidden revisions) [255] $ hg rebase -r ad78ff7d621f -r 53a94305e133 -d 2db36d8066ff Warning: accessing hidden changesets 2db36d8066ff for write operation @@ -722,9 +725,10 @@ > directaccess=! > testextension=! > EOF - $ hg up 15 - abort: Cannot use inhibit without the direct access extension - [255] + $ hg up . + cannot use inhibit without the direct access extension + (please enable it or inhibit won't work) + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo "directaccess=$(echo $(dirname $TESTDIR))/hgext/directaccess.py" >> $HGRCPATH $ cd .. @@ -758,5 +762,4 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pushing 33 obsolescence markers (*) (glob) - 2 obsolescence markers added + 2 new obsolescence markers diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-obsolete.t --- a/tests/test-obsolete.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-obsolete.t Fri Aug 07 13:59:19 2015 -0700 @@ -184,8 +184,7 @@ adding manifests adding file changes added 5 changesets with 5 changes to 5 files (+1 heads) - pushing 2 obsolescence markers (*) (glob) - 2 obsolescence markers added + 2 new obsolescence markers $ hg -R ../other-new verify checking changesets checking manifests @@ -239,8 +238,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pushing 3 obsolescence markers (*) (glob) - 1 obsolescence markers added + 1 new obsolescence markers $ qlog -R ../other-new 5 - 95de7fc6918d @@ -262,8 +260,6 @@ pushing to ../other-new searching for changes no changes found - pushing 3 obsolescence markers (*) (glob) - 0 obsolescence markers added [1] $ hg up --hidden -q .^ # 3 @@ -279,9 +275,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) - pull obsolescence markers - 1 obsolescence markers added - (run 'hg heads' to see heads, 'hg merge' to merge) + 1 new obsolescence markers + (run 'hg heads .' to see heads, 'hg merge' to merge) $ qlog -R ../other-new 6 - 909a0fb57e5d @@ -370,9 +365,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) - pull obsolescence markers - 1 obsolescence markers added - (run 'hg heads' to see heads, 'hg merge' to merge) + 1 new obsolescence markers + (run 'hg heads .' to see heads, 'hg merge' to merge) $ hg up -q 7 # to check rollback update behavior $ qlog @@ -395,6 +389,7 @@ branch: default commit: 1 deleted, 2 unknown (clean) update: 2 new changesets, 2 branch heads (merge) + phases: 4 draft unstable: 1 changesets $ qlog 6 @@ -544,8 +539,7 @@ adding manifests adding file changes added 2 changesets with 1 changes to [12] files (re) - pushing 7 obsolescence markers (*) (glob) - 3 obsolescence markers added + 3 new obsolescence markers $ hg up -q 10 $ mkcommit "obsol_d'''" created new head @@ -557,8 +551,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pushing 8 obsolescence markers (*) (glob) - 1 obsolescence markers added + 1 new obsolescence markers $ cd .. check bumped detection @@ -670,6 +663,7 @@ branch: default commit: (clean) update: (2|9|11) new changesets, (3|9|10) branch heads \(merge\) (re) + phases: 3 draft bumped: 1 changesets $ hg debugobsolete `getid a7a6f2b5d8a5` `getid 50f11e5e3a63` $ hg log -r 'divergent()' diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-prune.t --- a/tests/test-prune.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-prune.t Fri Aug 07 13:59:19 2015 -0700 @@ -32,6 +32,19 @@ o 0:1f0dee641bb7[] (stable/public) add a +Check arguments exclusive to each other +--------------------------------------- + + $ hg prune --fold --biject + abort: can only specify one of biject, fold + [255] + $ hg prune --split --fold + abort: can only specify one of fold, split + [255] + $ hg prune --split --fold --biject + abort: can only specify one of biject, fold, split + [255] + Check simple case ---------------------------- @@ -150,6 +163,9 @@ one old, two new $ hg prune 'desc("add dd")' -s 'desc("add nD")' -s 'desc("add nC")' + abort: please add --split if you want to do a split + [255] + $ hg prune 'desc("add dd")' -s 'desc("add nD")' -s 'desc("add nC")' --split 1 changesets pruned $ hg debugobsolete 9d206ffc875e1bc304590549be293be36821e66c 0 {47d2a3944de8b013de3be9578e8e344ea2e6c097} (Sat Dec 15 00:00:00 1979 +0000) {'user': 'blah'} @@ -190,6 +206,9 @@ two old, one new: $ hg prune 'desc("add cc")' 'desc("add bb")' -s 'desc("add nB")' + abort: please add --fold if you want to do a fold + [255] + $ hg prune 'desc("add cc")' 'desc("add bb")' -s 'desc("add nB")' --fold 2 changesets pruned $ hg debugobsolete 9d206ffc875e1bc304590549be293be36821e66c 0 {47d2a3944de8b013de3be9578e8e344ea2e6c097} (Sat Dec 15 00:00:00 1979 +0000) {'user': 'blah'} diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-sharing.t --- a/tests/test-sharing.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-sharing.t Fri Aug 07 13:59:19 2015 -0700 @@ -46,7 +46,6 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pull obsolescence markers 1 files updated, 0 files merged, 0 files removed, 0 files unresolved Let's commit a preliminary change and push it to ``test-repo`` for @@ -88,8 +87,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pull obsolescence markers - 2 obsolescence markers added + 2 new obsolescence markers 1 files updated, 0 files merged, 0 files removed, 0 files unresolved Figure SG03 @@ -140,8 +138,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pushing 4 obsolescence markers (*) (glob) - 4 obsolescence markers added + 4 new obsolescence markers Now that the fix is public, we cannot amend it any more. $ hg amend -m 'fix bug 37' @@ -161,8 +158,6 @@ pushing to ../dev-repo searching for changes no changes found - pushing 4 obsolescence markers (*) (glob) - 0 obsolescence markers added [1] $ hg -R ../dev-repo shortlog -r 'draft()' @@ -196,8 +191,6 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pushing 4 obsolescence markers (*) (glob) - 0 obsolescence markers added exporting bookmark bug15 $ hg -R ../review bookmarks bug15 2:f91e97234c2b @@ -213,8 +206,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pushing 6 obsolescence markers (*) (glob) - 2 obsolescence markers added + 2 new obsolescence markers updating bookmark bug15 $ hg -R ../review bookmarks bug15 3:cbdfbd5a5db2 @@ -241,8 +233,6 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pushing 4 obsolescence markers (*) (glob) - 0 obsolescence markers added exporting bookmark featureX $ hg -R ../review bookmarks bug15 3:cbdfbd5a5db2 @@ -259,8 +249,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pushing 6 obsolescence markers (*) (glob) - 2 obsolescence markers added + 2 new obsolescence markers updating bookmark featureX Bob receives second review, amends, and pushes to public: @@ -274,8 +263,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pushing 8 obsolescence markers (*) (glob) - 4 obsolescence markers added + 4 new obsolescence markers $ hg -R ../public bookmarks no bookmarks set $ hg push ../review @@ -286,8 +274,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pushing 8 obsolescence markers (*) (glob) - 2 obsolescence markers added + 2 new obsolescence markers updating bookmark featureX $ hg -R ../review bookmarks bug15 3:cbdfbd5a5db2 @@ -357,8 +344,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pull obsolescence markers - 4 obsolescence markers added + 4 new obsolescence markers (run 'hg heads' to see heads, 'hg merge' to merge) $ hg log -G -q -r 'head()' o 5:540ba8f317e6 @@ -388,8 +374,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pushing 11 obsolescence markers (*) (glob) - 3 obsolescence markers added + 3 new obsolescence markers $ hg push ../review pushing to ../review searching for changes @@ -397,8 +382,7 @@ adding manifests adding file changes added 1 changesets with 0 changes to 1 files - pushing 11 obsolescence markers (*) (glob) - 1 obsolescence markers added + 1 new obsolescence markers updating bookmark bug15 Figure SG08: review and public changesets after Alice pushes. @@ -460,8 +444,6 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pull obsolescence markers - 0 obsolescence markers added 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo 'better fix (alice)' >> file1 $ hg amend -u alice -m 'fix bug 24 (v2 by alice)' @@ -489,8 +471,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pull obsolescence markers - 2 obsolescence markers added + 2 new obsolescence markers (run 'hg heads' to see heads, 'hg merge' to merge) 2 new divergent changesets diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-simple4server.t --- a/tests/test-simple4server.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-simple4server.t Fri Aug 07 13:59:19 2015 -0700 @@ -96,7 +96,7 @@ remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) - pushing 2 obsolescence markers (*) (glob) + pushing 2 obsolescence markers (* bytes) (glob) $ cat ../errors.log $ hg push pushing to http://localhost:$HGPORT/ diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-split.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-split.t Fri Aug 07 13:59:19 2015 -0700 @@ -0,0 +1,193 @@ +test of the split command +----------------------- + + $ cat >> $HGRCPATH < [defaults] + > amend=-d "0 0" + > fold=-d "0 0" + > split=-d "0 0" + > amend=-d "0 0" + > [web] + > push_ssl = false + > allow_push = * + > [phases] + > publish = False + > [diff] + > git = 1 + > unified = 0 + > [ui] + > interactive = true + > [extensions] + > hgext.graphlog= + > EOF + $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH + $ mkcommit() { + > echo "$1" > "$1" + > hg add "$1" + > hg ci -m "add $1" + > } + + +Basic case, split a head + $ hg init testsplit + $ cd testsplit + $ mkcommit _a + $ mkcommit _b + $ mkcommit _c + $ mkcommit _d + $ echo "change to a" >> _a + $ hg amend + $ hg debugobsolete + 9e84a109b8eb081ad754681ee4b1380d17a3741f aa8f656bb307022172d2648be6fb65322f801225 0 (*) {'user': 'test'} (glob) + f002b57772d7f09b180c407213ae16d92996a988 0 {9e84a109b8eb081ad754681ee4b1380d17a3741f} (*) {'user': 'test'} (glob) + +To create commits with the number of split + $ export NUM=0 + $ export HGEDITOR="NUM=$((NUM+1)); echo split$NUM > $1" + $ hg split << EOF + > y + > y + > y + > n + > N + > y + > y + > EOF + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + reverting _a + adding _d + diff --git a/_a b/_a + 1 hunks, 1 lines changed + examine changes to '_a'? [Ynesfdaq?] y + + @@ -1,0 +2,1 @@ + +change to a + record change 1/2 to '_a'? [Ynesfdaq?] y + + diff --git a/_d b/_d + new file mode 100644 + examine changes to '_d'? [Ynesfdaq?] y + + @@ -0,0 +1,1 @@ + +_d + record change 2/2 to '_d'? [Ynesfdaq?] n + + created new head + Done splitting? [yN] N + diff --git a/_d b/_d + new file mode 100644 + examine changes to '_d'? [Ynesfdaq?] y + + @@ -0,0 +1,1 @@ + +_d + record this change to '_d'? [Ynesfdaq?] y + + no more change to split + + $ hg debugobsolete + 9e84a109b8eb081ad754681ee4b1380d17a3741f aa8f656bb307022172d2648be6fb65322f801225 0 (*) {'user': 'test'} (glob) + f002b57772d7f09b180c407213ae16d92996a988 0 {9e84a109b8eb081ad754681ee4b1380d17a3741f} (*) {'user': 'test'} (glob) + aa8f656bb307022172d2648be6fb65322f801225 8a76f55839e6badd47ed8338803d8bc16f578d68 1e105584671a463974ee2122f95979ce5e507f1a 0 (*) {'user': 'test'} (glob) + +Cannot split a commit with uncommited changes + $ hg up "desc(_c)" + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo "_cd" > _c + $ hg split + abort: uncommitted changes + [255] + +Split a revision specified with -r + $ hg up "desc(_c)" -C + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo "change to b" >> _b + $ hg amend -m "_cprim" + 2 new unstable changesets + $ hg evolve --all + move:[6] split0 + atop:[9] _cprim + move:[7] split0 + atop:[10] split0 + working directory is now at * (glob) + $ hg log -r "desc(_cprim)" -v -p + changeset: 9:719157b217ac + parent: 1:37445b16603b + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + files: _b _c + description: + _cprim + + + diff --git a/_b b/_b + --- a/_b + +++ b/_b + @@ -1,0 +2,1 @@ + +change to b + diff --git a/_c b/_c + new file mode 100644 + --- /dev/null + +++ b/_c + @@ -0,0 +1,1 @@ + +_c + + $ hg split -r "desc(_cprim)" < y + > y + > y + > n + > y + > EOF + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + reverting _b + adding _c + diff --git a/_b b/_b + 1 hunks, 1 lines changed + examine changes to '_b'? [Ynesfdaq?] y + + @@ -1,0 +2,1 @@ + +change to b + record change 1/2 to '_b'? [Ynesfdaq?] y + + diff --git a/_c b/_c + new file mode 100644 + examine changes to '_c'? [Ynesfdaq?] y + + @@ -0,0 +1,1 @@ + +_c + record change 2/2 to '_c'? [Ynesfdaq?] n + + created new head + Done splitting? [yN] y + +Stop before splitting the commit completely creates a commit with all the +remaining changes + + $ hg debugobsolete + 9e84a109b8eb081ad754681ee4b1380d17a3741f aa8f656bb307022172d2648be6fb65322f801225 0 (*) {'user': 'test'} (glob) + f002b57772d7f09b180c407213ae16d92996a988 0 {9e84a109b8eb081ad754681ee4b1380d17a3741f} (*) {'user': 'test'} (glob) + aa8f656bb307022172d2648be6fb65322f801225 8a76f55839e6badd47ed8338803d8bc16f578d68 1e105584671a463974ee2122f95979ce5e507f1a 0 (*) {'user': 'test'} (glob) + 10200229058723ce8d67f6612c1f6b4f73b1fe73 719157b217acc43d397369a448824ed4c7a302f2 0 (*) {'user': 'test'} (glob) + 5d0c8b0f2d3e5e1ff95f93d7da2ba06650605ab5 0 {10200229058723ce8d67f6612c1f6b4f73b1fe73} (*) {'user': 'test'} (glob) + 8a76f55839e6badd47ed8338803d8bc16f578d68 0ea1d0d23e674ea8a6affe760741c82bb8e380f7 0 (*) {'user': 'test'} (glob) + 1e105584671a463974ee2122f95979ce5e507f1a b6099ccb49cae181af7c59ed5603a1dfca632445 0 (*) {'user': 'test'} (glob) + 719157b217acc43d397369a448824ed4c7a302f2 8eb71353cb2c70fc1154be3af79c0ce98898ae88 ead904640c8543606f72490c6ae10955fb11fff0 0 (*) {'user': 'test'} (glob) + +Cannot specify multiple revisions with -r + $ hg split -r "desc(_a)::" + abort: you can only specify one revision to split + [255] + +Cannot split a commit that is not a head if instability is not allowed + $ cat >> $HGRCPATH < [experimental] + > evolution=createmarkers + > evolutioncommands=split + > EOF + $ hg split -r "desc(_c)" + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + abort: cannot split commit: 719157b217ac not a head + [255] + + diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-stabilize-result.t --- a/tests/test-stabilize-result.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-stabilize-result.t Fri Aug 07 13:59:19 2015 -0700 @@ -307,6 +307,7 @@ branch: default commit: (clean) update: 2 new changesets, 2 branch heads (merge) + phases: 3 draft $ hg export . # HG changeset patch # User test diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-tutorial.t --- a/tests/test-tutorial.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-tutorial.t Fri Aug 07 13:59:19 2015 -0700 @@ -224,7 +224,6 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pull obsolescence markers (run 'hg heads' to see heads, 'hg merge' to merge) I now have a new heads. Note that this remote head is immutable @@ -406,8 +405,7 @@ adding manifests adding file changes added 3 changesets with 3 changes to 1 files - pushing 6 obsolescence markers (*) (glob) - 6 obsolescence markers added + 6 new obsolescence markers for simplicity sake we get the bathroom change in line again @@ -527,8 +525,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pull obsolescence markers - 1 obsolescence markers added + 1 new obsolescence markers (run 'hg update' to get a working copy) $ hg log -G o 75954b8cd933 (public): bathroom stuff @@ -585,8 +582,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pull obsolescence markers - 1 obsolescence markers added + 1 new obsolescence markers (run 'hg update' to get a working copy) $ hg log -G o 75954b8cd933 (draft): bathroom stuff @@ -646,8 +642,6 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - pull obsolescence markers - 0 obsolescence markers added (run 'hg heads' to see heads, 'hg merge' to merge) 1 new unstable changesets @@ -737,8 +731,7 @@ adding manifests adding file changes added 2 changesets with 2 changes to 1 files (+1 heads) - pushing 10 obsolescence markers (*) (glob) - 3 obsolescence markers added + 3 new obsolescence markers remote get a warning that current working directory is based on an obsolete changeset @@ -747,8 +740,6 @@ pulling from $TESTTMP/local (glob) searching for changes no changes found - pull obsolescence markers - 0 obsolescence markers added working directory parent is obsolete! (use "hg evolve" to update to its successor) @@ -781,8 +772,6 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - pull obsolescence markers - 0 obsolescence markers added (run 'hg update' to get a working copy) $ hg log -G o 99f039c5ec9e (draft): SPAM SPAM SPAM diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-uncommit.t --- a/tests/test-uncommit.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-uncommit.t Fri Aug 07 13:59:19 2015 -0700 @@ -138,7 +138,6 @@ $ hg branch foo marked working directory as branch foo - (branches are permanent and global, did you want a bookmark?) $ hg mv ff f $ hg mv h i $ hg rm j diff -r 72eab894a89d -r bc4c7b1bb793 tests/test-wireproto-bundle1.t --- a/tests/test-wireproto-bundle1.t Fri Aug 07 11:39:51 2015 -0700 +++ b/tests/test-wireproto-bundle1.t Fri Aug 07 13:59:19 2015 -0700 @@ -50,7 +50,6 @@ adding manifests adding file changes added 2 changesets with 2 changes to 2 files - pull obsolescence markers (run 'hg update' to get a working copy) $ hg push -R ../other pushing to ssh://user@dummy/server @@ -70,8 +69,7 @@ remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) - pushing 2 obsolescence markers (*) (glob) - remote: 2 obsolescence markers added + remote: 2 new obsolescence markers $ hg push pushing to ssh://user@dummy/server searching for changes @@ -88,9 +86,8 @@ adding manifests adding file changes added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re) - pull obsolescence markers - 2 obsolescence markers added - (run 'hg heads' to see heads) + 2 new obsolescence markers + (run 'hg heads' to see heads, 'hg merge' to merge) $ hg -R ../other pull pulling from ssh://user@dummy/server searching for changes