test-rebase-dest.t
465 lines
| 9.6 KiB
| text/troff
|
Tads3Lexer
/ tests / test-rebase-dest.t
|
r31729 | Require a destination | ||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> rebase = | ||||
> [commands] | ||||
> rebase.requiredest = True | ||||
> EOF | ||||
$ hg init repo | ||||
$ cd repo | ||||
$ echo a >> a | ||||
$ hg commit -qAm aa | ||||
$ echo b >> b | ||||
$ hg commit -qAm bb | ||||
$ hg up ".^" | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo c >> c | ||||
$ hg commit -qAm cc | ||||
$ hg rebase | ||||
abort: you must specify a destination | ||||
(use: hg rebase -d REV) | ||||
[255] | ||||
$ hg rebase -d 1 | ||||
rebasing 2:5db65b93a12b "cc" (tip) | ||||
|
r35394 | saved backup bundle to $TESTTMP/repo/.hg/strip-backup/5db65b93a12b-4fb789ec-rebase.hg | ||
|
r31729 | $ hg rebase -d 0 -r . -q | ||
$ HGPLAIN=1 hg rebase | ||||
rebasing 2:889b0bc6a730 "cc" (tip) | ||||
|
r35394 | saved backup bundle to $TESTTMP/repo/.hg/strip-backup/889b0bc6a730-41ec4f81-rebase.hg | ||
|
r31729 | $ hg rebase -d 0 -r . -q | ||
$ hg --config commands.rebase.requiredest=False rebase | ||||
rebasing 2:279de9495438 "cc" (tip) | ||||
|
r35394 | saved backup bundle to $TESTTMP/repo/.hg/strip-backup/279de9495438-ab0a5128-rebase.hg | ||
|
r31729 | |||
|
r31730 | Requiring dest should not break continue or other rebase options | ||
$ hg up 1 -q | ||||
$ echo d >> c | ||||
$ hg commit -qAm dc | ||||
$ hg log -G -T '{rev} {desc}' | ||||
@ 3 dc | ||||
| | ||||
| o 2 cc | ||||
|/ | ||||
o 1 bb | ||||
| | ||||
o 0 aa | ||||
$ hg rebase -d 2 | ||||
rebasing 3:0537f6b50def "dc" (tip) | ||||
merging c | ||||
warning: conflicts while merging c! (edit, then use 'hg resolve --mark') | ||||
unresolved conflicts (see hg resolve, then hg rebase --continue) | ||||
[1] | ||||
$ echo d > c | ||||
$ hg resolve --mark --all | ||||
(no more unresolved files) | ||||
continue: hg rebase --continue | ||||
$ hg rebase --continue | ||||
|
r31731 | rebasing 3:0537f6b50def "dc" (tip) | ||
|
r35394 | saved backup bundle to $TESTTMP/repo/.hg/strip-backup/0537f6b50def-be4c7386-rebase.hg | ||
|
r31732 | |||
$ cd .. | ||||
Check rebase.requiredest interaction with pull --rebase | ||||
$ hg clone repo clone | ||||
updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd repo | ||||
$ echo e > e | ||||
$ hg commit -qAm ee | ||||
$ cd .. | ||||
$ cd clone | ||||
$ echo f > f | ||||
$ hg commit -qAm ff | ||||
$ hg pull --rebase | ||||
|
r31733 | abort: rebase destination required by configuration | ||
(use hg pull followed by hg rebase -d DEST) | ||||
|
r31732 | [255] | ||
|
r34007 | Setup rebase with multiple destinations | ||
$ cd $TESTTMP | ||||
$ cat >> $TESTTMP/maprevset.py <<EOF | ||||
> from __future__ import absolute_import | ||||
> from mercurial import registrar, revset, revsetlang, smartset | ||||
> revsetpredicate = registrar.revsetpredicate() | ||||
> cache = {} | ||||
|
r36286 | > @revsetpredicate(b'map') | ||
|
r34007 | > def map(repo, subset, x): | ||
> """(set, mapping)""" | ||||
|
r36286 | > setarg, maparg = revsetlang.getargs(x, 2, 2, b'') | ||
|
r34007 | > rset = revset.getset(repo, smartset.fullreposet(repo), setarg) | ||
|
r36286 | > mapstr = revsetlang.getstring(maparg, b'') | ||
> map = dict(a.split(b':') for a in mapstr.split(b',')) | ||||
|
r34007 | > rev = rset.first() | ||
> desc = repo[rev].description() | ||||
> newdesc = map.get(desc) | ||||
|
r36286 | > if newdesc == b'null': | ||
|
r34007 | > revs = [-1] | ||
> else: | ||||
|
r36286 | > query = revsetlang.formatspec(b'desc(%s)', newdesc) | ||
|
r34007 | > revs = repo.revs(query) | ||
> return smartset.baseset(revs) | ||||
> EOF | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [ui] | ||||
> allowemptycommit=1 | ||||
> [extensions] | ||||
> drawdag=$TESTDIR/drawdag.py | ||||
> [phases] | ||||
> publish=False | ||||
> [alias] | ||||
|
r35386 | > tglog = log -G --template "{rev}: {node|short} {desc} {instabilities}" -r 'sort(all(), topo)' | ||
|
r34007 | > [extensions] | ||
> maprevset=$TESTTMP/maprevset.py | ||||
> [experimental] | ||||
|
r34866 | > evolution=true | ||
|
r34007 | > EOF | ||
$ rebasewithdag() { | ||||
|
r39743 | > N=`"$PYTHON" -c "print($N+1)"` | ||
|
r34007 | > hg init repo$N && cd repo$N | ||
> hg debugdrawdag | ||||
> hg rebase "$@" > _rebasetmp | ||||
> r=$? | ||||
> grep -v 'saved backup bundle' _rebasetmp | ||||
> [ $r -eq 0 ] && rm -f .hg/localtags && hg tglog | ||||
> cd .. | ||||
> return $r | ||||
> } | ||||
Destination resolves to an empty set: | ||||
$ rebasewithdag -s B -d 'SRC - SRC' <<'EOS' | ||||
> C | ||||
> | | ||||
> B | ||||
> | | ||||
> A | ||||
> EOS | ||||
nothing to rebase - empty destination | ||||
[1] | ||||
Multiple destinations and --collapse are not compatible: | ||||
$ rebasewithdag -s C+E -d 'SRC^^' --collapse <<'EOS' | ||||
> C F | ||||
> | | | ||||
> B E | ||||
> | | | ||||
> A D | ||||
> EOS | ||||
abort: --collapse does not work with multiple destinations | ||||
[255] | ||||
Multiple destinations cannot be used with --base: | ||||
$ rebasewithdag -b B+E -d 'SRC^^' --collapse <<'EOS' | ||||
> B E | ||||
> | | | ||||
> A D | ||||
> EOS | ||||
abort: unknown revision 'SRC'! | ||||
[255] | ||||
Rebase to null should work: | ||||
$ rebasewithdag -r A+C+D -d 'null' <<'EOS' | ||||
> C D | ||||
> | | | ||||
> A B | ||||
> EOS | ||||
already rebased 0:426bada5c675 "A" (A) | ||||
already rebased 2:dc0947a82db8 "C" (C) | ||||
rebasing 3:004dc1679908 "D" (D tip) | ||||
|
r35386 | o 4: d8d8601abd5e D | ||
|
r34007 | |||
|
r35386 | o 2: dc0947a82db8 C | ||
|
r34007 | | | ||
|
r35386 | | o 1: fc2b737bb2e5 B | ||
|
r34007 | | | ||
|
r35386 | o 0: 426bada5c675 A | ||
|
r34007 | |||
Destination resolves to multiple changesets: | ||||
$ rebasewithdag -s B -d 'ALLSRC+SRC' <<'EOS' | ||||
> C | ||||
> | | ||||
> B | ||||
> | | ||||
> Z | ||||
> EOS | ||||
abort: rebase destination for f0a671a46792 is not unique | ||||
[255] | ||||
Destination is an ancestor of source: | ||||
$ rebasewithdag -s B -d 'SRC' <<'EOS' | ||||
> C | ||||
> | | ||||
> B | ||||
> | | ||||
> Z | ||||
> EOS | ||||
|
r34008 | abort: source and destination form a cycle | ||
|
r34007 | [255] | ||
|
r42276 | BUG: cycles aren't flagged correctly when --dry-run is set: | ||
$ rebasewithdag -s B -d 'SRC' --dry-run <<'EOS' | ||||
> C | ||||
> | | ||||
> B | ||||
> | | ||||
> Z | ||||
> EOS | ||||
|
r42277 | abort: source and destination form a cycle | ||
|
r42276 | starting dry-run rebase; repository will not be changed | ||
[255] | ||||
|
r34007 | Switch roots: | ||
$ rebasewithdag -s 'all() - roots(all())' -d 'roots(all()) - ::SRC' <<'EOS' | ||||
> C F | ||||
> | | | ||||
> B E | ||||
> | | | ||||
> A D | ||||
> EOS | ||||
rebasing 2:112478962961 "B" (B) | ||||
rebasing 4:26805aba1e60 "C" (C) | ||||
rebasing 3:cd488e83d208 "E" (E) | ||||
rebasing 5:0069ba24938a "F" (F tip) | ||||
|
r35386 | o 9: d150ff263fc8 F | ||
|
r34007 | | | ||
|
r35386 | o 8: 66f30a1a2eab E | ||
|
r34007 | | | ||
|
r35386 | | o 7: 93db94ffae0e C | ||
|
r34007 | | | | ||
|
r35386 | | o 6: d0071c3b0c88 B | ||
|
r34007 | | | | ||
|
r35386 | | o 1: 058c1e1fb10a D | ||
|
r34007 | | | ||
|
r35386 | o 0: 426bada5c675 A | ||
|
r34007 | |||
Different destinations for merge changesets with a same root: | ||||
$ rebasewithdag -s B -d '((parents(SRC)-B-A)::) - (::ALLSRC)' <<'EOS' | ||||
> C G | ||||
> |\| | ||||
> | F | ||||
> | | ||||
> B E | ||||
> |\| | ||||
> A D | ||||
> EOS | ||||
rebasing 3:a4256619d830 "B" (B) | ||||
rebasing 6:8e139e245220 "C" (C tip) | ||||
|
r35386 | o 8: 51e2ce92e06a C | ||
|
r34007 | |\ | ||
|
r35386 | | o 7: 2ed0c8546285 B | ||
|
r34007 | | |\ | ||
|
r35386 | o | | 5: 8fdb2c1feb20 G | ||
|
r34007 | | | | | ||
|
r35386 | | | o 4: cd488e83d208 E | ||
|
r34007 | | | | | ||
|
r35386 | o | | 2: a6661b868de9 F | ||
|
r34007 | / / | ||
|
r35386 | | o 1: 058c1e1fb10a D | ||
|
r34007 | | | ||
|
r35386 | o 0: 426bada5c675 A | ||
|
r34007 | |||
Move to a previous parent: | ||||
$ rebasewithdag -s E+F+G -d 'SRC^^' <<'EOS' | ||||
> H | ||||
> | | ||||
> D G | ||||
> |/ | ||||
> C F | ||||
> |/ | ||||
> B E # E will be ignored, since E^^ is empty | ||||
> |/ | ||||
> A | ||||
> EOS | ||||
rebasing 4:33441538d4aa "F" (F) | ||||
rebasing 6:cf43ad9da869 "G" (G) | ||||
rebasing 7:eef94f3b5f03 "H" (H tip) | ||||
|
r35386 | o 10: b3d84c6666cf H | ||
|
r34007 | | | ||
|
r35386 | | o 5: f585351a92f8 D | ||
|
r34007 | |/ | ||
|
r35386 | o 3: 26805aba1e60 C | ||
|
r34007 | | | ||
|
r35386 | | o 9: f7c28a1a15e2 G | ||
|
r34007 | |/ | ||
|
r35386 | o 1: 112478962961 B | ||
|
r34007 | | | ||
|
r35386 | | o 8: 02aa697facf7 F | ||
|
r34007 | |/ | ||
|
r35386 | | o 2: 7fb047a69f22 E | ||
|
r34007 | |/ | ||
|
r35386 | o 0: 426bada5c675 A | ||
|
r34007 | |||
|
r34008 | Source overlaps with destination: | ||
|
r34007 | |||
$ rebasewithdag -s 'B+C+D' -d 'map(SRC, "B:C,C:D")' <<'EOS' | ||||
> B C D | ||||
> \|/ | ||||
> A | ||||
> EOS | ||||
|
r34008 | rebasing 2:dc0947a82db8 "C" (C) | ||
|
r34007 | rebasing 1:112478962961 "B" (B) | ||
|
r35386 | o 5: 5fe9935d5222 B | ||
|
r34008 | | | ||
|
r35386 | o 4: 12d20731b9e0 C | ||
|
r34008 | | | ||
|
r35386 | o 3: b18e25de2cf5 D | ||
|
r34008 | | | ||
|
r35386 | o 0: 426bada5c675 A | ||
|
r34008 | |||
Detect cycles early: | ||||
$ rebasewithdag -r 'all()-Z' -d 'map(SRC, "A:B,B:C,C:D,D:B")' <<'EOS' | ||||
> A B C | ||||
> \|/ | ||||
> | D | ||||
> |/ | ||||
> Z | ||||
> EOS | ||||
abort: source and destination form a cycle | ||||
[255] | ||||
Detect source is ancestor of dest in runtime: | ||||
$ rebasewithdag -r 'C+B' -d 'map(SRC, "C:B,B:D")' -q <<'EOS' | ||||
> D | ||||
> | | ||||
> B C | ||||
> \| | ||||
> A | ||||
> EOS | ||||
abort: source is ancestor of destination | ||||
[255] | ||||
"Already rebased" fast path still works: | ||||
$ rebasewithdag -r 'all()' -d 'SRC^' <<'EOS' | ||||
> E F | ||||
> /| | | ||||
> B C D | ||||
> \|/ | ||||
> A | ||||
> EOS | ||||
already rebased 1:112478962961 "B" (B) | ||||
already rebased 2:dc0947a82db8 "C" (C) | ||||
already rebased 3:b18e25de2cf5 "D" (D) | ||||
already rebased 4:312782b8f06e "E" (E) | ||||
already rebased 5:ad6717a6a58e "F" (F tip) | ||||
|
r35386 | o 5: ad6717a6a58e F | ||
|
r34007 | | | ||
|
r35386 | o 3: b18e25de2cf5 D | ||
|
r34007 | | | ||
|
r35386 | | o 4: 312782b8f06e E | ||
|
r34008 | | |\ | ||
|
r35386 | +---o 2: dc0947a82db8 C | ||
|
r34007 | | | | ||
|
r35386 | | o 1: 112478962961 B | ||
|
r34007 | |/ | ||
|
r35386 | o 0: 426bada5c675 A | ||
|
r34007 | |||
|
r34008 | Massively rewrite the DAG: | ||
$ rebasewithdag -r 'all()' -d 'map(SRC, "A:I,I:null,H:A,B:J,J:C,C:H,D:E,F:G,G:K,K:D,E:B")' <<'EOS' | ||||
> D G K | ||||
> | | | | ||||
> C F J | ||||
> | | | | ||||
> B E I | ||||
> \| | | ||||
> A H | ||||
> EOS | ||||
rebasing 4:701514e1408d "I" (I) | ||||
rebasing 0:426bada5c675 "A" (A) | ||||
rebasing 1:e7050b6e5048 "H" (H) | ||||
rebasing 5:26805aba1e60 "C" (C) | ||||
rebasing 7:cf89f86b485b "J" (J) | ||||
rebasing 2:112478962961 "B" (B) | ||||
rebasing 3:7fb047a69f22 "E" (E) | ||||
rebasing 8:f585351a92f8 "D" (D) | ||||
rebasing 10:ae41898d7875 "K" (K tip) | ||||
rebasing 9:711f53bbef0b "G" (G) | ||||
rebasing 6:64a8289d2492 "F" (F) | ||||
|
r35386 | o 21: 3735afb3713a F | ||
|
r34008 | | | ||
|
r35386 | o 20: 07698142d7a7 G | ||
|
r34008 | | | ||
|
r35386 | o 19: 33aba52e7e72 K | ||
|
r34008 | | | ||
|
r35386 | o 18: 9fdae89dc5a1 D | ||
|
r34008 | | | ||
|
r35386 | o 17: 277dda9a65ee E | ||
|
r34008 | | | ||
|
r35386 | o 16: 9c74fd8657ad B | ||
|
r34008 | | | ||
|
r35386 | o 15: 6527eb0688bb J | ||
|
r34008 | | | ||
|
r35386 | o 14: e94d655b928d C | ||
|
r34008 | | | ||
|
r35386 | o 13: 620d6d349459 H | ||
|
r34008 | | | ||
|
r35386 | o 12: a569a116758f A | ||
|
r34008 | | | ||
|
r35386 | o 11: 2bf1302f5c18 I | ||
|
r34008 | |||
Resolve instability: | ||||
$ rebasewithdag <<'EOF' -r 'orphan()-obsolete()' -d 'max((successors(max(roots(ALLSRC) & ::SRC)^)-obsolete())::)' | ||||
> F2 | ||||
> | | ||||
> J E E2 | ||||
> | |/ | ||||
> I2 I | E3 | ||||
> \| |/ | ||||
> H | G | ||||
> | | | | ||||
> B2 D F | ||||
> | |/ # rebase: B -> B2 | ||||
> N C # amend: E -> E2 | ||||
> | | # amend: E2 -> E3 | ||||
> M B # rebase: F -> F2 | ||||
> \| # amend: I -> I2 | ||||
> A | ||||
> EOF | ||||
|
r35727 | 6 new orphan changesets | ||
|
r34008 | rebasing 16:5c432343bf59 "J" (J tip) | ||
rebasing 3:26805aba1e60 "C" (C) | ||||
rebasing 6:f585351a92f8 "D" (D) | ||||
rebasing 10:ffebc37c5d0b "E3" (E3) | ||||
rebasing 13:fb184bcfeee8 "F2" (F2) | ||||
rebasing 11:dc838ab4c0da "G" (G) | ||||
|
r35386 | o 22: 174f63d574a8 G | ||
|
r34008 | | | ||
|
r35386 | o 21: c9d9fbe76705 F2 | ||
|
r34008 | | | ||
|
r35386 | o 20: 0a03c2ede755 E3 | ||
|
r34008 | | | ||
|
r35386 | o 19: 228d9d2541b1 D | ||
|
r34008 | | | ||
|
r35386 | o 18: cd856b400c95 C | ||
|
r34008 | | | ||
|
r35386 | o 17: 9148200c858c J | ||
|
r34008 | | | ||
|
r35386 | o 15: eb74780f5094 I2 | ||
|
r34008 | | | ||
|
r35386 | o 12: 78309edd643f H | ||
|
r34008 | | | ||
|
r35386 | o 5: 4b4531bd8e1d B2 | ||
|
r34008 | | | ||
|
r35386 | o 4: 337c285c272b N | ||
|
r34008 | | | ||
|
r35386 | o 2: 699bc4b6fa22 M | ||
|
r34008 | | | ||
|
r35386 | o 0: 426bada5c675 A | ||
|
r34008 | |||