[PATCH 2 of 2 V7] update: fix bare --clean to work on new branch (issue5003) (BC)
liscju
piotr.listkiewicz at gmail.com
Mon Apr 11 13:37:17 EDT 2016
# HG changeset patch
# User liscju <piotr.listkiewicz at gmail.com>
# Date 1459834201 -7200
# Tue Apr 05 07:30:01 2016 +0200
# Node ID b7570c990ffb801db755c3e5d3e1502ca7ffd31f
# Parent 9b92231d66d9e4f41dd36bfc5f34264d8a8e9113
update: fix bare --clean to work on new branch (issue5003) (BC)
So far 'hg update --clean' on newly created branch results in abort
with branch not found error. After applying this commit bare
update --clean results in updating to the max head of the parents
branch.
This seems reasonable as clean should discard uncommited changes,
branch is one of them.
diff -r 9b92231d66d9 -r b7570c990ffb mercurial/destutil.py
--- a/mercurial/destutil.py Tue Apr 05 06:53:33 2016 +0200
+++ b/mercurial/destutil.py Tue Apr 05 07:30:01 2016 +0200
@@ -95,14 +95,24 @@ def _destupdatebranch(repo, clean, check
wc = repo[None]
movemark = node = None
currentbranch = wc.branch()
- if currentbranch in repo.branchmap():
- heads = repo.branchheads(currentbranch)
+
+ if clean:
+ heads = repo.branchheads(repo['.'].branch())
if heads:
node = repo.revs('max(.::(%ln))', heads).first()
- if bookmarks.isactivewdirparent(repo):
- movemark = repo['.'].node()
+ if currentbranch not in repo.branchmap():
+ repo.ui.warn(_('uncommited branch %s does not exist, '
+ 'updating to the head of parent branch\n')
+ % currentbranch)
else:
- node = repo['.'].node()
+ if currentbranch in repo.branchmap():
+ heads = repo.branchheads(currentbranch)
+ if heads:
+ node = repo.revs('max(.::(%ln))', heads).first()
+ if bookmarks.isactivewdirparent(repo):
+ movemark = repo['.'].node()
+ else:
+ node = repo['.'].node()
return node, movemark, None
def _destupdatebranchfallback(repo, clean, check):
diff -r 9b92231d66d9 -r b7570c990ffb tests/test-newbranch.t
--- a/tests/test-newbranch.t Tue Apr 05 06:53:33 2016 +0200
+++ b/tests/test-newbranch.t Tue Apr 05 07:30:01 2016 +0200
@@ -391,3 +391,58 @@ We expect that bare update on new branch
commit: (new branch)
update: (current)
phases: 3 draft
+
+ $ cd ..
+
+We expects 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
+ uncommited branch new-branch does not exist, updating to the head of parent branch
+ 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
+
More information about the Mercurial-devel
mailing list