Mercurial > evolve
annotate hgext3rd/topic/__init__.py @ 3095:7a5941d91fc0 stable
compat: work around the lack of configoverride in mercurial 4.0
The phase preservation will stay broken on 4.0 and below
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 20 Oct 2017 20:58:35 +0200 |
parents | e11e018e8338 |
children | c458c0856ee5 |
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. |
3022
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
51 |
3026
e9935c2c4672
topic: rename the 'topic-mode' help subtopic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3025
diff
changeset
|
52 topic-mode |
e9935c2c4672
topic: rename the 'topic-mode' help subtopic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3025
diff
changeset
|
53 ========== |
3022
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
54 |
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
55 The topic extension can be configured to ensure the user do not forget to add |
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
56 a topic when committing a new topic:: |
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
57 |
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
58 [experimental] |
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
59 # behavior when commit is made without an active topic |
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
60 topic-mode = ignore # do nothing special (default) |
3023
cc740c545776
topicmode: add new warning topicmode
Boris Feld <boris.feld@octobus.net>
parents:
3022
diff
changeset
|
61 topic-mode = warning # print a warning |
3024
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
62 topic-mode = enforce # abort the commit (except for merge) |
3025
e814c553ef32
topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3024
diff
changeset
|
63 topic-mode = enforce-all # abort the commit (even for merge) |
3030
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
64 topic-mode = random # use a randomized generated topic (except for merge) |
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
65 topic-mode = random-all # use a randomized generated topic (even for merge) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
66 """ |
2011
9c7665e3107b
documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2008
diff
changeset
|
67 |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
68 from __future__ import absolute_import |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
69 |
3082
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
70 import functools |
1904
f52c02bf47b7
stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1903
diff
changeset
|
71 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
|
72 import time |
2986
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
73 import weakref |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
74 |
1848
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
75 from mercurial.i18n import _ |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
76 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
|
77 bookmarks, |
2928
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
78 changelog, |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
79 cmdutil, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
80 commands, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
81 context, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
82 error, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
83 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
|
84 hg, |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
85 localrepo, |
2890
1e3d97486861
topics: import lock as lockmods
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2889
diff
changeset
|
86 lock as lockmod, |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
87 merge, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
88 namespaces, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
89 node, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
90 obsolete, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
91 patch, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
92 phases, |
2464
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
93 registrar, |
2889
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
94 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
|
95 templatefilters, |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
96 util, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
97 ) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
98 |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
99 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
|
100 compat, |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
101 constants, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
102 revset as topicrevset, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
103 destination, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
104 stack, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
105 topicmap, |
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
106 discovery, |
3028
c2d1f49ac7e2
topicmode: add 'random' topic mode
Boris Feld <boris.feld@octobus.net>
parents:
3027
diff
changeset
|
107 randomname |
1932
880aac9dbfa6
init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1918
diff
changeset
|
108 ) |
1843
0ba067a97d06
revset: add a topic() revset for querying topics
Augie Fackler <augie@google.com>
parents:
1842
diff
changeset
|
109 |
2464
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
110 if util.safehasattr(registrar, 'command'): |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
111 commandfunc = registrar.command |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
112 else: # compat with hg < 4.3 |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
113 commandfunc = cmdutil.command |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
114 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
115 cmdtable = {} |
2464
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2428
diff
changeset
|
116 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
|
117 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
|
118 '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
|
119 '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
|
120 '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
|
121 '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
|
122 '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
|
123 '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
|
124 '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
|
125 '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
|
126 '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
|
127 'topic.stack.state.clean': 'green', |
1963 | 128 'topic.stack.index.current': 'cyan', # random pick |
129 'topic.stack.state.current': 'cyan bold', # random pick | |
130 '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
|
131 '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
|
132 '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
|
133 'topic.stack.summary.behindcount': 'cyan', |
ce86f7bb4b7b
stack: add some behind information
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1992
diff
changeset
|
134 '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
|
135 '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
|
136 # 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
|
137 # (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
|
138 'log.topic': 'green_background', |
e6d3b83b306b
topic: configure some default color for topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2339
diff
changeset
|
139 'topic.active': 'green', |
1908
dbd6d51e63f1
stack: add some default color configuration
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1907
diff
changeset
|
140 } |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
141 |
3014
14572c0513a9
packaging: update version to match development version
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3012
diff
changeset
|
142 __version__ = '0.4.0.dev' |
3057
cb8ae3cb0bbc
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
143 |
3009
548506eb68f4
packaging: update version number and testedwith version
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2999
diff
changeset
|
144 testedwith = '4.0.2 4.1.3 4.2.3 4.3.3' |
2705
a7b7471b4bed
topic: update extensions metadata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2691
diff
changeset
|
145 minimumhgversion = '4.0' |
a7b7471b4bed
topic: update extensions metadata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2691
diff
changeset
|
146 buglink = 'https://bz.mercurial-scm.org/' |
1884
8a53f99d9061
testedwith: declare compatibility with Mercurial 3.7
Augie Fackler <raf@durin42.com>
parents:
1877
diff
changeset
|
147 |
3082
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
148 if util.safehasattr(registrar, 'configitem'): |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
149 configtable = {} |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
150 configitem = registrar.configitem(configtable) |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
151 |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
152 configitem('experimental', 'enforce-topic', |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
153 default=False, |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
154 ) |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
155 configitem('experimental', 'topic-mode', |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
156 default=None, |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
157 ) |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
158 configitem('_internal', 'keep-topic', |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
159 default=False, |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
160 ) |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
161 |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
162 def extsetup(ui): |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
163 # register config that strickly belong to other code (thg, core, etc) |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
164 # |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
165 # To ensure all config items we used are registerd, we register them if |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
166 # nobody else did so far. |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
167 from mercurial import configitems |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
168 extraitem = functools.partial(configitems._register, ui._knownconfig) |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
169 if ('experimental' not in ui._knownconfig |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
170 or not ui._knownconfig['experimental'].get('thg.displaynames')): |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
171 extraitem('experimental', 'thg.displaynames', |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
172 default=None, |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
173 ) |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
174 if ('devel' not in ui._knownconfig |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
175 or not ui._knownconfig['devel'].get('random')): |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
176 extraitem('devel', 'randomseed', |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
177 default=None, |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
178 ) |
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
179 |
2656
4a148ca3e80d
topic: update the changectx method to respect phases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2655
diff
changeset
|
180 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
|
181 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
|
182 return '' |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
183 return self.extra().get(constants.extrakey, '') |
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
184 context.basectx.topic = _contexttopic |
2744
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
185 def _contexttopicidx(self): |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
186 topic = self.topic() |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
187 if not topic: |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
188 # 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
|
189 # 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
|
190 return None |
2915
b3abdb3d819e
stack: replace 'getstack' with direct call to 'stack'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2912
diff
changeset
|
191 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
|
192 try: |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
193 return revlist.index(self.rev()) |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
194 except IndexError: |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
195 # 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
|
196 return None |
ddfe336de779
topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2740
diff
changeset
|
197 context.basectx.topicidx = _contexttopicidx |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
198 |
1904
f52c02bf47b7
stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1903
diff
changeset
|
199 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
|
200 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
|
201 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
202 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
|
203 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
|
204 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
|
205 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
|
206 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
|
207 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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 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
|
213 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
|
214 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
|
215 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
|
216 |
b933a8068c17
topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2668
diff
changeset
|
217 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
|
218 try: |
2712
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2711
diff
changeset
|
219 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
|
220 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
|
221 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
|
222 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
|
223 # b0 or t0 can be None |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2711
diff
changeset
|
224 if r == -1 and idx == 0: |
f19b314d8475
topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2711
diff
changeset
|
225 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
|
226 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
|
227 return [repo[r].node()] |
2008 | 228 if name not in repo.topics: |
2000
c413e7c96265
init: guard _namemap with repo.topics (issue5351)
timeless@gmail.com
parents:
1999
diff
changeset
|
229 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
|
230 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
|
231 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
|
232 |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
233 def _nodemap(repo, node): |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
234 ctx = repo[node] |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
235 t = ctx.topic() |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
236 if t and ctx.phase() > phases.public: |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
237 return [t] |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
238 return [] |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
239 |
1871
58ef5699fb35
merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1867
diff
changeset
|
240 def uisetup(ui): |
1941
7eb737b7a902
destination: rename 'setupdest' to 'modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1939
diff
changeset
|
241 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
|
242 discovery.modsetup(ui) |
1952
665d6322994e
uisetup: add call to 'topicmap.modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1951
diff
changeset
|
243 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
|
244 setupimportexport(ui) |
1871
58ef5699fb35
merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1867
diff
changeset
|
245 |
1951
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
246 extensions.afterloaded('rebase', _fixrebase) |
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
247 |
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
248 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
|
249 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
|
250 _("use specified topic"), _('TOPIC'))) |
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
251 |
2983
c0de0010ec30
topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2982
diff
changeset
|
252 entry = extensions.wrapcommand(commands.table, 'push', pushoutgoingwrap) |
c0de0010ec30
topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2982
diff
changeset
|
253 entry[1].append(('t', 'topic', '', |
c0de0010ec30
topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2982
diff
changeset
|
254 _("topic to push"), _('TOPIC'))) |
c0de0010ec30
topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2982
diff
changeset
|
255 |
c0de0010ec30
topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2982
diff
changeset
|
256 entry = extensions.wrapcommand(commands.table, 'outgoing', |
c0de0010ec30
topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2982
diff
changeset
|
257 pushoutgoingwrap) |
2982
fef934b7ed86
topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2939
diff
changeset
|
258 entry[1].append(('t', 'topic', '', |
fef934b7ed86
topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2939
diff
changeset
|
259 _("topic to push"), _('TOPIC'))) |
fef934b7ed86
topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2939
diff
changeset
|
260 |
1951
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
261 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
|
262 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
|
263 # 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
|
264 # 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
|
265 # 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
|
266 # 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
|
267 extensions.wrapcommand(commands.table, 'update', checkt0) |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
268 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
269 try: |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
270 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
|
271 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
|
272 presplitupdatetopic) |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
273 except (KeyError, AttributeError): |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
274 pass |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
275 |
1951
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
276 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
|
277 |
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
278 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
279 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
|
280 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
|
281 return # this can be a peer in the ssh case (puzzling) |
2007 | 282 |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
283 repo = repo.unfiltered() |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
284 |
3082
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
285 if repo.ui.config('experimental', 'thg.displaynames') is None: |
2339
f641cccbd119
topic: automatically configure thg to display topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2288
diff
changeset
|
286 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
|
287 source='topic-extension') |
f641cccbd119
topic: automatically configure thg to display topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2288
diff
changeset
|
288 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
289 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
|
290 |
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
|
291 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
|
292 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
|
293 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
|
294 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
|
295 |
1858
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
296 def commit(self, *args, **kwargs): |
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
297 backup = self.ui.backupconfig('ui', 'allowemptycommit') |
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
298 try: |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
299 if repo.currenttopic != repo['.'].topic(): |
1858
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
300 # bypass the core "nothing changed" logic |
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
301 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
|
302 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
|
303 finally: |
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
304 self.ui.restoreconfig(backup) |
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
305 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
306 def commitctx(self, ctx, error=None): |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
307 topicfilter = topicmap.topicfilter(self.filtername) |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
308 if topicfilter != self.filtername: |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
309 other = repo.filtered(topicmap.topicfilter(repo.filtername)) |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
310 other.commitctx(ctx, error=error) |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
311 |
1855
f241a00e93a7
topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents:
1854
diff
changeset
|
312 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
|
313 current = self.currenttopic |
f241a00e93a7
topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents:
1854
diff
changeset
|
314 if current: |
f241a00e93a7
topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents:
1854
diff
changeset
|
315 ctx.extra()[constants.extrakey] = current |
1862
565f057bdc08
amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents:
1861
diff
changeset
|
316 if (isinstance(ctx, context.memctx) and |
565f057bdc08
amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents:
1861
diff
changeset
|
317 ctx.extra().get('amend_source') and |
565f057bdc08
amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents:
1861
diff
changeset
|
318 ctx.topic() and |
565f057bdc08
amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents:
1861
diff
changeset
|
319 not self.currenttopic): |
565f057bdc08
amend: allow clearing topics on amend
Matt Mackall <mpm@selenic.com>
parents:
1861
diff
changeset
|
320 # 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
|
321 del ctx.extra()[constants.extrakey] |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
322 return super(topicrepo, self).commitctx(ctx, error=error) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
323 |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
324 @property |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
325 def topics(self): |
1999 | 326 if self._topics is not None: |
327 return self._topics | |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
328 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
|
329 for c in self.set('not public()'): |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
330 topics.add(c.topic()) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
331 topics.remove('') |
1999 | 332 self._topics = topics |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
333 return topics |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
334 |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
335 @property |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
336 def currenttopic(self): |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
337 return self.vfs.tryread('topic') |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
338 |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
339 # overwritten at the instance level by topicmap.py |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
340 _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
|
341 |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
342 def branchmap(self, topic=None): |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
343 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
|
344 topic = getattr(repo, '_autobranchmaptopic', False) |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
345 topicfilter = topicmap.topicfilter(self.filtername) |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
346 if not topic or topicfilter == self.filtername: |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
347 return super(topicrepo, self).branchmap() |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
348 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
|
349 |
1999 | 350 def invalidatevolatilesets(self): |
351 # XXX we might be able to move this to something invalidated less often | |
352 super(topicrepo, self).invalidatevolatilesets() | |
353 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
|
354 |
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
|
355 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
|
356 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
|
357 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
|
358 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
|
359 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
|
360 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
|
361 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
|
362 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
|
363 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
|
364 |
2989
53246d237373
topic: skip topic movement message during strip
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2986
diff
changeset
|
365 def transaction(self, desc, *a, **k): |
2987
d59d6413bb68
topics/transaction: return immediately if we are in the middle of a transaction
Aurélien Campéas
parents:
2986
diff
changeset
|
366 ctr = self.currenttransaction() |
2989
53246d237373
topic: skip topic movement message during strip
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2986
diff
changeset
|
367 tr = super(topicrepo, self).transaction(desc, *a, **k) |
2999
d94a4e150633
topic: fix topic message for mercurial 4.2 and below
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2995
diff
changeset
|
368 if desc in ('strip', 'repair') or ctr is not None: |
2987
d59d6413bb68
topics/transaction: return immediately if we are in the middle of a transaction
Aurélien Campéas
parents:
2986
diff
changeset
|
369 return tr |
2986
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
370 |
2988
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
371 # real transaction start |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
372 ct = self.currenttopic |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
373 if not ct: |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
374 return tr |
3043
033e00be9ce4
topics: use stack rather than stackdata when one only wants the changeset count
Aurélien Campéas
parents:
3012
diff
changeset
|
375 ctwasempty = stack.stack(self, topic=ct).changesetcount == 0 |
2988
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
376 |
2986
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
377 reporef = weakref.ref(self) |
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
378 |
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
379 def currenttopicempty(tr): |
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
380 # check active topic emptyness |
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
381 repo = reporef() |
3043
033e00be9ce4
topics: use stack rather than stackdata when one only wants the changeset count
Aurélien Campéas
parents:
3012
diff
changeset
|
382 csetcount = stack.stack(repo, topic=ct).changesetcount |
2988
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
383 empty = csetcount == 0 |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
384 if empty and not ctwasempty: |
2986
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
385 ui.status('active topic %r is now empty\n' % ct) |
2988
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
386 if ctwasempty and not empty: |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
387 if csetcount == 1: |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
388 msg = _('active topic %r grew its first changeset\n') |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
389 ui.status(msg % ct) |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
390 else: |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
391 msg = _('active topic %r grew its %s first changesets\n') |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
392 ui.status(msg % (ct, csetcount)) |
2986
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
393 |
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
394 tr.addpostclose('signalcurrenttopicempty', currenttopicempty) |
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
395 return tr |
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
396 |
1857
a506ed8ab8da
topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents:
1856
diff
changeset
|
397 repo.__class__ = topicrepo |
1999 | 398 repo._topics = None |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
399 if util.safehasattr(repo, 'names'): |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
400 repo.names.addnamespace(namespaces.namespace( |
1857
a506ed8ab8da
topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents:
1856
diff
changeset
|
401 'topics', 'topic', namemap=_namemap, nodemap=_nodemap, |
a506ed8ab8da
topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents:
1856
diff
changeset
|
402 listnames=lambda repo: repo.topics)) |
2928
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
403 # 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
|
404 extensions.wrapfunction(context.workingctx, '__init__', wrapinit) |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
405 # 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
|
406 extensions.wrapfunction(changelog.changelog, 'add', wrapadd) |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
407 |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
408 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
|
409 orig(self, repo, *args, **kwargs) |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
410 if repo.currenttopic: |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
411 self._extra[constants.extrakey] = repo.currenttopic |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
412 else: |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
413 # 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
|
414 self._extra[constants.extrakey] = '' |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
415 |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
416 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
|
417 date=None, extra=None): |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
418 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
|
419 extra = extra.copy() |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
420 del extra[constants.extrakey] |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
421 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
|
422 date=date, extra=extra) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
423 |
2924
430fb1758d28
topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
424 # 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
|
425 revsetpredicate = topicrevset.revsetpredicate |
430fb1758d28
topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
426 |
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
|
427 @command('topics', [ |
1963 | 428 ('', '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
|
429 ('r', 'rev', [], 'revset of existing revisions', _('REV')), |
1963 | 430 ('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
|
431 ('', '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
|
432 ('', '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
|
433 ] + 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
|
434 _('hg topics [TOPIC]')) |
2991
f4956eb3a456
topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2990
diff
changeset
|
435 def topics(ui, repo, topic=None, **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
|
436 """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
|
437 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
438 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
|
439 |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
440 hg topics --rev <related revset> --clear |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
441 |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
442 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
|
443 |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
444 hg topics <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
|
445 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
446 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
|
447 |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
448 hg topics --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
|
449 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
450 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
|
451 |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
452 hg topics <topicname> |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
453 |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
454 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
|
455 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
456 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
|
457 |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
458 List of topics sorted according to their last touched time displaying last |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
459 touched time and the user who last touched the topic:: |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
460 |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
461 hg topics --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
|
462 |
2717
ed45a5fb4452
topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
463 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
|
464 |
2869
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
465 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
|
466 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
|
467 active topic, you can do: |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
468 `hg topics -r "draft()" --current` |
2869
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
469 |
2011
9c7665e3107b
documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2008
diff
changeset
|
470 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
|
471 |
2991
f4956eb3a456
topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2990
diff
changeset
|
472 clear = opts.get('clear') |
f4956eb3a456
topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2990
diff
changeset
|
473 list = opts.get('list') |
f4956eb3a456
topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2990
diff
changeset
|
474 rev = opts.get('rev') |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
475 current = opts.get('current') |
2995
dbc896a7a1c3
topics: make sure user don't pass both the age option and a topic name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2994
diff
changeset
|
476 age = opts.get('age') |
2991
f4956eb3a456
topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2990
diff
changeset
|
477 |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
478 if current and topic: |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
479 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
|
480 if current and clear: |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
481 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
|
482 if clear and topic: |
e46b68547017
topic: make --clear + topicname invalid
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2867
diff
changeset
|
483 raise error.Abort(_("cannot use --clear when setting a topic")) |
2995
dbc896a7a1c3
topics: make sure user don't pass both the age option and a topic name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2994
diff
changeset
|
484 if age and topic: |
dbc896a7a1c3
topics: make sure user don't pass both the age option and a topic name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2994
diff
changeset
|
485 raise error.Abort(_("cannot use --age while setting a topic")) |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
486 |
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
|
487 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
|
488 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
|
489 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
|
490 |
2889
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
491 if topic: |
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
492 topic = topic.strip() |
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
493 if not topic: |
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
494 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
|
495 # 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
|
496 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
|
497 |
3066
512827b1a24a
pager: add support to `hg topic`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3065
diff
changeset
|
498 compat.startpager(ui, 'topics') |
512827b1a24a
pager: add support to `hg topic`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3065
diff
changeset
|
499 |
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
|
500 if list: |
2643
a9ca94defc29
topics: rename '--change' flag to '--rev' flag
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2642
diff
changeset
|
501 if clear or rev: |
a9ca94defc29
topics: rename '--change' flag to '--rev' flag
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2642
diff
changeset
|
502 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
|
503 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
|
504 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
|
505 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
|
506 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
|
507 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
|
508 |
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
|
509 if touchedrevs: |
1851
67d53e8e0c1a
topic: only require obsolete support for --change
Matt Mackall <mpm@selenic.com>
parents:
1850
diff
changeset
|
510 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
|
511 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
|
512 if clear: |
2e3f63f4a519
topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2644
diff
changeset
|
513 topic = None |
2869
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
514 elif opts.get('current'): |
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
515 topic = repo.currenttopic |
2645
2e3f63f4a519
topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2644
diff
changeset
|
516 elif not topic: |
1894
f8ee36489d3c
topic: get 'Abort' from error, not 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1890
diff
changeset
|
517 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
|
518 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
|
519 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
|
520 wl = l = txn = None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
521 try: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
522 wl = repo.wlock() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
523 l = repo.lock() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
524 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
|
525 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
|
526 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
|
527 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
|
528 finally: |
2890
1e3d97486861
topics: import lock as lockmods
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2889
diff
changeset
|
529 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
|
530 repo.invalidate() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
531 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
|
532 |
2985
f63c97c01f92
topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents:
2984
diff
changeset
|
533 ct = repo.currenttopic |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
534 if clear: |
3043
033e00be9ce4
topics: use stack rather than stackdata when one only wants the changeset count
Aurélien Campéas
parents:
3012
diff
changeset
|
535 empty = stack.stack(repo, topic=ct).changesetcount == 0 |
2984
30f6030dca8f
topics: signal to the end user when a topic has been forgotten
Aurélien Campéas
parents:
2983
diff
changeset
|
536 if empty: |
30f6030dca8f
topics: signal to the end user when a topic has been forgotten
Aurélien Campéas
parents:
2983
diff
changeset
|
537 if ct: |
30f6030dca8f
topics: signal to the end user when a topic has been forgotten
Aurélien Campéas
parents:
2983
diff
changeset
|
538 ui.status(_('clearing empty topic "%s"\n') % ct) |
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
|
539 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
|
540 |
1860
b7b9e5028c2a
topics: consistently use empty string instead of None
Matt Mackall <mpm@selenic.com>
parents:
1859
diff
changeset
|
541 if topic: |
2985
f63c97c01f92
topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents:
2984
diff
changeset
|
542 if not ct: |
f63c97c01f92
topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents:
2984
diff
changeset
|
543 ui.status(_('marked working directory as topic: %s\n') % 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
|
544 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
|
545 |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
546 # `hg topic --current` |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
547 ret = 0 |
2985
f63c97c01f92
topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents:
2984
diff
changeset
|
548 if current and not ct: |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
549 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
|
550 ret = 1 |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
551 elif current: |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
552 fm = ui.formatter('topic', opts) |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
553 namemask = '%s\n' |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
554 label = 'topic.active' |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
555 fm.startitem() |
2985
f63c97c01f92
topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents:
2984
diff
changeset
|
556 fm.write('topic', namemask, ct, label=label) |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
557 fm.end() |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
558 else: |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
559 _listtopics(ui, repo, opts) |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
560 return ret |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
561 |
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
|
562 @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
|
563 ] + 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
|
564 _('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
|
565 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
|
566 """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
|
567 |
2750
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2744
diff
changeset
|
568 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
|
569 |
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2744
diff
changeset
|
570 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
|
571 """ |
1990
71410fa2c253
stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1989
diff
changeset
|
572 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
|
573 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
|
574 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
|
575 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
|
576 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
|
577 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
|
578 branch = repo[None].branch() |
3065
fdd0b6c26597
pager: add support to `hg stack`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3058
diff
changeset
|
579 compat.startpager(ui, 'stack') |
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
|
580 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
|
581 |
2899
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
582 @command('debugcb|debugconvertbookmark', [ |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
583 ('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
|
584 ('', '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
|
585 ], |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
586 _('[-b BOOKMARK] [--all]')) |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
587 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
|
588 """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
|
589 """ |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
590 |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
591 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
|
592 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
|
593 |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
594 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
|
595 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
|
596 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
|
597 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
|
598 |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
599 bmstore = repo._bookmarks |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
600 |
2900
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
601 nodetobook = {} |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
602 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
|
603 if nodetobook.get(revnode): |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
604 nodetobook[revnode].append(book) |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
605 else: |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
606 nodetobook[revnode] = [book] |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
607 |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
608 # 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
|
609 # warning repeatedly |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
610 skipped = [] |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
611 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
612 actions = {} |
2899
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
613 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
614 lock = wlock = tr = None |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
615 try: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
616 wlock = repo.wlock() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
617 lock = repo.lock() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
618 if bookmark: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
619 try: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
620 node = bmstore[bookmark] |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
621 except KeyError: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
622 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
|
623 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
624 revnum = repo[node].rev() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
625 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
|
626 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
|
627 "on it\n") % revnum) |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
628 return |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
629 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
|
630 if targetrevs: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
631 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
|
632 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
633 elif convertall: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
634 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
|
635 revnum = repo[revnode].rev() |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
636 if revnum in skipped: |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
637 continue |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
638 if len(nodetobook[revnode]) > 1: |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
639 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
|
640 " it\n") % revnum) |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
641 skipped.append(revnum) |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
642 continue |
2899
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
643 if bmark == '@': |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
644 continue |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
645 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
|
646 if targetrevs: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
647 actions[(bmark, revnum)] = targetrevs |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
648 |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
649 if actions: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
650 try: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
651 tr = repo.transaction('debugconvertbookmark') |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
652 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
|
653 _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
|
654 tr.close() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
655 finally: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
656 tr.release() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
657 finally: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
658 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
|
659 |
2906
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
660 # 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
|
661 CONVERTBOOKREVSET = """ |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
662 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
|
663 ancestors(bookmark(%s)) |
2909
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
664 and not ancestors( |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
665 ( |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
666 (head() and not bookmark(%s)) |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
667 or (bookmark() - bookmark(%s)) |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
668 ) - ( |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
669 descendants(bookmark(%s)) |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
670 - 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
|
671 ) |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
672 ) |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
673 ) |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
674 """ |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
675 |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
676 def _findconvertbmarktopic(repo, bmark): |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
677 """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
|
678 |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
679 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
|
680 """ |
2909
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
681 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
|
682 |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
683 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
|
684 """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
|
685 |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
686 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
|
687 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
|
688 |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
689 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
|
690 """ |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
691 |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
692 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
|
693 # 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
|
694 # 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
|
695 # 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
|
696 # changeset |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
697 if rewrote == 0: |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
698 return |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
699 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
|
700 rewrote)) |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
701 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
|
702 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
|
703 |
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
|
704 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
|
705 """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
|
706 |
9c0b293c2785
topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2657
diff
changeset
|
707 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
|
708 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
|
709 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
|
710 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
|
711 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
|
712 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
|
713 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
|
714 |
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
|
715 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
|
716 """ 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
|
717 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
|
718 """ |
2642
92e882a82aaf
topics: factor out the logic to change topic in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2625
diff
changeset
|
719 rewrote = 0 |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
720 p1 = None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
721 p2 = None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
722 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
|
723 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
|
724 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
|
725 |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
726 def filectxfn(repo, ctx, path): |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
727 try: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
728 return c[path] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
729 except error.ManifestLookupError: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
730 return None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
731 fixedextra = dict(c.extra()) |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
732 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
|
733 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
|
734 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
|
735 if oldtopic == newtopic: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
736 continue |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
737 if newtopic is None: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
738 del fixedextra[constants.extrakey] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
739 else: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
740 fixedextra[constants.extrakey] = newtopic |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
741 fixedextra[constants.changekey] = c.hex() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
742 if 'amend_source' in fixedextra: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
743 # 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
|
744 # 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
|
745 # 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
|
746 # --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
|
747 # to not be so invasive. |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
748 del fixedextra['amend_source'] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
749 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
|
750 c, oldtopic, newtopic)) |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
751 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
|
752 # 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
|
753 # 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
|
754 # 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
|
755 p1 = c.p1().node() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
756 p2 = c.p2().node() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
757 if p1 in successors: |
3038
103244e34a9c
topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3030
diff
changeset
|
758 p1 = successors[p1][0] |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
759 if p2 in successors: |
3038
103244e34a9c
topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3030
diff
changeset
|
760 p2 = successors[p2][0] |
3040
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
761 mc = context.memctx(repo, |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
762 (p1, p2), |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
763 c.description(), |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
764 c.files(), |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
765 filectxfn, |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
766 user=c.user(), |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
767 date=c.date(), |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
768 extra=fixedextra) |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
769 |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
770 # phase handling |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
771 commitphase = c.phase() |
3095
7a5941d91fc0
compat: work around the lack of configoverride in mercurial 4.0
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3094
diff
changeset
|
772 if util.safehasattr(repo.ui, 'configoverride'): |
7a5941d91fc0
compat: work around the lack of configoverride in mercurial 4.0
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3094
diff
changeset
|
773 overrides = {('phases', 'new-commit'): commitphase} |
7a5941d91fc0
compat: work around the lack of configoverride in mercurial 4.0
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3094
diff
changeset
|
774 with repo.ui.configoverride(overrides, 'changetopic'): |
7a5941d91fc0
compat: work around the lack of configoverride in mercurial 4.0
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3094
diff
changeset
|
775 newnode = repo.commitctx(mc) |
7a5941d91fc0
compat: work around the lack of configoverride in mercurial 4.0
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3094
diff
changeset
|
776 else: # do not attempt to preserver phase (hg <= 4.0) |
3040
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
777 newnode = repo.commitctx(mc) |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
778 |
3038
103244e34a9c
topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3030
diff
changeset
|
779 successors[c.node()] = (newnode,) |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
780 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
|
781 rewrote += 1 |
3038
103244e34a9c
topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3030
diff
changeset
|
782 |
103244e34a9c
topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3030
diff
changeset
|
783 # create obsmarkers and move bookmarks |
3094
e11e018e8338
compat: add an abstraction for 'scmutil.cleanupnodes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3082
diff
changeset
|
784 # XXX we should be creating marker as we go instead of only at the end, |
e11e018e8338
compat: add an abstraction for 'scmutil.cleanupnodes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3082
diff
changeset
|
785 # this makes the operations more modulars |
e11e018e8338
compat: add an abstraction for 'scmutil.cleanupnodes'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3082
diff
changeset
|
786 compat.cleanupnodes(repo, successors, 'changetopics') |
3040
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
787 |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
788 # move the working copy too |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
789 wctx = repo[None] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
790 # 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
|
791 if len(wctx.parents()) == 1: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
792 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
|
793 if newid is not None: |
3038
103244e34a9c
topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3030
diff
changeset
|
794 hg.update(repo, newid[0], quietempty=True) |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
795 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
|
796 |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
797 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
|
798 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
|
799 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
|
800 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
|
801 # 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
|
802 # 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
|
803 return _showlasttouched(repo, fm, opts) |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
804 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
|
805 namemask = '%s' |
3060
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
806 if repo.topics: |
1987
d427fd97c9d5
topic: properly justify the verbose data when listing topic
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1985
diff
changeset
|
807 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
|
808 namemask = '%%-%is' % maxwidth |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
809 for topic in sorted(repo.topics): |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
810 fm.startitem() |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
811 marker = ' ' |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
812 label = 'topic' |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
813 active = (topic == activetopic) |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
814 if active: |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
815 marker = '*' |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
816 label = 'topic.active' |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
817 if not ui.quiet: |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
818 # 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
|
819 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
|
820 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
|
821 fm.data(active=active) |
3060
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
822 |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
823 data = stack.stack(repo, topic=topic) |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
824 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
|
825 if ui.verbose: |
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
|
826 fm.write('branches+', 'on branch: %s', |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
827 '+'.join(data.branches), # XXX use list directly after 4.0 is released |
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
|
828 label='topic.list.branches') |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
829 |
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
|
830 fm.plain(', ') |
3060
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
831 fm.write('changesetcount', '%d changesets', data.changesetcount, |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
832 label='topic.list.changesetcount') |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
833 |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
834 if data.troubledcount: |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
835 fm.plain(', ') |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
836 fm.write('troubledcount', '%d troubled', |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
837 data.troubledcount, |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
838 label='topic.list.troubledcount') |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
839 |
3060
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
840 headcount = len(data.heads) |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
841 if 1 < headcount: |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
842 fm.plain(', ') |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
843 fm.write('headcount', '%d heads', |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
844 headcount, |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
845 label='topic.list.headcount.multiple') |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
846 |
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
|
847 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
|
848 # XXX we should include the data even when not verbose |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
849 |
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
850 behindcount = data.behindcount |
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
851 if 0 < behindcount: |
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
|
852 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
|
853 fm.write('behindcount', '%d behind', |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
854 behindcount, |
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
|
855 label='topic.list.behindcount') |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
856 elif -1 == behindcount: |
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
|
857 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
|
858 fm.write('behinderror', '%s', |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
859 _('ambiguous destination: %s') % data.behinderror, |
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
|
860 label='topic.list.behinderror') |
3060
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
861 fm.plain(')\n') |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
862 fm.end() |
1974
20fb4195bfc4
topic: extract the code listing all topics
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1973
diff
changeset
|
863 |
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
|
864 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
|
865 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
|
866 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
|
867 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
|
868 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
|
869 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
|
870 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
|
871 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
|
872 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
|
873 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
|
874 curtopics = sorted(timedict[timevalue][1]) |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
875 for topic, user in curtopics: |
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
|
876 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
|
877 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
|
878 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
|
879 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
|
880 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
|
881 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
|
882 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
|
883 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
|
884 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
|
885 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
|
886 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
|
887 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
|
888 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
|
889 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
|
890 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
|
891 fm.write('lasttouched', '%s', timestr, label='topic.list.time') |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
892 if user: |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
893 fm.write('usertouched', ' by %s', user, label='topic.list.user') |
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
|
894 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
|
895 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
|
896 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
|
897 |
d39942773163
topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2718
diff
changeset
|
898 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
|
899 """ |
d39942773163
topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2718
diff
changeset
|
900 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
|
901 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
|
902 """ |
d39942773163
topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2718
diff
changeset
|
903 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
|
904 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
|
905 for t in topics: |
2992
db3c85c2cb47
topics: initialize variable with default value instead of assigning later
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2991
diff
changeset
|
906 secspassed = -1 |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
907 user = None |
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
|
908 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
|
909 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
|
910 # 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
|
911 # 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
|
912 # 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
|
913 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
|
914 rt = repo[revs].date() |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
915 if rt[0] >= maxtime[0]: |
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
|
916 # 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
|
917 # 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
|
918 maxtime = rt |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
919 user = repo[revs].user() |
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
|
920 # 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
|
921 # 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
|
922 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
|
923 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
|
924 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
|
925 if rt[0] > maxtime[0]: |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
926 user = marker.metadata().get('user', user) |
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
|
927 maxtime = rt |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
928 |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
929 # Making the username more better |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
930 username = None |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
931 if user: |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
932 # user is of form "abc <abc@xyz.com>" |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
933 username = user.split('<')[0] |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
934 if not username: |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
935 # user is of form "<abc@xyz.com>" |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
936 username = user[1:-1] |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
937 username = username.strip() |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
938 |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
939 topicuser = (t, username) |
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
940 |
2992
db3c85c2cb47
topics: initialize variable with default value instead of assigning later
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2991
diff
changeset
|
941 if trevs: |
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
|
942 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
|
943 try: |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
944 topicstime[secspassed][1].append(topicuser) |
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
|
945 except KeyError: |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
946 topicstime[secspassed] = (maxtime, [topicuser]) |
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
|
947 |
d39942773163
topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2718
diff
changeset
|
948 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
|
949 |
1848
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
950 def summaryhook(ui, repo): |
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
951 t = repo.currenttopic |
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
952 if not t: |
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
953 return |
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
954 # 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
|
955 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
|
956 |
3022
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
957 _validmode = [ |
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
958 'ignore', |
3023
cc740c545776
topicmode: add new warning topicmode
Boris Feld <boris.feld@octobus.net>
parents:
3022
diff
changeset
|
959 'warning', |
3022
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
960 'enforce', |
3025
e814c553ef32
topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3024
diff
changeset
|
961 'enforce-all', |
3028
c2d1f49ac7e2
topicmode: add 'random' topic mode
Boris Feld <boris.feld@octobus.net>
parents:
3027
diff
changeset
|
962 'random', |
3030
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
963 'random-all', |
3022
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
964 ] |
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
965 |
3020
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
966 def _configtopicmode(ui): |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
967 """ Parse the config to get the topicmode |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
968 """ |
3082
326e0ee1eed1
topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3071
diff
changeset
|
969 topicmode = ui.config('experimental', 'topic-mode') |
3020
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
970 |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
971 # Fallback to read enforce-topic |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
972 if topicmode is None: |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
973 enforcetopic = ui.configbool('experimental', 'enforce-topic') |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
974 if enforcetopic: |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
975 topicmode = "enforce" |
3022
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
976 if topicmode not in _validmode: |
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
977 topicmode = _validmode[0] |
3020
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
978 |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
979 return topicmode |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
980 |
1850 | 981 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
|
982 with repo.wlock(): |
3020
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
983 topicmode = _configtopicmode(ui) |
3024
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
984 ismergecommit = len(repo[None].parents()) == 2 |
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
985 |
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
986 notopic = not repo.currenttopic |
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
987 mayabort = (topicmode == "enforce" and not ismergecommit) |
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
988 maywarn = (topicmode == "warning" |
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
989 or (topicmode == "enforce" and ismergecommit)) |
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
990 |
3030
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
991 mayrandom = False |
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
992 if topicmode == "random": |
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
993 mayrandom = not ismergecommit |
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
994 elif topicmode == "random-all": |
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
995 mayrandom = True |
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
996 |
3025
e814c553ef32
topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3024
diff
changeset
|
997 if topicmode == 'enforce-all': |
e814c553ef32
topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3024
diff
changeset
|
998 ismergecommit = False |
e814c553ef32
topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3024
diff
changeset
|
999 mayabort = True |
e814c553ef32
topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3024
diff
changeset
|
1000 maywarn = False |
e814c553ef32
topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3024
diff
changeset
|
1001 |
3027
b220e2f5ebd5
topic: update the topic-mode hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3026
diff
changeset
|
1002 hint = _("see 'hg help -e topic.topic-mode' for details") |
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
|
1003 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
|
1004 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
|
1005 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
|
1006 f.write(t) |
3024
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
1007 elif notopic and mayabort: |
2733
adfbb984ebbb
topics: check for topic on commit before a user enters message
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2731
diff
changeset
|
1008 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
|
1009 raise error.Abort(msg, hint=hint) |
3024
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
1010 elif notopic and maywarn: |
3023
cc740c545776
topicmode: add new warning topicmode
Boris Feld <boris.feld@octobus.net>
parents:
3022
diff
changeset
|
1011 ui.warn(_("warning: new draft commit without topic\n")) |
3027
b220e2f5ebd5
topic: update the topic-mode hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3026
diff
changeset
|
1012 if not ui.quiet: |
b220e2f5ebd5
topic: update the topic-mode hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3026
diff
changeset
|
1013 ui.warn(("(%s)") % hint) |
3030
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
1014 elif notopic and mayrandom: |
3028
c2d1f49ac7e2
topicmode: add 'random' topic mode
Boris Feld <boris.feld@octobus.net>
parents:
3027
diff
changeset
|
1015 with repo.vfs.open('topic', 'w') as f: |
c2d1f49ac7e2
topicmode: add 'random' topic mode
Boris Feld <boris.feld@octobus.net>
parents:
3027
diff
changeset
|
1016 f.write(randomname.randomtopicname(ui)) |
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
|
1017 return orig(ui, repo, *args, **opts) |
1850 | 1018 |
1852
3084687f7994
commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents:
1851
diff
changeset
|
1019 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
|
1020 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
|
1021 t = repo.currenttopic |
3084687f7994
commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents:
1851
diff
changeset
|
1022 if t: |
3084687f7994
commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents:
1851
diff
changeset
|
1023 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
|
1024 "\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
|
1025 return ret |
3084687f7994
commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents:
1851
diff
changeset
|
1026 |
2983
c0de0010ec30
topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2982
diff
changeset
|
1027 def pushoutgoingwrap(orig, ui, repo, *args, **opts): |
2982
fef934b7ed86
topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2939
diff
changeset
|
1028 if opts.get('topic'): |
fef934b7ed86
topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2939
diff
changeset
|
1029 topicrevs = repo.revs('topic(%s) - obsolete()', opts['topic']) |
fef934b7ed86
topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2939
diff
changeset
|
1030 opts.setdefault('rev', []).extend(topicrevs) |
fef934b7ed86
topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2939
diff
changeset
|
1031 return orig(ui, repo, *args, **opts) |
fef934b7ed86
topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2939
diff
changeset
|
1032 |
1877
69077c65919d
topic: handle merge.update function signature change
Augie Fackler <raf@durin42.com>
parents:
1874
diff
changeset
|
1033 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
|
1034 matcher = kwargs.get('matcher') |
e67c526c0a25
update: calculate 'partial' as core does
Sean Farley <sean@farley.io>
parents:
1963
diff
changeset
|
1035 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
|
1036 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
|
1037 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
|
1038 ist0 = False |
1853
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1039 try: |
1877
69077c65919d
topic: handle merge.update function signature change
Augie Fackler <raf@durin42.com>
parents:
1874
diff
changeset
|
1040 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
|
1041 # 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
|
1042 # 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
|
1043 # 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
|
1044 # 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
|
1045 # running. |
2984
30f6030dca8f
topics: signal to the end user when a topic has been forgotten
Aurélien Campéas
parents:
2983
diff
changeset
|
1046 ot = repo.currenttopic |
3043
033e00be9ce4
topics: use stack rather than stackdata when one only wants the changeset count
Aurélien Campéas
parents:
3012
diff
changeset
|
1047 empty = stack.stack(repo, topic=ot).changesetcount == 0 |
2679
5156a67f66a6
topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2677
diff
changeset
|
1048 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
|
1049 isrebase = True |
2740
51afc979d88d
topic: rename the internal topic option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2733
diff
changeset
|
1050 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
|
1051 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
|
1052 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
|
1053 t = '' |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1054 pctx = repo[node] |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1055 if pctx.phase() > phases.public: |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
1056 t = pctx.topic() |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1057 with repo.vfs.open('topic', 'w') as f: |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1058 f.write(t) |
1853
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1059 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
|
1060 repo.ui.status(_("switching to topic %s\n") % t) |
2984
30f6030dca8f
topics: signal to the end user when a topic has been forgotten
Aurélien Campéas
parents:
2983
diff
changeset
|
1061 if ot and not t and empty: |
30f6030dca8f
topics: signal to the end user when a topic has been forgotten
Aurélien Campéas
parents:
2983
diff
changeset
|
1062 repo.ui.status(_('clearing empty topic "%s"\n') % ot) |
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
|
1063 elif ist0: |
2984
30f6030dca8f
topics: signal to the end user when a topic has been forgotten
Aurélien Campéas
parents:
2983
diff
changeset
|
1064 repo.ui.status(_("preserving the current topic '%s'\n") % ot) |
1853
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1065 return ret |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1066 finally: |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1067 wlock.release() |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1068 |
2793
fb317d218af0
topic: wrap 'update' in a more flexible way
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1069 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
|
1070 |
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
|
1071 thezeros = set(['t0', 'b0']) |
2795
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2793
diff
changeset
|
1072 backup = repo.ui.backupconfig('_internal', 'keep-topic') |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2793
diff
changeset
|
1073 try: |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2793
diff
changeset
|
1074 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
|
1075 repo.ui.setconfig('_internal', 'keep-topic', 'yes', |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2793
diff
changeset
|
1076 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
|
1077 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
|
1078 finally: |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2793
diff
changeset
|
1079 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
|
1080 |
1854
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1081 def _fixrebase(loaded): |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1082 if not loaded: |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1083 return |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1084 |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1085 def savetopic(ctx, extra): |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
1086 if ctx.topic(): |
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
1087 extra[constants.extrakey] = ctx.topic() |
1854
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1088 |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1089 def newmakeextrafn(orig, copiers): |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1090 return orig(copiers + [savetopic]) |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1091 |
2679
5156a67f66a6
topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2677
diff
changeset
|
1092 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
|
1093 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
|
1094 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
|
1095 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
|
1096 |
1969
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
1097 try: |
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
1098 rebase = extensions.find("rebase") |
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
1099 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
|
1100 # 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
|
1101 # 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
|
1102 # 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
|
1103 extensions.wrapcommand(rebase.cmdtable, 'rebase', setrebaseconfig) |
1969
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
1104 except KeyError: |
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
1105 pass |
1854
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1106 |
1946
72246b13bd72
patch: document the section about import/export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1945
diff
changeset
|
1107 ## 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
|
1108 |
1866
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
1109 def _exporttopic(seq, ctx): |
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
1110 topic = ctx.topic() |
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
1111 if topic: |
1917 | 1112 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
|
1113 return None |
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
1114 |
1867
c9cacc62fa17
patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1866
diff
changeset
|
1115 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
|
1116 if 'topic' in patchdata: |
c9cacc62fa17
patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1866
diff
changeset
|
1117 extra['topic'] = patchdata['topic'] |
c9cacc62fa17
patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1866
diff
changeset
|
1118 |
1948
54810b543bf4
patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1947
diff
changeset
|
1119 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
|
1120 """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
|
1121 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
|
1122 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
|
1123 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
|
1124 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
|
1125 patch.patchheadermap.append(('EXP-Topic', 'topic')) |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1126 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1127 ## preserve topic during split |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1128 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1129 def presplitupdatetopic(original, repo, ui, prev, ctx): |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1130 # Save topic of revision |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1131 topic = None |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1132 if util.safehasattr(ctx, 'topic'): |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1133 topic = ctx.topic() |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1134 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1135 # Update the working directory |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1136 original(repo, ui, prev, ctx) |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1137 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1138 # Restore the topic if need |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1139 if topic: |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1140 _changecurrenttopic(repo, topic) |