2015-10-20 14:09:43 +03:00
|
|
|
$ echo "[format]" >> $HGRCPATH
|
|
|
|
$ echo "usegeneraldelta=yes" >> $HGRCPATH
|
2010-08-16 05:53:52 +04:00
|
|
|
$ echo "[extensions]" >> $HGRCPATH
|
2013-09-26 13:11:39 +04:00
|
|
|
$ echo "strip=" >> $HGRCPATH
|
2010-08-16 05:53:52 +04:00
|
|
|
|
|
|
|
$ 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 strip $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 1
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
$ echo blah >> bar
|
|
|
|
$ hg ci -Amd
|
|
|
|
created new head
|
|
|
|
|
|
|
|
$ echo final >> bar
|
|
|
|
$ hg ci -Ame
|
|
|
|
|
|
|
|
$ hg log
|
|
|
|
changeset: 4:443431ffac4f
|
|
|
|
tag: tip
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: e
|
|
|
|
|
|
|
|
changeset: 3:65bd5f99a4a3
|
|
|
|
parent: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: d
|
|
|
|
|
|
|
|
changeset: 2:264128213d29
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: c
|
|
|
|
|
|
|
|
changeset: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: b
|
|
|
|
|
|
|
|
changeset: 0:9ab35a2d17cb
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
|
|
|
|
|
|
|
$ teststrip 4 4
|
|
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
% before update 4, strip 4
|
|
|
|
changeset: 4:443431ffac4f
|
|
|
|
tag: tip
|
|
|
|
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
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
% after update 4, strip 4
|
|
|
|
changeset: 3:65bd5f99a4a3
|
|
|
|
tag: tip
|
|
|
|
parent: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: d
|
|
|
|
|
|
|
|
$ teststrip 4 3
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
% before update 4, strip 3
|
|
|
|
changeset: 4:443431ffac4f
|
|
|
|
tag: tip
|
|
|
|
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
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
% after update 4, strip 3
|
|
|
|
changeset: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: b
|
|
|
|
|
|
|
|
$ teststrip 1 4
|
|
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
% before update 1, strip 4
|
|
|
|
changeset: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: b
|
|
|
|
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
% after update 1, strip 4
|
|
|
|
changeset: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: b
|
|
|
|
|
|
|
|
$ teststrip 4 2
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
% before update 4, strip 2
|
|
|
|
changeset: 4:443431ffac4f
|
|
|
|
tag: tip
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: e
|
|
|
|
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
% after update 4, strip 2
|
|
|
|
changeset: 3:443431ffac4f
|
|
|
|
tag: tip
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: e
|
|
|
|
|
|
|
|
$ teststrip 4 1
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
% before update 4, strip 1
|
|
|
|
changeset: 4:264128213d29
|
|
|
|
tag: tip
|
|
|
|
parent: 1:ef3a871183d7
|
|
|
|
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
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
% after update 4, strip 1
|
|
|
|
changeset: 0:9ab35a2d17cb
|
|
|
|
tag: tip
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
|
|
|
$ teststrip null 4
|
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
% before update null, strip 4
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
% after update null, strip 4
|
|
|
|
|
|
|
|
$ hg log
|
|
|
|
changeset: 4:264128213d29
|
|
|
|
tag: tip
|
|
|
|
parent: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: c
|
|
|
|
|
|
|
|
changeset: 3:443431ffac4f
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: e
|
|
|
|
|
|
|
|
changeset: 2:65bd5f99a4a3
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: d
|
|
|
|
|
|
|
|
changeset: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: b
|
|
|
|
|
|
|
|
changeset: 0:9ab35a2d17cb
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
2015-01-16 03:51:13 +03:00
|
|
|
$ hg up -C 4
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
$ hg parents
|
|
|
|
changeset: 4:264128213d29
|
|
|
|
tag: tip
|
|
|
|
parent: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: c
|
|
|
|
|
2015-01-22 02:54:52 +03:00
|
|
|
|
2015-09-29 23:16:51 +03:00
|
|
|
$ hg --traceback strip 4
|
2015-02-06 22:27:25 +03:00
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/264128213d29-0b39d6bf-backup.hg (glob)
|
|
|
|
$ hg parents
|
|
|
|
changeset: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: b
|
|
|
|
|
|
|
|
$ hg debugbundle .hg/strip-backup/*
|
2016-07-18 01:10:30 +03:00
|
|
|
Stream params: sortdict([('Compression', 'BZ')])
|
2016-07-18 01:13:51 +03:00
|
|
|
changegroup -- "sortdict([('version', '02'), ('nbchanges', '1')])"
|
2015-10-20 14:09:43 +03:00
|
|
|
264128213d290d868c54642d13aeaa3675551a78
|
2015-02-06 22:27:25 +03:00
|
|
|
$ 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 0 files (+1 heads)
|
|
|
|
(run 'hg heads' to see heads, 'hg merge' to merge)
|
|
|
|
$ rm .hg/strip-backup/*
|
|
|
|
$ hg log --graph
|
|
|
|
o changeset: 4:264128213d29
|
|
|
|
| tag: tip
|
|
|
|
| parent: 1:ef3a871183d7
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: c
|
|
|
|
|
|
|
|
|
| o changeset: 3:443431ffac4f
|
|
|
|
| | user: test
|
|
|
|
| | date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| | summary: e
|
|
|
|
| |
|
|
|
|
| o changeset: 2:65bd5f99a4a3
|
|
|
|
|/ user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: d
|
|
|
|
|
|
|
|
|
@ changeset: 1:ef3a871183d7
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: b
|
|
|
|
|
|
|
|
|
o changeset: 0:9ab35a2d17cb
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
2010-08-16 05:53:52 +04:00
|
|
|
$ hg up -C 2
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
$ hg merge 4
|
|
|
|
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
|
|
|
|
changeset: 2:65bd5f99a4a3
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: d
|
|
|
|
|
|
|
|
changeset: 4:264128213d29
|
|
|
|
tag: tip
|
|
|
|
parent: 1:ef3a871183d7
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: c
|
|
|
|
|
|
|
|
$ hg strip 4
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
|
|
|
|
after strip of merge parent
|
|
|
|
|
|
|
|
$ hg parents
|
|
|
|
changeset: 1: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
|
2016-02-02 17:49:02 +03:00
|
|
|
1 other heads for branch "default"
|
2013-11-22 22:14:17 +04:00
|
|
|
$ hg log -G
|
2010-08-16 05:53:52 +04:00
|
|
|
@ changeset: 4:264128213d29
|
|
|
|
| tag: tip
|
|
|
|
| parent: 1:ef3a871183d7
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: c
|
|
|
|
|
|
|
|
|
| o changeset: 3:443431ffac4f
|
|
|
|
| | user: test
|
|
|
|
| | date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| | summary: e
|
|
|
|
| |
|
|
|
|
| o changeset: 2:65bd5f99a4a3
|
|
|
|
|/ user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: d
|
|
|
|
|
|
|
|
|
o changeset: 1:ef3a871183d7
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: b
|
|
|
|
|
|
|
|
|
o changeset: 0:9ab35a2d17cb
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
|
|
|
|
|
|
|
2 is parent of 3, only one strip should happen
|
|
|
|
|
2010-10-19 00:31:38 +04:00
|
|
|
$ hg strip "roots(2)" 3
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2013-11-22 22:14:17 +04:00
|
|
|
$ hg log -G
|
2010-08-16 05:53:52 +04:00
|
|
|
@ changeset: 2:264128213d29
|
|
|
|
| tag: tip
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: c
|
|
|
|
|
|
|
|
|
o changeset: 1:ef3a871183d7
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: b
|
|
|
|
|
|
|
|
|
o changeset: 0:9ab35a2d17cb
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
|
|
|
$ restore
|
2013-11-22 22:14:17 +04:00
|
|
|
$ hg log -G
|
2010-08-16 05:53:52 +04:00
|
|
|
o changeset: 4:443431ffac4f
|
|
|
|
| tag: tip
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: e
|
|
|
|
|
|
|
|
|
o changeset: 3:65bd5f99a4a3
|
|
|
|
| parent: 1:ef3a871183d7
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: d
|
|
|
|
|
|
|
|
|
| @ changeset: 2:264128213d29
|
|
|
|
|/ user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: c
|
|
|
|
|
|
|
|
|
o changeset: 1:ef3a871183d7
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: b
|
|
|
|
|
|
|
|
|
o changeset: 0:9ab35a2d17cb
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
2016-09-15 19:45:29 +03:00
|
|
|
Failed hook while applying "saveheads" bundle.
|
|
|
|
|
|
|
|
$ hg strip 2 --config hooks.pretxnchangegroup.bad=false
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
|
|
|
transaction abort!
|
|
|
|
rollback completed
|
2016-09-19 19:14:35 +03:00
|
|
|
strip failed, backup bundle stored in '$TESTTMP/test/.hg/strip-backup/*-backup.hg' (glob)
|
2016-09-19 19:14:32 +03:00
|
|
|
strip failed, unrecovered changes stored in '$TESTTMP/test/.hg/strip-backup/*-temp.hg' (glob)
|
|
|
|
(fix the problem, then recover the changesets with "hg unbundle '$TESTTMP/test/.hg/strip-backup/*-temp.hg'") (glob)
|
2016-09-15 19:45:29 +03:00
|
|
|
abort: pretxnchangegroup.bad hook exited with status 1
|
|
|
|
[255]
|
|
|
|
$ restore
|
|
|
|
$ hg log -G
|
|
|
|
o changeset: 4:443431ffac4f
|
|
|
|
| tag: tip
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: e
|
|
|
|
|
|
|
|
|
o changeset: 3:65bd5f99a4a3
|
|
|
|
| parent: 1:ef3a871183d7
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: d
|
|
|
|
|
|
|
|
|
| o changeset: 2:264128213d29
|
|
|
|
|/ user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: c
|
|
|
|
|
|
|
|
|
@ changeset: 1:ef3a871183d7
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: b
|
|
|
|
|
|
|
|
|
o changeset: 0:9ab35a2d17cb
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
2010-08-16 05:53:52 +04:00
|
|
|
|
|
|
|
2 different branches: 2 strips
|
|
|
|
|
|
|
|
$ hg strip 2 4
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2013-11-22 22:14:17 +04:00
|
|
|
$ hg log -G
|
2013-01-15 05:59:13 +04:00
|
|
|
o changeset: 2:65bd5f99a4a3
|
2010-08-16 05:53:52 +04:00
|
|
|
| tag: tip
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: d
|
|
|
|
|
|
2013-01-15 05:59:13 +04:00
|
|
|
@ changeset: 1:ef3a871183d7
|
2010-08-16 05:53:52 +04:00
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: b
|
|
|
|
|
|
|
|
|
o changeset: 0:9ab35a2d17cb
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
|
|
|
$ restore
|
|
|
|
|
|
|
|
2 different branches and a common ancestor: 1 strip
|
|
|
|
|
2010-10-19 00:31:38 +04:00
|
|
|
$ hg strip 1 "2|4"
|
2010-08-16 05:53:52 +04:00
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
$ restore
|
|
|
|
|
2014-03-25 02:43:15 +04:00
|
|
|
verify fncache is kept up-to-date
|
|
|
|
|
|
|
|
$ touch a
|
|
|
|
$ hg ci -qAm a
|
|
|
|
$ cat .hg/store/fncache | sort
|
|
|
|
data/a.i
|
|
|
|
data/bar.i
|
|
|
|
$ hg strip tip
|
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
|
|
|
$ cat .hg/store/fncache
|
|
|
|
data/bar.i
|
|
|
|
|
2010-10-19 00:31:38 +04:00
|
|
|
stripping an empty revset
|
|
|
|
|
|
|
|
$ hg strip "1 and not 1"
|
|
|
|
abort: empty revision set
|
|
|
|
[255]
|
2010-08-16 05:53:52 +04:00
|
|
|
|
|
|
|
remove branchy history for qimport tests
|
|
|
|
|
|
|
|
$ hg strip 3
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
|
|
|
|
|
|
|
|
strip of applied mq should cleanup status file
|
|
|
|
|
2013-09-26 13:11:39 +04:00
|
|
|
$ echo "mq=" >> $HGRCPATH
|
2010-08-16 05:53:52 +04:00
|
|
|
$ hg up -C 3
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
$ echo fooagain >> bar
|
|
|
|
$ hg ci -mf
|
|
|
|
$ hg qimport -r tip:2
|
|
|
|
|
|
|
|
applied patches before strip
|
|
|
|
|
|
|
|
$ hg qapplied
|
2015-03-10 15:19:17 +03:00
|
|
|
d
|
|
|
|
e
|
|
|
|
f
|
2010-08-16 05:53:52 +04:00
|
|
|
|
|
|
|
stripping revision in queue
|
|
|
|
|
|
|
|
$ hg strip 3
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
|
|
|
|
applied patches after stripping rev in queue
|
|
|
|
|
|
|
|
$ hg qapplied
|
2015-03-10 15:19:17 +03:00
|
|
|
d
|
2010-08-16 05:53:52 +04:00
|
|
|
|
|
|
|
stripping ancestor of queue
|
|
|
|
|
|
|
|
$ hg strip 1
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
2010-10-09 07:36:10 +04:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-08-16 05:53:52 +04:00
|
|
|
|
|
|
|
applied patches after stripping ancestor of queue
|
|
|
|
|
|
|
|
$ hg qapplied
|
2010-10-09 20:02:11 +04:00
|
|
|
|
2013-10-23 21:49:56 +04:00
|
|
|
Verify strip protects against stripping wc parent when there are uncommitted mods
|
2010-10-09 20:02:11 +04:00
|
|
|
|
|
|
|
$ echo b > b
|
2015-04-13 15:42:25 +03:00
|
|
|
$ echo bb > bar
|
2010-10-09 20:02:11 +04:00
|
|
|
$ hg add b
|
|
|
|
$ hg ci -m 'b'
|
|
|
|
$ hg log --graph
|
2015-04-13 15:42:25 +03:00
|
|
|
@ changeset: 1:76dcf9fab855
|
2010-10-09 20:02:11 +04:00
|
|
|
| tag: tip
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: b
|
|
|
|
|
|
|
|
|
o changeset: 0:9ab35a2d17cb
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
2015-04-13 15:42:25 +03:00
|
|
|
$ hg up 0
|
|
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
$ echo c > bar
|
|
|
|
$ hg up -t false
|
|
|
|
merging bar
|
|
|
|
merging bar failed!
|
|
|
|
1 files updated, 0 files merged, 0 files removed, 1 files unresolved
|
|
|
|
use 'hg resolve' to retry unresolved file merges
|
|
|
|
[1]
|
|
|
|
$ hg sum
|
|
|
|
parent: 1:76dcf9fab855 tip
|
|
|
|
b
|
|
|
|
branch: default
|
|
|
|
commit: 1 modified, 1 unknown, 1 unresolved
|
|
|
|
update: (current)
|
2015-05-29 23:23:58 +03:00
|
|
|
phases: 2 draft
|
2015-04-13 15:42:25 +03:00
|
|
|
mq: 3 unapplied
|
2010-10-09 20:02:11 +04:00
|
|
|
|
|
|
|
$ echo c > b
|
|
|
|
$ hg strip tip
|
|
|
|
abort: local changes found
|
|
|
|
[255]
|
|
|
|
$ hg strip tip --keep
|
2011-03-10 15:43:47 +03:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2010-10-09 20:02:11 +04:00
|
|
|
$ hg log --graph
|
|
|
|
@ changeset: 0:9ab35a2d17cb
|
|
|
|
tag: tip
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: a
|
|
|
|
|
|
|
|
$ hg status
|
|
|
|
M bar
|
|
|
|
? b
|
2015-04-13 15:42:25 +03:00
|
|
|
? bar.orig
|
|
|
|
|
|
|
|
$ rm bar.orig
|
|
|
|
$ hg sum
|
|
|
|
parent: 0:9ab35a2d17cb tip
|
|
|
|
a
|
|
|
|
branch: default
|
|
|
|
commit: 1 modified, 1 unknown
|
|
|
|
update: (current)
|
2015-05-29 23:23:58 +03:00
|
|
|
phases: 1 draft
|
2015-04-13 15:42:25 +03:00
|
|
|
mq: 3 unapplied
|
2013-03-07 08:13:09 +04:00
|
|
|
|
|
|
|
Strip adds, removes, modifies with --keep
|
|
|
|
|
|
|
|
$ touch b
|
|
|
|
$ hg add b
|
|
|
|
$ hg commit -mb
|
|
|
|
$ touch c
|
2013-04-27 09:07:25 +04:00
|
|
|
|
|
|
|
... with a clean working dir
|
|
|
|
|
|
|
|
$ hg add c
|
|
|
|
$ hg rm bar
|
|
|
|
$ hg commit -mc
|
|
|
|
$ hg status
|
|
|
|
$ hg strip --keep tip
|
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
|
|
|
$ hg status
|
|
|
|
! bar
|
|
|
|
? c
|
|
|
|
|
|
|
|
... with a dirty working dir
|
|
|
|
|
2013-03-07 08:13:09 +04:00
|
|
|
$ hg add c
|
|
|
|
$ hg rm bar
|
|
|
|
$ hg commit -mc
|
2013-04-27 09:07:25 +04:00
|
|
|
$ hg status
|
2013-03-07 08:13:09 +04:00
|
|
|
$ echo b > b
|
|
|
|
$ echo d > d
|
|
|
|
$ hg strip --keep tip
|
2015-11-30 22:23:15 +03:00
|
|
|
saved backup bundle to $TESTTMP/test/.hg/strip-backup/*-backup.hg (glob)
|
2013-03-07 08:13:09 +04:00
|
|
|
$ hg status
|
|
|
|
M b
|
|
|
|
! bar
|
|
|
|
? c
|
|
|
|
? d
|
2015-11-30 22:23:15 +03:00
|
|
|
|
|
|
|
... after updating the dirstate
|
|
|
|
$ hg add c
|
|
|
|
$ hg commit -mc
|
|
|
|
$ hg rm c
|
|
|
|
$ hg commit -mc
|
|
|
|
$ hg strip --keep '.^' -q
|
strip: enhance repair.strip to receive a list of nodes (issue3299)
Originally, mq.strip called repair.strip a single rev at a time.
repair.strip stores in a backup bundle any revision greater than
the revision being stripped, strips, then restores the backup with
repo.addchangegroup. So, when stripping revisions on more than one
topological branch, some could end up being restored from the backup
bundle, only to be later removed by a subsequent repair.strip call.
But repo.addchangegroup calls hooks for all those restore operations.
And 1671d21e8e41 changed it to delay all hook calls until the
repository lock were released - by mq.strip, after stripping all
revisions. Thus, the hooks could be called over revisions already
removed from the repository at that point.
By generating the revision lists at once inside repo.strip, we avoid
calling addchangegroup for temporary restores. Incidentally, this
also avoids creating many backup files for a single strip command.
2012-03-13 00:02:45 +04:00
|
|
|
$ 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 strip 'not ancestors(x)'
|
|
|
|
saved backup bundle to $TESTTMP/issue3299/.hg/strip-backup/*-backup.hg (glob)
|
|
|
|
|
2012-05-13 18:39:40 +04:00
|
|
|
test hg strip -B bookmark
|
|
|
|
|
|
|
|
$ cd ..
|
|
|
|
$ hg init bookmarks
|
|
|
|
$ cd bookmarks
|
2015-11-19 10:20:10 +03:00
|
|
|
$ hg debugbuilddag '..<2.*1/2:m<2+3:c<m+3:a<2.:b<m+2:d<2.:e<m+1:f'
|
2012-05-13 18:39:40 +04:00
|
|
|
$ hg bookmark -r 'a' 'todelete'
|
|
|
|
$ hg bookmark -r 'b' 'B'
|
|
|
|
$ hg bookmark -r 'b' 'nostrip'
|
|
|
|
$ hg bookmark -r 'c' 'delete'
|
2015-11-19 10:20:10 +03:00
|
|
|
$ hg bookmark -r 'd' 'multipledelete1'
|
|
|
|
$ hg bookmark -r 'e' 'multipledelete2'
|
|
|
|
$ hg bookmark -r 'f' 'singlenode1'
|
|
|
|
$ hg bookmark -r 'f' 'singlenode2'
|
2012-05-13 18:39:40 +04:00
|
|
|
$ hg up -C todelete
|
|
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
2013-03-07 07:17:56 +04:00
|
|
|
(activating bookmark todelete)
|
2012-05-13 18:39:40 +04:00
|
|
|
$ hg strip -B nostrip
|
|
|
|
bookmark 'nostrip' deleted
|
|
|
|
abort: empty revision set
|
|
|
|
[255]
|
|
|
|
$ hg strip -B todelete
|
|
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/*-backup.hg (glob)
|
2014-07-09 03:24:23 +04:00
|
|
|
bookmark 'todelete' deleted
|
2012-05-13 18:39:40 +04:00
|
|
|
$ hg id -ir dcbb326fdec2
|
|
|
|
abort: unknown revision 'dcbb326fdec2'!
|
|
|
|
[255]
|
|
|
|
$ hg id -ir d62d843c9a01
|
|
|
|
d62d843c9a01
|
|
|
|
$ hg bookmarks
|
|
|
|
B 9:ff43616e5d0f
|
|
|
|
delete 6:2702dd0c91e7
|
2015-11-19 10:20:10 +03:00
|
|
|
multipledelete1 11:e46a4836065c
|
|
|
|
multipledelete2 12:b4594d867745
|
|
|
|
singlenode1 13:43227190fef8
|
|
|
|
singlenode2 13:43227190fef8
|
|
|
|
$ hg strip -B multipledelete1 -B multipledelete2
|
|
|
|
saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/e46a4836065c-89ec65c2-backup.hg (glob)
|
|
|
|
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 strip -B singlenode1 -B singlenode2
|
|
|
|
saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/43227190fef8-8da858f2-backup.hg (glob)
|
|
|
|
bookmark 'singlenode1' deleted
|
|
|
|
bookmark 'singlenode2' deleted
|
|
|
|
$ hg id -ir 43227190fef8
|
|
|
|
abort: unknown revision '43227190fef8'!
|
|
|
|
[255]
|
|
|
|
$ hg strip -B unknownbookmark
|
|
|
|
abort: bookmark 'unknownbookmark' not found
|
|
|
|
[255]
|
|
|
|
$ hg strip -B unknownbookmark1 -B unknownbookmark2
|
|
|
|
abort: bookmark 'unknownbookmark1,unknownbookmark2' not found
|
|
|
|
[255]
|
|
|
|
$ hg strip -B delete -B unknownbookmark
|
|
|
|
abort: bookmark 'unknownbookmark' not found
|
|
|
|
[255]
|
2012-05-13 18:39:40 +04:00
|
|
|
$ hg strip -B delete
|
2012-06-02 08:42:27 +04:00
|
|
|
saved backup bundle to $TESTTMP/bookmarks/.hg/strip-backup/*-backup.hg (glob)
|
2014-07-09 03:24:23 +04:00
|
|
|
bookmark 'delete' deleted
|
2012-05-13 18:39:40 +04:00
|
|
|
$ hg id -ir 6:2702dd0c91e7
|
|
|
|
abort: unknown revision '2702dd0c91e7'!
|
|
|
|
[255]
|
2014-07-09 03:24:23 +04:00
|
|
|
$ 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 strip -B B
|
|
|
|
abort: local changes found
|
|
|
|
[255]
|
|
|
|
$ hg bookmarks
|
|
|
|
* B 6:ff43616e5d0f
|
2012-06-11 03:40:51 +04:00
|
|
|
|
2014-07-12 03:04:51 +04:00
|
|
|
Make sure no one adds back a -b option:
|
|
|
|
|
|
|
|
$ hg strip -b tip
|
|
|
|
hg strip: option -b not recognized
|
2016-02-29 21:28:46 +03:00
|
|
|
hg strip [-k] [-f] [-B bookmark] [-r] REV...
|
2014-07-12 03:04:51 +04:00
|
|
|
|
|
|
|
strip changesets and all their descendants from the repository
|
|
|
|
|
2016-09-21 02:47:46 +03:00
|
|
|
(use 'hg help -e strip' to show help for the strip extension)
|
2014-07-12 03:04:51 +04:00
|
|
|
|
2014-08-12 13:00:42 +04:00
|
|
|
options ([+] can be repeated):
|
2014-07-12 03:04:51 +04:00
|
|
|
|
2015-11-19 10:20:10 +03:00
|
|
|
-r --rev REV [+] strip specified revision (optional, can specify
|
|
|
|
revisions without this option)
|
help: backout 6f89f03ad369 (mark boolean flags with [no-] in help) for now
The ability to negate any boolean flags itself is great, but I think we are not
ready to expose the help side of it yet.
First, while there exist a handful of such flags whose default value can be
changed (eg: git diff, patchwork confirmation), there is only a few of them. The
users who benefit the most from this change are alias users and large
installation that can deploy extension to change behavior (eg: facebook
tweakdefault). So the majority of user who will be affected by a large change
to command help that is not yet relevant to them. (I expect this to become
relevant when ui.progressive start to exists).
Below is an example of the impact of the new help on 'hg help diff':
-r --rev REV [+] revision
-c --change REV change made by revision
-a --[no-]text treat all files as text
-g --[no-]git use git extended diff format
--[no-]nodates omit dates from diff headers
--[no-]noprefix omit a/ and b/ prefixes from filenames
-p --[no-]show-function show which function each change is in
--[no-]reverse produce a diff that undoes the changes
-w --[no-]ignore-all-space ignore white space when comparing lines
-b --[no-]ignore-space-change ignore changes in the amount of white space
-B --[no-]ignore-blank-lines ignore changes whose lines are all blank
-U --unified NUM number of lines of context to show
--[no-]stat output diffstat-style summary of changes
--root DIR produce diffs relative to subdirectory
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
-S --[no-]subrepos recurse into subrepositories
Another issue with the current state of help, the default value for the
flag is not conveyed to the user. For example in the 'backout' help, there is
no real distinction between "--[no-]backup" (default to True) and "--[no-]keep"
(default) to False:
--[no-]backup no backups
--[no-]keep do not modify working directory during strip
In addition, I've discussed with Augie Fackler and the last batch of the work on
this have burned him out quite some. Therefore he is not intending to perform
any more work on this topic. Quoting him, he would rather see the help part
backed out than spending more time on it.
I do not think we are ready to expose this to users in 4.0 (freeze in a week),
especially because we cannot expect quick improvement on these aspect as this
topic no longer have an owner. We should be able to reintroduce that change in
the future when someone get back on it and the main issues are solves:
* Introduction of ui.progressive makes it relevant for a majority of user,
* Current default value are efficiently conveyed to the user.
(In addition, the excerpt from diff help show that we still have some issue with
some negative option like '--nodates' so further improvement are probably
welcome there.)
2016-10-09 04:11:18 +03:00
|
|
|
-f --force force removal of changesets, discard uncommitted
|
2015-11-19 10:20:10 +03:00
|
|
|
changes (no backup)
|
help: backout 6f89f03ad369 (mark boolean flags with [no-] in help) for now
The ability to negate any boolean flags itself is great, but I think we are not
ready to expose the help side of it yet.
First, while there exist a handful of such flags whose default value can be
changed (eg: git diff, patchwork confirmation), there is only a few of them. The
users who benefit the most from this change are alias users and large
installation that can deploy extension to change behavior (eg: facebook
tweakdefault). So the majority of user who will be affected by a large change
to command help that is not yet relevant to them. (I expect this to become
relevant when ui.progressive start to exists).
Below is an example of the impact of the new help on 'hg help diff':
-r --rev REV [+] revision
-c --change REV change made by revision
-a --[no-]text treat all files as text
-g --[no-]git use git extended diff format
--[no-]nodates omit dates from diff headers
--[no-]noprefix omit a/ and b/ prefixes from filenames
-p --[no-]show-function show which function each change is in
--[no-]reverse produce a diff that undoes the changes
-w --[no-]ignore-all-space ignore white space when comparing lines
-b --[no-]ignore-space-change ignore changes in the amount of white space
-B --[no-]ignore-blank-lines ignore changes whose lines are all blank
-U --unified NUM number of lines of context to show
--[no-]stat output diffstat-style summary of changes
--root DIR produce diffs relative to subdirectory
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
-S --[no-]subrepos recurse into subrepositories
Another issue with the current state of help, the default value for the
flag is not conveyed to the user. For example in the 'backout' help, there is
no real distinction between "--[no-]backup" (default to True) and "--[no-]keep"
(default) to False:
--[no-]backup no backups
--[no-]keep do not modify working directory during strip
In addition, I've discussed with Augie Fackler and the last batch of the work on
this have burned him out quite some. Therefore he is not intending to perform
any more work on this topic. Quoting him, he would rather see the help part
backed out than spending more time on it.
I do not think we are ready to expose this to users in 4.0 (freeze in a week),
especially because we cannot expect quick improvement on these aspect as this
topic no longer have an owner. We should be able to reintroduce that change in
the future when someone get back on it and the main issues are solves:
* Introduction of ui.progressive makes it relevant for a majority of user,
* Current default value are efficiently conveyed to the user.
(In addition, the excerpt from diff help show that we still have some issue with
some negative option like '--nodates' so further improvement are probably
welcome there.)
2016-10-09 04:11:18 +03:00
|
|
|
--no-backup no backups
|
|
|
|
-k --keep do not modify working directory during strip
|
2015-11-19 10:20:10 +03:00
|
|
|
-B --bookmark VALUE [+] remove revs only reachable from given bookmark
|
help: backout 6f89f03ad369 (mark boolean flags with [no-] in help) for now
The ability to negate any boolean flags itself is great, but I think we are not
ready to expose the help side of it yet.
First, while there exist a handful of such flags whose default value can be
changed (eg: git diff, patchwork confirmation), there is only a few of them. The
users who benefit the most from this change are alias users and large
installation that can deploy extension to change behavior (eg: facebook
tweakdefault). So the majority of user who will be affected by a large change
to command help that is not yet relevant to them. (I expect this to become
relevant when ui.progressive start to exists).
Below is an example of the impact of the new help on 'hg help diff':
-r --rev REV [+] revision
-c --change REV change made by revision
-a --[no-]text treat all files as text
-g --[no-]git use git extended diff format
--[no-]nodates omit dates from diff headers
--[no-]noprefix omit a/ and b/ prefixes from filenames
-p --[no-]show-function show which function each change is in
--[no-]reverse produce a diff that undoes the changes
-w --[no-]ignore-all-space ignore white space when comparing lines
-b --[no-]ignore-space-change ignore changes in the amount of white space
-B --[no-]ignore-blank-lines ignore changes whose lines are all blank
-U --unified NUM number of lines of context to show
--[no-]stat output diffstat-style summary of changes
--root DIR produce diffs relative to subdirectory
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
-S --[no-]subrepos recurse into subrepositories
Another issue with the current state of help, the default value for the
flag is not conveyed to the user. For example in the 'backout' help, there is
no real distinction between "--[no-]backup" (default to True) and "--[no-]keep"
(default) to False:
--[no-]backup no backups
--[no-]keep do not modify working directory during strip
In addition, I've discussed with Augie Fackler and the last batch of the work on
this have burned him out quite some. Therefore he is not intending to perform
any more work on this topic. Quoting him, he would rather see the help part
backed out than spending more time on it.
I do not think we are ready to expose this to users in 4.0 (freeze in a week),
especially because we cannot expect quick improvement on these aspect as this
topic no longer have an owner. We should be able to reintroduce that change in
the future when someone get back on it and the main issues are solves:
* Introduction of ui.progressive makes it relevant for a majority of user,
* Current default value are efficiently conveyed to the user.
(In addition, the excerpt from diff help show that we still have some issue with
some negative option like '--nodates' so further improvement are probably
welcome there.)
2016-10-09 04:11:18 +03:00
|
|
|
--mq operate on patch repository
|
2014-07-12 03:04:51 +04:00
|
|
|
|
2016-09-21 02:47:46 +03:00
|
|
|
(use 'hg strip -h' to show more help)
|
2014-07-12 03:04:51 +04:00
|
|
|
[255]
|
2015-01-09 21:52:14 +03:00
|
|
|
|
|
|
|
$ 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 strip -r 0
|
|
|
|
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
|
|
saved backup bundle to $TESTTMP/doublebundle/.hg/strip-backup/3903775176ed-e68910bd-backup.hg (glob)
|
|
|
|
$ ls .hg/strip-backup
|
|
|
|
3903775176ed-e68910bd-backup.hg
|
|
|
|
$ hg pull -q -r 3903775176ed .hg/strip-backup/3903775176ed-e68910bd-backup.hg
|
|
|
|
$ hg strip -r 0
|
|
|
|
saved backup bundle to $TESTTMP/doublebundle/.hg/strip-backup/3903775176ed-54390173-backup.hg (glob)
|
|
|
|
$ ls .hg/strip-backup
|
|
|
|
3903775176ed-54390173-backup.hg
|
|
|
|
3903775176ed-e68910bd-backup.hg
|
2015-06-29 21:20:09 +03:00
|
|
|
$ cd ..
|
|
|
|
|
|
|
|
Test that we only bundle the stripped changesets (issue4736)
|
|
|
|
------------------------------------------------------------
|
|
|
|
|
2015-08-28 20:57:20 +03:00
|
|
|
initialization (previous repo is empty anyway)
|
2015-06-29 21:20:09 +03:00
|
|
|
|
|
|
|
$ 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
|
|
|
|
created new head
|
|
|
|
$ 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
|
|
|
|
@ changeset: 4:d8db9d137221
|
|
|
|
|\ tag: tip
|
|
|
|
| | parent: 2:5c51d8d6557d
|
|
|
|
| | parent: 3:6625a5168474
|
|
|
|
| | user: test
|
|
|
|
| | date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| | summary: mergeCD
|
|
|
|
| |
|
|
|
|
| o changeset: 3:6625a5168474
|
|
|
|
| | parent: 1:eca11cf91c71
|
|
|
|
| | user: test
|
|
|
|
| | date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| | summary: commitD
|
|
|
|
| |
|
|
|
|
o | changeset: 2:5c51d8d6557d
|
|
|
|
|/ user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: commitC
|
|
|
|
|
|
|
|
|
o changeset: 1:eca11cf91c71
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: commitB
|
|
|
|
|
|
|
|
|
o changeset: 0: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
|
|
|
|
changeset: 3:6625a5168474
|
|
|
|
parent: 1:eca11cf91c71
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: commitD
|
|
|
|
|
|
|
|
changeset: 4:d8db9d137221
|
|
|
|
tag: tip
|
|
|
|
parent: 2:5c51d8d6557d
|
|
|
|
parent: 3:6625a5168474
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: mergeCD
|
|
|
|
|
|
|
|
|
|
|
|
check strip behavior
|
|
|
|
|
|
|
|
$ hg --config extensions.strip= strip '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
|
2016-02-29 09:01:20 +03:00
|
|
|
starting 4 threads for background file closing (?)
|
2015-06-29 21:20:09 +03:00
|
|
|
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
|
|
2 changesets found
|
|
|
|
list of changesets:
|
|
|
|
6625a516847449b6f0fa3737b9ba56e9f0f3032c
|
|
|
|
d8db9d1372214336d2b5570f20ee468d2c72fa8b
|
2015-10-20 14:09:43 +03:00
|
|
|
bundle2-output-bundle: "HG20", (1 params) 1 parts total
|
2016-07-18 01:13:51 +03:00
|
|
|
bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
|
2015-06-29 21:20:09 +03:00
|
|
|
saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/6625a5168474-345bb43d-backup.hg (glob)
|
|
|
|
invalid branchheads cache (served): tip differs
|
|
|
|
truncating cache/rbc-revs-v1 to 24
|
|
|
|
$ hg log -G
|
|
|
|
o changeset: 2:5c51d8d6557d
|
|
|
|
| tag: tip
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: commitC
|
|
|
|
|
|
|
|
|
@ changeset: 1:eca11cf91c71
|
|
|
|
| user: test
|
|
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
| summary: commitB
|
|
|
|
|
|
|
|
|
o changeset: 0: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
|
|
|
|
changeset: 3:6625a5168474
|
|
|
|
parent: 1:eca11cf91c71
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: commitD
|
|
|
|
|
|
|
|
changeset: 4:d8db9d137221
|
|
|
|
tag: tip
|
|
|
|
parent: 2:5c51d8d6557d
|
|
|
|
parent: 3:6625a5168474
|
|
|
|
user: test
|
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
|
summary: mergeCD
|
|
|
|
|
strip: invalidate phase cache after stripping changeset (issue5235)
When we remove a changeset from the changelog, the phase cache must be
invalidated, otherwise it could refer to changesets that are no longer in the
repo.
To reproduce the failure, I created an extension querying the phase cache after
the strip transaction is over.
To do that, I stripped two commits with a bookmark on one of them to force
another transaction (we open a transaction for moving bookmarks)
after the strip transaction.
Without the fix in this patch, the test leads to a stacktrace showing the issue:
repair.strip(ui, repo, revs, backup)
File "/Users/lcharignon/facebook-hg-rpms/hg-crew/mercurial/repair.py", line 205, in strip
tr.close()
File "/Users/lcharignon/facebook-hg-rpms/hg-crew/mercurial/transaction.py", line 44, in _active
return func(self, *args, **kwds)
File "/Users/lcharignon/facebook-hg-rpms/hg-crew/mercurial/transaction.py", line 490, in close
self._postclosecallback[cat](self)
File "$TESTTMP/crashstrip2.py", line 4, in test
[repo.changelog.node(r) for r in repo.revs("not public()")]
File "/Users/lcharignon/facebook-hg-rpms/hg-crew/mercurial/changelog.py", line 337, in node
return super(changelog, self).node(rev)
File "/Users/lcharignon/facebook-hg-rpms/hg-crew/mercurial/revlog.py", line 377, in node
return self.index[rev][7]
IndexError: revlog index out of range
The situation was encountered in inhibit (evolve's repo) where we would crash
following the volatile set invalidation submitted by Augie in
cbc52a99d057d11790cf5011e877c6f698bf57bf. Before his patch the issue was masked
as we were not accessing the phasecache after stripping a revision.
This bug uncovered another but in histedit (see explanation in issue5235).
I changed the histedit test accordingly to avoid fixing two things at once.
2016-05-12 16:13:59 +03:00
|
|
|
Check that the phase cache is properly invalidated after a strip with bookmark.
|
|
|
|
|
|
|
|
$ cat > ../stripstalephasecache.py << EOF
|
|
|
|
> from 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 2
|
|
|
|
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 strip ".^" --config extensions.crash=$TESTTMP/stripstalephasecache.py
|
|
|
|
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
|
|
saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/8f0b4384875c-4fa10deb-backup.hg (glob)
|
|
|
|
$ hg up -C 1
|
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
2015-08-09 00:50:03 +03:00
|
|
|
|
|
|
|
Error during post-close callback of the strip transaction
|
|
|
|
(They should be gracefully handled and reported)
|
|
|
|
|
|
|
|
$ cat > ../crashstrip.py << EOF
|
|
|
|
> from mercurial import error
|
|
|
|
> def reposetup(ui, repo):
|
|
|
|
> class crashstriprepo(repo.__class__):
|
|
|
|
> def transaction(self, desc, *args, **kwargs):
|
|
|
|
> tr = super(crashstriprepo, self).transaction(self, desc, *args, **kwargs)
|
|
|
|
> if desc == 'strip':
|
|
|
|
> def crash(tra): raise error.Abort('boom')
|
|
|
|
> tr.addpostclose('crash', crash)
|
|
|
|
> return tr
|
|
|
|
> repo.__class__ = crashstriprepo
|
|
|
|
> EOF
|
|
|
|
$ hg strip tip --config extensions.crash=$TESTTMP/crashstrip.py
|
|
|
|
saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/5c51d8d6557d-70daef06-backup.hg (glob)
|
2016-09-19 19:14:35 +03:00
|
|
|
strip failed, backup bundle stored in '$TESTTMP/issue4736/.hg/strip-backup/5c51d8d6557d-70daef06-backup.hg' (glob)
|
2015-08-09 00:50:03 +03:00
|
|
|
abort: boom
|
|
|
|
[255]
|
|
|
|
|
|
|
|
|