mirror of
https://github.com/facebook/sapling.git
synced 2024-10-08 15:57:43 +03:00
df9b03eafa
The behaviour is correct but for bad reasons: the repo.set() call in phase command fails for '-1'. It should be rejected explicitely by phase boundary commands, sadly this is hard to do because phase changes are not applied atomically.
478 lines
9.1 KiB
Raku
478 lines
9.1 KiB
Raku
$ hglog() { hg log --template "{rev} {phaseidx} {desc}\n" $*; }
|
|
$ mkcommit() {
|
|
> echo "$1" > "$1"
|
|
> hg add "$1"
|
|
> message="$1"
|
|
> shift
|
|
> hg ci -m "$message" $*
|
|
> }
|
|
|
|
$ hg init initialrepo
|
|
$ cd initialrepo
|
|
|
|
Cannot change null revision phase
|
|
|
|
$ hg phase --force --secret null
|
|
abort: unknown revision '-1'!
|
|
[255]
|
|
$ hg phase null
|
|
-1: public
|
|
|
|
$ mkcommit A
|
|
|
|
New commit are draft by default
|
|
|
|
$ hglog
|
|
0 1 A
|
|
|
|
Following commit are draft too
|
|
|
|
$ mkcommit B
|
|
|
|
$ hglog
|
|
1 1 B
|
|
0 1 A
|
|
|
|
Draft commit are properly created over public one:
|
|
|
|
$ hg phase --public .
|
|
$ hglog
|
|
1 0 B
|
|
0 0 A
|
|
|
|
$ mkcommit C
|
|
$ mkcommit D
|
|
|
|
$ hglog
|
|
3 1 D
|
|
2 1 C
|
|
1 0 B
|
|
0 0 A
|
|
|
|
Test creating changeset as secret
|
|
|
|
$ mkcommit E --config phases.new-commit='secret'
|
|
$ hglog
|
|
4 2 E
|
|
3 1 D
|
|
2 1 C
|
|
1 0 B
|
|
0 0 A
|
|
|
|
Test the secret property is inherited
|
|
|
|
$ mkcommit H
|
|
$ hglog
|
|
5 2 H
|
|
4 2 E
|
|
3 1 D
|
|
2 1 C
|
|
1 0 B
|
|
0 0 A
|
|
|
|
Even on merge
|
|
|
|
$ hg up -q 1
|
|
$ mkcommit "B'"
|
|
created new head
|
|
$ hglog
|
|
6 1 B'
|
|
5 2 H
|
|
4 2 E
|
|
3 1 D
|
|
2 1 C
|
|
1 0 B
|
|
0 0 A
|
|
$ hg merge 4 # E
|
|
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
(branch merge, don't forget to commit)
|
|
$ hg ci -m "merge B' and E"
|
|
$ hglog
|
|
7 2 merge B' and E
|
|
6 1 B'
|
|
5 2 H
|
|
4 2 E
|
|
3 1 D
|
|
2 1 C
|
|
1 0 B
|
|
0 0 A
|
|
|
|
Test secret changeset are not pushed
|
|
|
|
$ hg init ../push-dest
|
|
$ cat > ../push-dest/.hg/hgrc << EOF
|
|
> [phases]
|
|
> publish=False
|
|
> EOF
|
|
$ hg outgoing ../push-dest --template='{rev} {phase} {desc|firstline}\n'
|
|
comparing with ../push-dest
|
|
searching for changes
|
|
0 public A
|
|
1 public B
|
|
2 draft C
|
|
3 draft D
|
|
6 draft B'
|
|
$ hg outgoing -r default ../push-dest --template='{rev} {phase} {desc|firstline}\n'
|
|
comparing with ../push-dest
|
|
searching for changes
|
|
0 public A
|
|
1 public B
|
|
2 draft C
|
|
3 draft D
|
|
6 draft B'
|
|
|
|
$ hg push ../push-dest -f # force because we push multiple heads
|
|
pushing to ../push-dest
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 5 changesets with 5 changes to 5 files (+1 heads)
|
|
$ hglog
|
|
7 2 merge B' and E
|
|
6 1 B'
|
|
5 2 H
|
|
4 2 E
|
|
3 1 D
|
|
2 1 C
|
|
1 0 B
|
|
0 0 A
|
|
$ cd ../push-dest
|
|
$ hglog
|
|
4 1 B'
|
|
3 1 D
|
|
2 1 C
|
|
1 0 B
|
|
0 0 A
|
|
|
|
(Issue3303)
|
|
Check that remote secret changeset are ignore when checking creation of remote heads
|
|
|
|
We add a secret head into the push destination. This secreat head shadow a
|
|
visible shared between the initial repo and the push destination.
|
|
|
|
$ hg up -q 4 # B'
|
|
$ mkcommit Z --config phases.new-commit=secret
|
|
$ hg phase .
|
|
5: secret
|
|
|
|
# We now try to push a new public changeset that descend from the common public
|
|
# head shadowed by the remote secret head.
|
|
|
|
$ cd ../initialrepo
|
|
$ hg up -q 6 #B'
|
|
$ mkcommit I
|
|
created new head
|
|
$ hg push ../push-dest
|
|
pushing to ../push-dest
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
|
:note: The "(+1 heads)" is wrong as we do not had any visible head
|
|
|
|
|
|
Restore condition prior extra insertion.
|
|
$ hg -q --config extensions.mq= strip .
|
|
$ hg up -q 7
|
|
$ cd ..
|
|
|
|
Test secret changeset are not pull
|
|
|
|
$ hg init pull-dest
|
|
$ cd pull-dest
|
|
$ hg pull ../initialrepo
|
|
pulling from ../initialrepo
|
|
requesting all changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 5 changesets with 5 changes to 5 files (+1 heads)
|
|
(run 'hg heads' to see heads, 'hg merge' to merge)
|
|
$ hglog
|
|
4 0 B'
|
|
3 0 D
|
|
2 0 C
|
|
1 0 B
|
|
0 0 A
|
|
$ cd ..
|
|
|
|
But secret can still be bundled explicitly
|
|
|
|
$ cd initialrepo
|
|
$ hg bundle --base '4^' -r 'children(4)' ../secret-bundle.hg
|
|
4 changesets found
|
|
$ cd ..
|
|
|
|
Test secret changeset are not cloned
|
|
(during local clone)
|
|
|
|
$ hg clone -qU initialrepo clone-dest
|
|
$ hglog -R clone-dest
|
|
4 0 B'
|
|
3 0 D
|
|
2 0 C
|
|
1 0 B
|
|
0 0 A
|
|
|
|
Test revset
|
|
|
|
$ cd initialrepo
|
|
$ hglog -r 'public()'
|
|
0 0 A
|
|
1 0 B
|
|
$ hglog -r 'draft()'
|
|
2 1 C
|
|
3 1 D
|
|
6 1 B'
|
|
$ hglog -r 'secret()'
|
|
4 2 E
|
|
5 2 H
|
|
7 2 merge B' and E
|
|
|
|
test that phase are displayed in log at debug level
|
|
|
|
$ hg log --debug
|
|
changeset: 7:17a481b3bccb796c0521ae97903d81c52bfee4af
|
|
tag: tip
|
|
phase: secret
|
|
parent: 6:cf9fe039dfd67e829edf6522a45de057b5c86519
|
|
parent: 4:a603bfb5a83e312131cebcd05353c217d4d21dde
|
|
manifest: 7:5e724ffacba267b2ab726c91fc8b650710deaaa8
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files+: C D E
|
|
extra: branch=default
|
|
description:
|
|
merge B' and E
|
|
|
|
|
|
changeset: 6:cf9fe039dfd67e829edf6522a45de057b5c86519
|
|
phase: draft
|
|
parent: 1:27547f69f25460a52fff66ad004e58da7ad3fb56
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
manifest: 6:ab8bfef2392903058bf4ebb9e7746e8d7026b27a
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files+: B'
|
|
extra: branch=default
|
|
description:
|
|
B'
|
|
|
|
|
|
changeset: 5:a030c6be5127abc010fcbff1851536552e6951a8
|
|
phase: secret
|
|
parent: 4:a603bfb5a83e312131cebcd05353c217d4d21dde
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
manifest: 5:5c710aa854874fe3d5fa7192e77bdb314cc08b5a
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files+: H
|
|
extra: branch=default
|
|
description:
|
|
H
|
|
|
|
|
|
changeset: 4:a603bfb5a83e312131cebcd05353c217d4d21dde
|
|
phase: secret
|
|
parent: 3:b3325c91a4d916bcc4cdc83ea3fe4ece46a42f6e
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
manifest: 4:7173fd1c27119750b959e3a0f47ed78abe75d6dc
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files+: E
|
|
extra: branch=default
|
|
description:
|
|
E
|
|
|
|
|
|
changeset: 3:b3325c91a4d916bcc4cdc83ea3fe4ece46a42f6e
|
|
phase: draft
|
|
parent: 2:f838bfaca5c7226600ebcfd84f3c3c13a28d3757
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
manifest: 3:6e1f4c47ecb533ffd0c8e52cdc88afb6cd39e20c
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files+: D
|
|
extra: branch=default
|
|
description:
|
|
D
|
|
|
|
|
|
changeset: 2:f838bfaca5c7226600ebcfd84f3c3c13a28d3757
|
|
phase: draft
|
|
parent: 1:27547f69f25460a52fff66ad004e58da7ad3fb56
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
manifest: 2:66a5a01817fdf5239c273802b5b7618d051c89e4
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files+: C
|
|
extra: branch=default
|
|
description:
|
|
C
|
|
|
|
|
|
changeset: 1:27547f69f25460a52fff66ad004e58da7ad3fb56
|
|
parent: 0:4a2df7238c3b48766b5e22fafbb8a2f506ec8256
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
manifest: 1:cb5cbbc1bfbf24cc34b9e8c16914e9caa2d2a7fd
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files+: B
|
|
extra: branch=default
|
|
description:
|
|
B
|
|
|
|
|
|
changeset: 0:4a2df7238c3b48766b5e22fafbb8a2f506ec8256
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
manifest: 0:007d8c9d88841325f5c6b06371b35b4e8a2b1a83
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files+: A
|
|
extra: branch=default
|
|
description:
|
|
A
|
|
|
|
|
|
|
|
Test phase command
|
|
===================
|
|
|
|
initial picture
|
|
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [extensions]
|
|
> hgext.graphlog=
|
|
> EOF
|
|
$ hg log -G --template "{rev} {phase} {desc}\n"
|
|
@ 7 secret merge B' and E
|
|
|\
|
|
| o 6 draft B'
|
|
| |
|
|
+---o 5 secret H
|
|
| |
|
|
o | 4 secret E
|
|
| |
|
|
o | 3 draft D
|
|
| |
|
|
o | 2 draft C
|
|
|/
|
|
o 1 public B
|
|
|
|
|
o 0 public A
|
|
|
|
|
|
display changesets phase
|
|
|
|
(mixing -r and plain rev specification)
|
|
|
|
$ hg phase 1::4 -r 7
|
|
1: public
|
|
2: draft
|
|
3: draft
|
|
4: secret
|
|
7: secret
|
|
|
|
|
|
move changeset forward
|
|
|
|
(with -r option)
|
|
|
|
$ hg phase --public -r 2
|
|
$ hg log -G --template "{rev} {phase} {desc}\n"
|
|
@ 7 secret merge B' and E
|
|
|\
|
|
| o 6 draft B'
|
|
| |
|
|
+---o 5 secret H
|
|
| |
|
|
o | 4 secret E
|
|
| |
|
|
o | 3 draft D
|
|
| |
|
|
o | 2 public C
|
|
|/
|
|
o 1 public B
|
|
|
|
|
o 0 public A
|
|
|
|
|
|
move changeset backward
|
|
|
|
(without -r option)
|
|
|
|
$ hg phase --draft --force 2
|
|
$ hg log -G --template "{rev} {phase} {desc}\n"
|
|
@ 7 secret merge B' and E
|
|
|\
|
|
| o 6 draft B'
|
|
| |
|
|
+---o 5 secret H
|
|
| |
|
|
o | 4 secret E
|
|
| |
|
|
o | 3 draft D
|
|
| |
|
|
o | 2 draft C
|
|
|/
|
|
o 1 public B
|
|
|
|
|
o 0 public A
|
|
|
|
|
|
move changeset forward and backward
|
|
|
|
$ hg phase --draft --force 1::4
|
|
$ hg log -G --template "{rev} {phase} {desc}\n"
|
|
@ 7 secret merge B' and E
|
|
|\
|
|
| o 6 draft B'
|
|
| |
|
|
+---o 5 secret H
|
|
| |
|
|
o | 4 draft E
|
|
| |
|
|
o | 3 draft D
|
|
| |
|
|
o | 2 draft C
|
|
|/
|
|
o 1 draft B
|
|
|
|
|
o 0 public A
|
|
|
|
test partial failure
|
|
|
|
$ hg phase --public 7
|
|
$ hg phase --draft '5 or 7'
|
|
cannot move 1 changesets to a more permissive phase, use --force
|
|
phase changed for 1 changesets
|
|
[1]
|
|
$ hg log -G --template "{rev} {phase} {desc}\n"
|
|
@ 7 public merge B' and E
|
|
|\
|
|
| o 6 public B'
|
|
| |
|
|
+---o 5 draft H
|
|
| |
|
|
o | 4 public E
|
|
| |
|
|
o | 3 public D
|
|
| |
|
|
o | 2 public C
|
|
|/
|
|
o 1 public B
|
|
|
|
|
o 0 public A
|
|
|
|
|
|
test complete failure
|
|
|
|
$ hg phase --draft 7
|
|
cannot move 1 changesets to a more permissive phase, use --force
|
|
no phases changed
|
|
[1]
|