Mercurial > hg
annotate mercurial/destutil.py @ 47237:864f4ebe6a8d
revlogv2: also test transactionality of revlog v2
Without surprise, this is broken :-)
Now that it is tested, we can fix it.
Differential Revision: https://phab.mercurial-scm.org/D10627
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 03 May 2021 12:34:41 +0200 |
parents | d4ba4d51f85f |
children | f8f2ecdde4b5 |
rev | line source |
---|---|
26569
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
1 # destutil.py - Mercurial utility function for command destination |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
45843
diff
changeset
|
3 # Copyright Olivia Mackall <olivia@selenic.com> and other |
26569
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
4 # |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
7 |
27333
2c60b4b2a0de
destutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27262
diff
changeset
|
8 from __future__ import absolute_import |
2c60b4b2a0de
destutil: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27262
diff
changeset
|
9 |
26569
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
10 from .i18n import _ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
11 from . import bookmarks, error, obsutil, scmutil, stack |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
12 |
26569
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
13 |
37787
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
14 def orphanpossibledestination(repo, rev): |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
15 """Return all changesets that may be a new parent for orphan `rev`. |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
16 |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
17 This function works fine on non-orphan revisions, it's just silly |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
18 because there's no destination implied by obsolete markers, so |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
19 it'll return nothing. |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
20 """ |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
21 tonode = repo.changelog.node |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
22 parents = repo.changelog.parentrevs |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
23 torev = repo.changelog.rev |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
24 dest = set() |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
25 tovisit = list(parents(rev)) |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
26 while tovisit: |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
27 r = tovisit.pop() |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
28 succsets = obsutil.successorssets(repo, tonode(r)) |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
29 if not succsets: |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
30 # if there are no successors for r, r was probably pruned |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
31 # and we should walk up to r's parents to try and find |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
32 # some successors. |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
33 tovisit.extend(parents(r)) |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
34 else: |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
35 # We should probably pick only one destination from split |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
36 # (case where '1 < len(ss)'), This could be the currently |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
37 # tipmost, but the correct result is less clear when |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
38 # results of the split have been moved such that they |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
39 # reside on multiple branches. |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
40 for ss in succsets: |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
41 for n in ss: |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
42 dr = torev(n) |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
43 if dr != -1: |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
44 dest.add(dr) |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
45 return dest |
92213f6745ed
rebase: introduce support for automatically rebasing orphan changes
Augie Fackler <augie@google.com>
parents:
37452
diff
changeset
|
46 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
47 |
30962
11c253997b0e
destutil: drop now-unused "check" parameter from destupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30961
diff
changeset
|
48 def _destupdateobs(repo, clean): |
26723
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
49 """decide of an update destination from obsolescence markers""" |
26569
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
50 node = None |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
51 wc = repo[None] |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
52 p1 = wc.p1() |
26723
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
53 movemark = None |
26569
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
54 |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
55 if p1.obsolete() and not p1.children(): |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
56 # allow updating to successors |
33142
4f49810a1011
obsutil: move 'successorssets' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32698
diff
changeset
|
57 successors = obsutil.successorssets(repo, p1.node()) |
26569
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
58 |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
59 # behavior of certain cases is as follows, |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
60 # |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
61 # divergent changesets: update to highest rev, similar to what |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
62 # is currently done when there are more than one head |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
63 # (i.e. 'tip') |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
64 # |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
65 # replaced changesets: same as divergent except we know there |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
66 # is no conflict |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
67 # |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
68 # pruned changeset: no update is done; though, we could |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
69 # consider updating to the first non-obsolete parent, |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
70 # similar to what is current done for 'hg prune' |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
71 |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
72 if successors: |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
73 # flatten the list here handles both divergent (len > 1) |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
74 # and the usual case (len = 1) |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
75 successors = [n for sub in successors for n in sub] |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
76 |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
77 # get the max revision for the given successors set, |
2aeeef1dc9a5
update: move default destination computation to a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
78 # i.e. the 'tip' of a set |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
79 node = repo.revs(b'max(%ln)', successors).first() |
26722
6cd643a1d32c
destupdate: move obsolete handling first
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26721
diff
changeset
|
80 if bookmarks.isactivewdirparent(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
81 movemark = repo[b'.'].node() |
26723
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
82 return node, movemark, None |
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
83 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
84 |
30962
11c253997b0e
destutil: drop now-unused "check" parameter from destupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30961
diff
changeset
|
85 def _destupdatebook(repo, clean): |
26724
7fc759c0c430
destupdate: extract logic based on bookmarks in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26723
diff
changeset
|
86 """decide on an update destination from active bookmark""" |
7fc759c0c430
destupdate: extract logic based on bookmarks in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26723
diff
changeset
|
87 # we also move the active bookmark, if any |
37359
e27298bf11dd
bookmarks: calculateupdate() returns a bookmark, not a rev
Martin von Zweigbergk <martinvonz@google.com>
parents:
37004
diff
changeset
|
88 node = None |
37375
a973bb92ab71
bookmarks: drop always-None argument from calculateupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
37359
diff
changeset
|
89 activemark, movemark = bookmarks.calculateupdate(repo.ui, repo) |
37359
e27298bf11dd
bookmarks: calculateupdate() returns a bookmark, not a rev
Martin von Zweigbergk <martinvonz@google.com>
parents:
37004
diff
changeset
|
90 if activemark is not None: |
37452
2b38c80557a4
destutil: look up bookmarks only among bookmarks
Martin von Zweigbergk <martinvonz@google.com>
parents:
37390
diff
changeset
|
91 node = repo._bookmarks[activemark] |
26724
7fc759c0c430
destupdate: extract logic based on bookmarks in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26723
diff
changeset
|
92 return node, movemark, activemark |
7fc759c0c430
destupdate: extract logic based on bookmarks in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26723
diff
changeset
|
93 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
94 |
30962
11c253997b0e
destutil: drop now-unused "check" parameter from destupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30961
diff
changeset
|
95 def _destupdatebranch(repo, clean): |
28385
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
96 """decide on an update destination from current branch |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
97 |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
98 This ignores closed branch heads. |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
99 """ |
26725
bde739aced83
destupdate: extract logic based on branch in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26724
diff
changeset
|
100 wc = repo[None] |
bde739aced83
destupdate: extract logic based on branch in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26724
diff
changeset
|
101 movemark = node = None |
28235
c2f0a47069ef
destutil: replace wc.branch() invocations by cached value for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28234
diff
changeset
|
102 currentbranch = wc.branch() |
29284
1c7167009936
update: fix bare --clean to work on new branch (issue5003) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
29043
diff
changeset
|
103 |
1c7167009936
update: fix bare --clean to work on new branch (issue5003) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
29043
diff
changeset
|
104 if clean: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
105 currentbranch = repo[b'.'].branch() |
29284
1c7167009936
update: fix bare --clean to work on new branch (issue5003) (BC)
liscju <piotr.listkiewicz@gmail.com>
parents:
29043
diff
changeset
|
106 |
28236
e333cea74741
destutil: use cached branch information instead of query for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28235
diff
changeset
|
107 if currentbranch in repo.branchmap(): |
28385
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
108 heads = repo.branchheads(currentbranch) |
28236
e333cea74741
destutil: use cached branch information instead of query for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28235
diff
changeset
|
109 if heads: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
110 node = repo.revs(b'max(.::(%ln))', heads).first() |
26725
bde739aced83
destupdate: extract logic based on branch in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26724
diff
changeset
|
111 if bookmarks.isactivewdirparent(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
112 movemark = repo[b'.'].node() |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
113 elif currentbranch == b'default' and not wc.p1(): |
28924
d9539959167d
update: resurrect bare update from null parent to tip-most branch head
Yuya Nishihara <yuya@tcha.org>
parents:
28903
diff
changeset
|
114 # "null" parent belongs to "default" branch, but it doesn't exist, so |
d9539959167d
update: resurrect bare update from null parent to tip-most branch head
Yuya Nishihara <yuya@tcha.org>
parents:
28903
diff
changeset
|
115 # update to the tipmost non-closed branch head |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
116 node = repo.revs(b'max(head() and not closed())').first() |
28236
e333cea74741
destutil: use cached branch information instead of query for efficiency
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28235
diff
changeset
|
117 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
118 node = repo[b'.'].node() |
26725
bde739aced83
destupdate: extract logic based on branch in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26724
diff
changeset
|
119 return node, movemark, None |
bde739aced83
destupdate: extract logic based on branch in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26724
diff
changeset
|
120 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
121 |
30962
11c253997b0e
destutil: drop now-unused "check" parameter from destupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30961
diff
changeset
|
122 def _destupdatebranchfallback(repo, clean): |
28385
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
123 """decide on an update destination from closed heads in current branch""" |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
124 wc = repo[None] |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
125 currentbranch = wc.branch() |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
126 movemark = None |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
127 if currentbranch in repo.branchmap(): |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
128 # here, all descendant branch heads are closed |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
129 heads = repo.branchheads(currentbranch, closed=True) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
130 assert heads, b"any branch has at least one head" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
131 node = repo.revs(b'max(.::(%ln))', heads).first() |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43114
diff
changeset
|
132 assert ( |
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43114
diff
changeset
|
133 node is not None |
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43114
diff
changeset
|
134 ), b"any revision has at least one descendant branch head" |
28385
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
135 if bookmarks.isactivewdirparent(repo): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
136 movemark = repo[b'.'].node() |
28385
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
137 else: |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
138 # here, no "default" branch, and all branches are closed |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
139 node = repo.lookup(b'tip') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
140 assert node is not None, b"'tip' exists even in empty repository" |
28385
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
141 return node, movemark, None |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
142 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
143 |
30332
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
29964
diff
changeset
|
144 # order in which each step should be evaluated |
26726
8e6649616699
destupdate: have a generic and extensible way to run each step
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26725
diff
changeset
|
145 # steps are run until one finds a destination |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 destupdatesteps = [b'evolution', b'bookmark', b'branch', b'branchfallback'] |
26726
8e6649616699
destupdate: have a generic and extensible way to run each step
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26725
diff
changeset
|
147 # mapping to ease extension overriding steps. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
148 destupdatestepmap = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
149 b'evolution': _destupdateobs, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
150 b'bookmark': _destupdatebook, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
151 b'branch': _destupdatebranch, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
152 b'branchfallback': _destupdatebranchfallback, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
153 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
154 |
26726
8e6649616699
destupdate: have a generic and extensible way to run each step
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26725
diff
changeset
|
155 |
30962
11c253997b0e
destutil: drop now-unused "check" parameter from destupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30961
diff
changeset
|
156 def destupdate(repo, clean=False): |
26723
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
157 """destination for bare update operation |
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
158 |
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
159 return (rev, movemark, activemark) |
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
160 |
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
161 - rev: the revision to update to, |
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
162 - movemark: node to move the active bookmark from |
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
163 (cf bookmark.calculate update), |
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
164 - activemark: a bookmark to activate at the end of the update. |
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
165 """ |
26726
8e6649616699
destupdate: have a generic and extensible way to run each step
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26725
diff
changeset
|
166 node = movemark = activemark = None |
26723
52d08a93de1f
destupdate: extract logic based on obsolescence marker in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26722
diff
changeset
|
167 |
26726
8e6649616699
destupdate: have a generic and extensible way to run each step
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26725
diff
changeset
|
168 for step in destupdatesteps: |
30962
11c253997b0e
destutil: drop now-unused "check" parameter from destupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30961
diff
changeset
|
169 node, movemark, activemark = destupdatestepmap[step](repo, clean) |
26726
8e6649616699
destupdate: have a generic and extensible way to run each step
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26725
diff
changeset
|
170 if node is not None: |
8e6649616699
destupdate: have a generic and extensible way to run each step
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26725
diff
changeset
|
171 break |
26628
45b86dbabbda
destupdate: move the check related to the "clean" logic in the function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
172 rev = repo[node].rev() |
45b86dbabbda
destupdate: move the check related to the "clean" logic in the function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
173 |
26641
5c57d01fe64e
destupdate: also include bookmark related logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26629
diff
changeset
|
174 return rev, movemark, activemark |
26714
9903261dcc81
destutil: move default merge destination into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26683
diff
changeset
|
175 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
176 |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
177 msgdestmerge = { |
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
178 # too many matching divergent bookmark |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
179 b'toomanybookmarks': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
180 b'merge': ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
181 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
182 b"multiple matching bookmarks to merge -" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
183 b" please merge with an explicit rev or bookmark" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
184 ), |
43114
8197b395710e
destutil: provide hint on rebase+merge for how to specify destination/rev
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
185 _(b"run 'hg heads' to see all heads, specify rev with -r"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
186 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
187 b'rebase': ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
188 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
189 b"multiple matching bookmarks to rebase -" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
190 b" please rebase to an explicit rev or bookmark" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
191 ), |
43114
8197b395710e
destutil: provide hint on rebase+merge for how to specify destination/rev
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
192 _(b"run 'hg heads' to see all heads, specify destination with -d"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
193 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
194 }, |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
195 # no other matching divergent bookmark |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
196 b'nootherbookmarks': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
197 b'merge': ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
198 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
199 b"no matching bookmark to merge - " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
200 b"please merge with an explicit rev or bookmark" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
201 ), |
43114
8197b395710e
destutil: provide hint on rebase+merge for how to specify destination/rev
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
202 _(b"run 'hg heads' to see all heads, specify rev with -r"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
203 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
204 b'rebase': ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
205 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
206 b"no matching bookmark to rebase - " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
207 b"please rebase to an explicit rev or bookmark" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
208 ), |
43114
8197b395710e
destutil: provide hint on rebase+merge for how to specify destination/rev
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
209 _(b"run 'hg heads' to see all heads, specify destination with -d"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
210 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
211 }, |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
212 # branch have too many unbookmarked heads, no obvious destination |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
213 b'toomanyheads': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
214 b'merge': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
215 _(b"branch '%s' has %d heads - please merge with an explicit rev"), |
43114
8197b395710e
destutil: provide hint on rebase+merge for how to specify destination/rev
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
216 _(b"run 'hg heads .' to see heads, specify rev with -r"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
217 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
218 b'rebase': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 _(b"branch '%s' has %d heads - please rebase to an explicit rev"), |
43114
8197b395710e
destutil: provide hint on rebase+merge for how to specify destination/rev
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
220 _(b"run 'hg heads .' to see heads, specify destination with -d"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
221 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
222 }, |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
223 # branch have no other unbookmarked heads |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
224 b'bookmarkedheads': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
225 b'merge': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
226 _(b"heads are bookmarked - please merge with an explicit rev"), |
43114
8197b395710e
destutil: provide hint on rebase+merge for how to specify destination/rev
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
227 _(b"run 'hg heads' to see all heads, specify rev with -r"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
228 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
229 b'rebase': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
230 _(b"heads are bookmarked - please rebase to an explicit rev"), |
43114
8197b395710e
destutil: provide hint on rebase+merge for how to specify destination/rev
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
231 _(b"run 'hg heads' to see all heads, specify destination with -d"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
232 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
233 }, |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
234 # branch have just a single heads, but there is other branches |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
235 b'nootherbranchheads': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
236 b'merge': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
237 _(b"branch '%s' has one head - please merge with an explicit rev"), |
43114
8197b395710e
destutil: provide hint on rebase+merge for how to specify destination/rev
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
238 _(b"run 'hg heads' to see all heads, specify rev with -r"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
239 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
240 b'rebase': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
241 _(b"branch '%s' has one head - please rebase to an explicit rev"), |
43114
8197b395710e
destutil: provide hint on rebase+merge for how to specify destination/rev
Kyle Lippincott <spectral@google.com>
parents:
43077
diff
changeset
|
242 _(b"run 'hg heads' to see all heads, specify destination with -d"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
243 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
244 }, |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
245 # repository have a single head |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
246 b'nootherheads': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
247 b'merge': (_(b'nothing to merge'), None), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
248 b'rebase': (_(b'nothing to rebase'), None), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
249 }, |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
250 # repository have a single head and we are not on it |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
251 b'nootherheadsbehind': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
252 b'merge': (_(b'nothing to merge'), _(b"use 'hg update' instead")), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
253 b'rebase': (_(b'nothing to rebase'), _(b"use 'hg update' instead")), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
254 }, |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
255 # We are not on a head |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
256 b'notatheads': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
257 b'merge': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
258 _(b'working directory not at a head revision'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
259 _(b"use 'hg update' or merge with an explicit revision"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
260 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
261 b'rebase': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
262 _(b'working directory not at a head revision'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
263 _(b"use 'hg update' or rebase to an explicit revision"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
264 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
265 }, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
266 b'emptysourceset': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
267 b'merge': (_(b'source set is empty'), None), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
268 b'rebase': (_(b'source set is empty'), None), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
269 }, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
270 b'multiplebranchessourceset': { |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
271 b'merge': (_(b'source set is rooted in multiple branches'), None), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
272 b'rebase': ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
273 _(b'rebaseset is rooted in multiple named branches'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
274 _(b'specify an explicit destination with --dest'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
275 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
276 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
277 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
278 |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
279 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
280 def _destmergebook(repo, action=b'merge', sourceset=None, destspace=None): |
26727
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
281 """find merge destination in the active bookmark case""" |
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
282 node = None |
32381
b9942bc6b292
localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents:
31025
diff
changeset
|
283 bmheads = bookmarks.headsforactive(repo) |
37452
2b38c80557a4
destutil: look up bookmarks only among bookmarks
Martin von Zweigbergk <martinvonz@google.com>
parents:
37390
diff
changeset
|
284 curhead = repo._bookmarks[repo._activebookmark] |
26727
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
285 if len(bmheads) == 2: |
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
286 if curhead == bmheads[0]: |
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
287 node = bmheads[1] |
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
288 else: |
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
289 node = bmheads[0] |
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
290 elif len(bmheads) > 2: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
291 msg, hint = msgdestmerge[b'toomanybookmarks'][action] |
28141
13bb8de97f87
destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28140
diff
changeset
|
292 raise error.ManyMergeDestAbort(msg, hint=hint) |
26727
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
293 elif len(bmheads) <= 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
294 msg, hint = msgdestmerge[b'nootherbookmarks'][action] |
28141
13bb8de97f87
destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28140
diff
changeset
|
295 raise error.NoMergeDestAbort(msg, hint=hint) |
26727
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
296 assert node is not None |
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
297 return node |
5b7fd48f9868
destmerge: extract logic based on bookmark into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26726
diff
changeset
|
298 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
299 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
300 def _destmergebranch( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
301 repo, action=b'merge', sourceset=None, onheadcheck=True, destspace=None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
302 ): |
26728
e8f1b7285917
destmerge: extract logic based on branch heads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26727
diff
changeset
|
303 """find merge destination based on branch heads""" |
e8f1b7285917
destmerge: extract logic based on branch heads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26727
diff
changeset
|
304 node = None |
28139
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
305 |
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
306 if sourceset is None: |
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
307 sourceset = [repo[repo.dirstate.p1()].rev()] |
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
308 branch = repo.dirstate.branch() |
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
309 elif not sourceset: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
310 msg, hint = msgdestmerge[b'emptysourceset'][action] |
28141
13bb8de97f87
destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28140
diff
changeset
|
311 raise error.NoMergeDestAbort(msg, hint=hint) |
28139
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
312 else: |
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
313 branch = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
314 for ctx in repo.set(b'roots(%ld::%ld)', sourceset, sourceset): |
28139
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
315 if branch is not None and ctx.branch() != branch: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
316 msg, hint = msgdestmerge[b'multiplebranchessourceset'][action] |
28141
13bb8de97f87
destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28140
diff
changeset
|
317 raise error.ManyMergeDestAbort(msg, hint=hint) |
28139
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
318 branch = ctx.branch() |
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
319 |
26728
e8f1b7285917
destmerge: extract logic based on branch heads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26727
diff
changeset
|
320 bheads = repo.branchheads(branch) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
321 onhead = repo.revs(b'%ld and %ln', sourceset, bheads) |
28161
3324345a498e
destutil: ensure we offer 'hg update' hint when not at head in all cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28141
diff
changeset
|
322 if onheadcheck and not onhead: |
28139
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
323 # Case A: working copy if not on a head. (merge only) |
28105
1fc7b5363871
destutil: document various failure cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28104
diff
changeset
|
324 # |
1fc7b5363871
destutil: document various failure cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28104
diff
changeset
|
325 # This is probably a user mistake We bailout pointing at 'hg update' |
28103
7d852bb47b0a
merge: give priority to "not at head" failures for bare 'hg merge'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28102
diff
changeset
|
326 if len(repo.heads()) <= 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
327 msg, hint = msgdestmerge[b'nootherheadsbehind'][action] |
28103
7d852bb47b0a
merge: give priority to "not at head" failures for bare 'hg merge'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28102
diff
changeset
|
328 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
329 msg, hint = msgdestmerge[b'notatheads'][action] |
28103
7d852bb47b0a
merge: give priority to "not at head" failures for bare 'hg merge'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28102
diff
changeset
|
330 raise error.Abort(msg, hint=hint) |
28139
5476a7a039c0
destutil: allow to specify an explicit source for the merge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28138
diff
changeset
|
331 # remove heads descendants of source from the set |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
332 bheads = list(repo.revs(b'%ln - (%ld::)', bheads, sourceset)) |
28138
5ad2017454ee
destutil: remove current head from list of candidates early
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28137
diff
changeset
|
333 # filters out bookmarked heads |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
334 nbhs = list(repo.revs(b'%ld - bookmark()', bheads)) |
29043
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28924
diff
changeset
|
335 |
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28924
diff
changeset
|
336 if destspace is not None: |
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28924
diff
changeset
|
337 # restrict search space |
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28924
diff
changeset
|
338 # used in the 'hg pull --rebase' case, see issue 5214. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
339 nbhs = list(repo.revs(b'%ld and %ld', destspace, nbhs)) |
29043
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28924
diff
changeset
|
340 |
28138
5ad2017454ee
destutil: remove current head from list of candidates early
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28137
diff
changeset
|
341 if len(nbhs) > 1: |
5ad2017454ee
destutil: remove current head from list of candidates early
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28137
diff
changeset
|
342 # Case B: There is more than 1 other anonymous heads |
28105
1fc7b5363871
destutil: document various failure cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28104
diff
changeset
|
343 # |
1fc7b5363871
destutil: document various failure cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28104
diff
changeset
|
344 # This means that there will be more than 1 candidate. This is |
1fc7b5363871
destutil: document various failure cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28104
diff
changeset
|
345 # ambiguous. We abort asking the user to pick as explicit destination |
1fc7b5363871
destutil: document various failure cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28104
diff
changeset
|
346 # instead. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
347 msg, hint = msgdestmerge[b'toomanyheads'][action] |
28138
5ad2017454ee
destutil: remove current head from list of candidates early
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28137
diff
changeset
|
348 msg %= (branch, len(bheads) + 1) |
28141
13bb8de97f87
destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28140
diff
changeset
|
349 raise error.ManyMergeDestAbort(msg, hint=hint) |
28138
5ad2017454ee
destutil: remove current head from list of candidates early
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28137
diff
changeset
|
350 elif not nbhs: |
5ad2017454ee
destutil: remove current head from list of candidates early
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28137
diff
changeset
|
351 # Case B: There is no other anonymous heads |
28105
1fc7b5363871
destutil: document various failure cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28104
diff
changeset
|
352 # |
1fc7b5363871
destutil: document various failure cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28104
diff
changeset
|
353 # This means that there is no natural candidate to merge with. |
1fc7b5363871
destutil: document various failure cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28104
diff
changeset
|
354 # We abort, with various messages for various cases. |
28138
5ad2017454ee
destutil: remove current head from list of candidates early
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28137
diff
changeset
|
355 if bheads: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 msg, hint = msgdestmerge[b'bookmarkedheads'][action] |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
357 elif len(repo.heads()) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
358 msg, hint = msgdestmerge[b'nootherbranchheads'][action] |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
359 msg %= branch |
28161
3324345a498e
destutil: ensure we offer 'hg update' hint when not at head in all cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28141
diff
changeset
|
360 elif not onhead: |
3324345a498e
destutil: ensure we offer 'hg update' hint when not at head in all cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28141
diff
changeset
|
361 # if 'onheadcheck == False' (rebase case), |
3324345a498e
destutil: ensure we offer 'hg update' hint when not at head in all cases
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28141
diff
changeset
|
362 # this was not caught in Case A. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
363 msg, hint = msgdestmerge[b'nootherheadsbehind'][action] |
28102
bd74b5e0d2c0
destutil: extract all 'mergedest' abort messages into a dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28065
diff
changeset
|
364 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
365 msg, hint = msgdestmerge[b'nootherheads'][action] |
28141
13bb8de97f87
destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28140
diff
changeset
|
366 raise error.NoMergeDestAbort(msg, hint=hint) |
26728
e8f1b7285917
destmerge: extract logic based on branch heads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26727
diff
changeset
|
367 else: |
e8f1b7285917
destmerge: extract logic based on branch heads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26727
diff
changeset
|
368 node = nbhs[0] |
e8f1b7285917
destmerge: extract logic based on branch heads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26727
diff
changeset
|
369 assert node is not None |
e8f1b7285917
destmerge: extract logic based on branch heads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26727
diff
changeset
|
370 return node |
e8f1b7285917
destmerge: extract logic based on branch heads in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26727
diff
changeset
|
371 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
372 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
373 def destmerge( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
374 repo, action=b'merge', sourceset=None, onheadcheck=True, destspace=None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
375 ): |
28137
b54c0246295b
destutil: add an 'action' layer to the destmerge message dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28105
diff
changeset
|
376 """return the default destination for a merge |
b54c0246295b
destutil: add an 'action' layer to the destmerge message dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28105
diff
changeset
|
377 |
b54c0246295b
destutil: add an 'action' layer to the destmerge message dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28105
diff
changeset
|
378 (or raise exception about why it can't pick one) |
b54c0246295b
destutil: add an 'action' layer to the destmerge message dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28105
diff
changeset
|
379 |
b54c0246295b
destutil: add an 'action' layer to the destmerge message dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28105
diff
changeset
|
380 :action: the action being performed, controls emitted error message |
b54c0246295b
destutil: add an 'action' layer to the destmerge message dictionary
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
28105
diff
changeset
|
381 """ |
29043
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28924
diff
changeset
|
382 # destspace is here to work around issues with `hg pull --rebase` see |
cf7de4aeb86b
destutil: add the ability to specify a search space for rebase destination
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
28924
diff
changeset
|
383 # issue5214 for details |
26714
9903261dcc81
destutil: move default merge destination into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26683
diff
changeset
|
384 if repo._activebookmark: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
385 node = _destmergebook( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
386 repo, action=action, sourceset=sourceset, destspace=destspace |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
387 ) |
26714
9903261dcc81
destutil: move default merge destination into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26683
diff
changeset
|
388 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
389 node = _destmergebranch( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
390 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
391 action=action, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
392 sourceset=sourceset, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
393 onheadcheck=onheadcheck, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
394 destspace=destspace, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
395 ) |
26714
9903261dcc81
destutil: move default merge destination into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26683
diff
changeset
|
396 return repo[node].rev() |
27262
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26728
diff
changeset
|
397 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
398 |
27262
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26728
diff
changeset
|
399 def desthistedit(ui, repo): |
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26728
diff
changeset
|
400 """Default base revision to edit for `hg histedit`.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
401 default = ui.config(b'histedit', b'defaultrev') |
37003
2987726085c6
histedit: use the new stack definition for histedit
Boris Feld <boris.feld@octobus.net>
parents:
37002
diff
changeset
|
402 |
2987726085c6
histedit: use the new stack definition for histedit
Boris Feld <boris.feld@octobus.net>
parents:
37002
diff
changeset
|
403 if default is None: |
2987726085c6
histedit: use the new stack definition for histedit
Boris Feld <boris.feld@octobus.net>
parents:
37002
diff
changeset
|
404 revs = stack.getstack(repo) |
2987726085c6
histedit: use the new stack definition for histedit
Boris Feld <boris.feld@octobus.net>
parents:
37002
diff
changeset
|
405 elif default: |
27559
d13bcc9fd656
destutil: use scmutil.revrange for desthistedit (issue5001)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27333
diff
changeset
|
406 revs = scmutil.revrange(repo, [default]) |
41146
fbd168455b26
histedit: crashing with a more useful error message on empty defaultrev
rdamazio@google.com
parents:
37787
diff
changeset
|
407 else: |
45843
c7abdbc8fd47
destutil: raise more specific error when histedit.defaultrev is empty
Martin von Zweigbergk <martinvonz@google.com>
parents:
43117
diff
changeset
|
408 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
409 _(b"config option histedit.defaultrev can't be empty") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
410 ) |
37003
2987726085c6
histedit: use the new stack definition for histedit
Boris Feld <boris.feld@octobus.net>
parents:
37002
diff
changeset
|
411 |
2987726085c6
histedit: use the new stack definition for histedit
Boris Feld <boris.feld@octobus.net>
parents:
37002
diff
changeset
|
412 if revs: |
37390
b95992605ef1
histedit: simplify desthistedit
Boris Feld <boris.feld@octobus.net>
parents:
37375
diff
changeset
|
413 # Take the first revision of the revset as the root |
b95992605ef1
histedit: simplify desthistedit
Boris Feld <boris.feld@octobus.net>
parents:
37375
diff
changeset
|
414 return revs.min() |
27262
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26728
diff
changeset
|
415 |
3d0feb2f978b
histedit: pick an appropriate base changeset by default (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26728
diff
changeset
|
416 return None |
28029
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
417 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
418 |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33142
diff
changeset
|
419 def stackbase(ui, repo): |
37002
a72198790e15
show: use the new stack definition for show stack
Boris Feld <boris.feld@octobus.net>
parents:
33197
diff
changeset
|
420 revs = stack.getstack(repo) |
37004
68fcc5503ec5
stack: return a sorted smartrev by default
Boris Feld <boris.feld@octobus.net>
parents:
37003
diff
changeset
|
421 return revs.first() if revs else None |
33197
c5a07a3abe7d
show: implement "stack" view
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33142
diff
changeset
|
422 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
423 |
28029
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
424 def _statusotherbook(ui, repo): |
32381
b9942bc6b292
localrepo: extract bookmarkheads method to bookmarks.py
Augie Fackler <augie@google.com>
parents:
31025
diff
changeset
|
425 bmheads = bookmarks.headsforactive(repo) |
37452
2b38c80557a4
destutil: look up bookmarks only among bookmarks
Martin von Zweigbergk <martinvonz@google.com>
parents:
37390
diff
changeset
|
426 curhead = repo._bookmarks[repo._activebookmark] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
427 if repo.revs(b'%n and parents()', curhead): |
28029
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
428 # we are on the active bookmark |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
429 bmheads = [b for b in bmheads if curhead != b] |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
430 if bmheads: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
431 msg = _(b'%i other divergent bookmarks for "%s"\n') |
28029
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
432 ui.status(msg % (len(bmheads), repo._activebookmark)) |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
433 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
434 |
28029
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
435 def _statusotherbranchheads(ui, repo): |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
436 currentbranch = repo.dirstate.branch() |
28266
de8b09482fb7
destutil: show message about other branch heads, even if on a closed head
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28236
diff
changeset
|
437 allheads = repo.branchheads(currentbranch, closed=True) |
28029
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
438 heads = repo.branchheads(currentbranch) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
439 if repo.revs(b'%ln and parents()', allheads): |
28266
de8b09482fb7
destutil: show message about other branch heads, even if on a closed head
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28236
diff
changeset
|
440 # we are on a head, even though it might be closed |
28385
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
441 # |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
442 # on closed otherheads |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
443 # ========= ========== |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
444 # o 0 all heads for current branch are closed |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
445 # N only descendant branch heads are closed |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
446 # x 0 there is only one non-closed branch head |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
447 # N there are some non-closed branch heads |
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
448 # ========= ========== |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
449 otherheads = repo.revs(b'%ln - parents()', heads) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
450 if repo[b'.'].closesbranch(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
451 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
452 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
453 b'no open descendant heads on branch "%s", ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
454 b'updating to a closed head\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
455 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
456 % currentbranch |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
457 ) |
28385
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
458 if otherheads: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
459 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
460 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
461 b"(committing will reopen the head, " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
462 b"use 'hg heads .' to see %i other heads)\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
463 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
464 % (len(otherheads)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
465 ) |
28385
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
466 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
467 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
468 _(b'(committing will reopen branch "%s")\n') % currentbranch |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
469 ) |
28385
3f9e25a42e69
destutil: choose non-closed branch head at first (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28266
diff
changeset
|
470 elif otherheads: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
471 curhead = repo[b'.'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
472 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
473 _(b'updated to "%s: %s"\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
474 % (curhead, curhead.description().split(b'\n')[0]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
475 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
476 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
477 _(b'%i other heads for branch "%s"\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
478 % (len(otherheads), currentbranch) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
479 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41146
diff
changeset
|
480 |
28029
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
481 |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
482 def statusotherdests(ui, repo): |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
483 """Print message about other head""" |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
484 # XXX we should probably include a hint: |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
485 # - about what to do |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
486 # - how to see such heads |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
487 if repo._activebookmark: |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
488 _statusotherbook(ui, repo) |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
489 else: |
72072cfc7e91
update: warn about other topological heads on bare update
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27559
diff
changeset
|
490 _statusotherbranchheads(ui, repo) |