annotate hgext3rd/topic/__init__.py @ 2914:9897babc1fb5

stack: introduce a rich stack object The logic around stack object become more and more complex. We great and object to gather and abstract it.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 04 Sep 2017 12:19:49 +0200
parents 1341ff3ba4a9
children b3abdb3d819e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
1 # __init__.py - topic extension
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
2 #
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
3 # This software may be used and distributed according to the terms of the
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
4 # GNU General Public License version 2 or any later version.
1846
0b5b757ca812 docs: fix format of extension docstring
Matt Mackall <mpm@selenic.com>
parents: 1845
diff changeset
5 """support for topic branches
0b5b757ca812 docs: fix format of extension docstring
Matt Mackall <mpm@selenic.com>
parents: 1845
diff changeset
6
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
7 Topic branches are lightweight branches which disappear when changes are
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
8 finalized (move to the public phase).
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
9
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
10 Compared to bookmark, topic is reference carried by each changesets of the
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
11 series instead of just the single head revision. Topic are quite similar to
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
12 the way named branch work, except they eventualy fade away when the changeset
2625
8f2901f4749e topics: some minute fixes to the documentation which shows up in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2624
diff changeset
13 becomes part of the immutable history. Changeset can belong to both a topic and
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
14 a named branch, but as long as it is mutable, its topic identity will prevail.
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
15 As a result, default destination for 'update', 'merge', etc... will take topic
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
16 into account. When a topic is active these operations will only consider other
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
17 changesets on that topic (and, in some occurence, bare changeset on same
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
18 branch). When no topic is active, changeset with topic will be ignored and
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
19 only bare one on the same branch will be taken in account.
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
20
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
21 There is currently two commands to be used with that extension: 'topics' and
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
22 'stack'.
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
23
2625
8f2901f4749e topics: some minute fixes to the documentation which shows up in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2624
diff changeset
24 The 'hg topics' command is used to set the current topic, change and list
8f2901f4749e topics: some minute fixes to the documentation which shows up in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2624
diff changeset
25 existing one. 'hg topics --verbose' will list various information related to
8f2901f4749e topics: some minute fixes to the documentation which shows up in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2624
diff changeset
26 each topic.
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
27
2625
8f2901f4749e topics: some minute fixes to the documentation which shows up in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2624
diff changeset
28 The 'stack' will show you information about the stack of commit belonging to
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
29 your current topic.
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
30
2012
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
31 Topic is offering you aliases reference to changeset in your current topic
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
32 stack as 't#'. For example, 't1' refers to the root of your stack, 't2' to the
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
33 second commits, etc. The 'hg stack' command show these number.
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
34
2012
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
35 Push behavior will change a bit with topic. When pushing to a publishing
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
36 repository the changesets will turn public and the topic data on them will fade
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
37 away. The logic regarding pushing new heads will behave has before, ignore any
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
38 topic related data. When pushing to a non-publishing repository (supporting
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
39 topic), the head checking will be done taking topic data into account.
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
40 Push will complain about multiple heads on a branch if you push multiple heads
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
41 with no topic information on them (or multiple public heads). But pushing a new
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
42 topic will not requires any specific flag. However, pushing multiple heads on a
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
43 topic will be met with the usual warning.
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
44
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
45 The 'evolve' extension takes 'topic' into account. 'hg evolve --all'
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
46 will evolve all changesets in the active topic. In addition, by default. 'hg
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
47 next' and 'hg prev' will stick to the current topic.
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
48
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
49 Be aware that this extension is still an experiment, commands and other features
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
50 are likely to be change/adjusted/dropped over time as we refine the concept.
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
51 """
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
52
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
53 from __future__ import absolute_import
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
54
1904
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
55 import re
2731
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
56 import time
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
57
1848
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
58 from mercurial.i18n import _
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
59 from mercurial import (
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
60 bookmarks,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
61 cmdutil,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
62 commands,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
63 context,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
64 error,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
65 extensions,
2648
d8b47d961c77 topic-change: update the working copy along when changing topic of '.'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2647
diff changeset
66 hg,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
67 localrepo,
2890
1e3d97486861 topics: import lock as lockmods
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2889
diff changeset
68 lock as lockmod,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
69 merge,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
70 namespaces,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
71 node,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
72 obsolete,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
73 patch,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
74 phases,
2464
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2428
diff changeset
75 registrar,
2889
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
76 scmutil,
2731
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
77 templatefilters,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
78 util,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
79 )
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
80
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
81 from . import (
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
82 constants,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
83 revset as topicrevset,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
84 destination,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
85 stack,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
86 topicmap,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
87 discovery,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
88 )
1843
0ba067a97d06 revset: add a topic() revset for querying topics
Augie Fackler <augie@google.com>
parents: 1842
diff changeset
89
2464
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2428
diff changeset
90 if util.safehasattr(registrar, 'command'):
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2428
diff changeset
91 commandfunc = registrar.command
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2428
diff changeset
92 else: # compat with hg < 4.3
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2428
diff changeset
93 commandfunc = cmdutil.command
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2428
diff changeset
94
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
95 cmdtable = {}
2464
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2428
diff changeset
96 command = commandfunc(cmdtable)
1976
ebdc2a6a9a25 topic: add color for the active topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1975
diff changeset
97 colortable = {'topic.active': 'green',
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
98 'topic.list.troubledcount': 'red',
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
99 'topic.list.headcount.multiple': 'yellow',
1985
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
100 'topic.list.behindcount': 'cyan',
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
101 'topic.list.behinderror': 'red',
1976
ebdc2a6a9a25 topic: add color for the active topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1975
diff changeset
102 'topic.stack.index': 'yellow',
1991
ba79d23594d6 stack: reusing the index number in base when applicable
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1990
diff changeset
103 'topic.stack.index.base': 'none dim',
1992
28fbc627b704 stack: also dim bases
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1991
diff changeset
104 'topic.stack.desc.base': 'none dim',
2750
bd3824d1b795 stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2744
diff changeset
105 'topic.stack.shortnode.base': 'none dim',
1909
36112e361ee4 stack: display the base of the stack
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1908
diff changeset
106 'topic.stack.state.base': 'dim',
36112e361ee4 stack: display the base of the stack
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1908
diff changeset
107 'topic.stack.state.clean': 'green',
1963
7b7f073ed05e style: update __init__.py
Sean Farley <sean@farley.io>
parents: 1958
diff changeset
108 'topic.stack.index.current': 'cyan', # random pick
7b7f073ed05e style: update __init__.py
Sean Farley <sean@farley.io>
parents: 1958
diff changeset
109 'topic.stack.state.current': 'cyan bold', # random pick
7b7f073ed05e style: update __init__.py
Sean Farley <sean@farley.io>
parents: 1958
diff changeset
110 'topic.stack.desc.current': 'cyan', # random pick
2750
bd3824d1b795 stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2744
diff changeset
111 'topic.stack.shortnode.current': 'cyan', # random pick
1908
dbd6d51e63f1 stack: add some default color configuration
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1907
diff changeset
112 'topic.stack.state.unstable': 'red',
1997
ce86f7bb4b7b stack: add some behind information
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1992
diff changeset
113 'topic.stack.summary.behindcount': 'cyan',
ce86f7bb4b7b stack: add some behind information
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1992
diff changeset
114 'topic.stack.summary.behinderror': 'red',
1998
302be26a3fd8 stack: add warning about multiple heads
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1997
diff changeset
115 'topic.stack.summary.headcount.multiple': 'yellow',
2340
e6d3b83b306b topic: configure some default color for topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2339
diff changeset
116 # default color to help log output and thg
e6d3b83b306b topic: configure some default color for topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2339
diff changeset
117 # (first pick I could think off, update as needed
e6d3b83b306b topic: configure some default color for topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2339
diff changeset
118 'log.topic': 'green_background',
e6d3b83b306b topic: configure some default color for topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2339
diff changeset
119 'topic.active': 'green',
1908
dbd6d51e63f1 stack: add some default color configuration
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1907
diff changeset
120 }
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
121
2831
eda8eb561134 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2816 2821
diff changeset
122 __version__ = '0.3.0.dev'
2705
a7b7471b4bed topic: update extensions metadata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2691
diff changeset
123 testedwith = '4.0.2 4.1.3 4.2.1'
a7b7471b4bed topic: update extensions metadata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2691
diff changeset
124 minimumhgversion = '4.0'
a7b7471b4bed topic: update extensions metadata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2691
diff changeset
125 buglink = 'https://bz.mercurial-scm.org/'
1884
8a53f99d9061 testedwith: declare compatibility with Mercurial 3.7
Augie Fackler <raf@durin42.com>
parents: 1877
diff changeset
126
2656
4a148ca3e80d topic: update the changectx method to respect phases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2655
diff changeset
127 def _contexttopic(self, force=False):
4a148ca3e80d topic: update the changectx method to respect phases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2655
diff changeset
128 if not (force or self.mutable()):
4a148ca3e80d topic: update the changectx method to respect phases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2655
diff changeset
129 return ''
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
130 return self.extra().get(constants.extrakey, '')
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
131 context.basectx.topic = _contexttopic
2744
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
132 def _contexttopicidx(self):
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
133 topic = self.topic()
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
134 if not topic:
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
135 # XXX we might want to include t0 here,
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
136 # however t0 is related to 'currenttopic' which has no place here.
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
137 return None
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
138 revlist = stack.getstack(self._repo, topic=topic)
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
139 try:
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
140 return revlist.index(self.rev())
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
141 except IndexError:
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
142 # Lets move to the last ctx of the current topic
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
143 return None
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
144 context.basectx.topicidx = _contexttopicidx
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
145
1904
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
146 topicrev = re.compile(r'^t\d+$')
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
147 branchrev = re.compile(r'^b\d+$')
1904
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
148
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
149 def _namemap(repo, name):
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
150 revs = None
1904
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
151 if topicrev.match(name):
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
152 idx = int(name[1:])
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
153 ttype = '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
154 tname = topic = repo.currenttopic
b933a8068c17 topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2668
diff changeset
155 if not tname:
1904
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
156 raise error.Abort(_('cannot resolve "%s": no active topic') % name)
2668
1d2c66dc4ee3 topic: explicitly pass topic as a keyword argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2667
diff changeset
157 revs = list(stack.getstack(repo, topic=topic))
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
158 elif branchrev.match(name):
b933a8068c17 topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2668
diff changeset
159 ttype = 'branch'
b933a8068c17 topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2668
diff changeset
160 idx = int(name[1:])
b933a8068c17 topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2668
diff changeset
161 tname = branch = repo[None].branch()
b933a8068c17 topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2668
diff changeset
162 revs = list(stack.getstack(repo, branch=branch))
b933a8068c17 topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2668
diff changeset
163
b933a8068c17 topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2668
diff changeset
164 if revs is not None:
1904
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
165 try:
2712
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
166 r = revs[idx]
1904
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
167 except IndexError:
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
168 msg = _('cannot resolve "%s": %s "%s" has only %d changesets')
2712
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
169 raise error.Abort(msg % (name, ttype, tname, len(revs) - 1))
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
170 # b0 or t0 can be None
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
171 if r == -1 and idx == 0:
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
172 msg = _('the %s "%s" has no %s')
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
173 raise error.Abort(msg % (ttype, tname, name))
1904
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
174 return [repo[r].node()]
2008
e3ddd696394f flake8: fix E713 style
Sean Farley <sean@farley.io>
parents: 2007
diff changeset
175 if name not in repo.topics:
2000
c413e7c96265 init: guard _namemap with repo.topics (issue5351)
timeless@gmail.com
parents: 1999
diff changeset
176 return []
2657
58719183d383 topic: improve the revset used to return name->nodes mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2656
diff changeset
177 node = repo.changelog.node
58719183d383 topic: improve the revset used to return name->nodes mapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2656
diff changeset
178 return [node(rev) for rev in repo.revs('topic(%s)', name)]
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
179
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
180 def _nodemap(repo, node):
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
181 ctx = repo[node]
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
182 t = ctx.topic()
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
183 if t and ctx.phase() > phases.public:
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
184 return [t]
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
185 return []
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
186
1871
58ef5699fb35 merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1867
diff changeset
187 def uisetup(ui):
1941
7eb737b7a902 destination: rename 'setupdest' to 'modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1939
diff changeset
188 destination.modsetup(ui)
1943
cd56f4d8b5a3 revset: add a ui argument to 'modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1942
diff changeset
189 topicrevset.modsetup(ui)
1944
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1943
diff changeset
190 discovery.modsetup(ui)
1952
665d6322994e uisetup: add call to 'topicmap.modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1951
diff changeset
191 topicmap.modsetup(ui)
1948
54810b543bf4 patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1947
diff changeset
192 setupimportexport(ui)
1871
58ef5699fb35 merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1867
diff changeset
193
1951
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
194 extensions.afterloaded('rebase', _fixrebase)
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
195
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
196 entry = extensions.wrapcommand(commands.table, 'commit', commitwrap)
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
197 entry[1].append(('t', 'topic', '',
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
198 _("use specified topic"), _('TOPIC')))
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
199
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
200 extensions.wrapfunction(cmdutil, 'buildcommittext', committextwrap)
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
201 extensions.wrapfunction(merge, 'update', mergeupdatewrap)
2711
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
202 # We need to check whether t0 or b0 is passed to override the default update
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
203 # behaviour of changing topic and I can't find a better way
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
204 # to do that as scmutil.revsingle returns the rev number and hence we can't
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
205 # plug into logic for this into mergemod.update().
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
206 extensions.wrapcommand(commands.table, 'update', checkt0)
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
207
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
208 try:
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
209 evolve = extensions.find('evolve')
2762
610581a2fb74 commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2750
diff changeset
210 extensions.wrapfunction(evolve.rewriteutil, "presplitupdate",
610581a2fb74 commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2750
diff changeset
211 presplitupdatetopic)
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
212 except (KeyError, AttributeError):
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
213 pass
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
214
1951
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
215 cmdutil.summaryhooks.add('topic', summaryhook)
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
216
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
217
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
218 def reposetup(ui, repo):
1886
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
219 if not isinstance(repo, localrepo.localrepository):
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
220 return # this can be a peer in the ssh case (puzzling)
2007
aa3b6cfdf493 flake8: fix E301 style
Sean Farley <sean@farley.io>
parents: 2000
diff changeset
221
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
222 repo = repo.unfiltered()
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
223
2339
f641cccbd119 topic: automatically configure thg to display topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2288
diff changeset
224 if repo.ui.config('experimental', 'thg.displaynames', None) is None:
f641cccbd119 topic: automatically configure thg to display topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2288
diff changeset
225 repo.ui.setconfig('experimental', 'thg.displaynames', 'topics',
f641cccbd119 topic: automatically configure thg to display topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2288
diff changeset
226 source='topic-extension')
f641cccbd119 topic: automatically configure thg to display topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2288
diff changeset
227
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
228 class topicrepo(repo.__class__):
1903
58cdf061d49a topic: don't take topic into account when pushing to non-topic repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1901
diff changeset
229
58cdf061d49a topic: don't take topic into account when pushing to non-topic repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1901
diff changeset
230 def _restrictcapabilities(self, caps):
58cdf061d49a topic: don't take topic into account when pushing to non-topic repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1901
diff changeset
231 caps = super(topicrepo, self)._restrictcapabilities(caps)
58cdf061d49a topic: don't take topic into account when pushing to non-topic repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1901
diff changeset
232 caps.add('topics')
58cdf061d49a topic: don't take topic into account when pushing to non-topic repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1901
diff changeset
233 return caps
58cdf061d49a topic: don't take topic into account when pushing to non-topic repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1901
diff changeset
234
1858
4ab1b854ce4e topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents: 1857
diff changeset
235 def commit(self, *args, **kwargs):
4ab1b854ce4e topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents: 1857
diff changeset
236 backup = self.ui.backupconfig('ui', 'allowemptycommit')
4ab1b854ce4e topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents: 1857
diff changeset
237 try:
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
238 if repo.currenttopic != repo['.'].topic():
1858
4ab1b854ce4e topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents: 1857
diff changeset
239 # bypass the core "nothing changed" logic
4ab1b854ce4e topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents: 1857
diff changeset
240 self.ui.setconfig('ui', 'allowemptycommit', True)
2288
b6ea9049693d topic: directly use "super" call
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2012
diff changeset
241 return super(topicrepo, self).commit(*args, **kwargs)
1858
4ab1b854ce4e topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents: 1857
diff changeset
242 finally:
4ab1b854ce4e topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents: 1857
diff changeset
243 self.ui.restoreconfig(backup)
4ab1b854ce4e topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents: 1857
diff changeset
244
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
245 def commitctx(self, ctx, error=None):
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
246 topicfilter = topicmap.topicfilter(self.filtername)
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
247 if topicfilter != self.filtername:
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
248 other = repo.filtered(topicmap.topicfilter(repo.filtername))
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
249 other.commitctx(ctx, error=error)
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
250
1855
f241a00e93a7 topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents: 1854
diff changeset
251 if isinstance(ctx, context.workingcommitctx):
f241a00e93a7 topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents: 1854
diff changeset
252 current = self.currenttopic
f241a00e93a7 topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents: 1854
diff changeset
253 if current:
f241a00e93a7 topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents: 1854
diff changeset
254 ctx.extra()[constants.extrakey] = current
1862
565f057bdc08 amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents: 1861
diff changeset
255 if (isinstance(ctx, context.memctx) and
565f057bdc08 amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents: 1861
diff changeset
256 ctx.extra().get('amend_source') and
565f057bdc08 amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents: 1861
diff changeset
257 ctx.topic() and
565f057bdc08 amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents: 1861
diff changeset
258 not self.currenttopic):
565f057bdc08 amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents: 1861
diff changeset
259 # we are amending and need to remove a topic
565f057bdc08 amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents: 1861
diff changeset
260 del ctx.extra()[constants.extrakey]
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
261 return super(topicrepo, self).commitctx(ctx, error=error)
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
262
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
263 @property
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
264 def topics(self):
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
265 if self._topics is not None:
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
266 return self._topics
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
267 topics = set(['', self.currenttopic])
1841
72a58a5bfb62 topic: use repo.set() where we need a changectx anyway
Augie Fackler <augie@google.com>
parents: 1839
diff changeset
268 for c in self.set('not public()'):
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
269 topics.add(c.topic())
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
270 topics.remove('')
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
271 self._topics = topics
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
272 return topics
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
273
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
274 @property
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
275 def currenttopic(self):
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
276 return self.vfs.tryread('topic')
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
277
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
278 # overwritten at the instance level by topicmap.py
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
279 _autobranchmaptopic = True
1885
d49f75eab6a3 topic: take topic in account for all branch head computation
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1884
diff changeset
280
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
281 def branchmap(self, topic=None):
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
282 if topic is None:
2655
417490bdf28a topic: avoid crash when topic is loaded but not enabled for a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2653
diff changeset
283 topic = getattr(repo, '_autobranchmaptopic', False)
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
284 topicfilter = topicmap.topicfilter(self.filtername)
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
285 if not topic or topicfilter == self.filtername:
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
286 return super(topicrepo, self).branchmap()
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
287 return self.filtered(topicfilter).branchmap()
1889
d9b929bcc3ad topicmap: ensure that 'served' view is updated with topicmap
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1888
diff changeset
288
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
289 def invalidatevolatilesets(self):
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
290 # XXX we might be able to move this to something invalidated less often
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
291 super(topicrepo, self).invalidatevolatilesets()
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
292 self._topics = None
1885
d49f75eab6a3 topic: take topic in account for all branch head computation
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1884
diff changeset
293
1886
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
294 def peer(self):
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
295 peer = super(topicrepo, self).peer()
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
296 if getattr(peer, '_repo', None) is not None: # localpeer
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
297 class topicpeer(peer.__class__):
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
298 def branchmap(self):
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
299 usetopic = not self._repo.publishing()
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
300 return self._repo.branchmap(topic=usetopic)
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
301 peer.__class__ = topicpeer
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
302 return peer
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1885
diff changeset
303
1857
a506ed8ab8da topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents: 1856
diff changeset
304 repo.__class__ = topicrepo
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
305 repo._topics = None
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
306 if util.safehasattr(repo, 'names'):
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
307 repo.names.addnamespace(namespaces.namespace(
1857
a506ed8ab8da topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents: 1856
diff changeset
308 'topics', 'topic', namemap=_namemap, nodemap=_nodemap,
a506ed8ab8da topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents: 1856
diff changeset
309 listnames=lambda repo: repo.topics))
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
310
2805
a789b9d5b60c topic: make command names valid as expected, even if ui.strict=true
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2795
diff changeset
311 @command('topics', [
1963
7b7f073ed05e style: update __init__.py
Sean Farley <sean@farley.io>
parents: 1958
diff changeset
312 ('', 'clear', False, 'clear active topic if any'),
2898
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
313 ('r', 'rev', [], 'revset of existing revisions', _('REV')),
1963
7b7f073ed05e style: update __init__.py
Sean Farley <sean@farley.io>
parents: 1958
diff changeset
314 ('l', 'list', False, 'show the stack of changeset in the topic'),
2866
736ab58641f0 topics: add a missing trailing comma on list of flag
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2850
diff changeset
315 ('', 'age', False, 'show when you last touched the topics'),
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
316 ('', 'current', None, 'display the current topic only'),
2805
a789b9d5b60c topic: make command names valid as expected, even if ui.strict=true
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2795
diff changeset
317 ] + commands.formatteropts,
a789b9d5b60c topic: make command names valid as expected, even if ui.strict=true
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2795
diff changeset
318 _('hg topics [TOPIC]'))
2889
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
319 def topics(ui, repo, topic=None, clear=False, rev=None, list=False, **opts):
2717
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
320 """View current topic, set current topic, change topic for a set of revisions, or see all topics.
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
321
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
322 Clear topic on existing topiced revisions:
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
323 `hg topic --rev <related revset> --clear`
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
324
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
325 Change topic on some revisions:
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
326 `hg topic <newtopicname> --rev <related revset>`
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
327
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
328 Clear current topic:
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
329 `hg topic --clear`
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
330
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
331 Set current topic:
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
332 `hg topic <topicname>`
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
333
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
334 List of topics:
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
335 `hg topics`
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
336
2731
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
337 List of topics with their last touched time sorted according to it:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
338 `hg topic --age`
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
339
2717
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
340 The active topic (if any) will be prepended with a "*".
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
341
2869
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
342 The `--current` flag helps to take active topic into account. For
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
343 example, if you want to set the topic on all the draft changesets to the
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
344 active topic, you can do:
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
345 `hg topic -r "draft()" --current`
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
346
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
347 The --verbose version of this command display various information on the state of each topic."""
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
348
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
349 current = opts.get('current')
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
350 if current and topic:
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
351 raise error.Abort(_("cannot use --current when setting a topic"))
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
352 if current and clear:
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
353 raise error.Abort(_("cannot use --current and --clear"))
2868
e46b68547017 topic: make --clear + topicname invalid
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2867
diff changeset
354 if clear and topic:
e46b68547017 topic: make --clear + topicname invalid
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2867
diff changeset
355 raise error.Abort(_("cannot use --clear when setting a topic"))
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
356
2898
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
357 touchedrevs = set()
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
358 if rev:
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
359 touchedrevs = scmutil.revrange(repo, rev)
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
360
2889
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
361 if topic:
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
362 topic = topic.strip()
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
363 if not topic:
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
364 raise error.Abort(_("topic name cannot consist entirely of whitespaces"))
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
365 # Have some restrictions on the topic name just like bookmark name
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
366 scmutil.checknewlabel(repo, topic, 'topic')
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
367
1895
c8e4c6e03957 stack: add a very first version of stack display with 'hg topic --list'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1894
diff changeset
368 if list:
2643
a9ca94defc29 topics: rename '--change' flag to '--rev' flag
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2642
diff changeset
369 if clear or rev:
a9ca94defc29 topics: rename '--change' flag to '--rev' flag
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2642
diff changeset
370 raise error.Abort(_("cannot use --clear or --rev with --list"))
1990
71410fa2c253 stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1989
diff changeset
371 if not topic:
71410fa2c253 stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1989
diff changeset
372 topic = repo.currenttopic
71410fa2c253 stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1989
diff changeset
373 if not topic:
71410fa2c253 stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1989
diff changeset
374 raise error.Abort(_('no active topic to list'))
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
375 return stack.showstack(ui, repo, topic=topic, opts=opts)
1895
c8e4c6e03957 stack: add a very first version of stack display with 'hg topic --list'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1894
diff changeset
376
2898
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
377 if touchedrevs:
1851
67d53e8e0c1a topic: only require obsolete support for --change
Matt Mackall <mpm@selenic.com>
parents: 1850
diff changeset
378 if not obsolete.isenabled(repo, obsolete.createmarkersopt):
2643
a9ca94defc29 topics: rename '--change' flag to '--rev' flag
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2642
diff changeset
379 raise error.Abort(_('must have obsolete enabled to change topics'))
2645
2e3f63f4a519 topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2644
diff changeset
380 if clear:
2e3f63f4a519 topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2644
diff changeset
381 topic = None
2869
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
382 elif opts.get('current'):
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
383 topic = repo.currenttopic
2645
2e3f63f4a519 topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2644
diff changeset
384 elif not topic:
1894
f8ee36489d3c topic: get 'Abort' from error, not 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1890
diff changeset
385 raise error.Abort('changing topic requires a topic name or --clear')
2898
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
386 if repo.revs('%ld and public()', touchedrevs):
1894
f8ee36489d3c topic: get 'Abort' from error, not 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1890
diff changeset
387 raise error.Abort("can't change topic of a public change")
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
388 wl = l = txn = None
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
389 try:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
390 wl = repo.wlock()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
391 l = repo.lock()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
392 txn = repo.transaction('rewrite-topics')
2898
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
393 rewrote = _changetopics(ui, repo, touchedrevs, topic)
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
394 txn.close()
2897
bd04a614b866 topic: move a status message in the right scope
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2890
diff changeset
395 ui.status('changed topic on %d changes\n' % rewrote)
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
396 finally:
2890
1e3d97486861 topics: import lock as lockmods
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2889
diff changeset
397 lockmod.release(txn, l, wl)
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
398 repo.invalidate()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
399 return
2664
ed6fb5f20b24 topics: return early so that other if conditions don't get execute (issue5600)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2662
diff changeset
400
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
401 if clear:
2662
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
402 return _changecurrenttopic(repo, None)
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
403
1860
b7b9e5028c2a topics: consistently use empty string instead of None
Matt Mackall <mpm@selenic.com>
parents: 1859
diff changeset
404 if topic:
2662
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
405 return _changecurrenttopic(repo, topic)
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
406
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
407 # `hg topic --current`
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
408 ret = 0
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
409 if current and not repo.currenttopic:
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
410 ui.write_err(_('no active topic\n'))
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
411 ret = 1
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
412 elif current:
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
413 fm = ui.formatter('topic', opts)
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
414 namemask = '%s\n'
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
415 label = 'topic.active'
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
416 fm.startitem()
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
417 fm.write('topic', namemask, repo.currenttopic, label=label)
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
418 fm.end()
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
419 else:
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
420 _listtopics(ui, repo, opts)
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
421 return ret
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
422
2805
a789b9d5b60c topic: make command names valid as expected, even if ui.strict=true
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2795
diff changeset
423 @command('stack', [
a789b9d5b60c topic: make command names valid as expected, even if ui.strict=true
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2795
diff changeset
424 ] + commands.formatteropts,
a789b9d5b60c topic: make command names valid as expected, even if ui.strict=true
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2795
diff changeset
425 _('hg stack [TOPIC]'))
1973
e97458bf53be stack: introduce and explicite command to display the stack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1972
diff changeset
426 def cmdstack(ui, repo, topic='', **opts):
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
427 """list all changesets in a topic and other information
1973
e97458bf53be stack: introduce and explicite command to display the stack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1972
diff changeset
428
2750
bd3824d1b795 stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2744
diff changeset
429 List the current topic by default.
bd3824d1b795 stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2744
diff changeset
430
bd3824d1b795 stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2744
diff changeset
431 The --verbose version shows short nodes for the commits also.
bd3824d1b795 stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2744
diff changeset
432 """
1990
71410fa2c253 stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1989
diff changeset
433 if not topic:
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
434 topic = 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
435 branch = 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
436 if topic is None and repo.currenttopic:
1990
71410fa2c253 stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1989
diff changeset
437 topic = repo.currenttopic
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
438 if topic is 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
439 branch = repo[None].branch()
b933a8068c17 topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2668
diff changeset
440 return stack.showstack(ui, repo, branch=branch, topic=topic, opts=opts)
1973
e97458bf53be stack: introduce and explicite command to display the stack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1972
diff changeset
441
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
442 @command('debugcb|debugconvertbookmark', [
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
443 ('b', 'bookmark', '', _('bookmark to convert to topic')),
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
444 ('', 'all', None, _('convert all bookmarks to topics')),
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
445 ],
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
446 _('[-b BOOKMARK] [--all]'))
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
447 def debugconvertbookmark(ui, repo, **opts):
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
448 """Converts a bookmark to a topic with the same name.
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
449 """
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
450
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
451 bookmark = opts.get('bookmark')
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
452 convertall = opts.get('all')
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
453
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
454 if convertall and bookmark:
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
455 raise error.Abort(_("cannot use '--all' and '-b' together"))
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
456 if not (convertall or bookmark):
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
457 raise error.Abort(_("you must specify either '--all' or '-b'"))
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
458
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
459 bmstore = repo._bookmarks
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
460
2900
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
461 nodetobook = {}
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
462 for book, revnode in bmstore.iteritems():
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
463 if nodetobook.get(revnode):
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
464 nodetobook[revnode].append(book)
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
465 else:
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
466 nodetobook[revnode] = [book]
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
467
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
468 # a list of nodes which we have skipped so that we don't print the skip
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
469 # warning repeatedly
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
470 skipped = []
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
471
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
472 actions = {}
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
473
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
474 lock = wlock = tr = None
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
475 try:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
476 wlock = repo.wlock()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
477 lock = repo.lock()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
478 if bookmark:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
479 try:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
480 node = bmstore[bookmark]
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
481 except KeyError:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
482 raise error.Abort(_("no such bookmark exists: '%s'") % bookmark)
2900
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
483
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
484 revnum = repo[node].rev()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
485 if len(nodetobook[node]) > 1:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
486 ui.status(_("skipping revision '%d' as it has multiple bookmarks "
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
487 "on it\n") % revnum)
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
488 return
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
489 targetrevs = _findconvertbmarktopic(repo, bookmark)
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
490 if targetrevs:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
491 actions[(bookmark, revnum)] = targetrevs
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
492
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
493 elif convertall:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
494 for bmark, revnode in sorted(bmstore.iteritems()):
2900
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
495 revnum = repo[revnode].rev()
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
496 if revnum in skipped:
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
497 continue
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
498 if len(nodetobook[revnode]) > 1:
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
499 ui.status(_("skipping '%d' as it has multiple bookmarks on"
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
500 " it\n") % revnum)
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
501 skipped.append(revnum)
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
502 continue
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
503 if bmark == '@':
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
504 continue
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
505 targetrevs = _findconvertbmarktopic(repo, bmark)
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
506 if targetrevs:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
507 actions[(bmark, revnum)] = targetrevs
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
508
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
509 if actions:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
510 try:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
511 tr = repo.transaction('debugconvertbookmark')
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
512 for ((bmark, revnum), targetrevs) in sorted(actions.iteritems()):
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
513 _applyconvertbmarktopic(ui, repo, targetrevs, revnum, bmark, tr)
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
514 tr.close()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
515 finally:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
516 tr.release()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
517 finally:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
518 lockmod.release(lock, wlock)
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
519
2906
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
520 # inspired from mercurial.repair.stripbmrevset
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
521 CONVERTBOOKREVSET = """
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
522 not public() and (
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
523 ancestors(bookmark(%s))
2909
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
524 and not ancestors(
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
525 (
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
526 (head() and not bookmark(%s))
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
527 or (bookmark() - bookmark(%s))
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
528 ) - (
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
529 descendants(bookmark(%s))
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
530 - bookmark(%s)
2906
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
531 )
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
532 )
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
533 )
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
534 """
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
535
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
536 def _findconvertbmarktopic(repo, bmark):
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
537 """find revisions unambigiously defined by a bookmark
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
538
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
539 find all changesets under the bookmark and under that bookmark only.
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
540 """
2909
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
541 return repo.revs(CONVERTBOOKREVSET, bmark, bmark, bmark, bmark, bmark)
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
542
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
543 def _applyconvertbmarktopic(ui, repo, revs, old, bmark, tr):
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
544 """apply bookmark convertion to topic
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
545
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
546 Sets a topic as same as bname to all the changesets under the bookmark
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
547 and delete the bookmark, if topic is set to any changeset
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
548
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
549 old is the revision on which bookmark bmark is and tr is transaction object.
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
550 """
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
551
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
552 rewrote = _changetopics(ui, repo, revs, bmark)
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
553 # We didn't changed topic to any changesets because the revset
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
554 # returned an empty set of revisions, so let's skip deleting the
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
555 # bookmark corresponding to which we didn't put a topic on any
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
556 # changeset
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
557 if rewrote == 0:
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
558 return
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
559 ui.status(_('changed topic to "%s" on %d revisions\n') % (bmark,
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
560 rewrote))
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
561 ui.debug('removing bookmark "%s" from "%d"' % (bmark, old))
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
562 bookmarks.delete(repo, tr, [bmark])
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
563
2662
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
564 def _changecurrenttopic(repo, newtopic):
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
565 """changes the current topic."""
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
566
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
567 if newtopic:
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
568 with repo.wlock():
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
569 with repo.vfs.open('topic', 'w') as f:
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
570 f.write(newtopic)
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
571 else:
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
572 if repo.vfs.exists('topic'):
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
573 repo.vfs.unlink('topic')
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
574
2898
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
575 def _changetopics(ui, repo, revs, newtopic):
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
576 """ Changes topic to newtopic of all the revisions in the revset and return
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
577 the count of revisions whose topic has been changed.
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
578 """
2642
92e882a82aaf topics: factor out the logic to change topic in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2625
diff changeset
579 rewrote = 0
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
580 p1 = None
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
581 p2 = None
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
582 successors = {}
2898
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
583 for r in revs:
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
584 c = repo[r]
3dfc88c06378 topic: support --rev argument and properly process then as user input
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2897
diff changeset
585
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
586 def filectxfn(repo, ctx, path):
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
587 try:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
588 return c[path]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
589 except error.ManifestLookupError:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
590 return None
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
591 fixedextra = dict(c.extra())
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
592 ui.debug('old node id is %s\n' % node.hex(c.node()))
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
593 ui.debug('origextra: %r\n' % fixedextra)
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
594 oldtopic = fixedextra.get(constants.extrakey, None)
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
595 if oldtopic == newtopic:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
596 continue
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
597 if newtopic is None:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
598 del fixedextra[constants.extrakey]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
599 else:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
600 fixedextra[constants.extrakey] = newtopic
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
601 fixedextra[constants.changekey] = c.hex()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
602 if 'amend_source' in fixedextra:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
603 # TODO: right now the commitctx wrapper in
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
604 # topicrepo overwrites the topic in extra if
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
605 # amend_source is set to support 'hg commit
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
606 # --amend'. Support for amend should be adjusted
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
607 # to not be so invasive.
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
608 del fixedextra['amend_source']
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
609 ui.debug('changing topic of %s from %s to %s\n' % (
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
610 c, oldtopic, newtopic))
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
611 ui.debug('fixedextra: %r\n' % fixedextra)
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
612 # While changing topic of set of linear commits, make sure that
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
613 # we base our commits on new parent rather than old parent which
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
614 # was obsoleted while changing the topic
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
615 p1 = c.p1().node()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
616 p2 = c.p2().node()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
617 if p1 in successors:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
618 p1 = successors[p1]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
619 if p2 in successors:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
620 p2 = successors[p2]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
621 mc = context.memctx(
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
622 repo, (p1, p2), c.description(),
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
623 c.files(), filectxfn,
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
624 user=c.user(), date=c.date(), extra=fixedextra)
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
625 newnode = repo.commitctx(mc)
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
626 successors[c.node()] = newnode
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
627 ui.debug('new node id is %s\n' % node.hex(newnode))
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
628 obsolete.createmarkers(repo, [(c, (repo[newnode],))])
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
629 rewrote += 1
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
630 # move the working copy too
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
631 wctx = repo[None]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
632 # in-progress merge is a bit too complex for now.
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
633 if len(wctx.parents()) == 1:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
634 newid = successors.get(wctx.p1().node())
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
635 if newid is not None:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
636 hg.update(repo, newid, quietempty=True)
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
637 return rewrote
2642
92e882a82aaf topics: factor out the logic to change topic in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2625
diff changeset
638
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
639 def _listtopics(ui, repo, opts):
2677
8cdee1b9ee92 topics: pass 'topics' to ui.formatter instead of 'bookmarks'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2669
diff changeset
640 fm = ui.formatter('topics', opts)
2731
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
641 showlast = opts.get('age')
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
642 if showlast:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
643 # we have a new function as plugging logic into existing function is
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
644 # pretty much difficult
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
645 return _showlasttouched(repo, fm, opts)
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
646 activetopic = repo.currenttopic
1987
d427fd97c9d5 topic: properly justify the verbose data when listing topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1985
diff changeset
647 namemask = '%s'
d427fd97c9d5 topic: properly justify the verbose data when listing topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1985
diff changeset
648 if repo.topics and ui.verbose:
d427fd97c9d5 topic: properly justify the verbose data when listing topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1985
diff changeset
649 maxwidth = max(len(t) for t in repo.topics)
d427fd97c9d5 topic: properly justify the verbose data when listing topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1985
diff changeset
650 namemask = '%%-%is' % maxwidth
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
651 for topic in sorted(repo.topics):
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
652 fm.startitem()
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
653 marker = ' '
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
654 label = 'topic'
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
655 active = (topic == activetopic)
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
656 if active:
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
657 marker = '*'
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
658 label = 'topic.active'
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
659 if not ui.quiet:
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
660 # registering the active data is made explicitly later
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
661 fm.plain(' %s ' % marker, label=label)
1987
d427fd97c9d5 topic: properly justify the verbose data when listing topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1985
diff changeset
662 fm.write('topic', namemask, topic, label=label)
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
663 fm.data(active=active)
1977
137f8b04901e topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1976
diff changeset
664 if ui.verbose:
137f8b04901e topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1976
diff changeset
665 # XXX we should include the data even when not verbose
2668
1d2c66dc4ee3 topic: explicitly pass topic as a keyword argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2667
diff changeset
666 data = stack.stackdata(repo, topic=topic)
1987
d427fd97c9d5 topic: properly justify the verbose data when listing topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1985
diff changeset
667 fm.plain(' (')
1988
9a5d797d25be topic: list the branches this topic belong to when verbose
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1987
diff changeset
668 fm.write('branches+', 'on branch: %s',
9a5d797d25be topic: list the branches this topic belong to when verbose
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1987
diff changeset
669 '+'.join(data['branches']), # XXX use list directly after 4.0 is released
9a5d797d25be topic: list the branches this topic belong to when verbose
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1987
diff changeset
670 label='topic.list.branches')
9a5d797d25be topic: list the branches this topic belong to when verbose
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1987
diff changeset
671 fm.plain(', ')
1977
137f8b04901e topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1976
diff changeset
672 fm.write('changesetcount', '%d changesets', data['changesetcount'],
137f8b04901e topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1976
diff changeset
673 label='topic.list.changesetcount')
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
674 if data['troubledcount']:
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
675 fm.plain(', ')
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
676 fm.write('troubledcount', '%d troubled',
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
677 data['troubledcount'],
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
678 label='topic.list.troubledcount')
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
679 if 1 < data['headcount']:
bee7a1ef8ba8 topic: list the number of head when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1978
diff changeset
680 fm.plain(', ')
bee7a1ef8ba8 topic: list the number of head when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1978
diff changeset
681 fm.write('headcount', '%d heads',
bee7a1ef8ba8 topic: list the number of head when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1978
diff changeset
682 data['headcount'],
bee7a1ef8ba8 topic: list the number of head when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1978
diff changeset
683 label='topic.list.headcount.multiple')
1985
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
684 if 0 < data['behindcount']:
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
685 fm.plain(', ')
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
686 fm.write('behindcount', '%d behind',
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
687 data['behindcount'],
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
688 label='topic.list.behindcount')
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
689 elif -1 == data['behindcount']:
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
690 fm.plain(', ')
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
691 fm.write('behinderror', '%s',
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
692 _('ambiguous destination'),
03d6b685c16a topic: list the number of 'behind' changeset when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1979
diff changeset
693 label='topic.list.behinderror')
1977
137f8b04901e topic: list the number of changesets when --verbose is used
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1976
diff changeset
694 fm.plain(')')
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
695 fm.plain('\n')
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
696 fm.end()
1974
20fb4195bfc4 topic: extract the code listing all topics
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1973
diff changeset
697
2731
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
698 def _showlasttouched(repo, fm, opts):
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
699 topics = repo.topics
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
700 timedict = _getlasttouched(repo, topics)
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
701 times = timedict.keys()
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
702 times.sort()
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
703 if topics:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
704 maxwidth = max(len(t) for t in topics)
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
705 namemask = '%%-%is' % maxwidth
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
706 activetopic = repo.currenttopic
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
707 for timevalue in times:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
708 curtopics = timedict[timevalue][1]
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
709 for topic in curtopics:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
710 fm.startitem()
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
711 marker = ' '
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
712 label = 'topic'
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
713 active = (topic == activetopic)
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
714 if active:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
715 marker = '*'
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
716 label = 'topic.active'
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
717 fm.plain(' %s ' % marker, label=label)
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
718 fm.write('topic', namemask, topic, label=label)
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
719 fm.data(active=active)
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
720 fm.plain(' (')
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
721 if timevalue == -1:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
722 timestr = 'not yet touched'
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
723 else:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
724 timestr = templatefilters.age(timedict[timevalue][0])
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
725 fm.write('lasttouched', '%s', timestr, label='topic.list.time')
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
726 fm.plain(')')
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
727 fm.plain('\n')
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
728 fm.end()
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
729
2912
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
730 getmarkers = None
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
731 try:
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
732 from mercurial import obsutil
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
733 getmarkers = getattr(obsutil, 'getmarkers', None)
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
734 except ImportError:
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
735 pass
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
736
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
737 if getmarkers is None:
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
738 getmarkers = obsolete.getmarkers
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
739
2731
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
740 def _getlasttouched(repo, topics):
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
741 """
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
742 Calculates the last time a topic was used. Returns a dictionary of seconds
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
743 passed from current time for a topic as keys and topic name as values.
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
744 """
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
745 topicstime = {}
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
746 curtime = time.time()
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
747 for t in topics:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
748 maxtime = (0, 0)
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
749 trevs = repo.revs("topic(%s)", t)
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
750 # Need to check for the time of all changesets in the topic, whether
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
751 # they are obsolete of non-heads
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
752 # XXX: can we just rely on the max rev number for this
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
753 for revs in trevs:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
754 rt = repo[revs].date()
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
755 if rt[0] > maxtime[0]:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
756 # Can store the rev to gather more info
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
757 # latesthead = revs
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
758 maxtime = rt
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
759 # looking on the markers also to get more information and accurate
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
760 # last touch time.
2912
1341ff3ba4a9 topic: check availability of obsutil.getmarkers() for portability
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2909
diff changeset
761 obsmarkers = getmarkers(repo, [repo[revs].node()])
2731
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
762 for marker in obsmarkers:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
763 rt = marker.date()
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
764 if rt[0] > maxtime[0]:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
765 maxtime = rt
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
766 # is the topic still yet untouched
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
767 if not trevs:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
768 secspassed = -1
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
769 else:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
770 secspassed = (curtime - maxtime[0])
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
771 try:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
772 topicstime[secspassed][1].append(t)
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
773 except KeyError:
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
774 topicstime[secspassed] = (maxtime, [t])
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
775
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
776 return topicstime
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
777
1848
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
778 def summaryhook(ui, repo):
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
779 t = repo.currenttopic
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
780 if not t:
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
781 return
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
782 # i18n: column positioning for "hg summary"
1989
cf9414f2b5cd summary: properly label the topic name in summary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1988
diff changeset
783 ui.write(_("topic: %s\n") % ui.label(t, 'topic.active'))
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
784
1850
0da6bf86b718 commit: add a --topic flag
Matt Mackall <mpm@selenic.com>
parents: 1849
diff changeset
785 def commitwrap(orig, ui, repo, *args, **opts):
1971
ec4924ea8bc6 topic: make sure we have the 'wlock' when setting topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1969
diff changeset
786 with repo.wlock():
2733
adfbb984ebbb topics: check for topic on commit before a user enters message
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2731
diff changeset
787 enforcetopic = ui.configbool('experimental', 'enforce-topic')
1971
ec4924ea8bc6 topic: make sure we have the 'wlock' when setting topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1969
diff changeset
788 if opts.get('topic'):
ec4924ea8bc6 topic: make sure we have the 'wlock' when setting topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1969
diff changeset
789 t = opts['topic']
ec4924ea8bc6 topic: make sure we have the 'wlock' when setting topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1969
diff changeset
790 with repo.vfs.open('topic', 'w') as f:
ec4924ea8bc6 topic: make sure we have the 'wlock' when setting topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1969
diff changeset
791 f.write(t)
2733
adfbb984ebbb topics: check for topic on commit before a user enters message
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2731
diff changeset
792 elif not repo.currenttopic and enforcetopic:
adfbb984ebbb topics: check for topic on commit before a user enters message
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2731
diff changeset
793 msg = _("no active topic")
adfbb984ebbb topics: check for topic on commit before a user enters message
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2731
diff changeset
794 hint = _("set a current topic or use '--config " +
adfbb984ebbb topics: check for topic on commit before a user enters message
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2731
diff changeset
795 "experimental.enforce-topic=no' to commit without a topic")
adfbb984ebbb topics: check for topic on commit before a user enters message
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2731
diff changeset
796 raise error.Abort(msg, hint=hint)
1971
ec4924ea8bc6 topic: make sure we have the 'wlock' when setting topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1969
diff changeset
797 return orig(ui, repo, *args, **opts)
1850
0da6bf86b718 commit: add a --topic flag
Matt Mackall <mpm@selenic.com>
parents: 1849
diff changeset
798
1852
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
799 def committextwrap(orig, repo, ctx, subs, extramsg):
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
800 ret = orig(repo, ctx, subs, extramsg)
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
801 t = repo.currenttopic
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
802 if t:
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
803 ret = ret.replace("\nHG: branch",
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
804 "\nHG: topic '%s'\nHG: branch" % t)
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
805 return ret
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
806
1877
69077c65919d topic: handle merge.update function signature change
Augie Fackler <raf@durin42.com>
parents: 1874
diff changeset
807 def mergeupdatewrap(orig, repo, node, branchmerge, force, *args, **kwargs):
1966
e67c526c0a25 update: calculate 'partial' as core does
Sean Farley <sean@farley.io>
parents: 1963
diff changeset
808 matcher = kwargs.get('matcher')
e67c526c0a25 update: calculate 'partial' as core does
Sean Farley <sean@farley.io>
parents: 1963
diff changeset
809 partial = not (matcher is None or matcher.always())
1853
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
810 wlock = repo.wlock()
2679
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
811 isrebase = False
2711
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
812 ist0 = False
1853
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
813 try:
1877
69077c65919d topic: handle merge.update function signature change
Augie Fackler <raf@durin42.com>
parents: 1874
diff changeset
814 ret = orig(repo, node, branchmerge, force, *args, **kwargs)
2679
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
815 # The mergeupdatewrap function makes the destination's topic as the
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
816 # current topic. This is right for merge but wrong for rebase. We check
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
817 # if rebase is running and update the currenttopic to topic of new
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
818 # rebased commit. We have explicitly stored in config if rebase is
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
819 # running.
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
820 if repo.ui.hasconfig('experimental', 'topicrebase'):
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
821 isrebase = True
2740
51afc979d88d topic: rename the internal topic option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2733
diff changeset
822 if repo.ui.configbool('_internal', 'keep-topic'):
2711
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
823 ist0 = True
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
824 if ((not partial and not branchmerge) or isrebase) and not ist0:
1853
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
825 ot = repo.currenttopic
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
826 t = ''
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
827 pctx = repo[node]
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
828 if pctx.phase() > phases.public:
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
829 t = pctx.topic()
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
830 with repo.vfs.open('topic', 'w') as f:
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
831 f.write(t)
1853
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
832 if t and t != ot:
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
833 repo.ui.status(_("switching to topic %s\n") % t)
2711
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
834 elif ist0:
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
835 repo.ui.status(_("preserving the current topic '%s'\n") %
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
836 repo.currenttopic)
1853
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
837 return ret
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
838 finally:
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
839 wlock.release()
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
840
2793
fb317d218af0 topic: wrap 'update' in a more flexible way
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
841 def checkt0(orig, ui, repo, node=None, rev=None, *args, **kwargs):
2711
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
842
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
843 thezeros = set(['t0', 'b0'])
2795
0dc119ed06b4 compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2793
diff changeset
844 backup = repo.ui.backupconfig('_internal', 'keep-topic')
0dc119ed06b4 compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2793
diff changeset
845 try:
0dc119ed06b4 compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2793
diff changeset
846 if node in thezeros or rev in thezeros:
0dc119ed06b4 compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2793
diff changeset
847 repo.ui.setconfig('_internal', 'keep-topic', 'yes',
0dc119ed06b4 compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2793
diff changeset
848 source='topic-extension')
2793
fb317d218af0 topic: wrap 'update' in a more flexible way
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
849 return orig(ui, repo, node, rev, *args, **kwargs)
2795
0dc119ed06b4 compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2793
diff changeset
850 finally:
0dc119ed06b4 compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2793
diff changeset
851 repo.ui.restoreconfig(backup)
2711
8c938e9af113 topics: wrap the update function to check if either t0 or b0 is passed as rev
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2709
diff changeset
852
1854
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
853 def _fixrebase(loaded):
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
854 if not loaded:
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
855 return
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
856
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
857 def savetopic(ctx, extra):
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
858 if ctx.topic():
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
859 extra[constants.extrakey] = ctx.topic()
1854
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
860
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
861 def newmakeextrafn(orig, copiers):
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
862 return orig(copiers + [savetopic])
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
863
2679
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
864 def setrebaseconfig(orig, ui, repo, **opts):
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
865 repo.ui.setconfig('experimental', 'topicrebase', 'yes',
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
866 source='topic-extension')
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
867 return orig(ui, repo, **opts)
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
868
1969
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
869 try:
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
870 rebase = extensions.find("rebase")
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
871 extensions.wrapfunction(rebase, '_makeextrafn', newmakeextrafn)
2679
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
872 # This exists to store in the config that rebase is running so that we can
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
873 # update the topic according to rebase. This is a hack and should be removed
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
874 # when we have better options.
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
875 extensions.wrapcommand(rebase.cmdtable, 'rebase', setrebaseconfig)
1969
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
876 except KeyError:
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
877 pass
1854
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
878
1946
72246b13bd72 patch: document the section about import/export
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1945
diff changeset
879 ## preserve topic during import/export
72246b13bd72 patch: document the section about import/export
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1945
diff changeset
880
1866
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
881 def _exporttopic(seq, ctx):
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
882 topic = ctx.topic()
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
883 if topic:
1917
ea4675c7a028 init: whitespace fixups
Sean Farley <sean@farley.io>
parents: 1916
diff changeset
884 return 'EXP-Topic %s' % topic
1866
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
885 return None
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
886
1867
c9cacc62fa17 patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1866
diff changeset
887 def _importtopic(repo, patchdata, extra, opts):
c9cacc62fa17 patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1866
diff changeset
888 if 'topic' in patchdata:
c9cacc62fa17 patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1866
diff changeset
889 extra['topic'] = patchdata['topic']
c9cacc62fa17 patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1866
diff changeset
890
1948
54810b543bf4 patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1947
diff changeset
891 def setupimportexport(ui):
54810b543bf4 patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1947
diff changeset
892 """run at ui setup time to install import/export logic"""
54810b543bf4 patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1947
diff changeset
893 cmdutil.extraexport.append('topic')
54810b543bf4 patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1947
diff changeset
894 cmdutil.extraexportmap['topic'] = _exporttopic
54810b543bf4 patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1947
diff changeset
895 cmdutil.extrapreimport.append('topic')
54810b543bf4 patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1947
diff changeset
896 cmdutil.extrapreimportmap['topic'] = _importtopic
54810b543bf4 patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1947
diff changeset
897 patch.patchheadermap.append(('EXP-Topic', 'topic'))
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
898
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
899 ## preserve topic during split
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
900
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
901 def presplitupdatetopic(original, repo, ui, prev, ctx):
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
902 # Save topic of revision
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
903 topic = None
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
904 if util.safehasattr(ctx, 'topic'):
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
905 topic = ctx.topic()
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
906
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
907 # Update the working directory
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
908 original(repo, ui, prev, ctx)
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
909
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
910 # Restore the topic if need
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
911 if topic:
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
912 _changecurrenttopic(repo, topic)