update: fix bare --clean to work on new branch (
issue5003) (BC)
Before this commit bare update --clean on newly created branch
updates to the parent commit, even if there are later commits
on the parent commit's branch. Update to the latest head on the
parent commit's branch instead.
This seems reasonable as clean should discard uncommited changes,
branch is one of them.
--- a/mercurial/destutil.py Fri Jun 03 15:55:07 2016 +0200
+++ b/mercurial/destutil.py Tue Apr 05 07:30:01 2016 +0200
@@ -95,6 +95,10 @@
wc = repo[None]
movemark = node = None
currentbranch = wc.branch()
+
+ if clean:
+ currentbranch = repo['.'].branch()
+
if currentbranch in repo.branchmap():
heads = repo.branchheads(currentbranch)
if heads:
--- a/tests/test-newbranch.t Fri Jun 03 15:55:07 2016 +0200
+++ b/tests/test-newbranch.t Tue Apr 05 07:30:01 2016 +0200
@@ -463,3 +463,72 @@
-1 new
$ cd ..
+
+We expect that update --clean discard changes in working directory,
+and updates to the head of parent branch.
+
+ $ hg init updatebareclean
+ $ cd updatebareclean
+ $ hg update --clean
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ touch a
+ $ hg commit -A -m "a"
+ adding a
+ $ touch b
+ $ hg commit -A -m "b"
+ adding b
+ $ touch c
+ $ hg commit -A -m "c"
+ adding c
+ $ hg log
+ changeset: 2:991a3460af53
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c
+
+ changeset: 1:0e067c57feba
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: b
+
+ changeset: 0:3903775176ed
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: a
+
+ $ hg update -r 1
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg branch new-branch
+ marked working directory as branch new-branch
+ (branches are permanent and global, did you want a bookmark?)
+ $ echo "aa" >> a
+ $ hg update --clean
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg status
+ $ hg branch
+ default
+ $ hg parent
+ changeset: 2:991a3460af53
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c
+
+We expect that update --clean on non existing parent discards a new branch
+and updates to the tipmost non-closed branch head
+
+ $ hg update null
+ 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
+ $ hg branch newbranch
+ marked working directory as branch newbranch
+ (branches are permanent and global, did you want a bookmark?)
+ $ hg update -C
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg summary
+ parent: 2:991a3460af53 tip
+ c
+ branch: default
+ commit: (clean)
+ update: (current)
+ phases: 3 draft