mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +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
364 lines
12 KiB
Raku
364 lines
12 KiB
Raku
#chg-compatible
|
|
|
|
$ setconfig ui.color=always color.mode=ansi
|
|
Terminfo codes compatibility fix
|
|
$ setconfig color.color.none=0
|
|
|
|
$ hg init repo1
|
|
$ cd repo1
|
|
$ mkdir a b a/1 b/1 b/2
|
|
$ touch in_root a/in_a b/in_b a/1/in_a_1 b/1/in_b_1 b/2/in_b_2
|
|
|
|
hg status in repo root:
|
|
|
|
$ hg status
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/1/in_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/in_a\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/in_b\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_root\x1b[0m (esc)
|
|
|
|
$ hg status --color=debug
|
|
[status.unknown|? ][status.unknown|a/1/in_a_1]
|
|
[status.unknown|? ][status.unknown|a/in_a]
|
|
[status.unknown|? ][status.unknown|b/1/in_b_1]
|
|
[status.unknown|? ][status.unknown|b/2/in_b_2]
|
|
[status.unknown|? ][status.unknown|b/in_b]
|
|
[status.unknown|? ][status.unknown|in_root]
|
|
HGPLAIN disables color
|
|
$ HGPLAIN=1 hg status --color=debug
|
|
? a/1/in_a_1 (glob)
|
|
? a/in_a (glob)
|
|
? b/1/in_b_1 (glob)
|
|
? b/2/in_b_2 (glob)
|
|
? b/in_b (glob)
|
|
? in_root
|
|
HGPLAINEXCEPT=color does not disable color
|
|
$ HGPLAINEXCEPT=color hg status --color=debug
|
|
[status.unknown|? ][status.unknown|a/1/in_a_1] (glob)
|
|
[status.unknown|? ][status.unknown|a/in_a] (glob)
|
|
[status.unknown|? ][status.unknown|b/1/in_b_1] (glob)
|
|
[status.unknown|? ][status.unknown|b/2/in_b_2] (glob)
|
|
[status.unknown|? ][status.unknown|b/in_b] (glob)
|
|
[status.unknown|? ][status.unknown|in_root]
|
|
|
|
hg status with template
|
|
$ hg status -T "{label('red', path)}\n" --color=debug
|
|
[red|a/1/in_a_1]
|
|
[red|a/in_a]
|
|
[red|b/1/in_b_1]
|
|
[red|b/2/in_b_2]
|
|
[red|b/in_b]
|
|
[red|in_root]
|
|
|
|
hg status . in repo root:
|
|
|
|
$ hg status .
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/1/in_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/in_a\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/in_b\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_root\x1b[0m (esc)
|
|
|
|
$ hg status --cwd a
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/1/in_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/in_a\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/in_b\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_root\x1b[0m (esc)
|
|
$ hg status --cwd a .
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m1/in_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_a\x1b[0m (esc)
|
|
$ hg status --cwd a ..
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m1/in_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_a\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../b/1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../b/2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../b/in_b\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../in_root\x1b[0m (esc)
|
|
|
|
$ hg status --cwd b
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/1/in_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/in_a\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/in_b\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_root\x1b[0m (esc)
|
|
$ hg status --cwd b .
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_b\x1b[0m (esc)
|
|
$ hg status --cwd b ..
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../a/1/in_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../a/in_a\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_b\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../in_root\x1b[0m (esc)
|
|
|
|
$ hg status --cwd a/1
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/1/in_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/in_a\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/in_b\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_root\x1b[0m (esc)
|
|
$ hg status --cwd a/1 .
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_a_1\x1b[0m (esc)
|
|
$ hg status --cwd a/1 ..
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../in_a\x1b[0m (esc)
|
|
|
|
$ hg status --cwd b/1
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/1/in_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/in_a\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/in_b\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_root\x1b[0m (esc)
|
|
$ hg status --cwd b/1 .
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_b_1\x1b[0m (esc)
|
|
$ hg status --cwd b/1 ..
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../in_b\x1b[0m (esc)
|
|
|
|
$ hg status --cwd b/2
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/1/in_a_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4ma/in_a\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/2/in_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4mb/in_b\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_root\x1b[0m (esc)
|
|
$ hg status --cwd b/2 .
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_b_2\x1b[0m (esc)
|
|
$ hg status --cwd b/2 ..
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../1/in_b_1\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4min_b_2\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4m../in_b\x1b[0m (esc)
|
|
|
|
Make sure --color=never works
|
|
$ hg status --color=never
|
|
? a/1/in_a_1
|
|
? a/in_a
|
|
? b/1/in_b_1
|
|
? b/2/in_b_2
|
|
? b/in_b
|
|
? in_root
|
|
|
|
Make sure ui.formatted=False works
|
|
$ hg status --color=auto --config ui.formatted=False
|
|
? a/1/in_a_1
|
|
? a/in_a
|
|
? b/1/in_b_1
|
|
? b/2/in_b_2
|
|
? b/in_b
|
|
? in_root
|
|
|
|
$ cd ..
|
|
|
|
$ hg init repo2
|
|
$ cd repo2
|
|
$ touch modified removed deleted ignored
|
|
$ echo "ignored" > .gitignore
|
|
$ hg ci -A -m 'initial checkin'
|
|
adding .gitignore
|
|
adding deleted
|
|
adding modified
|
|
adding removed
|
|
$ hg log --color=debug
|
|
[log.changeset changeset.draft|commit: 51a28a6611a2]
|
|
[log.user|user: test]
|
|
[log.date|date: Thu Jan 01 00:00:00 1970 +0000]
|
|
[log.summary|summary: initial checkin]
|
|
|
|
$ hg log -Tcompact --color=debug
|
|
[log.node|51a28a6611a2] [log.date|1970-01-01 00:00 +0000] [log.user|test]
|
|
[ui.note log.description|initial checkin]
|
|
|
|
Labels on empty strings should not be displayed, labels on custom
|
|
templates should be.
|
|
|
|
$ hg log --color=debug -T '{label("my.label",author)}\n{label("skipped.label","")}'
|
|
[my.label|test]
|
|
$ touch modified added unknown ignored
|
|
$ hg add added
|
|
$ hg remove removed
|
|
$ rm deleted
|
|
|
|
hg status:
|
|
|
|
$ hg status
|
|
\x1b[0;32;1mA \x1b[0m\x1b[0;32;1madded\x1b[0m (esc)
|
|
\x1b[0;31;1mR \x1b[0m\x1b[0;31;1mremoved\x1b[0m (esc)
|
|
\x1b[0;36;1;4m! \x1b[0m\x1b[0;36;1;4mdeleted\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4munknown\x1b[0m (esc)
|
|
|
|
hg status modified added removed deleted unknown never-existed ignored:
|
|
|
|
$ hg status modified added removed deleted unknown never-existed ignored
|
|
never-existed: * (glob)
|
|
\x1b[0;32;1mA \x1b[0m\x1b[0;32;1madded\x1b[0m (esc)
|
|
\x1b[0;31;1mR \x1b[0m\x1b[0;31;1mremoved\x1b[0m (esc)
|
|
\x1b[0;36;1;4m! \x1b[0m\x1b[0;36;1;4mdeleted\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4munknown\x1b[0m (esc)
|
|
|
|
$ hg copy modified copied
|
|
|
|
hg status -C:
|
|
|
|
$ hg status -C
|
|
\x1b[0;32;1mA \x1b[0m\x1b[0;32;1madded\x1b[0m (esc)
|
|
\x1b[0;32;1mA \x1b[0m\x1b[0;32;1mcopied\x1b[0m (esc)
|
|
\x1b[0;0m modified\x1b[0m (esc)
|
|
\x1b[0;31;1mR \x1b[0m\x1b[0;31;1mremoved\x1b[0m (esc)
|
|
\x1b[0;36;1;4m! \x1b[0m\x1b[0;36;1;4mdeleted\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4munknown\x1b[0m (esc)
|
|
|
|
hg status -A:
|
|
|
|
$ hg status -A
|
|
\x1b[0;32;1mA \x1b[0m\x1b[0;32;1madded\x1b[0m (esc)
|
|
\x1b[0;32;1mA \x1b[0m\x1b[0;32;1mcopied\x1b[0m (esc)
|
|
\x1b[0;0m modified\x1b[0m (esc)
|
|
\x1b[0;31;1mR \x1b[0m\x1b[0;31;1mremoved\x1b[0m (esc)
|
|
\x1b[0;36;1;4m! \x1b[0m\x1b[0;36;1;4mdeleted\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4munknown\x1b[0m (esc)
|
|
\x1b[0;30;1mI \x1b[0m\x1b[0;30;1mignored\x1b[0m (esc)
|
|
\x1b[0;0mC \x1b[0m\x1b[0;0m.gitignore\x1b[0m (esc)
|
|
\x1b[0;0mC \x1b[0m\x1b[0;0mmodified\x1b[0m (esc)
|
|
|
|
|
|
$ echo "ignoreddir" > .gitignore
|
|
$ mkdir ignoreddir
|
|
$ touch ignoreddir/file
|
|
|
|
hg status ignoreddir/file:
|
|
|
|
$ hg status ignoreddir/file
|
|
|
|
hg status -i ignoreddir/file:
|
|
|
|
$ hg status -i ignoreddir/file
|
|
\x1b[0;30;1mI \x1b[0m\x1b[0;30;1mignoreddir/file\x1b[0m (esc)
|
|
$ cd ..
|
|
|
|
check 'status -q' and some combinations
|
|
|
|
$ hg init repo3
|
|
$ cd repo3
|
|
$ touch modified removed deleted ignored
|
|
$ echo "ignored" > .gitignore
|
|
$ hg commit -A -m 'initial checkin'
|
|
adding .gitignore
|
|
adding deleted
|
|
adding modified
|
|
adding removed
|
|
$ touch added unknown ignored
|
|
$ hg add added
|
|
$ echo "test" >> modified
|
|
$ hg remove removed
|
|
$ rm deleted
|
|
$ hg copy modified copied
|
|
|
|
test unknown color
|
|
|
|
$ hg --config color.status.modified=periwinkle status
|
|
ignoring unknown color/effect 'periwinkle' (configured in color.status.modified)
|
|
ignoring unknown color/effect 'periwinkle' (configured in color.status.modified)
|
|
ignoring unknown color/effect 'periwinkle' (configured in color.status.modified)
|
|
M modified
|
|
\x1b[0;32;1mA \x1b[0m\x1b[0;32;1madded\x1b[0m (esc)
|
|
\x1b[0;32;1mA \x1b[0m\x1b[0;32;1mcopied\x1b[0m (esc)
|
|
\x1b[0;31;1mR \x1b[0m\x1b[0;31;1mremoved\x1b[0m (esc)
|
|
\x1b[0;36;1;4m! \x1b[0m\x1b[0;36;1;4mdeleted\x1b[0m (esc)
|
|
\x1b[0;35;1;4m? \x1b[0m\x1b[0;35;1;4munknown\x1b[0m (esc)
|
|
|
|
Run status with 2 different flags.
|
|
Check if result is the same or different.
|
|
If result is not as expected, raise error
|
|
|
|
$ assert() {
|
|
> hg status $1 > ../a
|
|
> hg status $2 > ../b
|
|
> if diff ../a ../b > /dev/null; then
|
|
> out=0
|
|
> else
|
|
> out=1
|
|
> fi
|
|
> if [ $3 -eq 0 ]; then
|
|
> df="same"
|
|
> else
|
|
> df="different"
|
|
> fi
|
|
> if [ $out -ne $3 ]; then
|
|
> echo "Error on $1 and $2, should be $df."
|
|
> fi
|
|
> }
|
|
|
|
assert flag1 flag2 [0-same | 1-different]
|
|
|
|
$ assert "-q" "-mard" 0
|
|
$ assert "-A" "-marduicC" 0
|
|
$ assert "-qA" "-mardcC" 0
|
|
$ assert "-qAui" "-A" 0
|
|
$ assert "-qAu" "-marducC" 0
|
|
$ assert "-qAi" "-mardicC" 0
|
|
$ assert "-qu" "-u" 0
|
|
$ assert "-q" "-u" 1
|
|
$ assert "-m" "-a" 1
|
|
$ assert "-r" "-d" 1
|
|
$ cd ..
|
|
|
|
test 'resolve -l'
|
|
|
|
$ hg init repo4
|
|
$ cd repo4
|
|
$ echo "file a" > a
|
|
$ echo "file b" > b
|
|
$ hg add a b
|
|
$ hg commit -m "initial"
|
|
$ echo "file a change 1" > a
|
|
$ echo "file b change 1" > b
|
|
$ hg commit -m "head 1"
|
|
$ hg update 'desc(initial)'
|
|
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ echo "file a change 2" > a
|
|
$ echo "file b change 2" > b
|
|
$ hg commit -m "head 2"
|
|
$ hg merge
|
|
merging a
|
|
merging b
|
|
warning: 1 conflicts while merging a! (edit, then use 'hg resolve --mark')
|
|
warning: 1 conflicts while merging b! (edit, then use 'hg resolve --mark')
|
|
0 files updated, 0 files merged, 0 files removed, 2 files unresolved
|
|
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
|
|
[1]
|
|
$ hg resolve -m b
|
|
|
|
hg resolve with one unresolved, one resolved:
|
|
|
|
$ hg resolve -l
|
|
\x1b[0;31;1mU \x1b[0m\x1b[0;31;1ma\x1b[0m (esc)
|
|
\x1b[0;32;1mR \x1b[0m\x1b[0;32;1mb\x1b[0m (esc)
|
|
|
|
color coding of error message with current availability of curses
|
|
|
|
$ hg unknowncommand > /dev/null
|
|
unknown command 'unknowncommand'
|
|
(use 'hg help' to get help)
|
|
[255]
|
|
|
|
color coding of error message without curses
|
|
|
|
$ echo 'raise ImportError' > curses.py
|
|
$ PYTHONPATH=`pwd`:$PYTHONPATH hg unknowncommand > /dev/null
|
|
unknown command 'unknowncommand'
|
|
(use 'hg help' to get help)
|
|
[255]
|
|
|
|
$ cd ..
|