mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 01:07:15 +03:00
8d733e89bc
This is it, `hg strip --rev X` will now also remove obsolescence markers exclusive to X. Since a previous changeset, the obsmarkers has been backed up in the strip backup bundle, so it is possible to restore them. Note: stripping obsmarkers means the precursors of the stripped changeset might no longer be obsolete after the strip. Stripping changeset without obsmarkers can be useful when building test case. So It is possible to disable the stripping of obsmarkers using the 'devel.strip-obsmarkers' config option. Test change have been carefully validated.
142 lines
3.9 KiB
Perl
142 lines
3.9 KiB
Perl
$ hg init repo
|
|
$ cd repo
|
|
$ hg init subrepo
|
|
$ echo a > subrepo/a
|
|
$ hg -R subrepo ci -Am adda
|
|
adding a
|
|
$ echo 'subrepo = subrepo' > .hgsub
|
|
$ hg ci -Am addsubrepo
|
|
adding .hgsub
|
|
$ echo b > subrepo/b
|
|
$ hg -R subrepo ci -Am addb
|
|
adding b
|
|
$ hg ci -m updatedsub
|
|
|
|
ignore blanklines in .hgsubstate
|
|
|
|
>>> file('.hgsubstate', 'wb').write('\n\n \t \n \n')
|
|
$ hg st --subrepos
|
|
M .hgsubstate
|
|
$ hg revert -qC .hgsubstate
|
|
|
|
abort more gracefully on .hgsubstate parsing error
|
|
|
|
$ cp .hgsubstate .hgsubstate.old
|
|
>>> file('.hgsubstate', 'wb').write('\ninvalid')
|
|
$ hg st --subrepos --cwd $TESTTMP -R $TESTTMP/repo
|
|
abort: invalid subrepository revision specifier in 'repo/.hgsubstate' line 2
|
|
[255]
|
|
$ mv .hgsubstate.old .hgsubstate
|
|
|
|
delete .hgsub and revert it
|
|
|
|
$ rm .hgsub
|
|
$ hg revert .hgsub
|
|
warning: subrepo spec file '.hgsub' not found
|
|
warning: subrepo spec file '.hgsub' not found
|
|
|
|
delete .hgsubstate and revert it
|
|
|
|
$ rm .hgsubstate
|
|
$ hg revert .hgsubstate
|
|
|
|
delete .hgsub and update
|
|
|
|
$ rm .hgsub
|
|
$ hg up 0 --cwd $TESTTMP -R $TESTTMP/repo
|
|
warning: subrepo spec file 'repo/.hgsub' not found
|
|
warning: subrepo spec file 'repo/.hgsub' not found
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg st
|
|
warning: subrepo spec file '.hgsub' not found
|
|
! .hgsub
|
|
$ ls subrepo
|
|
a
|
|
|
|
delete .hgsubstate and update
|
|
|
|
$ hg up -C
|
|
warning: subrepo spec file '.hgsub' not found
|
|
warning: subrepo spec file '.hgsub' not found
|
|
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ rm .hgsubstate
|
|
$ hg up 0
|
|
other [destination] changed .hgsubstate which local [working copy] deleted
|
|
use (c)hanged version or leave (d)eleted? c
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg st
|
|
$ ls subrepo
|
|
a
|
|
|
|
Enable obsolete
|
|
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [ui]
|
|
> logtemplate= {rev}:{node|short} {desc|firstline}
|
|
> [phases]
|
|
> publish=False
|
|
> [experimental]
|
|
> evolution=createmarkers
|
|
> EOF
|
|
|
|
check that we can update parent repo with missing (amended) subrepo revision
|
|
|
|
$ hg up --repository subrepo -r tip
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg ci -m "updated subrepo to tip"
|
|
created new head
|
|
$ cd subrepo
|
|
$ hg update -r tip
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ echo foo > a
|
|
$ hg commit --amend -m "addb (amended)"
|
|
$ cd ..
|
|
$ hg update --clean .
|
|
revision 102a90ea7b4a in subrepo subrepo is hidden
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
check that --hidden is propagated to the subrepo
|
|
|
|
$ hg -R subrepo up tip
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg ci -m 'commit with amended subrepo'
|
|
$ echo bar > subrepo/a
|
|
$ hg -R subrepo ci --amend -m "amend a (again)"
|
|
$ hg --hidden cat subrepo/a
|
|
foo
|
|
|
|
verify will warn if locked-in subrepo revisions are hidden or missing
|
|
|
|
$ hg ci -m "amended subrepo (again)"
|
|
$ hg --config extensions.strip= --hidden strip -R subrepo -qr 'tip' --config devel.strip-obsmarkers=no
|
|
$ hg verify
|
|
checking changesets
|
|
checking manifests
|
|
crosschecking files in changesets and manifests
|
|
checking files
|
|
2 files, 5 changesets, 5 total revisions
|
|
checking subrepo links
|
|
subrepo 'subrepo' is hidden in revision a66de08943b6
|
|
subrepo 'subrepo' is hidden in revision 674d05939c1e
|
|
subrepo 'subrepo' not found in revision a7d05d9055a4
|
|
|
|
verifying shouldn't init a new subrepo if the reference doesn't exist
|
|
|
|
$ mv subrepo b
|
|
$ hg verify
|
|
checking changesets
|
|
checking manifests
|
|
crosschecking files in changesets and manifests
|
|
checking files
|
|
2 files, 5 changesets, 5 total revisions
|
|
checking subrepo links
|
|
0: repository $TESTTMP/repo/subrepo not found (glob)
|
|
1: repository $TESTTMP/repo/subrepo not found (glob)
|
|
3: repository $TESTTMP/repo/subrepo not found (glob)
|
|
4: repository $TESTTMP/repo/subrepo not found (glob)
|
|
$ ls
|
|
b
|
|
$ mv b subrepo
|
|
|
|
$ cd ..
|