[PATCH 2 of 2] update: change default destination to tipmost descendant (issue4673) (BC)
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Tue Feb 9 19:16:06 UTC 2016
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1454426651 0
# Tue Feb 02 15:24:11 2016 +0000
# Node ID 913b57e4a14d5961dbd845a45160b51a968c193a
# Parent f865f8c9b492bea4514ba49c7c1cf2fa918f9a96
# EXP-Topic destination
# Available At http://hg.netv6.net/marmoute-wip/mercurial/
# hg pull http://hg.netv6.net/marmoute-wip/mercurial/ -r 913b57e4a14d
update: change default destination to tipmost descendant (issue4673) (BC)
Bare 'hg update' now brings you to the tipmost descendant (on the same branch).
Leaving the user on the same topological branch. The previous behavior, updating
to the tipmost changeset on the same branch could lead to jump from a
topological branch to another. This was confusing and impractical. As the only
conceivable reason for the old behavior have been address by the recently
introduce message about other heads, we can "safely" change this behavior
All test changes have been reviewed and seen a valid consequences.
diff --git a/mercurial/destutil.py b/mercurial/destutil.py
--- a/mercurial/destutil.py
+++ b/mercurial/destutil.py
@@ -90,11 +90,13 @@ def _destupdatebook(repo, clean, check):
def _destupdatebranch(repo, clean, check):
"""decide on an update destination from current branch"""
wc = repo[None]
movemark = node = None
try:
- node = repo.branchtip(wc.branch())
+ node = repo.revs('max(.::(head() and branch("%s")))'
+ % wc.branch()).first()
+ # node = repo.branchtip(wc.branch())
if bookmarks.isactivewdirparent(repo):
movemark = repo['.'].node()
except error.RepoLookupError:
if wc.branch() == 'default': # no default branch!
node = repo.lookup('tip') # update to tip
diff --git a/tests/test-bookmarks.t b/tests/test-bookmarks.t
--- a/tests/test-bookmarks.t
+++ b/tests/test-bookmarks.t
@@ -733,39 +733,16 @@ tipmost surviving ancestor of the stripp
o changeset: 0:f7b1eb17ad24
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0
-test non-linear update not clearing active bookmark
-
- $ hg up 1
- 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
- (leaving bookmark four)
- $ hg book drop
- $ hg up -C
- 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
- (leaving bookmark drop)
- 1 other heads for branch "default"
- $ hg sum
- parent: 2:db815d6d32e6
- 2
- branch: default
- bookmarks: should-end-on-two
- commit: 2 unknown (clean)
- update: 1 new changesets, 2 branch heads (merge)
- phases: 4 draft
- $ hg book
- drop 1:925d80f479bb
- four 3:9ba5f110a0b3
- should-end-on-two 2:db815d6d32e6
- $ hg book -d drop
- $ hg up four
- 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- (activating bookmark four)
no-op update doesn't deactive bookmarks
+ $ hg up four
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (activating bookmark four)
$ hg up
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg sum
parent: 3:9ba5f110a0b3 tip
y
diff --git a/tests/test-largefiles-cache.t b/tests/test-largefiles-cache.t
--- a/tests/test-largefiles-cache.t
+++ b/tests/test-largefiles-cache.t
@@ -187,11 +187,11 @@ conditional above.
src/.hg/largefiles/e2fb5f2139d086ded2cb600d5a91a196e76bf020
Inject corruption into the largefiles store and see how update handles that:
$ cd src
- $ hg up -qC
+ $ hg up -qC tip
$ cat large
modified
$ rm large
$ cat .hglf/large
e2fb5f2139d086ded2cb600d5a91a196e76bf020
diff --git a/tests/test-merge-criss-cross.t b/tests/test-merge-criss-cross.t
--- a/tests/test-merge-criss-cross.t
+++ b/tests/test-merge-criss-cross.t
@@ -210,11 +210,11 @@ Verify how the output looks and and how
$ hg up -qC
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
- $ hg up -qC
+ $ hg up -qC tip
$ hg merge -v
note: merging 3b08d01b0ab5+ and adfe50279922 using bids from ancestors 0f6b37dbe527 and 40663881a6dd
calculating bids for ancestor 0f6b37dbe527
resolving manifests
diff --git a/tests/test-merge5.t b/tests/test-merge5.t
--- a/tests/test-merge5.t
+++ b/tests/test-merge5.t
@@ -11,22 +11,17 @@
$ hg commit -A -m "comment #2"
removing b
created new head
$ hg update 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- $ hg update
- abort: not a linear update
- (merge or update --check to force update)
- [255]
$ rm b
- $ hg update -c
+ $ hg update -c 2
abort: uncommitted changes
[255]
$ hg revert b
- $ hg update -c
+ $ hg update -c 2
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
- 1 other heads for branch "default"
$ mv a c
Should abort:
$ hg update 1
diff --git a/tests/test-pull-update.t b/tests/test-pull-update.t
--- a/tests/test-pull-update.t
+++ b/tests/test-pull-update.t
@@ -14,37 +14,35 @@
$ cd ../t
$ echo 1.2 > foo
$ hg ci -Am m
-Should not update:
+Should not update to the other topological branch:
$ hg pull -u ../tt
pulling from ../tt
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
- abort: not updating: not a linear update
- (merge or update --check to force update)
- [255]
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 1 other heads for branch "default"
$ cd ../tt
-Should not update:
+Should not update to the other branch:
$ hg pull -u ../t
pulling from ../t
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
- abort: not updating: not a linear update
- (merge or update --check to force update)
- [255]
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 1 other heads for branch "default"
$ HGMERGE=true hg merge
merging foo
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
diff --git a/tests/test-up-local-change.t b/tests/test-up-local-change.t
--- a/tests/test-up-local-change.t
+++ b/tests/test-up-local-change.t
@@ -170,13 +170,12 @@ create a second head
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 2
$ hg --debug up
- abort: uncommitted changes
- (commit and merge, or update --clean to discard changes)
- [255]
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 1 other heads for branch "default"
test conflicting untracked files
$ hg up -qC 0
$ echo untracked > b
diff --git a/tests/test-update-branches.t b/tests/test-update-branches.t
--- a/tests/test-update-branches.t
+++ b/tests/test-update-branches.t
@@ -91,12 +91,12 @@ Cases are run as shown in that table, ro
$ norevtest 'none clean linear' clean 4
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
parent=5
$ norevtest 'none clean same' clean 2
- abort: not a linear update
- (merge or update --check to force update)
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 1 other heads for branch "default"
parent=2
$ revtest 'none clean linear' clean 1 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -138,12 +138,12 @@ Cases are run as shown in that table, ro
(commit or update --clean to discard changes)
parent=3
M foo
$ norevtest 'none dirty cross' dirty 2
- abort: uncommitted changes
- (commit and merge, or update --clean to discard changes)
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 1 other heads for branch "default"
parent=2
M foo
$ revtest 'none dirtysub cross' dirtysub 3 4
abort: uncommitted changes
@@ -164,13 +164,13 @@ Cases are run as shown in that table, ro
abort: uncommitted changes in subrepository 'sub'
parent=1
M sub/suba
$ norevtest '-c clean same' clean 2 -c
- 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 other heads for branch "default"
- parent=3
+ parent=2
$ revtest '-cC dirty linear' dirty 1 2 -cC
abort: cannot specify both -c/--check and -C/--clean
parent=1
M foo
More information about the Mercurial-devel
mailing list