Mercurial > evolve
annotate hgext3rd/topic/__init__.py @ 2938:9872526fc39f
topic: show the t0 even if topic is not yet touched
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Fri, 15 Sep 2017 23:25:38 +0530 |
parents | 3b67642a0bc6 |
children | 7759d040d48d |
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, |
2928
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
61 changelog, |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
62 cmdutil, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
63 commands, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
64 context, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
65 error, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
66 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
|
67 hg, |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
68 localrepo, |
2890
1e3d97486861
topics: import lock as lockmods
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2889
diff
changeset
|
69 lock as lockmod, |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
70 merge, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
71 namespaces, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
72 node, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
73 obsolete, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
74 patch, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
75 phases, |
2464
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
76 registrar, |
2889
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
77 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
|
78 templatefilters, |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
79 util, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
80 ) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
81 |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
82 from . import ( |
2922
66357d4d03b2
topic: centralize compatibility logic between hg versions into compat module
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2915
diff
changeset
|
83 compat, |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
84 constants, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
85 revset as topicrevset, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
86 destination, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
87 stack, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
88 topicmap, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
89 discovery, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
90 ) |
1843
0ba067a97d06
revset: add a topic() revset for querying topics
Augie Fackler <augie@google.com>
parents:
1842
diff
changeset
|
91 |
2464
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
92 if util.safehasattr(registrar, 'command'): |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
93 commandfunc = registrar.command |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
94 else: # compat with hg < 4.3 |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
95 commandfunc = cmdutil.command |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
96 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
97 cmdtable = {} |
2464
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
98 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
|
99 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
|
100 '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
|
101 '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
|
102 '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
|
103 '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
|
104 '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
|
105 '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
|
106 '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
|
107 '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
|
108 '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
|
109 'topic.stack.state.clean': 'green', |
1963 | 110 'topic.stack.index.current': 'cyan', # random pick |
111 'topic.stack.state.current': 'cyan bold', # random pick | |
112 '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
|
113 '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
|
114 '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
|
115 'topic.stack.summary.behindcount': 'cyan', |
ce86f7bb4b7b
stack: add some behind information
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1992
diff
changeset
|
116 '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
|
117 '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
|
118 # 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
|
119 # (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
|
120 'log.topic': 'green_background', |
e6d3b83b306b
topic: configure some default color for topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2339
diff
changeset
|
121 'topic.active': 'green', |
1908
dbd6d51e63f1
stack: add some default color configuration
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1907
diff
changeset
|
122 } |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
123 |
2831
eda8eb561134
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
124 __version__ = '0.3.0.dev' |
2705
a7b7471b4bed
topic: update extensions metadata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2691
diff
changeset
|
125 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
|
126 minimumhgversion = '4.0' |
a7b7471b4bed
topic: update extensions metadata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2691
diff
changeset
|
127 buglink = 'https://bz.mercurial-scm.org/' |
1884
8a53f99d9061
testedwith: declare compatibility with Mercurial 3.7
Augie Fackler <raf@durin42.com>
parents:
1877
diff
changeset
|
128 |
2656
4a148ca3e80d
topic: update the changectx method to respect phases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2655
diff
changeset
|
129 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
|
130 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
|
131 return '' |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
132 return self.extra().get(constants.extrakey, '') |
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
133 context.basectx.topic = _contexttopic |
2744
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
134 def _contexttopicidx(self): |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
135 topic = self.topic() |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
136 if not topic: |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
137 # 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
|
138 # 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
|
139 return None |
2915
b3abdb3d819e
stack: replace 'getstack' with direct call to 'stack'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2912
diff
changeset
|
140 revlist = stack.stack(self._repo, topic=topic) |
2744
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
141 try: |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
142 return revlist.index(self.rev()) |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
143 except IndexError: |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
144 # 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
|
145 return None |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
146 context.basectx.topicidx = _contexttopicidx |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
147 |
1904
f52c02bf47b7
stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1903
diff
changeset
|
148 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
|
149 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
|
150 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
151 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
|
152 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
|
153 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
|
154 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
|
155 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
|
156 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
|
157 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
|
158 raise error.Abort(_('cannot resolve "%s": no active topic') % name) |
2915
b3abdb3d819e
stack: replace 'getstack' with direct call to 'stack'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2912
diff
changeset
|
159 revs = list(stack.stack(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
|
160 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
|
161 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
|
162 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
|
163 tname = branch = repo[None].branch() |
2915
b3abdb3d819e
stack: replace 'getstack' with direct call to 'stack'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2912
diff
changeset
|
164 revs = list(stack.stack(repo, branch=branch)) |
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
|
165 |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
166 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
|
167 try: |
2712
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2711
diff
changeset
|
168 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
|
169 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
|
170 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
|
171 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
|
172 # b0 or t0 can be None |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2711
diff
changeset
|
173 if r == -1 and idx == 0: |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2711
diff
changeset
|
174 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
|
175 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
|
176 return [repo[r].node()] |
2008 | 177 if name not in repo.topics: |
2000
c413e7c96265
init: guard _namemap with repo.topics (issue5351)
timeless@gmail.com
parents:
1999
diff
changeset
|
178 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
|
179 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
|
180 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
|
181 |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
182 def _nodemap(repo, node): |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
183 ctx = repo[node] |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
184 t = ctx.topic() |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
185 if t and ctx.phase() > phases.public: |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
186 return [t] |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
187 return [] |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
188 |
1871
58ef5699fb35
merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1867
diff
changeset
|
189 def uisetup(ui): |
1941
7eb737b7a902
destination: rename 'setupdest' to 'modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1939
diff
changeset
|
190 destination.modsetup(ui) |
1944
daad8249d5cf
discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1943
diff
changeset
|
191 discovery.modsetup(ui) |
1952
665d6322994e
uisetup: add call to 'topicmap.modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1951
diff
changeset
|
192 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
|
193 setupimportexport(ui) |
1871
58ef5699fb35
merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1867
diff
changeset
|
194 |
1951
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
195 extensions.afterloaded('rebase', _fixrebase) |
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
196 |
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
197 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
|
198 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
|
199 _("use specified topic"), _('TOPIC'))) |
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
200 |
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
201 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
|
202 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
|
203 # 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
|
204 # 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
|
205 # 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
|
206 # 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
|
207 extensions.wrapcommand(commands.table, 'update', checkt0) |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
208 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
209 try: |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
210 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
|
211 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
|
212 presplitupdatetopic) |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
213 except (KeyError, AttributeError): |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
214 pass |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
215 |
1951
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
216 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
|
217 |
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
218 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
219 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
|
220 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
|
221 return # this can be a peer in the ssh case (puzzling) |
2007 | 222 |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
223 repo = repo.unfiltered() |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
224 |
2339
f641cccbd119
topic: automatically configure thg to display topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2288
diff
changeset
|
225 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
|
226 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
|
227 source='topic-extension') |
f641cccbd119
topic: automatically configure thg to display topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2288
diff
changeset
|
228 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
229 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
|
230 |
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 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
|
232 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
|
233 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
|
234 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
|
235 |
1858
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
236 def commit(self, *args, **kwargs): |
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
237 backup = self.ui.backupconfig('ui', 'allowemptycommit') |
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
238 try: |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
239 if repo.currenttopic != repo['.'].topic(): |
1858
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
240 # bypass the core "nothing changed" logic |
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
241 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
|
242 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
|
243 finally: |
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
244 self.ui.restoreconfig(backup) |
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
245 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
246 def commitctx(self, ctx, error=None): |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
247 topicfilter = topicmap.topicfilter(self.filtername) |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
248 if topicfilter != self.filtername: |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
249 other = repo.filtered(topicmap.topicfilter(repo.filtername)) |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
250 other.commitctx(ctx, error=error) |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
251 |
1855
f241a00e93a7
topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents:
1854
diff
changeset
|
252 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
|
253 current = self.currenttopic |
f241a00e93a7
topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents:
1854
diff
changeset
|
254 if current: |
f241a00e93a7
topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents:
1854
diff
changeset
|
255 ctx.extra()[constants.extrakey] = current |
1862
565f057bdc08
amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents:
1861
diff
changeset
|
256 if (isinstance(ctx, context.memctx) and |
565f057bdc08
amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents:
1861
diff
changeset
|
257 ctx.extra().get('amend_source') and |
565f057bdc08
amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents:
1861
diff
changeset
|
258 ctx.topic() and |
565f057bdc08
amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents:
1861
diff
changeset
|
259 not self.currenttopic): |
565f057bdc08
amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents:
1861
diff
changeset
|
260 # 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
|
261 del ctx.extra()[constants.extrakey] |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
262 return super(topicrepo, self).commitctx(ctx, error=error) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
263 |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
264 @property |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
265 def topics(self): |
1999 | 266 if self._topics is not None: |
267 return self._topics | |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
268 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
|
269 for c in self.set('not public()'): |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
270 topics.add(c.topic()) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
271 topics.remove('') |
1999 | 272 self._topics = topics |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
273 return topics |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
274 |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
275 @property |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
276 def currenttopic(self): |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
277 return self.vfs.tryread('topic') |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
278 |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
279 # overwritten at the instance level by topicmap.py |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
280 _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
|
281 |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
282 def branchmap(self, topic=None): |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
283 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
|
284 topic = getattr(repo, '_autobranchmaptopic', False) |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
285 topicfilter = topicmap.topicfilter(self.filtername) |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
286 if not topic or topicfilter == self.filtername: |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
287 return super(topicrepo, self).branchmap() |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
288 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
|
289 |
1999 | 290 def invalidatevolatilesets(self): |
291 # XXX we might be able to move this to something invalidated less often | |
292 super(topicrepo, self).invalidatevolatilesets() | |
293 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
|
294 |
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
|
295 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
|
296 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
|
297 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
|
298 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
|
299 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
|
300 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
|
301 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
|
302 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
|
303 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
|
304 |
1857
a506ed8ab8da
topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents:
1856
diff
changeset
|
305 repo.__class__ = topicrepo |
1999 | 306 repo._topics = None |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
307 if util.safehasattr(repo, 'names'): |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
308 repo.names.addnamespace(namespaces.namespace( |
1857
a506ed8ab8da
topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents:
1856
diff
changeset
|
309 'topics', 'topic', namemap=_namemap, nodemap=_nodemap, |
a506ed8ab8da
topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents:
1856
diff
changeset
|
310 listnames=lambda repo: repo.topics)) |
2928
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
311 # Wrap workingctx extra to return the topic name |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
312 extensions.wrapfunction(context.workingctx, '__init__', wrapinit) |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
313 # Wrap changelog.add to drop empty topic |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
314 extensions.wrapfunction(changelog.changelog, 'add', wrapadd) |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
315 |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
316 def wrapinit(orig, self, repo, *args, **kwargs): |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
317 orig(self, repo, *args, **kwargs) |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
318 if repo.currenttopic: |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
319 self._extra[constants.extrakey] = repo.currenttopic |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
320 else: |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
321 # Empty key will be dropped from extra by another hack at the changegroup level |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
322 self._extra[constants.extrakey] = '' |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
323 |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
324 def wrapadd(orig, cl, manifest, files, desc, transaction, p1, p2, user, |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
325 date=None, extra=None): |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
326 if constants.extrakey in extra and not extra[constants.extrakey]: |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
327 extra = extra.copy() |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
328 del extra[constants.extrakey] |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
329 return orig(cl, manifest, files, desc, transaction, p1, p2, user, |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
330 date=date, extra=extra) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
331 |
2924
430fb1758d28
topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
332 # revset predicates are automatically registered at loading via this symbol |
430fb1758d28
topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
333 revsetpredicate = topicrevset.revsetpredicate |
430fb1758d28
topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
334 |
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
|
335 @command('topics', [ |
1963 | 336 ('', '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
|
337 ('r', 'rev', [], 'revset of existing revisions', _('REV')), |
1963 | 338 ('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
|
339 ('', '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
|
340 ('', '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
|
341 ] + 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
|
342 _('hg topics [TOPIC]')) |
2889
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
343 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
|
344 """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
|
345 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
346 Clear topic on existing topiced revisions:: |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
347 |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
348 hg topic --rev <related revset> --clear |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
349 |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
350 Change topic on some revisions:: |
2717
ed45a5fb4452
topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
351 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
352 hg topic <newtopicname> --rev <related revset> |
2717
ed45a5fb4452
topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
353 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
354 Clear current topic:: |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
355 |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
356 hg topic --clear |
2717
ed45a5fb4452
topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
357 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
358 Set current topic:: |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
359 |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
360 hg topic <topicname> |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
361 |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
362 List of topics:: |
2717
ed45a5fb4452
topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
363 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
364 hg topics |
2717
ed45a5fb4452
topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
365 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
366 List of topics with their last touched time sorted according to it:: |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
367 |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
368 hg topic --age |
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
|
369 |
2717
ed45a5fb4452
topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
370 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
|
371 |
2869
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
372 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
|
373 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
|
374 active topic, you can do: |
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
375 `hg topic -r "draft()" --current` |
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
376 |
2011
9c7665e3107b
documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2008
diff
changeset
|
377 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
|
378 |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
379 current = opts.get('current') |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
380 if current and topic: |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
381 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
|
382 if current and clear: |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
383 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
|
384 if clear and topic: |
e46b68547017
topic: make --clear + topicname invalid
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2867
diff
changeset
|
385 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
|
386 |
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
|
387 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
|
388 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
|
389 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
|
390 |
2889
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
391 if topic: |
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
392 topic = topic.strip() |
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
393 if not topic: |
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
394 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
|
395 # 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
|
396 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
|
397 |
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
|
398 if list: |
2643
a9ca94defc29
topics: rename '--change' flag to '--rev' flag
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2642
diff
changeset
|
399 if clear or rev: |
a9ca94defc29
topics: rename '--change' flag to '--rev' flag
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2642
diff
changeset
|
400 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
|
401 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
|
402 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
|
403 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
|
404 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
|
405 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
|
406 |
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
|
407 if touchedrevs: |
1851
67d53e8e0c1a
topic: only require obsolete support for --change
Matt Mackall <mpm@selenic.com>
parents:
1850
diff
changeset
|
408 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
|
409 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
|
410 if clear: |
2e3f63f4a519
topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2644
diff
changeset
|
411 topic = None |
2869
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
412 elif opts.get('current'): |
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
413 topic = repo.currenttopic |
2645
2e3f63f4a519
topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2644
diff
changeset
|
414 elif not topic: |
1894
f8ee36489d3c
topic: get 'Abort' from error, not 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1890
diff
changeset
|
415 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
|
416 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
|
417 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
|
418 wl = l = txn = None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
419 try: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
420 wl = repo.wlock() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
421 l = repo.lock() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
422 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
|
423 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
|
424 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
|
425 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
|
426 finally: |
2890
1e3d97486861
topics: import lock as lockmods
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2889
diff
changeset
|
427 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
|
428 repo.invalidate() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
429 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
|
430 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
431 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
|
432 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
|
433 |
1860
b7b9e5028c2a
topics: consistently use empty string instead of None
Matt Mackall <mpm@selenic.com>
parents:
1859
diff
changeset
|
434 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
|
435 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
|
436 |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
437 # `hg topic --current` |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
438 ret = 0 |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
439 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
|
440 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
|
441 ret = 1 |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
442 elif current: |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
443 fm = ui.formatter('topic', opts) |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
444 namemask = '%s\n' |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
445 label = 'topic.active' |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
446 fm.startitem() |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
447 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
|
448 fm.end() |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
449 else: |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
450 _listtopics(ui, repo, opts) |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
451 return ret |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
452 |
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
|
453 @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
|
454 ] + 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
|
455 _('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
|
456 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
|
457 """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
|
458 |
2750
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2744
diff
changeset
|
459 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
|
460 |
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2744
diff
changeset
|
461 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
|
462 """ |
1990
71410fa2c253
stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1989
diff
changeset
|
463 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
|
464 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
|
465 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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 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
|
471 |
2899
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
472 @command('debugcb|debugconvertbookmark', [ |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
473 ('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
|
474 ('', '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
|
475 ], |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
476 _('[-b BOOKMARK] [--all]')) |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
477 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
|
478 """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
|
479 """ |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
480 |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
481 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
|
482 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
|
483 |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
484 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
|
485 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
|
486 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
|
487 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
|
488 |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
489 bmstore = repo._bookmarks |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
490 |
2900
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
491 nodetobook = {} |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
492 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
|
493 if nodetobook.get(revnode): |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
494 nodetobook[revnode].append(book) |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
495 else: |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
496 nodetobook[revnode] = [book] |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
497 |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
498 # 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
|
499 # warning repeatedly |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
500 skipped = [] |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
501 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
502 actions = {} |
2899
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
503 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
504 lock = wlock = tr = None |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
505 try: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
506 wlock = repo.wlock() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
507 lock = repo.lock() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
508 if bookmark: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
509 try: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
510 node = bmstore[bookmark] |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
511 except KeyError: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
512 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
|
513 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
514 revnum = repo[node].rev() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
515 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
|
516 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
|
517 "on it\n") % revnum) |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
518 return |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
519 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
|
520 if targetrevs: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
521 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
|
522 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
523 elif convertall: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
524 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
|
525 revnum = repo[revnode].rev() |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
526 if revnum in skipped: |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
527 continue |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
528 if len(nodetobook[revnode]) > 1: |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
529 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
|
530 " it\n") % revnum) |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
531 skipped.append(revnum) |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
532 continue |
2899
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
533 if bmark == '@': |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
534 continue |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
535 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
|
536 if targetrevs: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
537 actions[(bmark, revnum)] = targetrevs |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
538 |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
539 if actions: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
540 try: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
541 tr = repo.transaction('debugconvertbookmark') |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
542 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
|
543 _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
|
544 tr.close() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
545 finally: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
546 tr.release() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
547 finally: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
548 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
|
549 |
2906
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
550 # 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
|
551 CONVERTBOOKREVSET = """ |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
552 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
|
553 ancestors(bookmark(%s)) |
2909
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
554 and not ancestors( |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
555 ( |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
556 (head() and not bookmark(%s)) |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
557 or (bookmark() - bookmark(%s)) |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
558 ) - ( |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
559 descendants(bookmark(%s)) |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
560 - 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
|
561 ) |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
562 ) |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
563 ) |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
564 """ |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
565 |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
566 def _findconvertbmarktopic(repo, bmark): |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
567 """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
|
568 |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
569 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
|
570 """ |
2909
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
571 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
|
572 |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
573 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
|
574 """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
|
575 |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
576 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
|
577 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
|
578 |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
579 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
|
580 """ |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
581 |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
582 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
|
583 # 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
|
584 # 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
|
585 # 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
|
586 # changeset |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
587 if rewrote == 0: |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
588 return |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
589 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
|
590 rewrote)) |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
591 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
|
592 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
|
593 |
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
|
594 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
|
595 """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
|
596 |
9c0b293c2785
topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2657
diff
changeset
|
597 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
|
598 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
|
599 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
|
600 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
|
601 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
|
602 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
|
603 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
|
604 |
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
|
605 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
|
606 """ 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
|
607 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
|
608 """ |
2642
92e882a82aaf
topics: factor out the logic to change topic in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2625
diff
changeset
|
609 rewrote = 0 |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
610 p1 = None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
611 p2 = None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
612 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
|
613 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
|
614 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
|
615 |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
616 def filectxfn(repo, ctx, path): |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
617 try: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
618 return c[path] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
619 except error.ManifestLookupError: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
620 return None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
621 fixedextra = dict(c.extra()) |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
622 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
|
623 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
|
624 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
|
625 if oldtopic == newtopic: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
626 continue |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
627 if newtopic is None: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
628 del fixedextra[constants.extrakey] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
629 else: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
630 fixedextra[constants.extrakey] = newtopic |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
631 fixedextra[constants.changekey] = c.hex() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
632 if 'amend_source' in fixedextra: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
633 # 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
|
634 # 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
|
635 # 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
|
636 # --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
|
637 # to not be so invasive. |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
638 del fixedextra['amend_source'] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
639 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
|
640 c, oldtopic, newtopic)) |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
641 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
|
642 # 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
|
643 # 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
|
644 # 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
|
645 p1 = c.p1().node() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
646 p2 = c.p2().node() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
647 if p1 in successors: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
648 p1 = successors[p1] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
649 if p2 in successors: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
650 p2 = successors[p2] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
651 mc = context.memctx( |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
652 repo, (p1, p2), c.description(), |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
653 c.files(), filectxfn, |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
654 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
|
655 newnode = repo.commitctx(mc) |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
656 successors[c.node()] = newnode |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
657 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
|
658 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
|
659 rewrote += 1 |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
660 # move the working copy too |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
661 wctx = repo[None] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
662 # 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
|
663 if len(wctx.parents()) == 1: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
664 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
|
665 if newid is not None: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
666 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
|
667 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
|
668 |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
669 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
|
670 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
|
671 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
|
672 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
|
673 # 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
|
674 # 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
|
675 return _showlasttouched(repo, fm, opts) |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
676 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
|
677 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
|
678 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
|
679 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
|
680 namemask = '%%-%is' % maxwidth |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
681 for topic in sorted(repo.topics): |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
682 fm.startitem() |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
683 marker = ' ' |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
684 label = 'topic' |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
685 active = (topic == activetopic) |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
686 if active: |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
687 marker = '*' |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
688 label = 'topic.active' |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
689 if not ui.quiet: |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
690 # 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
|
691 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
|
692 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
|
693 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
|
694 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
|
695 # 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
|
696 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
|
697 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
|
698 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
|
699 '+'.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
|
700 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
|
701 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
|
702 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
|
703 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
|
704 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
|
705 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
|
706 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
|
707 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
|
708 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
|
709 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
|
710 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
|
711 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
|
712 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
|
713 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
|
714 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
|
715 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
|
716 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
|
717 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
|
718 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
|
719 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
|
720 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
|
721 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
|
722 _('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
|
723 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
|
724 fm.plain(')') |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
725 fm.plain('\n') |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
726 fm.end() |
1974
20fb4195bfc4
topic: extract the code listing all topics
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1973
diff
changeset
|
727 |
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
|
728 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
|
729 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
|
730 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
|
731 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
|
732 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
|
733 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
|
734 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
|
735 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
|
736 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
|
737 for timevalue in times: |
2930
7932a0deae18
topic: stabilise the output of --age when date ties
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2928
diff
changeset
|
738 curtopics = sorted(timedict[timevalue][1]) |
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
|
739 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
|
740 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
|
741 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
|
742 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
|
743 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
|
744 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
|
745 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
|
746 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
|
747 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
|
748 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
|
749 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
|
750 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
|
751 if timevalue == -1: |
2933
3b67642a0bc6
topic: update the message used with --age for empty topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2930
diff
changeset
|
752 timestr = 'empty and active' |
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
|
753 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
|
754 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
|
755 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
|
756 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
|
757 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
|
758 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
|
759 |
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 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
|
761 """ |
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 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
|
763 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
|
764 """ |
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 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
|
766 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
|
767 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
|
768 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
|
769 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
|
770 # 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
|
771 # 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
|
772 # 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
|
773 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
|
774 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
|
775 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
|
776 # 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
|
777 # 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
|
778 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
|
779 # 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
|
780 # last touch time. |
2922
66357d4d03b2
topic: centralize compatibility logic between hg versions into compat module
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2915
diff
changeset
|
781 obsmarkers = compat.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
|
782 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
|
783 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
|
784 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
|
785 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
|
786 # 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
|
787 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
|
788 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
|
789 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
|
790 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
|
791 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
|
792 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
|
793 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
|
794 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
|
795 |
d39942773163
topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2718
diff
changeset
|
796 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
|
797 |
1848
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
798 def summaryhook(ui, repo): |
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
799 t = repo.currenttopic |
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
800 if not t: |
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
801 return |
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
802 # 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
|
803 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
|
804 |
1850 | 805 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
|
806 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
|
807 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
|
808 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
|
809 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
|
810 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
|
811 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
|
812 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
|
813 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
|
814 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
|
815 "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
|
816 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
|
817 return orig(ui, repo, *args, **opts) |
1850 | 818 |
1852
3084687f7994
commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents:
1851
diff
changeset
|
819 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
|
820 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
|
821 t = repo.currenttopic |
3084687f7994
commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents:
1851
diff
changeset
|
822 if t: |
3084687f7994
commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents:
1851
diff
changeset
|
823 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
|
824 "\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
|
825 return ret |
3084687f7994
commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents:
1851
diff
changeset
|
826 |
1877
69077c65919d
topic: handle merge.update function signature change
Augie Fackler <raf@durin42.com>
parents:
1874
diff
changeset
|
827 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
|
828 matcher = kwargs.get('matcher') |
e67c526c0a25
update: calculate 'partial' as core does
Sean Farley <sean@farley.io>
parents:
1963
diff
changeset
|
829 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
|
830 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
|
831 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
|
832 ist0 = False |
1853
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
833 try: |
1877
69077c65919d
topic: handle merge.update function signature change
Augie Fackler <raf@durin42.com>
parents:
1874
diff
changeset
|
834 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
|
835 # 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
|
836 # 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
|
837 # 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
|
838 # 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
|
839 # running. |
5156a67f66a6
topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2677
diff
changeset
|
840 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
|
841 isrebase = True |
2740
51afc979d88d
topic: rename the internal topic option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2733
diff
changeset
|
842 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
|
843 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
|
844 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
|
845 ot = repo.currenttopic |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
846 t = '' |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
847 pctx = repo[node] |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
848 if pctx.phase() > phases.public: |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
849 t = pctx.topic() |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
850 with repo.vfs.open('topic', 'w') as f: |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
851 f.write(t) |
1853
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
852 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
|
853 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
|
854 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
|
855 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
|
856 repo.currenttopic) |
1853
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
857 return ret |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
858 finally: |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
859 wlock.release() |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
860 |
2793
fb317d218af0
topic: wrap 'update' in a more flexible way
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
861 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
|
862 |
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
|
863 thezeros = set(['t0', 'b0']) |
2795
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2793
diff
changeset
|
864 backup = repo.ui.backupconfig('_internal', 'keep-topic') |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2793
diff
changeset
|
865 try: |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2793
diff
changeset
|
866 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
|
867 repo.ui.setconfig('_internal', 'keep-topic', 'yes', |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2793
diff
changeset
|
868 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
|
869 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
|
870 finally: |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2793
diff
changeset
|
871 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
|
872 |
1854
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
873 def _fixrebase(loaded): |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
874 if not loaded: |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
875 return |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
876 |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
877 def savetopic(ctx, extra): |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
878 if ctx.topic(): |
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
879 extra[constants.extrakey] = ctx.topic() |
1854
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
880 |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
881 def newmakeextrafn(orig, copiers): |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
882 return orig(copiers + [savetopic]) |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
883 |
2679
5156a67f66a6
topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2677
diff
changeset
|
884 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
|
885 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
|
886 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
|
887 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
|
888 |
1969
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
889 try: |
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
890 rebase = extensions.find("rebase") |
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
891 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
|
892 # 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
|
893 # 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
|
894 # 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
|
895 extensions.wrapcommand(rebase.cmdtable, 'rebase', setrebaseconfig) |
1969
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
896 except KeyError: |
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
897 pass |
1854
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
898 |
1946
72246b13bd72
patch: document the section about import/export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1945
diff
changeset
|
899 ## 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
|
900 |
1866
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
901 def _exporttopic(seq, ctx): |
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
902 topic = ctx.topic() |
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
903 if topic: |
1917 | 904 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
|
905 return None |
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
906 |
1867
c9cacc62fa17
patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1866
diff
changeset
|
907 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
|
908 if 'topic' in patchdata: |
c9cacc62fa17
patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1866
diff
changeset
|
909 extra['topic'] = patchdata['topic'] |
c9cacc62fa17
patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1866
diff
changeset
|
910 |
1948
54810b543bf4
patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1947
diff
changeset
|
911 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
|
912 """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
|
913 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
|
914 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
|
915 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
|
916 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
|
917 patch.patchheadermap.append(('EXP-Topic', 'topic')) |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
918 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
919 ## preserve topic during split |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
920 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
921 def presplitupdatetopic(original, repo, ui, prev, ctx): |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
922 # Save topic of revision |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
923 topic = None |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
924 if util.safehasattr(ctx, 'topic'): |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
925 topic = ctx.topic() |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
926 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
927 # Update the working directory |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
928 original(repo, ui, prev, ctx) |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
929 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
930 # Restore the topic if need |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
931 if topic: |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
932 _changecurrenttopic(repo, topic) |