https://bz.mercurial-scm.org/show_bug.cgi?id=5540
Bug ID: 5540 Summary: Stripping a working directory parent may switch named branches Product: Mercurial Version: default branch Hardware: PC OS: Windows Status: UNCONFIRMED Severity: feature Priority: wish Component: strip Assignee: bugzi...@mercurial-scm.org Reporter: matt_harbi...@yahoo.com CC: mercurial-devel@mercurial-scm.org It's a bit surprising, given how hard `hg update` tries to stay on the current named branch without an explicit destination. There's no indication of the switch in the command output (though there is an "X files updated/merged/removed" message). It requires a merge as part of the strip range to trigger. Here's an example based on the tests for 4.2-rc: diff --git a/tests/test-strip.t b/tests/test-strip.t --- a/tests/test-strip.t +++ b/tests/test-strip.t @@ -935,4 +935,97 @@ abort: boom [255] + $ 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 ci -m merge + $ hg log -G + @ changeset: 5:4cf5e92caec2 + |/ branch: new-branch (glob) + | | 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, 2 files removed, 0 files unresolved + saved backup bundle to $TESTTMP\issue4736\.hg\strip-backup/35358f982181-a6f020aa-backup.hg (glob) + $ hg log -G + o 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 + | + @ 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 + It is documented in the help, but it's not hard to read it such that --rev '.' is part of the strip (especially if a range revset is given to the command), and *its* most recent ancestor used. If '.' was stripped explicitly in this example instead, it does stay on the same branch. (But isn't 35358f982181 "the most recent available ancestor", per the help text? The current behavior in this case seems better in that it is more deterministic, in addition to staying on the same branch.) -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel