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
876 lines
24 KiB
Turing
876 lines
24 KiB
Turing
#chg-compatible
|
|
|
|
$ configure mutation-norecord
|
|
$ disable treemanifest
|
|
|
|
$ setconfig format.usegeneraldelta=yes
|
|
|
|
$ restore() {
|
|
> hg unbundle -q .hg/strip-backup/*
|
|
> rm .hg/strip-backup/*
|
|
> }
|
|
$ teststrip() {
|
|
> hg up -C $1
|
|
> echo % before update $1, strip $2
|
|
> hg parents
|
|
> hg --traceback debugstrip $2
|
|
> echo % after update $1, strip $2
|
|
> hg parents
|
|
> restore
|
|
> }
|
|
|
|
$ hg init test
|
|
$ cd test
|
|
|
|
$ echo foo > bar
|
|
$ hg ci -Ama
|
|
adding bar
|
|
|
|
$ echo more >> bar
|
|
$ hg ci -Amb
|
|
|
|
$ echo blah >> bar
|
|
$ hg ci -Amc
|
|
|
|
$ hg up 'desc(b)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ echo blah >> bar
|
|
$ hg ci -Amd
|
|
|
|
$ echo final >> bar
|
|
$ hg ci -Ame
|
|
|
|
$ hg log
|
|
commit: 443431ffac4f
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: e
|
|
|
|
commit: 65bd5f99a4a3
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: d
|
|
|
|
commit: 264128213d29
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: c
|
|
|
|
commit: ef3a871183d7
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: b
|
|
|
|
commit: 9ab35a2d17cb
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: a
|
|
|
|
|
|
$ teststrip 'desc(e)' 'desc(e)'
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
% before update desc(e), strip desc(e)
|
|
commit: 443431ffac4f
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: e
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
% after update desc(e), strip desc(e)
|
|
commit: 65bd5f99a4a3
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: d
|
|
|
|
$ teststrip 'desc(e)' 'desc(d)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
% before update desc(e), strip desc(d)
|
|
commit: 443431ffac4f
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: e
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
% after update desc(e), strip desc(d)
|
|
commit: ef3a871183d7
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: b
|
|
|
|
$ teststrip 'desc(b)' 'desc(e)'
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
% before update desc(b), strip desc(e)
|
|
commit: ef3a871183d7
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: b
|
|
|
|
% after update desc(b), strip desc(e)
|
|
commit: ef3a871183d7
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: b
|
|
|
|
$ teststrip 'desc(e)' 'desc(c)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
% before update desc(e), strip desc(c)
|
|
commit: 443431ffac4f
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: e
|
|
|
|
% after update desc(e), strip desc(c)
|
|
commit: 443431ffac4f
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: e
|
|
|
|
$ teststrip 'desc(c)' 'desc(b)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
% before update desc(c), strip desc(b)
|
|
commit: 264128213d29
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: c
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
% after update desc(c), strip desc(b)
|
|
commit: 9ab35a2d17cb
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: a
|
|
|
|
$ teststrip null 'desc(c)'
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
% before update null, strip desc(c)
|
|
% after update null, strip desc(c)
|
|
|
|
$ hg log
|
|
commit: 264128213d29
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: c
|
|
|
|
commit: 443431ffac4f
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: e
|
|
|
|
commit: 65bd5f99a4a3
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: d
|
|
|
|
commit: ef3a871183d7
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: b
|
|
|
|
commit: 9ab35a2d17cb
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: a
|
|
|
|
$ hg up -C 'desc(c)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg parents
|
|
commit: 264128213d29
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: c
|
|
|
|
|
|
$ hg --traceback debugstrip 'desc(c)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg parents
|
|
commit: ef3a871183d7
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: b
|
|
|
|
$ hg debugbundle .hg/strip-backup/*
|
|
Stream params: {Compression: BZ}
|
|
changegroup -- {nbchanges: 1, version: 02}
|
|
264128213d290d868c54642d13aeaa3675551a78
|
|
phase-heads -- {}
|
|
264128213d290d868c54642d13aeaa3675551a78 draft
|
|
$ hg pull .hg/strip-backup/*
|
|
pulling from .hg/strip-backup/264128213d29-0b39d6bf-backup.hg
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 0 changes to 1 files
|
|
$ rm .hg/strip-backup/*
|
|
$ hg log --graph
|
|
o commit: 264128213d29
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: c
|
|
│
|
|
│ o commit: 443431ffac4f
|
|
│ │ user: test
|
|
│ │ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ │ summary: e
|
|
│ │
|
|
│ o commit: 65bd5f99a4a3
|
|
├─╯ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: d
|
|
│
|
|
@ commit: ef3a871183d7
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: b
|
|
│
|
|
o commit: 9ab35a2d17cb
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: a
|
|
|
|
$ hg up -C 'desc(d)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg merge 'desc(c)'
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
(branch merge, don't forget to commit)
|
|
|
|
before strip of merge parent
|
|
|
|
$ hg parents
|
|
commit: 65bd5f99a4a3
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: d
|
|
|
|
commit: 264128213d29
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: c
|
|
|
|
$ hg debugstrip 'desc(c)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
after strip of merge parent
|
|
|
|
$ hg parents
|
|
commit: ef3a871183d7
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: b
|
|
|
|
$ restore
|
|
|
|
$ hg up
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
updated to "264128213d29: c"
|
|
1 other heads for branch "default"
|
|
$ hg log -G
|
|
@ commit: 264128213d29
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: c
|
|
│
|
|
│ o commit: 443431ffac4f
|
|
│ │ user: test
|
|
│ │ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ │ summary: e
|
|
│ │
|
|
│ o commit: 65bd5f99a4a3
|
|
├─╯ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: d
|
|
│
|
|
o commit: ef3a871183d7
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: b
|
|
│
|
|
o commit: 9ab35a2d17cb
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: a
|
|
|
|
|
|
2 is parent of 3, only one strip should happen
|
|
|
|
$ hg debugstrip "roots(desc(d))" 'desc(e)'
|
|
$ hg log -G
|
|
@ commit: 264128213d29
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: c
|
|
│
|
|
o commit: ef3a871183d7
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: b
|
|
│
|
|
o commit: 9ab35a2d17cb
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: a
|
|
|
|
$ restore
|
|
$ hg log -G
|
|
o commit: 443431ffac4f
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: e
|
|
│
|
|
o commit: 65bd5f99a4a3
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: d
|
|
│
|
|
│ @ commit: 264128213d29
|
|
├─╯ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: c
|
|
│
|
|
o commit: ef3a871183d7
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: b
|
|
│
|
|
o commit: 9ab35a2d17cb
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: a
|
|
|
|
2 different branches: 2 strips
|
|
|
|
$ hg debugstrip 'desc(c)' 'desc(e)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg log -G
|
|
o commit: 65bd5f99a4a3
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: d
|
|
│
|
|
@ commit: ef3a871183d7
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: b
|
|
│
|
|
o commit: 9ab35a2d17cb
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: a
|
|
|
|
$ restore
|
|
|
|
2 different branches and a common ancestor: 1 strip
|
|
|
|
$ hg debugstrip 'desc(b)' "desc(c)|desc(e)"
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ restore
|
|
|
|
stripping an empty revset
|
|
|
|
$ hg debugstrip "desc(b) and not desc(b)"
|
|
abort: empty revision set
|
|
[255]
|
|
|
|
Strip adds, removes, modifies with --keep
|
|
|
|
$ touch b
|
|
$ hg add b
|
|
$ hg commit -mb
|
|
$ touch c
|
|
|
|
... with a clean working dir
|
|
|
|
$ hg add c
|
|
$ hg rm bar
|
|
$ hg commit -mc
|
|
$ hg status
|
|
$ hg debugstrip --keep tip
|
|
$ hg status
|
|
! bar
|
|
? c
|
|
|
|
... with a dirty working dir
|
|
|
|
$ hg add c
|
|
$ hg rm bar
|
|
$ hg commit -mc
|
|
$ hg status
|
|
$ echo b > b
|
|
$ echo d > d
|
|
$ hg debugstrip --keep tip
|
|
$ hg status
|
|
M b
|
|
! bar
|
|
? c
|
|
? d
|
|
|
|
... after updating the dirstate
|
|
$ hg add c
|
|
$ hg commit -mc
|
|
$ hg rm c
|
|
$ hg commit -mc
|
|
$ hg debugstrip --keep '.^' -q
|
|
$ cd ..
|
|
|
|
stripping many nodes on a complex graph (issue3299)
|
|
|
|
$ hg init issue3299
|
|
$ cd issue3299
|
|
$ hg debugbuilddag '@a.:a@b.:b.:x<a@a.:a<b@b.:b<a@a.:a'
|
|
$ hg debugstrip 'not ancestors(x)'
|
|
|
|
test hg debugstrip -B bookmark
|
|
|
|
$ cd ..
|
|
$ hg init bookmarks
|
|
$ cd bookmarks
|
|
$ hg debugbuilddag '..<2.*1/2:m<2+3:c<m+3:a<2.:b<m+2:d<2.:e<m+1:f'
|
|
$ hg bookmark -r 'a' 'todelete'
|
|
$ hg bookmark -r 'b' 'B'
|
|
$ hg bookmark -r 'b' 'nostrip'
|
|
$ hg bookmark -r 'c' 'delete'
|
|
$ hg bookmark -r 'd' 'multipledelete1'
|
|
$ hg bookmark -r 'e' 'multipledelete2'
|
|
$ hg bookmark -r 'f' 'singlenode1'
|
|
$ hg bookmark -r 'f' 'singlenode2'
|
|
$ hg book -d a b c d e f m
|
|
$ hg up -C todelete
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
(activating bookmark todelete)
|
|
$ hg debugstrip -B nostrip
|
|
bookmark 'nostrip' deleted
|
|
abort: empty revision set
|
|
[255]
|
|
$ hg debugstrip -B todelete
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
bookmark 'todelete' deleted
|
|
$ hg id -ir dcbb326fdec2
|
|
abort: unknown revision 'dcbb326fdec2'!
|
|
[255]
|
|
$ hg id -ir d62d843c9a01
|
|
d62d843c9a01
|
|
$ hg bookmarks
|
|
B ff43616e5d0f
|
|
delete 2702dd0c91e7
|
|
multipledelete1 e46a4836065c
|
|
multipledelete2 b4594d867745
|
|
singlenode1 43227190fef8
|
|
singlenode2 43227190fef8
|
|
$ hg debugstrip -B multipledelete1 -B multipledelete2
|
|
bookmark 'multipledelete1' deleted
|
|
bookmark 'multipledelete2' deleted
|
|
$ hg id -ir e46a4836065c
|
|
abort: unknown revision 'e46a4836065c'!
|
|
[255]
|
|
$ hg id -ir b4594d867745
|
|
abort: unknown revision 'b4594d867745'!
|
|
[255]
|
|
$ hg debugstrip -B singlenode1 -B singlenode2
|
|
bookmark 'singlenode1' deleted
|
|
bookmark 'singlenode2' deleted
|
|
$ hg id -ir 43227190fef8
|
|
abort: unknown revision '43227190fef8'!
|
|
[255]
|
|
$ hg debugstrip -B unknownbookmark
|
|
abort: bookmark not found: 'unknownbookmark'
|
|
[255]
|
|
$ hg debugstrip -B unknownbookmark1 -B unknownbookmark2
|
|
abort: bookmark not found: 'unknownbookmark1', 'unknownbookmark2'
|
|
[255]
|
|
$ hg debugstrip -B delete -B unknownbookmark
|
|
abort: bookmark not found: 'unknownbookmark'
|
|
[255]
|
|
$ hg debugstrip -B delete
|
|
bookmark 'delete' deleted
|
|
$ hg id -ir 'desc(r10)':2702dd0c91e7
|
|
abort: unknown revision '2702dd0c91e7'!
|
|
[255]
|
|
$ hg update B
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
(activating bookmark B)
|
|
$ echo a > a
|
|
$ hg add a
|
|
$ hg debugstrip -B B
|
|
abort: local changes found
|
|
[255]
|
|
$ hg bookmarks
|
|
* B ff43616e5d0f
|
|
|
|
Make sure no one adds back a -b option:
|
|
|
|
$ hg debugstrip -b tip
|
|
hg debugstrip: option -b not recognized
|
|
(use 'hg debugstrip -h' to get help)
|
|
[255]
|
|
|
|
$ cd ..
|
|
|
|
Verify bundles don't get overwritten:
|
|
|
|
$ hg init doublebundle
|
|
$ cd doublebundle
|
|
$ touch a
|
|
$ hg commit -Aqm a
|
|
$ touch b
|
|
$ hg commit -Aqm b
|
|
$ hg debugstrip -r 'desc(a)'
|
|
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
$ ls .hg/strip-backup
|
|
3903775176ed-e68910bd-backup.hg
|
|
$ hg pull -q -r 3903775176ed .hg/strip-backup/3903775176ed-e68910bd-backup.hg
|
|
$ hg debugstrip -r 'desc(a)'
|
|
$ ls .hg/strip-backup
|
|
3903775176ed-54390173-backup.hg
|
|
3903775176ed-e68910bd-backup.hg
|
|
$ cd ..
|
|
|
|
Test that we only bundle the stripped changesets (issue4736)
|
|
------------------------------------------------------------
|
|
|
|
initialization (previous repo is empty anyway)
|
|
|
|
$ hg init issue4736
|
|
$ cd issue4736
|
|
$ echo a > a
|
|
$ hg add a
|
|
$ hg commit -m commitA
|
|
$ echo b > b
|
|
$ hg add b
|
|
$ hg commit -m commitB
|
|
$ echo c > c
|
|
$ hg add c
|
|
$ hg commit -m commitC
|
|
$ hg up 'desc(commitB)'
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
$ echo d > d
|
|
$ hg add d
|
|
$ hg commit -m commitD
|
|
$ hg up 'desc(commitC)'
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
$ hg merge 'desc(commitD)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
(branch merge, don't forget to commit)
|
|
$ hg ci -m 'mergeCD'
|
|
$ hg log -G
|
|
@ commit: d8db9d137221
|
|
├─╮ user: test
|
|
│ │ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ │ summary: mergeCD
|
|
│ │
|
|
│ o commit: 6625a5168474
|
|
│ │ user: test
|
|
│ │ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ │ summary: commitD
|
|
│ │
|
|
o │ commit: 5c51d8d6557d
|
|
├─╯ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: commitC
|
|
│
|
|
o commit: eca11cf91c71
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: commitB
|
|
│
|
|
o commit: 105141ef12d0
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: commitA
|
|
|
|
|
|
Check bundle behavior:
|
|
|
|
$ hg bundle -r 'desc(mergeCD)' --base 'desc(commitC)' ../issue4736.hg
|
|
2 changesets found
|
|
$ hg log -r 'bundle()' -R ../issue4736.hg
|
|
commit: 6625a5168474
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: commitD
|
|
|
|
commit: d8db9d137221
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: mergeCD
|
|
|
|
|
|
check strip behavior
|
|
(commitC is incorrectly included because the "_bundle" logic uses the
|
|
"outgoing" discovery logic to figure out what to bundle. The outgoing logic
|
|
cannot easily express revset like "commitD::", and it uses something like
|
|
"mergeCD % commitD". This should be fixed in the bundle / discovery logic,
|
|
unrelated to strip.)
|
|
|
|
$ hg debugstrip 'desc(commitD)' --debug
|
|
resolving manifests
|
|
branchmerge: False, force: True, partial: False
|
|
ancestor: d8db9d137221+, local: d8db9d137221+, remote: eca11cf91c71
|
|
c: other deleted -> r
|
|
removing c
|
|
d: other deleted -> r
|
|
removing d
|
|
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
3 changesets found
|
|
list of changesets:
|
|
5c51d8d6557d0cb2ed8ef7d1e19ea477fb90e327
|
|
6625a516847449b6f0fa3737b9ba56e9f0f3032c
|
|
d8db9d1372214336d2b5570f20ee468d2c72fa8b
|
|
bundle2-output-bundle: "HG20", (1 params) 2 parts total
|
|
bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
|
|
bundle2-output-part: "phase-heads" 24 bytes payload
|
|
$ hg log -G
|
|
o commit: 5c51d8d6557d
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: commitC
|
|
│
|
|
@ commit: eca11cf91c71
|
|
│ user: test
|
|
│ date: Thu Jan 01 00:00:00 1970 +0000
|
|
│ summary: commitB
|
|
│
|
|
o commit: 105141ef12d0
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: commitA
|
|
|
|
|
|
strip backup content
|
|
|
|
$ hg log -r 'bundle()' -R .hg/strip-backup/6625a5168474-*-backup.hg
|
|
commit: 5c51d8d6557d
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: commitC
|
|
|
|
commit: 6625a5168474
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: commitD
|
|
|
|
commit: d8db9d137221
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: mergeCD
|
|
|
|
Check that the phase cache is properly invalidated after a strip with bookmark.
|
|
|
|
$ cat > ../stripstalephasecache.py << EOF
|
|
> from edenscm.mercurial import extensions, localrepo
|
|
> def transactioncallback(orig, repo, desc, *args, **kwargs):
|
|
> def test(transaction):
|
|
> # observe cache inconsistency
|
|
> try:
|
|
> [repo.changelog.node(r) for r in repo.revs("not public()")]
|
|
> except IndexError:
|
|
> repo.ui.status("Index error!\n")
|
|
> transaction = orig(repo, desc, *args, **kwargs)
|
|
> # warm up the phase cache
|
|
> list(repo.revs("not public()"))
|
|
> if desc != 'strip':
|
|
> transaction.addpostclose("phase invalidation test", test)
|
|
> return transaction
|
|
> def extsetup(ui):
|
|
> extensions.wrapfunction(localrepo.localrepository, "transaction",
|
|
> transactioncallback)
|
|
> EOF
|
|
$ hg up -C 'desc(commitC)'
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ echo k > k
|
|
$ hg add k
|
|
$ hg commit -m commitK
|
|
$ echo l > l
|
|
$ hg add l
|
|
$ hg commit -m commitL
|
|
$ hg book -r tip blah
|
|
$ hg debugstrip ".^" --config extensions.crash=$TESTTMP/stripstalephasecache.py
|
|
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
$ hg up -C 'desc(commitB)'
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
Use delayedstrip to strip inside a transaction
|
|
|
|
$ cd $TESTTMP
|
|
$ hg init delayedstrip
|
|
$ cd delayedstrip
|
|
$ hg debugdrawdag <<'EOS'
|
|
> D
|
|
> |
|
|
> C F H # Commit on top of "I",
|
|
> | |/| # Strip B+D+I+E+G+H+Z
|
|
> I B E G
|
|
> \|/
|
|
> A Z
|
|
> EOS
|
|
$ cp -R . ../scmutilcleanup
|
|
|
|
$ hg up -C I
|
|
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
(activating bookmark I)
|
|
$ echo 3 >> I
|
|
$ cat > $TESTTMP/delayedstrip.py <<EOF
|
|
> from __future__ import absolute_import
|
|
> from edenscm.mercurial import commands, registrar, repair
|
|
> cmdtable = {}
|
|
> command = registrar.command(cmdtable)
|
|
> @command('testdelayedstrip')
|
|
> def testdelayedstrip(ui, repo):
|
|
> def getnodes(expr):
|
|
> return [repo.changelog.node(r) for r in repo.revs(expr)]
|
|
> with repo.wlock():
|
|
> with repo.lock():
|
|
> with repo.transaction('delayedstrip'):
|
|
> repair.delayedstrip(ui, repo, getnodes('B+I+Z+D+E'), 'J')
|
|
> repair.delayedstrip(ui, repo, getnodes('G+H+Z'), 'I')
|
|
> commands.commit(ui, repo, message='J', date='0 0')
|
|
> EOF
|
|
$ hg testdelayedstrip --config extensions.t=$TESTTMP/delayedstrip.py
|
|
warning: orphaned descendants detected, not stripping 08ebfeb61bac, 112478962961, 7fb047a69f22
|
|
|
|
$ hg log -G -T '{node|short} {desc}' -r 'sort(all(), topo)'
|
|
@ 2f2d51af6205 J
|
|
│
|
|
o 08ebfeb61bac I
|
|
│
|
|
│ o 64a8289d2492 F
|
|
│ │
|
|
│ o 7fb047a69f22 E
|
|
├─╯
|
|
│ o 26805aba1e60 C
|
|
│ │
|
|
│ o 112478962961 B
|
|
├─╯
|
|
o 426bada5c675 A
|
|
|
|
Test high-level scmutil.cleanupnodes API
|
|
|
|
$ cd $TESTTMP/scmutilcleanup
|
|
$ hg debugdrawdag <<'EOS'
|
|
> D2 F2 G2 # D2, F2, G2 are replacements for D, F, G
|
|
> | | |
|
|
> C H G
|
|
> EOS
|
|
$ for i in B C D F G I Z; do
|
|
> hg bookmark -i -r $i b-$i
|
|
> done
|
|
$ hg bookmark -i -r E 'b-F@divergent1'
|
|
$ hg bookmark -i -r H 'b-F@divergent2'
|
|
$ hg bookmark -i -r G 'b-F@divergent3'
|
|
$ cp -R . ../scmutilcleanup.obsstore
|
|
|
|
$ cat > $TESTTMP/scmutilcleanup.py <<EOF
|
|
> from edenscm.mercurial import registrar, scmutil
|
|
> cmdtable = {}
|
|
> command = registrar.command(cmdtable)
|
|
> @command('testnodescleanup')
|
|
> def testnodescleanup(ui, repo):
|
|
> def nodes(expr):
|
|
> return [repo.changelog.node(r) for r in repo.revs(expr)]
|
|
> def node(expr):
|
|
> return nodes(expr)[0]
|
|
> with repo.wlock():
|
|
> with repo.lock():
|
|
> with repo.transaction('delayedstrip'):
|
|
> mapping = {node('F'): [node('F2')],
|
|
> node('D'): [node('D2')],
|
|
> node('G'): [node('G2')]}
|
|
> scmutil.cleanupnodes(repo, mapping, 'replace')
|
|
> scmutil.cleanupnodes(repo, nodes('((B::)+I+Z)-D2'), 'replace')
|
|
> EOF
|
|
$ hg testnodescleanup --config extensions.t=$TESTTMP/scmutilcleanup.py
|
|
|
|
$ hg log -G -T '{node|short} {desc} {bookmarks}' -r 'sort(all(), topo)'
|
|
o 1473d4b996d1 G2 G G2 b-F@divergent3 b-G
|
|
│
|
|
│ o d11b3456a873 F2 F F2 b-F
|
|
│ │
|
|
│ o 5cb05ba470a7 H H
|
|
╭─┤
|
|
│ o 7fb047a69f22 E E b-F@divergent1
|
|
│ │
|
|
│ │ o 7c78f703e465 D2 D D2 b-D
|
|
│ │ │
|
|
│ │ o 26805aba1e60 C
|
|
│ │ │
|
|
│ │ o 112478962961 B
|
|
│ ├─╯
|
|
o │ 1fc8102cda62 G
|
|
│
|
|
o 426bada5c675 A A B C I b-B b-C b-I
|
|
|
|
$ hg bookmark
|
|
A 426bada5c675
|
|
B 426bada5c675
|
|
C 426bada5c675
|
|
D 7c78f703e465
|
|
D2 7c78f703e465
|
|
E 7fb047a69f22
|
|
F d11b3456a873
|
|
F2 d11b3456a873
|
|
G 1473d4b996d1
|
|
G2 1473d4b996d1
|
|
H 5cb05ba470a7
|
|
I 426bada5c675
|
|
Z 000000000000
|
|
b-B 426bada5c675
|
|
b-C 426bada5c675
|
|
b-D 7c78f703e465
|
|
b-F d11b3456a873
|
|
b-F@divergent1 7fb047a69f22
|
|
b-F@divergent3 1473d4b996d1
|
|
b-G 1473d4b996d1
|
|
b-I 426bada5c675
|
|
b-Z 000000000000
|
|
|
|
Test the above using obsstore "by the way". Not directly related to strip, but
|
|
we have reusable code here
|
|
|
|
$ cd $TESTTMP/scmutilcleanup.obsstore
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [experimental]
|
|
> evolution=true
|
|
> evolution.track-operation=1
|
|
> EOF
|
|
|
|
$ hg testnodescleanup --config extensions.t=$TESTTMP/scmutilcleanup.py
|
|
|
|
$ hg log -G -T '{node|short} {desc} {bookmarks}' -r 'sort(all(), topo)'
|
|
o 1473d4b996d1 G2 G G2 b-F@divergent3 b-G
|
|
│
|
|
│ o d11b3456a873 F2 F F2 b-F
|
|
│ │
|
|
│ o 5cb05ba470a7 H H
|
|
╭─┤
|
|
│ o 7fb047a69f22 E E b-F@divergent1
|
|
│ │
|
|
│ │ o 7c78f703e465 D2 D D2 b-D
|
|
│ │ │
|
|
│ │ o 26805aba1e60 C
|
|
│ │ │
|
|
│ │ o 112478962961 B
|
|
│ ├─╯
|
|
x │ 1fc8102cda62 G
|
|
│
|
|
o 426bada5c675 A A B C I b-B b-C b-I
|
|
|
|
$ hg debugobsolete
|
|
$ cd ..
|
|
|
|
Test that obsmarkers are restored even when not using generaldelta
|
|
|
|
$ hg --config format.usegeneraldelta=no init issue5678
|
|
$ cd issue5678
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [experimental]
|
|
> evolution=true
|
|
> EOF
|
|
$ echo a > a
|
|
$ hg ci -Aqm a
|
|
$ hg ci --amend -m a2
|
|
$ hg debugobsolete
|
|
$ hg debugstrip .
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
$ hg unbundle -q .hg/strip-backup/*
|
|
$ hg debugobsolete
|
|
$ cd ..
|