Mercurial > evolve
annotate hgext3rd/topic/stack.py @ 3827:82c72eb37f85
evolve: strip the relocation commit on `hg evolve --stop`
While resolving content-divergence on multiple parents, we relocate one of the
commit on the parent of another one and then merge the divergent changesets.
Merging can leads to conflicts, and if user does `hg evolve --stop`, we need to
strip that relocated changeset too! This patch does that.
Test changes demonstrates the fix.
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Mon, 11 Jun 2018 00:47:28 +0530 |
parents | 753e5ebabe7d |
children | fb4801478d5d |
rev | line source |
---|---|
1895
c8e4c6e03957
stack: add a very first version of stack display with 'hg topic --list'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
1 # stack.py - code related to stack workflow |
c8e4c6e03957
stack: add a very first version of stack display with 'hg topic --list'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
2 # |
c8e4c6e03957
stack: add a very first version of stack display with 'hg topic --list'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
3 # This software may be used and distributed according to the terms of the |
c8e4c6e03957
stack: add a very first version of stack display with 'hg topic --list'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
4 # GNU General Public License version 2 or any later version. |
1995
54d6dff699f0
stack: add some header with the topic name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1991
diff
changeset
|
5 from mercurial.i18n import _ |
1936
31583ddda6d9
stack: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1925
diff
changeset
|
6 from mercurial import ( |
1985
03d6b685c16a
topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1982
diff
changeset
|
7 destutil, |
2838
1c9150e30b28
context: unstable was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2750
diff
changeset
|
8 context, |
1936
31583ddda6d9
stack: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1925
diff
changeset
|
9 error, |
1961
d9c7fced94fc
stack: prevent crash when topic is rooted on nullid
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1957
diff
changeset
|
10 node, |
2919
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
11 phases, |
3123
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
12 obsolete, |
2838
1c9150e30b28
context: unstable was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2750
diff
changeset
|
13 util, |
1936
31583ddda6d9
stack: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1925
diff
changeset
|
14 ) |
3278
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
15 from .evolvebits import ( |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
16 _singlesuccessor, |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
17 MultipleSuccessorsError, |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
18 builddependencies, |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
19 ) |
1895
c8e4c6e03957
stack: add a very first version of stack display with 'hg topic --list'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
20 |
2750
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
21 short = node.short |
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
22 |
2838
1c9150e30b28
context: unstable was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2750
diff
changeset
|
23 # TODO: compat |
1c9150e30b28
context: unstable was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2750
diff
changeset
|
24 |
1c9150e30b28
context: unstable was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2750
diff
changeset
|
25 if not util.safehasattr(context.basectx, 'orphan'): |
1c9150e30b28
context: unstable was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2750
diff
changeset
|
26 context.basectx.orphan = context.basectx.unstable |
1c9150e30b28
context: unstable was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2750
diff
changeset
|
27 |
2839
f9c8c754a528
context: troubled was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2838
diff
changeset
|
28 if not util.safehasattr(context.basectx, 'isunstable'): |
f9c8c754a528
context: troubled was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2838
diff
changeset
|
29 context.basectx.isunstable = context.basectx.troubled |
f9c8c754a528
context: troubled was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2838
diff
changeset
|
30 |
3371
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
31 def parseusername(user): |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
32 """parses the ctx user and returns the username without email ID if |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
33 possible, otherwise returns the mail address from that""" |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
34 username = None |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
35 if user: |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
36 # user is of form "abc <abc@xyz.com>" |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
37 username = user.split('<')[0] |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
38 if not username: |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
39 # assuming user is of form "<abc@xyz.com>" |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
40 if len(user) > 1: |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
41 username = user[1:-1] |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
42 else: |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
43 username = user |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
44 username = username.strip() |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
45 |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
46 return username |
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3278
diff
changeset
|
47 |
3123
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
48 def _stackcandidates(repo): |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
49 """build the smaller set of revs that might be part of a stack. |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
50 |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
51 The intend is to build something more efficient than what revsets do in |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
52 this area. |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
53 """ |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
54 phasecache = repo._phasecache |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
55 if not phasecache._phasesets: |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
56 return repo.revs('(not public()) - obsolete()') |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
57 if any(s is None for s in phasecache._phasesets): |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
58 return repo.revs('(not public()) - obsolete()') |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
59 |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
60 result = set() |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
61 for s in phasecache._phasesets[phases.draft:]: |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
62 result |= s |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
63 |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
64 result -= obsolete.getrevs(repo, 'obsolete') |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
65 return result |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
66 |
2914
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
67 class stack(object): |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
68 """object represent a stack and common logic associated to it.""" |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
69 |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
70 def __init__(self, repo, branch=None, topic=None): |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
71 self._repo = repo |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
72 self.branch = branch |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
73 self.topic = topic |
2939
7759d040d48d
topic: provide more information when behind count cannot be computed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2938
diff
changeset
|
74 self.behinderror = None |
3123
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
75 |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
76 subset = _stackcandidates(repo) |
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
77 |
2914
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
78 if topic is not None and branch is not None: |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
79 raise error.ProgrammingError('both branch and topic specified (not defined yet)') |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
80 elif topic is not None: |
3123
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
81 trevs = repo.revs("%ld and topic(%s)", subset, topic) |
2914
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
82 elif branch is not None: |
3123
237b39bf7e6b
topic: instroduce a fast path when computing stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3085
diff
changeset
|
83 trevs = repo.revs("%ld and branch(%s) - topic()", subset, branch) |
2914
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
84 else: |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
85 raise error.ProgrammingError('neither branch and topic specified (not defined yet)') |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
86 self._revs = trevs |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
87 |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
88 def __iter__(self): |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
89 return iter(self.revs) |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
90 |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
91 def __getitem__(self, index): |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
92 return self.revs[index] |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
93 |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
94 def index(self, item): |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
95 return self.revs.index(item) |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
96 |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
97 @util.propertycache |
2916
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
98 def _dependencies(self): |
2919
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
99 deps, rdeps = builddependencies(self._repo, self._revs) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
100 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
101 repo = self._repo |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
102 srcpfunc = repo.changelog.parentrevs |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
103 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
104 ### post process to skip over possible gaps in the stack |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
105 # |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
106 # For example in the following situation, we need to detect that "t3" |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
107 # indirectly depends on t2. |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
108 # |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
109 # o t3 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
110 # | |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
111 # o other |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
112 # | |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
113 # o t2 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
114 # | |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
115 # o t1 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
116 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
117 pmap = {} |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
118 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
119 def pfuncrev(repo, rev): |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
120 """a special "parent func" that also consider successors""" |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
121 parents = pmap.get(rev) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
122 if parents is None: |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
123 parents = [repo[_singlesuccessor(repo, repo[p])].rev() |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
124 for p in srcpfunc(rev) if 0 <= p] |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
125 pmap[rev] = parents |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
126 return parents |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
127 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
128 revs = self._revs |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
129 stackrevs = set(self._revs) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
130 for root in [r for r in revs if not deps[r]]: |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
131 seen = set() |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
132 stack = [root] |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
133 while stack: |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
134 current = stack.pop() |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
135 for p in pfuncrev(repo, current): |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
136 if p in seen: |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
137 continue |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
138 seen.add(p) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
139 if p in stackrevs: |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
140 rdeps[p].add(root) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
141 deps[root].add(p) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
142 elif phases.public < repo[p].phase(): |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
143 # traverse only if we did not found a proper candidate |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
144 stack.append(p) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
145 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
146 return deps, rdeps |
2916
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
147 |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
148 @util.propertycache |
2914
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
149 def revs(self): |
2919
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
150 # some duplication/change from _orderrevs because we use a post |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
151 # processed dependency graph. |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
152 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
153 # Step 1: compute relation of revision with each other |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
154 dependencies, rdependencies = self._dependencies |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
155 dependencies = dependencies.copy() |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
156 rdependencies = rdependencies.copy() |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
157 # Step 2: Build the ordering |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
158 # Remove the revisions with no dependency(A) and add them to the ordering. |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
159 # Removing these revisions leads to new revisions with no dependency (the |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
160 # one depending on A) that we can remove from the dependency graph and add |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
161 # to the ordering. We progress in a similar fashion until the ordering is |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
162 # built |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
163 solvablerevs = [r for r in sorted(dependencies.keys()) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
164 if not dependencies[r]] |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
165 revs = [] |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
166 while solvablerevs: |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
167 rev = solvablerevs.pop() |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
168 for dependent in rdependencies[rev]: |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
169 dependencies[dependent].remove(rev) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
170 if not dependencies[dependent]: |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
171 solvablerevs.append(dependent) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
172 del dependencies[rev] |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
173 revs.append(rev) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
174 |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
175 revs.extend(sorted(dependencies)) |
5b514ab2ab4e
stack: properly order stack when gaps existing inside it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2918
diff
changeset
|
176 # step 3: add t0 |
2914
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
177 if revs: |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
178 pt1 = self._repo[revs[0]].p1() |
2938
9872526fc39f
topic: show the t0 even if topic is not yet touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2937
diff
changeset
|
179 else: |
9872526fc39f
topic: show the t0 even if topic is not yet touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2937
diff
changeset
|
180 pt1 = self._repo['.'] |
9872526fc39f
topic: show the t0 even if topic is not yet touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2937
diff
changeset
|
181 |
9872526fc39f
topic: show the t0 even if topic is not yet touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2937
diff
changeset
|
182 if pt1.obsolete(): |
9872526fc39f
topic: show the t0 even if topic is not yet touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2937
diff
changeset
|
183 pt1 = self._repo[_singlesuccessor(self._repo, pt1)] |
9872526fc39f
topic: show the t0 even if topic is not yet touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2937
diff
changeset
|
184 revs.insert(0, pt1.rev()) |
2914
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
185 return revs |
9897babc1fb5
stack: introduce a rich stack object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2839
diff
changeset
|
186 |
2916
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
187 @util.propertycache |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
188 def changesetcount(self): |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
189 return len(self._revs) |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
190 |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
191 @util.propertycache |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
192 def troubledcount(self): |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
193 return len([r for r in self._revs if self._repo[r].isunstable()]) |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
194 |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
195 @util.propertycache |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
196 def heads(self): |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
197 revs = self.revs[1:] |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
198 deps, rdeps = self._dependencies |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
199 return [r for r in revs if not rdeps[r]] |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
200 |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
201 @util.propertycache |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
202 def behindcount(self): |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
203 revs = self.revs[1:] |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
204 deps, rdeps = self._dependencies |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
205 if revs: |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
206 minroot = [min(r for r in revs if not deps[r])] |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
207 try: |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
208 dest = destutil.destmerge(self._repo, action='rebase', |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
209 sourceset=minroot, |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
210 onheadcheck=False) |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
211 return len(self._repo.revs("only(%d, %ld)", dest, minroot)) |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
212 except error.NoMergeDestAbort: |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
213 return 0 |
2939
7759d040d48d
topic: provide more information when behind count cannot be computed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2938
diff
changeset
|
214 except error.ManyMergeDestAbort as exc: |
7759d040d48d
topic: provide more information when behind count cannot be computed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2938
diff
changeset
|
215 # XXX we should make it easier for upstream to provide the information |
7759d040d48d
topic: provide more information when behind count cannot be computed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2938
diff
changeset
|
216 self.behinderror = str(exc).split('-', 1)[0].rstrip() |
2916
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
217 return -1 |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
218 return 0 |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
219 |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
220 @util.propertycache |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
221 def branches(self): |
2936
3a9303b7b648
topics: show working directory branch when topic is empty
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2919
diff
changeset
|
222 branches = sorted(set(self._repo[r].branch() for r in self._revs)) |
3a9303b7b648
topics: show working directory branch when topic is empty
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2919
diff
changeset
|
223 if not branches: |
3a9303b7b648
topics: show working directory branch when topic is empty
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2919
diff
changeset
|
224 branches = set([self._repo[None].branch()]) |
3a9303b7b648
topics: show working directory branch when topic is empty
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2919
diff
changeset
|
225 return branches |
2916
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
226 |
2348
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
227 def labelsgen(prefix, labelssuffix): |
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
228 """ Takes a label prefix and a list of suffixes. Returns a string of the prefix |
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
229 formatted with each suffix separated with a space. |
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
230 """ |
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
231 return ' '.join(prefix % suffix for suffix in labelssuffix) |
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
232 |
2669
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
233 def showstack(ui, repo, branch=None, topic=None, opts=None): |
2668
1d2c66dc4ee3
topic: explicitly pass topic as a keyword argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2632
diff
changeset
|
234 if opts is None: |
1d2c66dc4ee3
topic: explicitly pass topic as a keyword argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2632
diff
changeset
|
235 opts = {} |
2627
42abd3bd30ee
topics: abort if user wants to show the stack of a non-existent topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2626
diff
changeset
|
236 |
2669
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
237 if topic is not None and branch is not None: |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
238 msg = 'both branch and topic specified [%s]{%s}(not defined yet)' |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
239 msg %= (branch, topic) |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
240 raise error.ProgrammingError(msg) |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
241 elif topic is not None: |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
242 prefix = 't' |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
243 if topic not in repo.topics: |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
244 raise error.Abort(_('cannot resolve "%s": no such topic found') % topic) |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
245 elif branch is not None: |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
246 prefix = 'b' |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
247 else: |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
248 raise error.ProgrammingError('neither branch and topic specified (not defined yet)') |
2627
42abd3bd30ee
topics: abort if user wants to show the stack of a non-existent topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2626
diff
changeset
|
249 |
1907
95874e8fc5f2
stack: add basic formatter and label support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1906
diff
changeset
|
250 fm = ui.formatter('topicstack', opts) |
1909
36112e361ee4
stack: display the base of the stack
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1907
diff
changeset
|
251 prev = None |
1955
5452a575b4e5
topic: extract display from entry computation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1954
diff
changeset
|
252 entries = [] |
1991
ba79d23594d6
stack: reusing the index number in base when applicable
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1990
diff
changeset
|
253 idxmap = {} |
1995
54d6dff699f0
stack: add some header with the topic name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1991
diff
changeset
|
254 |
54d6dff699f0
stack: add some header with the topic name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1991
diff
changeset
|
255 label = 'topic' |
54d6dff699f0
stack: add some header with the topic name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1991
diff
changeset
|
256 if topic == repo.currenttopic: |
54d6dff699f0
stack: add some header with the topic name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1991
diff
changeset
|
257 label = 'topic.active' |
54d6dff699f0
stack: add some header with the topic name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1991
diff
changeset
|
258 |
2669
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
259 data = stackdata(repo, branch=branch, topic=topic) |
2937
b54abc7e80e2
topics: improve the description if topic is not touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2936
diff
changeset
|
260 empty = False |
b54abc7e80e2
topics: improve the description if topic is not touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2936
diff
changeset
|
261 if data['changesetcount'] == 0: |
b54abc7e80e2
topics: improve the description if topic is not touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2936
diff
changeset
|
262 empty = True |
2670
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
263 if topic is not None: |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
264 fm.plain(_('### topic: %s') |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
265 % ui.label(topic, label), |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
266 label='topic.stack.summary.topic') |
1998
302be26a3fd8
stack: add warning about multiple heads
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1997
diff
changeset
|
267 |
2670
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
268 if 1 < data['headcount']: |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
269 fm.plain(' (') |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
270 fm.plain('%d heads' % data['headcount'], |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
271 label='topic.stack.summary.headcount.multiple') |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
272 fm.plain(')') |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
273 fm.plain('\n') |
2997
a61634f52742
topic: try to clarify the "branch" part in stack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2939
diff
changeset
|
274 fm.plain(_('### target: %s (branch)') |
1996
5c40dd2cf131
stack: add some basic branch information
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1995
diff
changeset
|
275 % '+'.join(data['branches']), # XXX handle multi branches |
5c40dd2cf131
stack: add some basic branch information
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1995
diff
changeset
|
276 label='topic.stack.summary.branches') |
2670
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
277 if topic is None: |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
278 if 1 < data['headcount']: |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
279 fm.plain(' (') |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
280 fm.plain('%d heads' % data['headcount'], |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
281 label='topic.stack.summary.headcount.multiple') |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
282 fm.plain(')') |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
283 else: |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
284 if data['behindcount'] == -1: |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
285 fm.plain(', ') |
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3123
diff
changeset
|
286 fm.plain('ambiguous rebase destination - %s' % data['behinderror'], |
2939
7759d040d48d
topic: provide more information when behind count cannot be computed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2938
diff
changeset
|
287 label='topic.stack.summary.behinderror') |
2670
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
288 elif data['behindcount']: |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
289 fm.plain(', ') |
f5d52fa1cd55
topic: move the heads data to the branch line when appropriates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2669
diff
changeset
|
290 fm.plain('%d behind' % data['behindcount'], label='topic.stack.summary.behindcount') |
1997
ce86f7bb4b7b
stack: add some behind information
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1996
diff
changeset
|
291 fm.plain('\n') |
1995
54d6dff699f0
stack: add some header with the topic name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1991
diff
changeset
|
292 |
2937
b54abc7e80e2
topics: improve the description if topic is not touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2936
diff
changeset
|
293 if empty: |
b54abc7e80e2
topics: improve the description if topic is not touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2936
diff
changeset
|
294 fm.plain(_("(stack is empty)\n")) |
b54abc7e80e2
topics: improve the description if topic is not touched
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2936
diff
changeset
|
295 |
2915
b3abdb3d819e
stack: replace 'getstack' with direct call to 'stack'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2914
diff
changeset
|
296 for idx, r in enumerate(stack(repo, branch=branch, topic=topic), 0): |
1925 | 297 ctx = repo[r] |
2712
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2684
diff
changeset
|
298 # special case for t0, b0 as it's hard to plugin into rest of the logic |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2684
diff
changeset
|
299 if idx == 0: |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2684
diff
changeset
|
300 # t0, b0 can be None |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2684
diff
changeset
|
301 if r == -1: |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2684
diff
changeset
|
302 continue |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2684
diff
changeset
|
303 entries.append((idx, False, ctx)) |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2684
diff
changeset
|
304 prev = ctx.rev() |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2684
diff
changeset
|
305 continue |
1909
36112e361ee4
stack: display the base of the stack
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1907
diff
changeset
|
306 p1 = ctx.p1() |
2918
0437158e0ed6
stack: display both parent with displaying merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2916
diff
changeset
|
307 p2 = ctx.p2() |
1909
36112e361ee4
stack: display the base of the stack
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1907
diff
changeset
|
308 if p1.obsolete(): |
3278
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
309 try: |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
310 p1 = repo[_singlesuccessor(repo, p1)] |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
311 except MultipleSuccessorsError as e: |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
312 successors = e.successorssets |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
313 if len(successors) > 1: |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
314 # case of divergence which we don't handle yet |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
315 raise |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
316 p1 = repo[successors[0][-1]] |
e4c0332ecee4
topics: fix `hg stack` in case of split
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3225
diff
changeset
|
317 |
2918
0437158e0ed6
stack: display both parent with displaying merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2916
diff
changeset
|
318 if p2.node() != node.nullid: |
0437158e0ed6
stack: display both parent with displaying merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2916
diff
changeset
|
319 entries.append((idxmap.get(p1.rev()), False, p1)) |
0437158e0ed6
stack: display both parent with displaying merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2916
diff
changeset
|
320 entries.append((idxmap.get(p2.rev()), False, p2)) |
0437158e0ed6
stack: display both parent with displaying merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2916
diff
changeset
|
321 elif p1.rev() != prev and p1.node() != node.nullid: |
1991
ba79d23594d6
stack: reusing the index number in base when applicable
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1990
diff
changeset
|
322 entries.append((idxmap.get(p1.rev()), False, p1)) |
ba79d23594d6
stack: reusing the index number in base when applicable
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1990
diff
changeset
|
323 entries.append((idx, True, ctx)) |
ba79d23594d6
stack: reusing the index number in base when applicable
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1990
diff
changeset
|
324 idxmap[ctx.rev()] = idx |
1955
5452a575b4e5
topic: extract display from entry computation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1954
diff
changeset
|
325 prev = r |
5452a575b4e5
topic: extract display from entry computation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1954
diff
changeset
|
326 |
5452a575b4e5
topic: extract display from entry computation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1954
diff
changeset
|
327 # super crude initial version |
1991
ba79d23594d6
stack: reusing the index number in base when applicable
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1990
diff
changeset
|
328 for idx, isentry, ctx in entries[::-1]: |
2348
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
329 |
3084
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
330 symbol = None |
2348
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
331 states = [] |
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
332 iscurrentrevision = repo.revs('%d and parents()', ctx.rev()) |
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
333 |
3084
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
334 if iscurrentrevision: |
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
335 states.append('current') |
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
336 symbol = '@' |
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
337 |
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
338 if ctx.orphan(): |
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
339 symbol = '$' |
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
340 states.append('unstable') |
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
341 |
1991
ba79d23594d6
stack: reusing the index number in base when applicable
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1990
diff
changeset
|
342 if not isentry: |
1957
ea5553e47027
stack: change the ascii symbold for base
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1956
diff
changeset
|
343 symbol = '^' |
2348
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
344 # "base" is kind of a "ghost" entry |
3084
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
345 states.append('base') |
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
346 |
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
347 # none of the above if statments get executed |
144989dabe93
stack: show current and unstable also for t0 and bases
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3061
diff
changeset
|
348 if not symbol: |
1955
5452a575b4e5
topic: extract display from entry computation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1954
diff
changeset
|
349 symbol = ':' |
2348
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
350 states.append('clean') |
3085
3eca2cbdc498
stack: order the adjective of changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3084
diff
changeset
|
351 |
3eca2cbdc498
stack: order the adjective of changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3084
diff
changeset
|
352 states.sort() |
3eca2cbdc498
stack: order the adjective of changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3084
diff
changeset
|
353 |
1907
95874e8fc5f2
stack: add basic formatter and label support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1906
diff
changeset
|
354 fm.startitem() |
1991
ba79d23594d6
stack: reusing the index number in base when applicable
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1990
diff
changeset
|
355 fm.data(isentry=isentry) |
2348
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
356 |
1955
5452a575b4e5
topic: extract display from entry computation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1954
diff
changeset
|
357 if idx is None: |
5452a575b4e5
topic: extract display from entry computation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1954
diff
changeset
|
358 fm.plain(' ') |
2750
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
359 if ui.verbose: |
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
360 fm.plain(' ') |
1955
5452a575b4e5
topic: extract display from entry computation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1954
diff
changeset
|
361 else: |
2669
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
362 fm.write('topic.stack.index', '%s%%d' % prefix, idx, |
2348
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
363 label='topic.stack.index ' + labelsgen('topic.stack.index.%s', states)) |
2750
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
364 if ui.verbose: |
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
365 fm.write('topic.stack.shortnode', '(%s)', short(ctx.node()), |
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
366 label='topic.stack.shortnode ' + labelsgen('topic.stack.shortnode.%s', states)) |
1907
95874e8fc5f2
stack: add basic formatter and label support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1906
diff
changeset
|
367 fm.write('topic.stack.state.symbol', '%s', symbol, |
2348
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
368 label='topic.stack.state ' + labelsgen('topic.stack.state.%s', states)) |
1907
95874e8fc5f2
stack: add basic formatter and label support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1906
diff
changeset
|
369 fm.plain(' ') |
1909
36112e361ee4
stack: display the base of the stack
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1907
diff
changeset
|
370 fm.write('topic.stack.desc', '%s', ctx.description().splitlines()[0], |
2348
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
371 label='topic.stack.desc ' + labelsgen('topic.stack.desc.%s', states)) |
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
372 fm.condwrite(states != ['clean'] and idx is not None, 'topic.stack.state', |
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
373 ' (%s)', fm.formatlist(states, 'topic.stack.state'), |
5737e0680f10
ui: hg topic now display if current revision is in bad state (issue5533)
Boris Feld <boris.feld@octobus.net>
parents:
2341
diff
changeset
|
374 label='topic.stack.state ' + labelsgen('topic.stack.state.%s', states)) |
1907
95874e8fc5f2
stack: add basic formatter and label support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1906
diff
changeset
|
375 fm.plain('\n') |
2341
a5117a5becf8
ui: Fix hg stack json output
Boris Feld <boris.feld@octobus.net>
parents:
2003
diff
changeset
|
376 fm.end() |
1897
38570c53b1cf
stack: fix printing order in case of unstability
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1896
diff
changeset
|
377 |
2669
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
378 def stackdata(repo, branch=None, topic=None): |
1977
137f8b04901e
topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1961
diff
changeset
|
379 """get various data about a stack |
137f8b04901e
topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1961
diff
changeset
|
380 |
137f8b04901e
topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1961
diff
changeset
|
381 :changesetcount: number of non-obsolete changesets in the stack |
1978
e42dd4523c0d
topic: list the number of troubled changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1977
diff
changeset
|
382 :troubledcount: number on troubled changesets |
1979
bee7a1ef8ba8
topic: list the number of head when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1978
diff
changeset
|
383 :headcount: number of heads on the topic |
1985
03d6b685c16a
topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1982
diff
changeset
|
384 :behindcount: number of changeset on rebase destination |
1977
137f8b04901e
topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1961
diff
changeset
|
385 """ |
137f8b04901e
topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1961
diff
changeset
|
386 data = {} |
2916
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
387 current = stack(repo, branch, topic) |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
388 data['changesetcount'] = current.changesetcount |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
389 data['troubledcount'] = current.troubledcount |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
390 data['headcount'] = len(current.heads) |
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
391 data['behindcount'] = current.behindcount |
2939
7759d040d48d
topic: provide more information when behind count cannot be computed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2938
diff
changeset
|
392 data['behinderror'] = current.behinderror |
2916
17749d9d3968
stack: move data computation on the object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2915
diff
changeset
|
393 data['branches'] = current.branches |
1977
137f8b04901e
topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1961
diff
changeset
|
394 return data |