strip: take branch into account when selecting update target (
issue5540)
Test contributed by Matt Harbison
Keep the same behavior in most cases (i.e. first parent of the first root of
stripped changsets), but if the branch differs from wdir's, try to find another
parent of stripped commits that is on the same branch.
--- a/hgext/strip.py Wed Oct 04 18:49:09 2017 +0200
+++ b/hgext/strip.py Thu Oct 05 16:13:05 2017 +0200
@@ -60,10 +60,19 @@
def _findupdatetarget(repo, nodes):
unode, p2 = repo.changelog.parents(nodes[0])
+ currentbranch = repo[None].branch()
if (util.safehasattr(repo, 'mq') and p2 != nullid
and p2 in [x.node for x in repo.mq.applied]):
unode = p2
+ elif currentbranch != repo[unode].branch():
+ pwdir = 'parents(wdir())'
+ revset = 'max(((parents(%ln::%r) + %r) - %ln::%r) and branch(%s))'
+ branchtarget = repo.revs(revset, nodes, pwdir, pwdir, nodes, pwdir,
+ currentbranch)
+ if branchtarget:
+ cl = repo.changelog
+ unode = cl.node(branchtarget.first())
return unode
--- a/tests/test-strip.t Wed Oct 04 18:49:09 2017 +0200
+++ b/tests/test-strip.t Thu Oct 05 16:13:05 2017 +0200
@@ -941,6 +941,214 @@
abort: boom
[255]
+test stripping a working directory parent doesn't switch named branches
+
+ $ hg log -G
+ @ changeset: 1:eca11cf91c71
+ | tag: tip
+ | 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
+
+
+ $ hg branch new-branch
+ marked working directory as branch new-branch
+ (branches are permanent and global, did you want a bookmark?)
+ $ hg ci -m "start new branch"
+ $ echo 'foo' > foo.txt
+ $ hg ci -Aqm foo
+ $ hg up default
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo 'bar' > bar.txt
+ $ hg ci -Aqm bar
+ $ hg up new-branch
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg merge default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg log -G
+ @ changeset: 4:35358f982181
+ | tag: tip
+ | parent: 1:eca11cf91c71
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: bar
+ |
+ | @ changeset: 3:f62c6c09b707
+ | | branch: new-branch
+ | | user: test
+ | | date: Thu Jan 01 00:00:00 1970 +0000
+ | | summary: foo
+ | |
+ | o changeset: 2:b1d33a8cadd9
+ |/ branch: new-branch
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: start new branch
+ |
+ 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
+
+
+ $ hg strip --force -r 35358f982181
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/35358f982181-50d992d4-backup.hg (glob)
+ $ hg log -G
+ @ changeset: 3:f62c6c09b707
+ | branch: new-branch
+ | tag: tip
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: foo
+ |
+ o changeset: 2:b1d33a8cadd9
+ | branch: new-branch
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: start new branch
+ |
+ 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
+
+
+ $ hg up default
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo 'bar' > bar.txt
+ $ hg ci -Aqm bar
+ $ hg up new-branch
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg merge default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg ci -m merge
+ $ hg log -G
+ @ changeset: 5:4cf5e92caec2
+ |\ branch: new-branch
+ | | tag: tip
+ | | parent: 3:f62c6c09b707
+ | | parent: 4:35358f982181
+ | | user: test
+ | | date: Thu Jan 01 00:00:00 1970 +0000
+ | | summary: merge
+ | |
+ | o changeset: 4:35358f982181
+ | | parent: 1:eca11cf91c71
+ | | user: test
+ | | date: Thu Jan 01 00:00:00 1970 +0000
+ | | summary: bar
+ | |
+ o | changeset: 3:f62c6c09b707
+ | | branch: new-branch
+ | | user: test
+ | | date: Thu Jan 01 00:00:00 1970 +0000
+ | | summary: foo
+ | |
+ o | changeset: 2:b1d33a8cadd9
+ |/ branch: new-branch
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: start new branch
+ |
+ 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
+
+
+ $ hg strip -r 35358f982181
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/35358f982181-a6f020aa-backup.hg (glob)
+ $ hg log -G
+ @ changeset: 3:f62c6c09b707
+ | branch: new-branch
+ | tag: tip
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: foo
+ |
+ o changeset: 2:b1d33a8cadd9
+ | branch: new-branch
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: start new branch
+ |
+ 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
+
+
+ $ hg pull -u $TESTTMP/issue4736/.hg/strip-backup/35358f982181-a6f020aa-backup.hg
+ pulling from $TESTTMP/issue4736/.hg/strip-backup/35358f982181-a6f020aa-backup.hg (glob)
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 1 changes to 1 files
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg strip -k -r 35358f982181
+ saved backup bundle to $TESTTMP/issue4736/.hg/strip-backup/35358f982181-a6f020aa-backup.hg (glob)
+ $ hg log -G
+ @ changeset: 3:f62c6c09b707
+ | branch: new-branch
+ | tag: tip
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: foo
+ |
+ o changeset: 2:b1d33a8cadd9
+ | branch: new-branch
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: start new branch
+ |
+ 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
+
+ $ hg diff
+ diff -r f62c6c09b707 bar.txt
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/bar.txt Thu Jan 01 00:00:00 1970 +0000
+ @@ -0,0 +1,1 @@
+ +bar
+
Use delayedstrip to strip inside a transaction
$ cd $TESTTMP