mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
98d9269874
Summary: Create a fork of the Mercurial code that we can use to build server rpms. The hg servers will continue to exist for a few more months while we move the darkstorm and ediscovery use cases off them. In the mean time, we want to start making breaking changes to the client, so let's create a stable copy of the hg code to produce rpms for the hg servers. The fork is based off c7770c78d, the latest hg release. This copies the files as is, then adds some minor tweaks to get it to build: - Disables some lint checks that appear to be bypassed by path - sed replace eden/scm with eden/hg-server - Removed a dependency on scm/telemetry from the edenfs-client tests since scm/telemetry pulls in the original eden/scm/lib/configparser which conflicts with the hg-server conflict parser. allow-large-files Reviewed By: quark-zju Differential Revision: D27632557 fbshipit-source-id: b2f442f4ec000ea08e4d62de068750832198e1f4
357 lines
9.2 KiB
Perl
357 lines
9.2 KiB
Perl
#chg-compatible
|
|
|
|
$ configure mutation-norecord
|
|
$ enable amend rebase
|
|
$ setconfig rebase.experimental.inmemory=True
|
|
$ setconfig rebase.singletransaction=True
|
|
$ mkcommit() {
|
|
> echo "$1" > "$1"
|
|
> hg add "$1"
|
|
> hg ci -m "add $1"
|
|
> }
|
|
|
|
Test invalid value for amend.autorestack
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=test
|
|
$ hg debugdrawdag<<'EOS'
|
|
> C # C/file = 1\n2\n3\n4\n
|
|
> | # B/file = 1\n2\n
|
|
> B
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ hg amend -m "new message"
|
|
invalid amend.autorestack config of "test"; falling back to only-trivial
|
|
rebasing ca039b450ae0 "C" (C)
|
|
hint[amend-autorebase]: descendants have been auto-rebased because no merge conflict could have happened - use --no-rebase or set commands.amend.autorebase=False to disable auto rebase
|
|
hint[hint-ack]: use 'hg hint --ack amend-autorebase' to silence these hints
|
|
|
|
If they disabled amend.autorestack, disable the new behavior (for now, during rollout)
|
|
$ newrepo
|
|
$ setconfig commands.amend.autorebase=False
|
|
$ setconfig amend.autorestack=always
|
|
$ hg debugdrawdag<<'EOS'
|
|
> C # C/file = 1\n2\n3\n4\n
|
|
> | # B/file = 1\n2\n
|
|
> B
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ hg amend -m "new message"
|
|
hint[amend-restack]: descendants of fe14e2b67b65 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
|
|
amend.autorestack=only-trivial, and simple changes (expect restack)
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=only-trivial
|
|
$ hg debugdrawdag<<'EOS'
|
|
> C
|
|
> |
|
|
> B
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ hg amend -m 'Unchanged manifest for B'
|
|
rebasing 26805aba1e60 "C" (C)
|
|
hint[amend-autorebase]: descendants have been auto-rebased because no merge conflict could have happened - use --no-rebase or set commands.amend.autorebase=False to disable auto rebase
|
|
hint[hint-ack]: use 'hg hint --ack amend-autorebase' to silence these hints
|
|
$ hg prev
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
(leaving bookmark B)
|
|
[426bad] (A) A
|
|
(activating bookmark A)
|
|
$ hg amend -m 'Unchanged manifest for A'
|
|
rebasing 5357953e3ea3 "Unchanged manifest for B" (B)
|
|
rebasing b635bd2cf20b "C" (C)
|
|
hint[amend-autorebase]: descendants have been auto-rebased because no merge conflict could have happened - use --no-rebase or set commands.amend.autorebase=False to disable auto rebase
|
|
hint[hint-ack]: use 'hg hint --ack amend-autorebase' to silence these hints
|
|
|
|
amend.autorestack=never
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=never
|
|
$ hg debugdrawdag<<'EOS'
|
|
> C
|
|
> |
|
|
> B
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ hg amend -m 'Unchanged manifest for B'
|
|
hint[amend-restack]: descendants of 112478962961 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
$ hg prev
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
(leaving bookmark B)
|
|
[426bad] (A) A
|
|
(activating bookmark A)
|
|
$ hg amend -m 'Unchanged manifest for A'
|
|
hint[amend-restack]: descendants of 426bada5c675 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
|
|
amend.autorestack=only-trivial, and manifest changes (expect no restack)
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=only-trivial
|
|
$ hg debugdrawdag<<'EOS'
|
|
> C
|
|
> |
|
|
> B
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ echo 'new b' > B
|
|
$ hg amend -m 'Change manifest for B'
|
|
hint[amend-restack]: descendants of 112478962961 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
|
|
amend.autorestack=only-trivial, and dirty working copy (expect no restack)
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=only-trivial
|
|
$ hg debugdrawdag<<'EOS'
|
|
> C
|
|
> |
|
|
> B
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ echo 'new b' > B
|
|
$ hg amend a -m 'Unchanged manifest, but dirty workdir'
|
|
a: $ENOENT$ (?)
|
|
hint[amend-restack]: descendants of 112478962961 are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
|
|
amend.autorestack=only-trivial, and no manifest changes, but no children (expect no restack)
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=only-trivial
|
|
$ hg debugdrawdag<<'EOS'
|
|
> B
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ hg amend -m 'Unchanged manifest for B'
|
|
|
|
amend.autorestack=no-conflict, and mergeable changes (expect restack)
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=no-conflict
|
|
$ setconfig amend.autorestackmsg="custom autorestack message"
|
|
$ hg debugdrawdag<<'EOS'
|
|
> C # C/file = 1\n2\n3\n4\n
|
|
> | # B/file = 1\n2\n
|
|
> B
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ $TESTDIR/seq.py 0 2 > file
|
|
$ hg amend
|
|
custom autorestack message
|
|
rebasing ca039b450ae0 "C" (C)
|
|
merging file
|
|
$ showgraph
|
|
o 7ed7d67ad7bf C
|
|
│
|
|
@ 767372f778c5 B
|
|
│
|
|
o 426bada5c675 A
|
|
$ cat file
|
|
0
|
|
1
|
|
2
|
|
|
|
amend.autorestack=no-conflict, and mergeable changes, but dirty WC (expect no restack)
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=no-conflict
|
|
$ hg debugdrawdag<<'EOS'
|
|
> C # C/file = 1\n2\n3\n4\n
|
|
> | # B/file = 1\n2\n
|
|
> B # A/other = i don't matter
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ echo "new content" > other
|
|
$ $TESTDIR/seq.py 0 2 > file
|
|
$ cat <<EOS | hg amend -i --config ui.interactive=1
|
|
> y
|
|
> y
|
|
> n
|
|
> EOS
|
|
diff --git a/file b/file
|
|
1 hunks, 1 lines changed
|
|
examine changes to 'file'? [Ynesfdaq?] y
|
|
|
|
@@ -1,2 +1,3 @@
|
|
+0
|
|
1
|
|
2
|
|
record change 1/2 to 'file'? [Ynesfdaq?] y
|
|
|
|
diff --git a/other b/other
|
|
1 hunks, 1 lines changed
|
|
examine changes to 'other'? [Ynesfdaq?] n
|
|
|
|
not restacking because working copy is dirty
|
|
hint[amend-restack]: descendants of bf943f2ff2de are left behind - use 'hg restack' to rebase them
|
|
hint[hint-ack]: use 'hg hint --ack amend-restack' to silence these hints
|
|
|
|
|
|
|
|
|
|
amend.autorestack=no-conflict, and conflicting changes (expect cancelled restack)
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=no-conflict
|
|
$ hg debugdrawdag<<'EOS'
|
|
> D
|
|
> |
|
|
> C # D/file = 1\n2\n3\n4\n
|
|
> | # B/file = 1\n2\n
|
|
> B
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ echo 'unmergeable!' > file
|
|
$ hg amend
|
|
restacking children automatically (unless they conflict)
|
|
rebasing b6c0d35dc9e9 "C" (C)
|
|
rebasing 02cc3cc1d010 "D" (D)
|
|
merging file
|
|
restacking would create conflicts (hit merge conflicts in file), so you must run it manually
|
|
(run `hg restack` manually to restack this commit's children)
|
|
$ showgraph
|
|
@ 3000de962fa1 B
|
|
│
|
|
│ o 02cc3cc1d010 D
|
|
│ │
|
|
│ o b6c0d35dc9e9 C
|
|
│ │
|
|
│ x fe14e2b67b65 B
|
|
├─╯
|
|
o 426bada5c675 A
|
|
$ cat file
|
|
unmergeable!
|
|
|
|
amend.autorestack=always, and conflicting changes (expect restack)
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=always
|
|
$ hg debugdrawdag<<'EOS'
|
|
> D
|
|
> |
|
|
> C # D/file = 1\n2\n3\n4\n
|
|
> | # B/file = 1\n2\n
|
|
> B
|
|
> |
|
|
> A
|
|
> EOS
|
|
$ hg update B -q
|
|
$ echo 'unmergeable!' > file
|
|
$ hg amend
|
|
rebasing b6c0d35dc9e9 "C" (C)
|
|
rebasing 02cc3cc1d010 "D" (D)
|
|
merging file
|
|
hit merge conflicts (in file); switching to on-disk merge
|
|
rebasing 02cc3cc1d010 "D" (D)
|
|
merging file
|
|
warning: 1 conflicts while merging file! (edit, then use 'hg resolve --mark')
|
|
unresolved conflicts (see hg resolve, then hg rebase --continue)
|
|
[1]
|
|
$ hg rebase --abort
|
|
rebase aborted
|
|
$ cat file
|
|
unmergeable!
|
|
$ showgraph
|
|
@ 3000de962fa1 B
|
|
│
|
|
│ o 02cc3cc1d010 D
|
|
│ │
|
|
│ o b6c0d35dc9e9 C
|
|
│ │
|
|
│ x fe14e2b67b65 B
|
|
├─╯
|
|
o 426bada5c675 A
|
|
|
|
Test rebasing children with obsolete children themselves needing a restack.
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=no-conflict
|
|
$ hg debugdrawdag<<'EOS'
|
|
> D
|
|
> |
|
|
> C C2 # amend: C -> C2
|
|
> |/
|
|
> B
|
|
> |
|
|
> A # <-- then amend this
|
|
> |
|
|
> Z
|
|
> EOS
|
|
$ hg update A -q
|
|
$ echo "new value" > A
|
|
$ hg amend
|
|
restacking children automatically (unless they conflict)
|
|
rebasing 917a077edb8d "B" (B)
|
|
rebasing ff9eba5e2480 "C2" (C2)
|
|
rebasing 01f26f1a10b2 "D" (D)
|
|
$ showgraph
|
|
o 0a75af8fc6e3 D
|
|
│
|
|
o 84f362759e03 C2
|
|
│
|
|
o 23018262b14e B
|
|
│
|
|
@ 21006be03678 A
|
|
│
|
|
o 48b9aae0607f Z
|
|
|
|
Test not rebasing unrelated changes. When rebasing X, only X:: are expected to be rebased.
|
|
Rebasing commits outside X:: can be surprising and more easily cause conflicts.
|
|
|
|
$ newrepo
|
|
$ setconfig amend.autorestack=no-conflict
|
|
$ hg debugdrawdag<<'EOS'
|
|
> D C
|
|
> | |
|
|
> B2 B1 # amend: B1 -> B2
|
|
> | / # then, amend B2.
|
|
> |/ # expect: D gets rebased, while C is kept unchanged.
|
|
> A
|
|
> |
|
|
> Z
|
|
> EOS
|
|
$ hg up -q B2
|
|
$ hg amend -m B3
|
|
restacking children automatically (unless they conflict)
|
|
rebasing afb1812f5f28 "D" (D)
|
|
$ showgraph
|
|
o c9dfcf01df0b D
|
|
│
|
|
@ 1c28c4186c15 B3
|
|
│
|
|
│ o dbe6ebcaec86 C
|
|
│ │
|
|
│ x 588f87b965af B1
|
|
├─╯
|
|
o ac2f7407182b A
|
|
│
|
|
o 48b9aae0607f Z
|
|
|
|
|
|
Test that invisible children do not trigger auto restack.
|
|
|
|
$ newrepo
|
|
$ drawdag << 'EOS'
|
|
> C D
|
|
> | |
|
|
> B1 B2 # amend: B1 -> B2
|
|
> |/
|
|
> A
|
|
> EOS
|
|
$ hg hide -q $D
|
|
$ hg up -q $B2
|
|
$ hg amend -m B3 --config hint.ack='*'
|