annotate hgext3rd/topic/__init__.py @ 6360:e959390490c2

branching: merge with stable
author Anton Shestakov <av6@dwimlabs.net>
date Fri, 09 Dec 2022 15:01:59 +0400
parents 453861da6922
children 573174ef1bbf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
1 # __init__.py - topic extension
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
2 #
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
3 # This software may be used and distributed according to the terms of the
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
4 # GNU General Public License version 2 or any later version.
1846
0b5b757ca812 docs: fix format of extension docstring
Matt Mackall <mpm@selenic.com>
parents: 1845
diff changeset
5 """support for topic branches
0b5b757ca812 docs: fix format of extension docstring
Matt Mackall <mpm@selenic.com>
parents: 1845
diff changeset
6
5798
87006dcf2bb7 doc: change topic phrase 'disappear' to 'fade out'
Chuck Tuffli <chuck@tuffli.net>
parents: 5742
diff changeset
7 Topic branches are lightweight branches which fade out when changes are
2011
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
3225
28fb347a5bf8 typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents: 3195
diff changeset
12 the way named branch work, except they eventually 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
3225
28fb347a5bf8 typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents: 3195
diff changeset
17 changesets on that topic (and, in some occurrence, bare changeset on same
2011
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
4069
a93b74f745a6 topic: update other occurrence of 't0' is 's0' in the code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4066
diff changeset
32 stack as 's#'. For example, 's1' refers to the root of your stack, 's2' to the
4065
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
33 second commits, etc. The 'hg stack' command show these number. 's0' can be used
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
34 to refer to the parent of the topic root. Updating using `hg up s0` will keep
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
35 the topic active.
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
36
2012
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
37 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
38 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
39 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
40 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
41 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
42 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
43 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
44 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
45 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
46
dc34d5317001 doc: add more details about the head checking
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2011
diff changeset
47 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
48 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
49 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
50
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
51 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
52 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
53
3026
e9935c2c4672 topic: rename the 'topic-mode' help subtopic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3025
diff changeset
54 topic-mode
e9935c2c4672 topic: rename the 'topic-mode' help subtopic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3025
diff changeset
55 ==========
3022
255e66783505 topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3021
diff changeset
56
255e66783505 topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3021
diff changeset
57 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
58 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
59
255e66783505 topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3021
diff changeset
60 [experimental]
255e66783505 topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3021
diff changeset
61 # 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
62 topic-mode = ignore # do nothing special (default)
3023
cc740c545776 topicmode: add new warning topicmode
Boris Feld <boris.feld@octobus.net>
parents: 3022
diff changeset
63 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
64 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
65 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
66 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
67 topic-mode = random-all # use a randomized generated topic (even for merge)
3157
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
68
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
69 Single head enforcing
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
70 =====================
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
71
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
72 The extensions come with an option to enforce that there is only one heads for
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
73 each name in the repository at any time.
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
74
3764
f0f9139016d8 topic: use preformatted block for config snippets documentation
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3725
diff changeset
75 ::
f0f9139016d8 topic: use preformatted block for config snippets documentation
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3725
diff changeset
76
3157
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
77 [experimental]
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
78 enforce-single-head = yes
3158
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
79
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
80 Publishing behavior
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
81 ===================
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
82
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
83 Topic vanish when changeset move to the public phases. Moving to the public
3225
28fb347a5bf8 typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents: 3195
diff changeset
84 phase usually happens on push, but it is possible to update that behavior. The
3158
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
85 server needs to have specific config for this.
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
86
3765
4aabc5c8b2af topic: dedent items about publishing behavior in docstring
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3764
diff changeset
87 * everything pushed become public (the default)::
3764
f0f9139016d8 topic: use preformatted block for config snippets documentation
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3725
diff changeset
88
5977
fa7f2e1cb504 topic: fix the help text to show how to disable publishing
Matt Harbison <matt_harbison@yahoo.com>
parents: 5952
diff changeset
89 [phases]
3765
4aabc5c8b2af topic: dedent items about publishing behavior in docstring
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3764
diff changeset
90 publish = yes
3764
f0f9139016d8 topic: use preformatted block for config snippets documentation
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3725
diff changeset
91
3765
4aabc5c8b2af topic: dedent items about publishing behavior in docstring
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3764
diff changeset
92 * nothing push turned public::
3158
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
93
5977
fa7f2e1cb504 topic: fix the help text to show how to disable publishing
Matt Harbison <matt_harbison@yahoo.com>
parents: 5952
diff changeset
94 [phases]
3765
4aabc5c8b2af topic: dedent items about publishing behavior in docstring
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3764
diff changeset
95 publish = no
3764
f0f9139016d8 topic: use preformatted block for config snippets documentation
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3725
diff changeset
96
3765
4aabc5c8b2af topic: dedent items about publishing behavior in docstring
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3764
diff changeset
97 * topic branches are not published, changeset without topic are::
3158
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
98
5977
fa7f2e1cb504 topic: fix the help text to show how to disable publishing
Matt Harbison <matt_harbison@yahoo.com>
parents: 5952
diff changeset
99 [phases]
3765
4aabc5c8b2af topic: dedent items about publishing behavior in docstring
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3764
diff changeset
100 publish = no
4aabc5c8b2af topic: dedent items about publishing behavior in docstring
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3764
diff changeset
101 [experimental]
4aabc5c8b2af topic: dedent items about publishing behavior in docstring
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 3764
diff changeset
102 topic.publish-bare-branch = yes
3159
90515d0bfb08 push: add a --publish flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3158
diff changeset
103
90515d0bfb08 push: add a --publish flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3158
diff changeset
104 In addition, the topic extension adds a ``--publish`` flag on :hg:`push`. When
90515d0bfb08 push: add a --publish flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3158
diff changeset
105 used, the pushed revisions are published if the push succeeds. It also applies
90515d0bfb08 push: add a --publish flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3158
diff changeset
106 to common revisions selected by the push.
4647
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
107
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
108 One can prevent any publishing to happens in a repository using::
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
109
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
110 [experimental]
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
111 topic.allow-publish = no
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
112
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
113 Server side visibility
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
114 ======================
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
115
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
116 Serving changesets with topics to clients without topic extension can get
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
117 confusing. Such clients will have multiple anonymous heads without a clear way
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
118 to distinguish them. They will also "lose" the canonical heads of the branch.
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
119
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
120 To avoid this confusion, server can be configured to only serve changesets with
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
121 topics to clients with the topic extension (version 9.3+). This might become
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
122 the default in future::
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
123
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
124 [experimental]
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
125 topic.server-gate-topic-changesets = yes
5601
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
126
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
127 Explicitly merging in the target branch
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
128 =======================================
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
129
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
130 By default, Mercurial will not let your merge a topic into its target branch if
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
131 that topic is already based on the head of that branch. In other word,
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
132 Mercurial will not let your create a merge that will eventually have two
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
133 parents in the same branches, one parent being the ancestors of the other
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
134 parent. This behavior can be lifted using the following config::
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
135
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
136 [experimental]
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
137 topic.linear-merge = allow-from-bare-branch
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
138
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
139 When this option is set to `allow-from-bare-branch`, it is possible to merge a
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
140 topic branch from a bare branch (commit an active topic (eg: public one))
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
141 regardless of the topology. The result would typically looks like that::
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
142
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
143 @ summary: resulting merge commit
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
144 |\\ branch: my-branch
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
145 | |
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
146 | o summary: some more change in a topic, the merge "target"
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
147 | | branch: my-branch
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
148 | | topic: my-topic
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
149 | |
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
150 | o summary: some change in a topic
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
151 |/ branch: my-branch
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
152 | topic: my-topic
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
153 |
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
154 o summary: previous head of the branch, the merge "source"
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
155 | branch: my-branch
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
156 """
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
157
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
158 from __future__ import absolute_import
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
159
3082
326e0ee1eed1 topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3071
diff changeset
160 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
161 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
162 import time
2986
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
163 import weakref
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
164
1848
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
165 from mercurial.i18n import _
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
166 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
167 bookmarks,
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
168 changelog,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
169 cmdutil,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
170 commands,
6334
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
171 configitems,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
172 context,
6206
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
173 encoding,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
174 error,
5221
af9f40236037 topics: fix auto-publish=abort with servers publishing bare branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5154
diff changeset
175 exchange,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
176 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
177 hg,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
178 localrepo,
2890
1e3d97486861 topics: import lock as lockmods
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2889
diff changeset
179 lock as lockmod,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
180 merge,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
181 namespaces,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
182 node,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
183 obsolete,
4942
acc7e27fa5c6 topic: drop compat.getmarkers() and use obsutil.getmarkers() directly
Anton Shestakov <av6@dwimlabs.net>
parents: 4921
diff changeset
184 obsutil,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
185 patch,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
186 phases,
4752
8a73a8df63b6 py3: convert opts keys to bytes before passing to core APIs
Martin von Zweigbergk <martinvonz@google.com>
parents: 4748
diff changeset
187 pycompat,
2464
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2428
diff changeset
188 registrar,
2889
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
189 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
190 templatefilters,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
191 util,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
192 )
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
193
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
194 from . import (
4531
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
195 common,
6318
3e488afe62f5 topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents: 6311
diff changeset
196 compat,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
197 constants,
3532
68e99d2c6267 prev: fix the breakage of `hg previous` from obsolete cset
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3447
diff changeset
198 destination,
68e99d2c6267 prev: fix the breakage of `hg previous` from obsolete cset
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3447
diff changeset
199 discovery,
3157
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
200 flow,
3532
68e99d2c6267 prev: fix the breakage of `hg previous` from obsolete cset
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3447
diff changeset
201 randomname,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
202 revset as topicrevset,
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
203 server,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
204 stack,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
205 topicmap,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
206 )
1843
0ba067a97d06 revset: add a topic() revset for querying topics
Augie Fackler <augie@google.com>
parents: 1842
diff changeset
207
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
208 cmdtable = {}
3971
9f8b99b3d9b5 topic: drop compat layer for `command`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3945
diff changeset
209 command = registrar.command(cmdtable)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
210 colortable = {b'topic.active': b'green',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
211 b'topic.list.unstablecount': b'red',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
212 b'topic.list.headcount.multiple': b'yellow',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
213 b'topic.list.behindcount': b'cyan',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
214 b'topic.list.behinderror': b'red',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
215 b'stack.index': b'yellow',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
216 b'stack.index.base': b'none dim',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
217 b'stack.desc.base': b'none dim',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
218 b'stack.shortnode.base': b'none dim',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
219 b'stack.state.base': b'dim',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
220 b'stack.state.clean': b'green',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
221 b'stack.index.current': b'cyan', # random pick
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
222 b'stack.state.current': b'cyan bold', # random pick
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
223 b'stack.desc.current': b'cyan', # random pick
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
224 b'stack.shortnode.current': b'cyan', # random pick
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
225 b'stack.state.orphan': b'red',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
226 b'stack.state.content-divergent': b'red',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
227 b'stack.state.phase-divergent': b'red',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
228 b'stack.summary.behindcount': b'cyan',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
229 b'stack.summary.behinderror': b'red',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
230 b'stack.summary.headcount.multiple': b'yellow',
2340
e6d3b83b306b topic: configure some default color for topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2339
diff changeset
231 # 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
232 # (first pick I could think off, update as needed
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
233 b'log.topic': b'green_background',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
234 }
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
235
6155
5bd5a7ab32d3 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6154
diff changeset
236 __version__ = b'0.25.0.dev'
3057
cb8ae3cb0bbc branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3040 3048
diff changeset
237
6276
48387e18f294 packaging: prepare evolve 10.5.2 and topic 0.24.1
Anton Shestakov <av6@dwimlabs.net>
parents: 6154
diff changeset
238 testedwith = b'4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2'
6146
74665d83fb3b branching: merge stable into default
Anton Shestakov <av6@dwimlabs.net>
parents: 6118
diff changeset
239 minimumhgversion = b'4.8'
4713
fbe7f35a6926 py3: make metadata values be byte strings as Mercurial expects
Martin von Zweigbergk <martinvonz@google.com>
parents: 4704
diff changeset
240 buglink = b'https://bz.mercurial-scm.org/'
1884
8a53f99d9061 testedwith: declare compatibility with Mercurial 3.7
Augie Fackler <raf@durin42.com>
parents: 1877
diff changeset
241
6334
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
242 configtable = {}
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
243 configitem = registrar.configitem(configtable)
3082
326e0ee1eed1 topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3071
diff changeset
244
6334
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
245 configitem(b'experimental', b'enforce-topic',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
246 default=False,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
247 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
248 configitem(b'experimental', b'enforce-single-head',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
249 default=False,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
250 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
251 configitem(b'experimental', b'topic-mode',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
252 default=None,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
253 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
254 configitem(b'experimental', b'topic.publish-bare-branch',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
255 default=False,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
256 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
257 configitem(b'experimental', b'topic.allow-publish',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
258 default=configitems.dynamicdefault,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
259 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
260 configitem(b'_internal', b'keep-topic',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
261 default=False,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
262 )
6336
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
263 # used for signaling that ctx.branch() shouldn't return fqbn even if topic is
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
264 # enabled for local repo
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
265 configitem(b'_internal', b'tns-disable-fqbn',
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
266 default=False,
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
267 )
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
268 # used for signaling that push will publish changesets
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
269 configitem(b'_internal', b'tns-publish',
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
270 default=False,
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
271 )
6334
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
272 configitem(b'experimental', b'topic-mode.server',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
273 default=configitems.dynamicdefault,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
274 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
275 configitem(b'experimental', b'topic.server-gate-topic-changesets',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
276 default=False,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
277 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
278 configitem(b'experimental', b'topic.linear-merge',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
279 default="reject",
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
280 )
3082
326e0ee1eed1 topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3071
diff changeset
281
6334
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
282 def extsetup(ui):
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
283 # register config that strictly belong to other code (thg, core, etc)
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
284 #
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
285 # To ensure all config items we used are registered, we register them if
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
286 # nobody else did so far.
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
287 extraitem = functools.partial(configitems._register, ui._knownconfig)
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
288 if (b'experimental' not in ui._knownconfig
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
289 or not ui._knownconfig[b'experimental'].get(b'thg.displaynames')):
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
290 extraitem(b'experimental', b'thg.displaynames',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
291 default=None,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
292 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
293 if (b'devel' not in ui._knownconfig
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
294 or not ui._knownconfig[b'devel'].get(b'random')):
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
295 extraitem(b'devel', b'randomseed',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
296 default=None,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
297 )
3082
326e0ee1eed1 topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3071
diff changeset
298
6240
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
299 def _contexttns(self, force=False):
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
300 if not force and not self.mutable():
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
301 return b'default'
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
302 cache = getattr(self._repo, '_tnscache', None)
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
303 # topic loaded, but not enabled (eg: multiple repo in the same process)
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
304 if cache is None:
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
305 return b'default'
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
306 if self.rev() is None:
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
307 # don't cache volatile ctx instances that aren't stored on-disk yet
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
308 return self.extra().get(b'topic-namespace', b'default')
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
309 tns = cache.get(self.rev())
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
310 if tns is None:
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
311 tns = self.extra().get(b'topic-namespace', b'default')
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
312 self._repo._tnscache[self.rev()] = tns
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
313 return tns
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
314
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
315 context.basectx.topic_namespace = _contexttns
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
316
2656
4a148ca3e80d topic: update the changectx method to respect phases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2655
diff changeset
317 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
318 if not (force or self.mutable()):
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
319 return b''
5701
5cbf9c2189fd topic: fix the newly added cache for repository without topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5687
diff changeset
320 cache = getattr(self._repo, '_topiccache', None)
5cbf9c2189fd topic: fix the newly added cache for repository without topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5687
diff changeset
321 # topic loaded, but not enabled (eg: multiple repo in the same process)
5cbf9c2189fd topic: fix the newly added cache for repository without topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5687
diff changeset
322 if cache is None:
5cbf9c2189fd topic: fix the newly added cache for repository without topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5687
diff changeset
323 return b''
6023
6c67219ce779 topic: don't cache topic of e.g. memctx in _topiccache (issue6500)
Anton Shestakov <av6@dwimlabs.net>
parents: 6017
diff changeset
324 if self.rev() is None:
6c67219ce779 topic: don't cache topic of e.g. memctx in _topiccache (issue6500)
Anton Shestakov <av6@dwimlabs.net>
parents: 6017
diff changeset
325 # don't cache volatile ctx instances that aren't stored on-disk yet
6c67219ce779 topic: don't cache topic of e.g. memctx in _topiccache (issue6500)
Anton Shestakov <av6@dwimlabs.net>
parents: 6017
diff changeset
326 return self.extra().get(constants.extrakey, b'')
5701
5cbf9c2189fd topic: fix the newly added cache for repository without topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5687
diff changeset
327 topic = cache.get(self.rev())
5680
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
328 if topic is None:
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
329 topic = self.extra().get(constants.extrakey, b'')
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
330 self._repo._topiccache[self.rev()] = topic
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
331 return topic
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
332
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
333 context.basectx.topic = _contexttopic
3235
8a772f0c54d9 topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3232
diff changeset
334
2744
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
335 def _contexttopicidx(self):
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
336 topic = self.topic()
4190
883e75e0a810 topicidx: stop assigning index number to obsolete changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4178
diff changeset
337 if not topic or self.obsolete():
4069
a93b74f745a6 topic: update other occurrence of 't0' is 's0' in the code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4066
diff changeset
338 # XXX we might want to include s0 here,
a93b74f745a6 topic: update other occurrence of 't0' is 's0' in the code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4066
diff changeset
339 # however s0 is related to 'currenttopic' which has no place here.
2744
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
340 return None
2915
b3abdb3d819e stack: replace 'getstack' with direct call to 'stack'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2912
diff changeset
341 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
342 try:
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
343 return revlist.index(self.rev())
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
344 except IndexError:
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
345 # 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
346 return None
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
347 context.basectx.topicidx = _contexttopicidx
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
348
6242
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
349 def _contextfqbn(self):
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
350 """return branch//namespace/topic of the changeset, also known as fully
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
351 qualified branch name
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
352 """
6268
63d6cc96557c topic: get branch from extra data in ctx.fqbn()
Anton Shestakov <av6@dwimlabs.net>
parents: 6266
diff changeset
353 branch = encoding.tolocal(self.extra()[b'branch'])
63d6cc96557c topic: get branch from extra data in ctx.fqbn()
Anton Shestakov <av6@dwimlabs.net>
parents: 6266
diff changeset
354 return common.formatfqbn(branch, self.topic_namespace(), self.topic())
6242
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
355
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
356 context.basectx.fqbn = _contextfqbn
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
357
4801
16c1398b0063 python3: prefix all regex to work with python 2 and 3
Raphaël Gomès <rgomes@octobus.net>
parents: 4791
diff changeset
358 stackrev = re.compile(br'^s\d+$')
16c1398b0063 python3: prefix all regex to work with python 2 and 3
Raphaël Gomès <rgomes@octobus.net>
parents: 4791
diff changeset
359 topicrev = re.compile(br'^t\d+$')
1904
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
360
4531
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
361 hastopicext = common.hastopicext
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
362
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
363 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
364 revs = None
4065
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
365 if stackrev.match(name):
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
366 idx = int(name[1:])
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
367 tname = topic = repo.currenttopic
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
368 if topic:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
369 ttype = b'topic'
4065
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
370 revs = list(stack.stack(repo, topic=topic))
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
371 else:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
372 ttype = b'branch'
4065
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
373 tname = branch = repo[None].branch()
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
374 revs = list(stack.stack(repo, branch=branch))
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
375 elif topicrev.match(name):
1904
f52c02bf47b7 stack: allow to refer to changeset using "t2" form
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1903
diff changeset
376 idx = int(name[1:])
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
377 ttype = b'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
378 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
379 if not tname:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
380 raise error.Abort(_(b'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
381 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
382
b933a8068c17 topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2668
diff changeset
383 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
384 try:
2712
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
385 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
386 except IndexError:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
387 if ttype == b'topic':
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
388 msg = _(b'cannot resolve "%s": %s "%s" has only %d changesets')
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
389 elif ttype == b'branch':
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
390 msg = _(b'cannot resolve "%s": %s "%s" has only %d non-public changesets')
2712
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
391 raise error.Abort(msg % (name, ttype, tname, len(revs) - 1))
4628
c4097632a1a3 topic: drop support for accessing csets in branch stack using bxx (issue6119)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 4581
diff changeset
392 # t0 or s0 can be None
2712
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
393 if r == -1 and idx == 0:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
394 msg = _(b'the %s "%s" has no %s')
2712
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
395 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
396 return [repo[r].node()]
2008
e3ddd696394f flake8: fix E713 style
Sean Farley <sean@farley.io>
parents: 2007
diff changeset
397 if name not in repo.topics:
2000
c413e7c96265 init: guard _namemap with repo.topics (issue5351)
timeless@gmail.com
parents: 1999
diff changeset
398 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
399 node = repo.changelog.node
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
400 return [node(rev) for rev in repo.revs(b'topic(%s)', name)]
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
401
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
402 def _nodemap(repo, node):
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
403 ctx = repo[node]
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
404 t = ctx.topic()
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
405 if t and ctx.phase() > phases.public:
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
406 return [t]
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
407 return []
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
408
5685
7ee15bf011d6 topic: wrap branch call during summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5680
diff changeset
409 def wrap_summary(orig, ui, repo, *args, **kwargs):
7ee15bf011d6 topic: wrap branch call during summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5680
diff changeset
410 with discovery.override_context_branch(repo) as repo:
7ee15bf011d6 topic: wrap branch call during summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5680
diff changeset
411 return orig(ui, repo, *args, **kwargs)
7ee15bf011d6 topic: wrap branch call during summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5680
diff changeset
412
1871
58ef5699fb35 merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1867
diff changeset
413 def uisetup(ui):
1941
7eb737b7a902 destination: rename 'setupdest' to 'modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1939
diff changeset
414 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
415 discovery.modsetup(ui)
1952
665d6322994e uisetup: add call to 'topicmap.modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1951
diff changeset
416 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
417 setupimportexport(ui)
1871
58ef5699fb35 merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1867
diff changeset
418
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
419 extensions.afterloaded(b'rebase', _fixrebase)
1951
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
420
3159
90515d0bfb08 push: add a --publish flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3158
diff changeset
421 flow.installpushflag(ui)
90515d0bfb08 push: add a --publish flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3158
diff changeset
422
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
423 entry = extensions.wrapcommand(commands.table, b'commit', commitwrap)
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
424 entry[1].append((b't', b'topic', b'',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
425 _(b"use specified topic"), _(b'TOPIC')))
1951
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
426
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
427 entry = extensions.wrapcommand(commands.table, b'push', pushoutgoingwrap)
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
428 entry[1].append((b't', b'topic', b'',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
429 _(b"topic to push"), _(b'TOPIC')))
2983
c0de0010ec30 topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 2982
diff changeset
430
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
431 entry = extensions.wrapcommand(commands.table, b'outgoing',
2983
c0de0010ec30 topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 2982
diff changeset
432 pushoutgoingwrap)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
433 entry[1].append((b't', b'topic', b'',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
434 _(b"topic to push"), _(b'TOPIC')))
2982
fef934b7ed86 topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 2939
diff changeset
435
1951
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
436 extensions.wrapfunction(cmdutil, 'buildcommittext', committextwrap)
5608
d9ee2706487f compat: add support for upstream rename of merge.update() to _update()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5531
diff changeset
437 if util.safehasattr(merge, '_update'):
d9ee2706487f compat: add support for upstream rename of merge.update() to _update()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5531
diff changeset
438 extensions.wrapfunction(merge, '_update', mergeupdatewrap)
d9ee2706487f compat: add support for upstream rename of merge.update() to _update()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5531
diff changeset
439 else:
d9ee2706487f compat: add support for upstream rename of merge.update() to _update()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5531
diff changeset
440 # hg <= 5.5 (2c86b9587740)
d9ee2706487f compat: add support for upstream rename of merge.update() to _update()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5531
diff changeset
441 extensions.wrapfunction(merge, 'update', mergeupdatewrap)
4069
a93b74f745a6 topic: update other occurrence of 't0' is 's0' in the code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4066
diff changeset
442 # We need to check whether t0 or b0 or s0 is passed to override the default update
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
443 # 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
444 # 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
445 # plug into logic for this into mergemod.update().
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
446 extensions.wrapcommand(commands.table, b'update', checkt0)
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
447
5685
7ee15bf011d6 topic: wrap branch call during summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5680
diff changeset
448 extensions.wrapcommand(commands.table, b'summary', wrap_summary)
7ee15bf011d6 topic: wrap branch call during summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5680
diff changeset
449
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
450 try:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
451 evolve = extensions.find(b'evolve')
2762
610581a2fb74 commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2750
diff changeset
452 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
453 presplitupdatetopic)
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
454 except (KeyError, AttributeError):
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
455 pass
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
456
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
457 cmdutil.summaryhooks.add(b'topic', summaryhook)
1951
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
458
3281
703e8398ac57 topic: move function wrapping from reposetup to uisetup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3235
diff changeset
459 # Wrap workingctx extra to return the topic name
703e8398ac57 topic: move function wrapping from reposetup to uisetup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3235
diff changeset
460 extensions.wrapfunction(context.workingctx, '__init__', wrapinit)
703e8398ac57 topic: move function wrapping from reposetup to uisetup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3235
diff changeset
461 # Wrap changelog.add to drop empty topic
703e8398ac57 topic: move function wrapping from reposetup to uisetup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3235
diff changeset
462 extensions.wrapfunction(changelog.changelog, 'add', wrapadd)
5221
af9f40236037 topics: fix auto-publish=abort with servers publishing bare branches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5154
diff changeset
463 # Make exchange._checkpublish handle experimental.topic.publish-bare-branch
5231
1a81bbc94d45 topic: check that exchange._checkpublish() exists before wrapping it
Anton Shestakov <av6@dwimlabs.net>
parents: 5221
diff changeset
464 if util.safehasattr(exchange, '_checkpublish'):
1a81bbc94d45 topic: check that exchange._checkpublish() exists before wrapping it
Anton Shestakov <av6@dwimlabs.net>
parents: 5221
diff changeset
465 extensions.wrapfunction(exchange, '_checkpublish',
1a81bbc94d45 topic: check that exchange._checkpublish() exists before wrapping it
Anton Shestakov <av6@dwimlabs.net>
parents: 5221
diff changeset
466 flow.replacecheckpublish)
5232
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
467 else:
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
468 # hg <= 4.8 (33d30fb1e4ae)
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
469 try:
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
470 evolve = extensions.find(b'evolve')
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
471 extensions.wrapfunction(evolve.safeguard, '_checkpublish',
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
472 flow.replacecheckpublish)
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
473 except (KeyError, AttributeError):
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
474 pass
1951
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
475
6117
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
476 try:
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
477 histedit = extensions.find(b'histedit')
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
478 except KeyError:
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
479 pass
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
480 else:
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
481 # Make histedit preserve topics of edited commits
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
482 extensions.wrapfunction(histedit.histeditaction, 'applychange',
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
483 applychangewrap)
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
484
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
485 server.setupserver(ui)
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
486
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
487 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
488 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
489 return # this can be a peer in the ssh case (puzzling)
2007
aa3b6cfdf493 flake8: fix E301 style
Sean Farley <sean@farley.io>
parents: 2000
diff changeset
490
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
491 repo = repo.unfiltered()
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
492
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
493 if repo.ui.config(b'experimental', b'thg.displaynames') is None:
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
494 repo.ui.setconfig(b'experimental', b'thg.displaynames', b'topics',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
495 source=b'topic-extension')
2339
f641cccbd119 topic: automatically configure thg to display topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2288
diff changeset
496
5688
b1e057fb7837 topic: disable inmemory rebase to avoid losing the topic
Matt Harbison <matt_harbison@yahoo.com>
parents: 5644
diff changeset
497 # BUG: inmemory rebase drops the topic, and fails to switch to the new
b1e057fb7837 topic: disable inmemory rebase to avoid losing the topic
Matt Harbison <matt_harbison@yahoo.com>
parents: 5644
diff changeset
498 # topic. Disable inmemory rebase for now.
b1e057fb7837 topic: disable inmemory rebase to avoid losing the topic
Matt Harbison <matt_harbison@yahoo.com>
parents: 5644
diff changeset
499 if repo.ui.configbool(b'rebase', b'experimental.inmemory'):
b1e057fb7837 topic: disable inmemory rebase to avoid losing the topic
Matt Harbison <matt_harbison@yahoo.com>
parents: 5644
diff changeset
500 repo.ui.setconfig(b'rebase', b'experimental.inmemory', b'False',
b1e057fb7837 topic: disable inmemory rebase to avoid losing the topic
Matt Harbison <matt_harbison@yahoo.com>
parents: 5644
diff changeset
501 source=b'topic-extension')
b1e057fb7837 topic: disable inmemory rebase to avoid losing the topic
Matt Harbison <matt_harbison@yahoo.com>
parents: 5644
diff changeset
502
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
503 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
504
4531
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
505 # attribute for other code to distinct between repo with topic and repo without
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
506 hastopicext = True
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
507
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
508 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
509 caps = super(topicrepo, self)._restrictcapabilities(caps)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
510 caps.add(b'topics')
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
511 caps.add(b'topics-namespaces')
5251
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
512 if self.ui.configbool(b'phases', b'publish'):
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
513 mode = b'all'
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
514 elif self.ui.configbool(b'experimental',
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
515 b'topic.publish-bare-branch'):
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
516 mode = b'auto'
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
517 else:
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
518 mode = b'none'
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
519 caps.add(b'ext-topics-publish=%s' % mode)
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
520 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
521
1858
4ab1b854ce4e topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents: 1857
diff changeset
522 def commit(self, *args, **kwargs):
5007
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
523 configoverride = util.nullcontextmanager()
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
524 if self.currenttopic != self[b'.'].topic():
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
525 # bypass the core "nothing changed" logic
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
526 configoverride = self.ui.configoverride({
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
527 (b'ui', b'allowemptycommit'): True
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
528 })
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
529 with configoverride:
2288
b6ea9049693d topic: directly use "super" call
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2012
diff changeset
530 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
531
4842
ee0866a279da topic: fix some API to make it more robust
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 4790
diff changeset
532 def commitctx(self, ctx, *args, **kwargs):
1855
f241a00e93a7 topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents: 1854
diff changeset
533 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
534 current = self.currenttopic
f241a00e93a7 topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents: 1854
diff changeset
535 if current:
f241a00e93a7 topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents: 1854
diff changeset
536 ctx.extra()[constants.extrakey] = current
4842
ee0866a279da topic: fix some API to make it more robust
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 4790
diff changeset
537 return super(topicrepo, self).commitctx(ctx, *args, **kwargs)
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
538
5680
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
539 @util.propertycache
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
540 def _tnscache(self):
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
541 return {}
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
542
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
543 @property
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
544 def topic_namespaces(self):
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
545 if self._topic_namespaces is not None:
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
546 return self._topic_namespaces
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
547 namespaces = set([self.currenttns])
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
548 for c in self.set(b'not public()'):
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
549 namespaces.add(c.topic_namespace())
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
550 self._topic_namespaces = namespaces
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
551 return namespaces
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
552
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
553 @property
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
554 def currenttns(self):
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
555 return self.vfs.tryread(b'topic-namespace') or b'default'
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
556
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
557 @util.propertycache
5680
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
558 def _topiccache(self):
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
559 return {}
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
560
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
561 @property
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
562 def topics(self):
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
563 if self._topics is not None:
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
564 return self._topics
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
565 topics = set([b'', self.currenttopic])
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
566 for c in self.set(b'not public()'):
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
567 topics.add(c.topic())
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
568 topics.remove(b'')
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
569 self._topics = topics
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
570 return topics
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
571
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
572 @property
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
573 def currenttopic(self):
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
574 return self.vfs.tryread(b'topic')
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
575
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
576 # overwritten at the instance level by topicmap.py
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
577 _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
578
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
579 def branchmap(self, topic=None, convertbm=False):
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
580 if topic is None:
3880
28dadd024299 topic: use self instead of repo in topicrepo methods
Anton Shestakov <av6@dwimlabs.net>
parents: 3834
diff changeset
581 topic = getattr(self, '_autobranchmaptopic', False)
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
582 topicfilter = topicmap.topicfilter(self.filtername)
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
583 if not topic or topicfilter == self.filtername:
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
584 return super(topicrepo, self).branchmap()
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
585 bm = self.filtered(topicfilter).branchmap()
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
586 if convertbm:
6333
f4ffe1e67a9b topic: move compatibility for branchcache._entries to topic/compat.py
Anton Shestakov <av6@dwimlabs.net>
parents: 6320
diff changeset
587 entries = compat.bcentries(bm)
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
588 for key in list(entries):
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
589 branch, tns, topic = common.parsefqbn(key)
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
590 if topic:
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
591 value = entries.pop(key)
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
592 # we lose namespace when converting to ":" format
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
593 key = b'%s:%s' % (branch, topic)
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
594 entries[key] = value
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
595 return bm
1889
d9b929bcc3ad topicmap: ensure that 'served' view is updated with topicmap
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1888
diff changeset
596
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
597 def branchmaptns(self, topic=None):
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
598 """branchmap using fqbn as keys"""
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
599 if topic is None:
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
600 topic = getattr(self, '_autobranchmaptopic', False)
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
601 topicfilter = topicmap.topicfilter(self.filtername)
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
602 if not topic or topicfilter == self.filtername:
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
603 return super(topicrepo, self).branchmap()
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
604 return self.filtered(topicfilter).branchmap()
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
605
4704
5f90eb8fd63c evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4669
diff changeset
606 def branchheads(self, branch=None, start=None, closed=False):
5f90eb8fd63c evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4669
diff changeset
607 if branch is None:
5f90eb8fd63c evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4669
diff changeset
608 branch = self[None].branch()
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
609 branch = common.formatfqbn(branch, self.currenttns, self.currenttopic)
4704
5f90eb8fd63c evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4669
diff changeset
610 return super(topicrepo, self).branchheads(branch=branch,
5f90eb8fd63c evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4669
diff changeset
611 start=start,
5f90eb8fd63c evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4669
diff changeset
612 closed=closed)
5f90eb8fd63c evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4669
diff changeset
613
6360
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
614 def invalidatecaches(self):
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
615 self._topiccache.clear()
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
616 super(topicrepo, self).invalidatecaches()
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
617
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
618 def invalidatevolatilesets(self):
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
619 # XXX we might be able to move this to something invalidated less often
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
620 super(topicrepo, self).invalidatevolatilesets()
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
621 self._topic_namespaces = None
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
622 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
623
6360
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
624 def peer(self, *args, **kwargs):
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
625 peer = super(topicrepo, self).peer(*args, **kwargs)
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
626 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
627 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
628 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
629 usetopic = not self._repo.publishing()
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
630 return self._repo.branchmap(topic=usetopic, convertbm=usetopic)
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
631
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
632 def branchmaptns(self):
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
633 usetopic = not self._repo.publishing()
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
634 return self._repo.branchmaptns(topic=usetopic)
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
635 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
636 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
637
2989
53246d237373 topic: skip topic movement message during strip
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2986
diff changeset
638 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
639 ctr = self.currenttransaction()
2989
53246d237373 topic: skip topic movement message during strip
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2986
diff changeset
640 tr = super(topicrepo, self).transaction(desc, *a, **k)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
641 if desc in (b'strip', b'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
642 return tr
2986
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
643
3158
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
644 reporef = weakref.ref(self)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
645 if self.ui.configbool(b'experimental', b'enforce-single-head'):
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
646 if util.safehasattr(tr, '_validator'):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
647 # hg <= 5.3 (36f08ae87ef6)
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
648 origvalidator = tr._validator
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
649
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
650 def _validate(tr2):
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
651 repo = reporef()
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
652 flow.enforcesinglehead(repo, tr2)
3157
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
653
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
654 def validator(tr2):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
655 _validate(tr2)
6306
075f365a53cf topic: remove validator safeguard that wasn't safeguarding anything
Anton Shestakov <av6@dwimlabs.net>
parents: 6305
diff changeset
656 return origvalidator(tr2)
4123
119fced5a891 topic: add a compatibility to access transaction's validator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4117
diff changeset
657
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
658 if util.safehasattr(tr, '_validator'):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
659 # hg <= 5.3 (36f08ae87ef6)
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
660 tr._validator = validator
4123
119fced5a891 topic: add a compatibility to access transaction's validator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4117
diff changeset
661 else:
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
662 tr.addvalidator(b'000-enforce-single-head', _validate)
3157
f286eefbd20d topic: add an option to enforce a single head per name in a repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3150
diff changeset
663
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
664 topicmodeserver = self.ui.config(b'experimental',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
665 b'topic-mode.server', b'ignore')
5930
8d36bfe9968a topic: add more variables to make a condition fit on one line
Anton Shestakov <av6@dwimlabs.net>
parents: 5919
diff changeset
666 publishbare = self.ui.configbool(b'experimental',
8d36bfe9968a topic: add more variables to make a condition fit on one line
Anton Shestakov <av6@dwimlabs.net>
parents: 5919
diff changeset
667 b'topic.publish-bare-branch')
8d36bfe9968a topic: add more variables to make a condition fit on one line
Anton Shestakov <av6@dwimlabs.net>
parents: 5919
diff changeset
668 ispush = desc.startswith((b'push', b'serve'))
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
669 if (topicmodeserver != b'ignore' and ispush):
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
670 if util.safehasattr(tr, '_validator'):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
671 # hg <= 5.3 (36f08ae87ef6)
4123
119fced5a891 topic: add a compatibility to access transaction's validator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4117
diff changeset
672 origvalidator = tr._validator
3235
8a772f0c54d9 topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3232
diff changeset
673
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
674 def _validate(tr2):
3235
8a772f0c54d9 topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3232
diff changeset
675 repo = reporef()
8a772f0c54d9 topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3232
diff changeset
676 flow.rejectuntopicedchangeset(repo, tr2)
8a772f0c54d9 topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3232
diff changeset
677
8a772f0c54d9 topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3232
diff changeset
678 def validator(tr2):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
679 _validate(tr2)
3235
8a772f0c54d9 topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3232
diff changeset
680 return origvalidator(tr2)
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
681
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
682 if util.safehasattr(tr, '_validator'):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
683 # hg <= 5.3 (36f08ae87ef6)
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
684 tr._validator = validator
4123
119fced5a891 topic: add a compatibility to access transaction's validator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4117
diff changeset
685 else:
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
686 tr.addvalidator(b'000-reject-untopiced', _validate)
3235
8a772f0c54d9 topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3232
diff changeset
687
5930
8d36bfe9968a topic: add more variables to make a condition fit on one line
Anton Shestakov <av6@dwimlabs.net>
parents: 5919
diff changeset
688 elif publishbare and ispush:
3158
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
689 origclose = tr.close
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
690 trref = weakref.ref(tr)
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
691
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
692 def close():
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
693 repo = reporef()
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
694 tr2 = trref()
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
695 flow.publishbarebranch(repo, tr2)
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
696 origclose()
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
697 tr.close = close
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
698 allow_publish = self.ui.configbool(b'experimental',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
699 b'topic.allow-publish',
4647
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
700 True)
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
701 if not allow_publish:
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
702 if util.safehasattr(tr, '_validator'):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
703 # hg <= 5.3 (36f08ae87ef6)
4647
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
704 origvalidator = tr._validator
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
705
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
706 def _validate(tr2):
4647
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
707 repo = reporef()
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
708 flow.reject_publish(repo, tr2)
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
709
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
710 def validator(tr2):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
711 _validate(tr2)
4647
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
712 return origvalidator(tr2)
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
713
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
714 if util.safehasattr(tr, '_validator'):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
715 # hg <= 5.3 (36f08ae87ef6)
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
716 tr._validator = validator
4647
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
717 else:
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
718 tr.addvalidator(b'000-reject-publish', _validate)
3158
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
719
2988
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
720 # real transaction start
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
721 ct = self.currenttopic
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
722 if not ct:
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
723 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
724 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
725
2986
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
726 reporef = weakref.ref(self)
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
727
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
728 def currenttopicempty(tr):
3225
28fb347a5bf8 typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents: 3195
diff changeset
729 # check active topic emptiness
2986
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
730 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
731 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
732 empty = csetcount == 0
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
733 if empty and not ctwasempty:
5924
16f3fb304285 topic: add a 'topic.active' label to messages with active topic
Anton Shestakov <av6@dwimlabs.net>
parents: 5922
diff changeset
734 ui.status(b"active topic '%s' is now empty\n"
16f3fb304285 topic: add a 'topic.active' label to messages with active topic
Anton Shestakov <av6@dwimlabs.net>
parents: 5922
diff changeset
735 % ui.label(ct, b'topic.active'))
4124
23658110ab26 topic: add a compatibility to access transaction's names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4123
diff changeset
736 trnames = getattr(tr, 'names', getattr(tr, '_names', ()))
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
737 if (b'phase' in trnames
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
738 or any(n.startswith(b'push-response')
4124
23658110ab26 topic: add a compatibility to access transaction's names
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4123
diff changeset
739 for n in trnames)):
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
740 ui.status(_(b"(use 'hg topic --clear' to clear it if needed)\n"))
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
741 hint = _(b"(see 'hg help topics' for more information)\n")
2988
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
742 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
743 if csetcount == 1:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
744 msg = _(b"active topic '%s' grew its first changeset\n%s")
5924
16f3fb304285 topic: add a 'topic.active' label to messages with active topic
Anton Shestakov <av6@dwimlabs.net>
parents: 5922
diff changeset
745 ui.status(msg % (ui.label(ct, b'topic.active'), hint))
2988
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
746 else:
5132
fb5f49be3c90 topic: use `%d` for integers instead of `%s` on py3
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5110
diff changeset
747 msg = _(b"active topic '%s' grew its %d first changesets\n%s")
5924
16f3fb304285 topic: add a 'topic.active' label to messages with active topic
Anton Shestakov <av6@dwimlabs.net>
parents: 5922
diff changeset
748 ui.status(msg % (ui.label(ct, b'topic.active'), csetcount, hint))
2986
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
749
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
750 tr.addpostclose(b'signalcurrenttopicempty', currenttopicempty)
2986
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
751 return tr
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
752
1857
a506ed8ab8da topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents: 1856
diff changeset
753 repo.__class__ = topicrepo
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
754 repo._topic_namespaces = None
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
755 repo._topics = None
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
756 if util.safehasattr(repo, 'names'):
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
757 repo.names.addnamespace(namespaces.namespace(
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
758 b'topics', b'topic', namemap=_namemap, nodemap=_nodemap,
1857
a506ed8ab8da topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents: 1856
diff changeset
759 listnames=lambda repo: repo.topics))
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
760
5183
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
761 templatekeyword = registrar.templatekeyword()
4152
fb22c7a6ca8b topic: add topicidx template keyword
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4126
diff changeset
762
5183
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
763 @templatekeyword(b'topic', requires={b'ctx'})
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
764 def topickw(context, mapping):
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
765 """:topic: String. The topic of the changeset"""
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
766 ctx = context.resource(mapping, b'ctx')
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
767 return ctx.topic()
3384
2b06f144b6e0 topics: add a new templatekeyword `topic`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3372
diff changeset
768
5183
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
769 @templatekeyword(b'topicidx', requires={b'ctx'})
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
770 def topicidxkw(context, mapping):
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
771 """:topicidx: Integer. Index of the changeset as a stack alias"""
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
772 ctx = context.resource(mapping, b'ctx')
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
773 return ctx.topicidx()
4152
fb22c7a6ca8b topic: add topicidx template keyword
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4126
diff changeset
774
6241
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
775 @templatekeyword(b'topic_namespace', requires={b'ctx'})
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
776 def topicnamespacekw(context, mapping):
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
777 """:topic_namespace: String. The topic namespace of the changeset"""
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
778 ctx = context.resource(mapping, b'ctx')
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
779 return ctx.topic_namespace()
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
780
6243
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
781 @templatekeyword(b'fqbn', requires={b'ctx'})
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
782 def fqbnkw(context, mapping):
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
783 """:fqbn: String. The branch//namespace/topic of the changeset"""
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
784 ctx = context.resource(mapping, b'ctx')
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
785 return ctx.fqbn()
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
786
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
787 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
788 orig(self, repo, *args, **kwargs)
4532
659b6f548fc1 topic: only wrap workingctx.__init__ for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4531
diff changeset
789 if not hastopicext(repo):
659b6f548fc1 topic: only wrap workingctx.__init__ for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4531
diff changeset
790 return
6240
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
791 if b'topic-namespace' not in self._extra:
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
792 if getattr(repo, 'currenttns', b''):
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
793 self._extra[b'topic-namespace'] = repo.currenttns
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
794 else:
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
795 # Default value will be dropped from extra by another hack at the changegroup level
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
796 self._extra[b'topic-namespace'] = b'default'
4125
865c33c16508 topic: respect preexisting 'topic' value on workingcommitctx
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4124
diff changeset
797 if constants.extrakey not in self._extra:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
798 if getattr(repo, 'currenttopic', b''):
4125
865c33c16508 topic: respect preexisting 'topic' value on workingcommitctx
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4124
diff changeset
799 self._extra[constants.extrakey] = repo.currenttopic
865c33c16508 topic: respect preexisting 'topic' value on workingcommitctx
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4124
diff changeset
800 else:
865c33c16508 topic: respect preexisting 'topic' value on workingcommitctx
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4124
diff changeset
801 # Empty key will be dropped from extra by another hack at the changegroup level
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
802 self._extra[constants.extrakey] = b''
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
803
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
804 def wrapadd(orig, cl, manifest, files, desc, transaction, p1, p2, user,
4646
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
805 date=None, extra=None, p1copies=None, p2copies=None,
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
806 filesadded=None, filesremoved=None):
6240
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
807 if b'topic-namespace' in extra and extra[b'topic-namespace'] == b'default':
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
808 extra = extra.copy()
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
809 del extra[b'topic-namespace']
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
810 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
811 extra = extra.copy()
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
812 del extra[constants.extrakey]
4522
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
813 # hg <= 4.9 (0e41f40b01cc)
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
814 kwargs = {}
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
815 if p1copies is not None:
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
816 kwargs['p1copies'] = p1copies
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
817 if p2copies is not None:
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
818 kwargs['p2copies'] = p2copies
4646
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
819 # hg <= 5.0 (f385ba70e4af)
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
820 if filesadded is not None:
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
821 kwargs['filesadded'] = filesadded
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
822 if filesremoved is not None:
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
823 kwargs['filesremoved'] = filesremoved
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
824 return orig(cl, manifest, files, desc, transaction, p1, p2, user,
4522
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
825 date=date, extra=extra, **kwargs)
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
826
6117
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
827 def applychangewrap(orig, self):
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
828 orig(self)
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
829 repo = self.repo
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
830 rulectx = repo[self.node]
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
831
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
832 topic = None
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
833 if util.safehasattr(rulectx, 'topic'):
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
834 topic = rulectx.topic()
6118
5d1bfde39b95 topic: also make histedit clear the current topic if needed
Simon Sapin <simon.sapin@octobus.net>
parents: 6117
diff changeset
835 _changecurrenttopic(repo, topic)
6117
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
836
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
837
2924
430fb1758d28 topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2923
diff changeset
838 # 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
839 revsetpredicate = topicrevset.revsetpredicate
430fb1758d28 topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2923
diff changeset
840
4715
12c8b24757f4 py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents: 4713
diff changeset
841 @command(b'topics', [
12c8b24757f4 py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents: 4713
diff changeset
842 (b'', b'clear', False, b'clear active topic if any'),
12c8b24757f4 py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents: 4713
diff changeset
843 (b'r', b'rev', [], b'revset of existing revisions', _(b'REV')),
12c8b24757f4 py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents: 4713
diff changeset
844 (b'l', b'list', False, b'show the stack of changeset in the topic'),
12c8b24757f4 py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents: 4713
diff changeset
845 (b'', b'age', False, b'show when you last touched the topics'),
12c8b24757f4 py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents: 4713
diff changeset
846 (b'', b'current', None, b'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
847 ] + commands.formatteropts,
4921
a7c01a2a3974 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4894 4914
diff changeset
848 _(b'hg topics [OPTION]... [-r REV]... [TOPIC]'),
6305
77ce98287dc2 topic: drop helpcategory 4.7 compat, use helpcategory keyword directly
Anton Shestakov <av6@dwimlabs.net>
parents: 6304
diff changeset
849 helpcategory=registrar.command.CATEGORY_CHANGE_ORGANIZATION,
77ce98287dc2 topic: drop helpcategory 4.7 compat, use helpcategory keyword directly
Anton Shestakov <av6@dwimlabs.net>
parents: 6304
diff changeset
850 )
2991
f4956eb3a456 topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2990
diff changeset
851 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
852 """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
853
2923
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
854 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
855
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
856 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
857
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
858 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
859
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
860 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
861
2923
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
862 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
863
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
864 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
865
2923
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
866 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
867
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
868 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
869
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
870 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
871
2923
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
872 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
873
2993
725b660d9886 topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2992
diff changeset
874 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
875 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
876
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
877 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
878
2717
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
879 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
880
2869
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
881 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
882 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
883 active topic, you can do:
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
884 `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
885
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
886 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
887
2991
f4956eb3a456 topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2990
diff changeset
888 clear = opts.get('clear')
f4956eb3a456 topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2990
diff changeset
889 list = opts.get('list')
f4956eb3a456 topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2990
diff changeset
890 rev = opts.get('rev')
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
891 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
892 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
893
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
894 if current and topic:
6318
3e488afe62f5 topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents: 6311
diff changeset
895 raise compat.InputError(_(b"cannot use --current when setting a topic"))
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
896 if current and clear:
6318
3e488afe62f5 topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents: 6311
diff changeset
897 raise compat.InputError(_(b"cannot use --current and --clear"))
2868
e46b68547017 topic: make --clear + topicname invalid
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2867
diff changeset
898 if clear and topic:
6318
3e488afe62f5 topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents: 6311
diff changeset
899 raise compat.InputError(_(b"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
900 if age and topic:
6318
3e488afe62f5 topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents: 6311
diff changeset
901 raise compat.InputError(_(b"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
902
6320
0c780d972350 topic: use check_incompatible_arguments() for --list with --clear or --rev
Anton Shestakov <av6@dwimlabs.net>
parents: 6319
diff changeset
903 compat.check_incompatible_arguments(opts, 'list', ('clear', 'rev'))
0c780d972350 topic: use check_incompatible_arguments() for --list with --clear or --rev
Anton Shestakov <av6@dwimlabs.net>
parents: 6319
diff changeset
904
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
905 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
906 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
907 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
908
2889
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
909 if topic:
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
910 topic = topic.strip()
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
911 if not topic:
6319
8c664ed9c103 topic: use compat.InputError for invalid topic names
Anton Shestakov <av6@dwimlabs.net>
parents: 6318
diff changeset
912 raise compat.InputError(_(b"topic names cannot consist entirely of whitespace"))
2889
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
913 # Have some restrictions on the topic name just like bookmark name
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
914 scmutil.checknewlabel(repo, topic, b'topic')
2889
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
915
6206
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
916 helptxt = _(b"topic names can only consist of alphanumeric, '-'"
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
917 b" '_' and '.' characters")
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
918 try:
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
919 utopic = encoding.unifromlocal(topic)
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
920 except error.Abort:
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
921 # Maybe we should allow these topic names as well, as long as they
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
922 # don't break any other rules
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
923 utopic = ''
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
924 rmatch = re.match(r'[-_.\w]+', utopic, re.UNICODE)
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
925 if not utopic or not rmatch or rmatch.group(0) != utopic:
6319
8c664ed9c103 topic: use compat.InputError for invalid topic names
Anton Shestakov <av6@dwimlabs.net>
parents: 6318
diff changeset
926 raise compat.InputError(_(b"invalid topic name: '%s'") % topic, hint=helptxt)
3652
81985b9d3e74 topic-ext: restrict the format of topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3614
diff changeset
927
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
928 if list:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
929 ui.pager(b'topics')
1990
71410fa2c253 stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1989
diff changeset
930 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
931 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
932 if not topic:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
933 raise error.Abort(_(b'no active topic to list'))
4752
8a73a8df63b6 py3: convert opts keys to bytes before passing to core APIs
Martin von Zweigbergk <martinvonz@google.com>
parents: 4748
diff changeset
934 return stack.showstack(ui, repo, topic=topic,
8a73a8df63b6 py3: convert opts keys to bytes before passing to core APIs
Martin von Zweigbergk <martinvonz@google.com>
parents: 4748
diff changeset
935 opts=pycompat.byteskwargs(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
936
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
937 if touchedrevs:
1851
67d53e8e0c1a topic: only require obsolete support for --change
Matt Mackall <mpm@selenic.com>
parents: 1850
diff changeset
938 if not obsolete.isenabled(repo, obsolete.createmarkersopt):
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
939 raise error.Abort(_(b'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
940 if clear:
2e3f63f4a519 topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2644
diff changeset
941 topic = None
2869
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
942 elif opts.get('current'):
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
943 topic = repo.currenttopic
2645
2e3f63f4a519 topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2644
diff changeset
944 elif not topic:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
945 raise error.Abort(b'changing topic requires a topic name or --clear')
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
946 if repo.revs(b'%ld and public()', touchedrevs):
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
947 raise error.Abort(b"can't change topic of a public change")
3124
6ef274e01f64 flake8: rename some ambiguous identifier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3097
diff changeset
948 wl = lock = txn = None
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
949 try:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
950 wl = repo.wlock()
3124
6ef274e01f64 flake8: rename some ambiguous identifier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3097
diff changeset
951 lock = repo.lock()
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
952 txn = repo.transaction(b'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
953 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
954 txn.close()
4268
d5a2cc19903f topics: improve the message around topic changing
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 4253
diff changeset
955 if topic is None:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
956 ui.status(b'cleared topic on %d changesets\n' % rewrote)
4268
d5a2cc19903f topics: improve the message around topic changing
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 4253
diff changeset
957 else:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
958 ui.status(b'changed topic on %d changesets to "%s"\n' % (rewrote,
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
959 topic))
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
960 finally:
3124
6ef274e01f64 flake8: rename some ambiguous identifier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3097
diff changeset
961 lockmod.release(txn, lock, wl)
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
962 repo.invalidate()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
963 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
964
2985
f63c97c01f92 topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents: 2984
diff changeset
965 ct = repo.currenttopic
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
966 if clear:
4044
c0fbe70f2e48 topic: check that repo.currenttopic is set before using it as an argument
Anton Shestakov <av6@dwimlabs.net>
parents: 4038
diff changeset
967 if ct:
4652
b72cd597a887 stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents: 4647
diff changeset
968 st = stack.stack(repo, topic=ct)
b72cd597a887 stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents: 4647
diff changeset
969 if not st:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
970 ui.status(_(b'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
971 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
972
1860
b7b9e5028c2a topics: consistently use empty string instead of None
Matt Mackall <mpm@selenic.com>
parents: 1859
diff changeset
973 if topic:
2985
f63c97c01f92 topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents: 2984
diff changeset
974 if not ct:
5924
16f3fb304285 topic: add a 'topic.active' label to messages with active topic
Anton Shestakov <av6@dwimlabs.net>
parents: 5922
diff changeset
975 ui.status(_(b'marked working directory as topic: %s\n')
16f3fb304285 topic: add a 'topic.active' label to messages with active topic
Anton Shestakov <av6@dwimlabs.net>
parents: 5922
diff changeset
976 % ui.label(topic, b'topic.active'))
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
977 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
978
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
979 ui.pager(b'topics')
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
980 # `hg topic --current`
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
981 ret = 0
2985
f63c97c01f92 topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents: 2984
diff changeset
982 if current and not ct:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
983 ui.write_err(_(b'no active topic\n'))
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
984 ret = 1
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
985 elif current:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
986 fm = ui.formatter(b'topic', pycompat.byteskwargs(opts))
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
987 namemask = b'%s\n'
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
988 label = b'topic.active'
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
989 fm.startitem()
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
990 fm.write(b'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
991 fm.end()
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
992 else:
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
993 _listtopics(ui, repo, opts)
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
994 return ret
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
995
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
996 @command(b'stack', [
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
997 (b'c', b'children', None,
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
998 _(b'display data about children outside of the stack'))
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
999 ] + commands.formatteropts,
4894
f9743b13de6d help: categorizing evolve and topic commands
Rodrigo Damazio <rdamazio@google.com>
parents: 4892
diff changeset
1000 _(b'hg stack [TOPIC]'),
6305
77ce98287dc2 topic: drop helpcategory 4.7 compat, use helpcategory keyword directly
Anton Shestakov <av6@dwimlabs.net>
parents: 6304
diff changeset
1001 helpcategory=registrar.command.CATEGORY_CHANGE_NAVIGATION,
77ce98287dc2 topic: drop helpcategory 4.7 compat, use helpcategory keyword directly
Anton Shestakov <av6@dwimlabs.net>
parents: 6304
diff changeset
1002 )
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1003 def cmdstack(ui, repo, topic=b'', **opts):
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
1004 """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
1005
2750
bd3824d1b795 stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2744
diff changeset
1006 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
1007
bd3824d1b795 stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2744
diff changeset
1008 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
1009 """
1990
71410fa2c253 stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1989
diff changeset
1010 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
1011 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
1012 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
1013 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
1014 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
1015 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
1016 branch = repo[None].branch()
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1017 ui.pager(b'stack')
4752
8a73a8df63b6 py3: convert opts keys to bytes before passing to core APIs
Martin von Zweigbergk <martinvonz@google.com>
parents: 4748
diff changeset
1018 return stack.showstack(ui, repo, branch=branch, topic=topic,
8a73a8df63b6 py3: convert opts keys to bytes before passing to core APIs
Martin von Zweigbergk <martinvonz@google.com>
parents: 4748
diff changeset
1019 opts=pycompat.byteskwargs(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
1020
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1021 @command(b'debugcb|debugconvertbookmark', [
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1022 (b'b', b'bookmark', b'', _(b'bookmark to convert to topic')),
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1023 (b'', b'all', None, _(b'convert all bookmarks to topics')),
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1024 ],
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1025 _(b'[-b BOOKMARK] [--all]'))
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1026 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
1027 """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
1028 """
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1029
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1030 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
1031 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
1032
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1033 if convertall and bookmark:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1034 raise error.Abort(_(b"cannot use '--all' and '-b' together"))
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1035 if not (convertall or bookmark):
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1036 raise error.Abort(_(b"you must specify either '--all' or '-b'"))
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1037
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1038 bmstore = repo._bookmarks
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1039
2900
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1040 nodetobook = {}
4742
db3e7f6b5ceb py3: switch from iteritems() to items() in the topics extension
Martin von Zweigbergk <martinvonz@google.com>
parents: 4719
diff changeset
1041 for book, revnode in bmstore.items():
2900
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1042 if nodetobook.get(revnode):
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1043 nodetobook[revnode].append(book)
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1044 else:
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1045 nodetobook[revnode] = [book]
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1046
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1047 # 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
1048 # warning repeatedly
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1049 skipped = []
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1050
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1051 actions = {}
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1052
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1053 lock = wlock = tr = None
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1054 try:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1055 wlock = repo.wlock()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1056 lock = repo.lock()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1057 if bookmark:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1058 try:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1059 node = bmstore[bookmark]
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1060 except KeyError:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1061 raise error.Abort(_(b"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
1062
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1063 revnum = repo[node].rev()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1064 if len(nodetobook[node]) > 1:
5922
8bffab1e7c4f topic: make two almost identical messages actually identical
Anton Shestakov <av6@dwimlabs.net>
parents: 5920
diff changeset
1065 ui.status(_(b"skipping revision %d as it has multiple "
8bffab1e7c4f topic: make two almost identical messages actually identical
Anton Shestakov <av6@dwimlabs.net>
parents: 5920
diff changeset
1066 b"bookmarks on it\n") % revnum)
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1067 return
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1068 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
1069 if targetrevs:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1070 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
1071
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1072 elif convertall:
4742
db3e7f6b5ceb py3: switch from iteritems() to items() in the topics extension
Martin von Zweigbergk <martinvonz@google.com>
parents: 4719
diff changeset
1073 for bmark, revnode in sorted(bmstore.items()):
2900
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1074 revnum = repo[revnode].rev()
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1075 if revnum in skipped:
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1076 continue
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1077 if len(nodetobook[revnode]) > 1:
5922
8bffab1e7c4f topic: make two almost identical messages actually identical
Anton Shestakov <av6@dwimlabs.net>
parents: 5920
diff changeset
1078 ui.status(_(b"skipping revision %d as it has multiple "
8bffab1e7c4f topic: make two almost identical messages actually identical
Anton Shestakov <av6@dwimlabs.net>
parents: 5920
diff changeset
1079 b"bookmarks on it\n") % revnum)
2900
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1080 skipped.append(revnum)
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1081 continue
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1082 if bmark == b'@':
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1083 continue
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1084 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
1085 if targetrevs:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1086 actions[(bmark, revnum)] = targetrevs
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1087
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1088 if actions:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1089 try:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1090 tr = repo.transaction(b'debugconvertbookmark')
4742
db3e7f6b5ceb py3: switch from iteritems() to items() in the topics extension
Martin von Zweigbergk <martinvonz@google.com>
parents: 4719
diff changeset
1091 for ((bmark, revnum), targetrevs) in sorted(actions.items()):
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1092 _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
1093 tr.close()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1094 finally:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1095 tr.release()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1096 finally:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1097 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
1098
2906
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1099 # inspired from mercurial.repair.stripbmrevset
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1100 CONVERTBOOKREVSET = b"""
2906
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1101 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
1102 ancestors(bookmark(%s))
2909
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1103 and not ancestors(
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1104 (
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1105 (head() and not bookmark(%s))
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1106 or (bookmark() - bookmark(%s))
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1107 ) - (
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1108 descendants(bookmark(%s))
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1109 - 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
1110 )
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1111 )
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1112 )
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1113 """
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1114
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1115 def _findconvertbmarktopic(repo, bmark):
3225
28fb347a5bf8 typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents: 3195
diff changeset
1116 """find revisions unambiguously defined by a bookmark
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1117
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1118 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
1119 """
2909
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1120 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
1121
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1122 def _applyconvertbmarktopic(ui, repo, revs, old, bmark, tr):
3225
28fb347a5bf8 typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents: 3195
diff changeset
1123 """apply bookmark conversion to topic
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1124
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1125 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
1126 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
1127
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1128 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
1129 """
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1130
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1131 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
1132 # 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
1133 # 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
1134 # 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
1135 # changeset
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1136 if rewrote == 0:
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1137 return
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1138 ui.status(_(b'changed topic to "%s" on %d revisions\n') % (bmark,
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1139 rewrote))
5721
242a0530823a cleanup: ensure log and output messages have a '\n' terminator
Matt Harbison <matt_harbison@yahoo.com>
parents: 5689
diff changeset
1140 ui.debug(b'removing bookmark "%s" from "%d"\n' % (bmark, old))
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1141 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
1142
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
1143 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
1144 """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
1145
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
1146 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
1147 with repo.wlock():
6204
364ef033da03 topic: shorter code to write current topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6155
diff changeset
1148 repo.vfs.write(b'topic', newtopic)
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
1149 else:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1150 if repo.vfs.exists(b'topic'):
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1151 repo.vfs.unlink(b'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
1152
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
1153 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
1154 """ 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
1155 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
1156 """
2642
92e882a82aaf topics: factor out the logic to change topic in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2625
diff changeset
1157 rewrote = 0
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1158 p1 = None
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1159 p2 = None
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1160 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
1161 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
1162 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
1163
5919
1a8e86053adb topic: don't lose any file changes when changing topic of a merge commit
Anton Shestakov <av6@dwimlabs.net>
parents: 5907
diff changeset
1164 if len(c.parents()) > 1:
1a8e86053adb topic: don't lose any file changes when changing topic of a merge commit
Anton Shestakov <av6@dwimlabs.net>
parents: 5907
diff changeset
1165 # ctx.files() isn't reliable for merges, so fall back to the
1a8e86053adb topic: don't lose any file changes when changing topic of a merge commit
Anton Shestakov <av6@dwimlabs.net>
parents: 5907
diff changeset
1166 # slower repo.status() method
1a8e86053adb topic: don't lose any file changes when changing topic of a merge commit
Anton Shestakov <av6@dwimlabs.net>
parents: 5907
diff changeset
1167 st = c.p1().status(c)
1a8e86053adb topic: don't lose any file changes when changing topic of a merge commit
Anton Shestakov <av6@dwimlabs.net>
parents: 5907
diff changeset
1168 files = set(st.modified) | set(st.added) | set(st.removed)
1a8e86053adb topic: don't lose any file changes when changing topic of a merge commit
Anton Shestakov <av6@dwimlabs.net>
parents: 5907
diff changeset
1169 else:
1a8e86053adb topic: don't lose any file changes when changing topic of a merge commit
Anton Shestakov <av6@dwimlabs.net>
parents: 5907
diff changeset
1170 files = set(c.files())
1a8e86053adb topic: don't lose any file changes when changing topic of a merge commit
Anton Shestakov <av6@dwimlabs.net>
parents: 5907
diff changeset
1171
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1172 def filectxfn(repo, ctx, path):
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1173 try:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1174 return c[path]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1175 except error.ManifestLookupError:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1176 return None
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1177 fixedextra = dict(c.extra())
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1178 ui.debug(b'old node id is %s\n' % node.hex(c.node()))
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1179 ui.debug(b'origextra: %r\n' % fixedextra)
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1180 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
1181 if oldtopic == newtopic:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1182 continue
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1183 if newtopic is None:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1184 del fixedextra[constants.extrakey]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1185 else:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1186 fixedextra[constants.extrakey] = newtopic
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1187 fixedextra[constants.changekey] = c.hex()
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1188 ui.debug(b'changing topic of %s from %s to %s\n' % (
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1189 c, oldtopic or b'<none>', newtopic or b'<none>'))
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1190 ui.debug(b'fixedextra: %r\n' % fixedextra)
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1191 # 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
1192 # 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
1193 # 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
1194 p1 = c.p1().node()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1195 p2 = c.p2().node()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1196 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
1197 p1 = successors[p1][0]
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1198 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
1199 p2 = successors[p2][0]
3040
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1200 mc = context.memctx(repo,
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1201 (p1, p2),
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1202 c.description(),
5919
1a8e86053adb topic: don't lose any file changes when changing topic of a merge commit
Anton Shestakov <av6@dwimlabs.net>
parents: 5907
diff changeset
1203 files,
3040
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1204 filectxfn,
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1205 user=c.user(),
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1206 date=c.date(),
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1207 extra=fixedextra)
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1208
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1209 # phase handling
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1210 commitphase = c.phase()
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1211 overrides = {(b'phases', b'new-commit'): commitphase}
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1212 with repo.ui.configoverride(overrides, b'changetopic'):
3040
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1213 newnode = repo.commitctx(mc)
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1214
3038
103244e34a9c topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3030
diff changeset
1215 successors[c.node()] = (newnode,)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1216 ui.debug(b'new node id is %s\n' % node.hex(newnode))
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1217 rewrote += 1
3038
103244e34a9c topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3030
diff changeset
1218
103244e34a9c topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3030
diff changeset
1219 # 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
1220 # 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
1221 # this makes the operations more modulars
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1222 scmutil.cleanupnodes(repo, successors, b'changetopics')
3040
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1223
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1224 # move the working copy too
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1225 wctx = repo[None]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1226 # 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
1227 if len(wctx.parents()) == 1:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1228 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
1229 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
1230 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
1231 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
1232
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1233 def _listtopics(ui, repo, opts):
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1234 fm = ui.formatter(b'topics', pycompat.byteskwargs(opts))
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1235 activetopic = repo.currenttopic
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1236 namemask = b'%s'
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1237 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
1238 maxwidth = max(len(t) for t in repo.topics)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1239 namemask = b'%%-%is' % maxwidth
4303
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1240 if opts.get('age'):
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1241 # here we sort by age and topic name
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1242 topicsdata = sorted(_getlasttouched(repo, repo.topics))
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1243 else:
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1244 # here we sort by topic name only
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1245 topicsdata = (
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1246 (None, topic, None, None)
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1247 for topic in sorted(repo.topics)
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1248 )
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1249 for age, topic, date, user in topicsdata:
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1250 fm.startitem()
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1251 marker = b' '
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1252 label = b'topic'
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1253 active = (topic == activetopic)
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1254 if active:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1255 marker = b'*'
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1256 label = b'topic.active'
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1257 if not ui.quiet:
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1258 # registering the active data is made explicitly later
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1259 fm.plain(b' %s ' % marker, label=label)
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1260 fm.write(b'topic', namemask, topic, label=label)
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1261 fm.data(active=active)
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1262
3372
4138771105bb topics: list only topic names in quiet mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3371
diff changeset
1263 if ui.quiet:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1264 fm.plain(b'\n')
3372
4138771105bb topics: list only topic names in quiet mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3371
diff changeset
1265 continue
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1266 fm.plain(b' (')
4303
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1267 if date:
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1268 if age == -1:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1269 timestr = b'empty and active'
4303
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1270 else:
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1271 timestr = templatefilters.age(date)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1272 fm.write(b'lasttouched', b'%s', timestr, label=b'topic.list.time')
4303
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1273 if user:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1274 fm.write(b'usertouched', b' by %s', user, label=b'topic.list.user')
4303
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1275 if date:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1276 fm.plain(b', ')
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1277 data = stack.stack(repo, topic=topic)
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
1278 if ui.verbose:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1279 fm.write(b'branches+', b'on branch: %s',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1280 b'+'.join(data.branches), # XXX use list directly after 4.0 is released
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1281 label=b'topic.list.branches')
3059
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1282
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1283 fm.plain(b', ')
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1284 fm.write(b'changesetcount', b'%d changesets', data.changesetcount,
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1285 label=b'topic.list.changesetcount')
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1286
4581
48521a49a07e stack: rename troubledcount to unstablecount
Anton Shestakov <av6@dwimlabs.net>
parents: 4574
diff changeset
1287 if data.unstablecount:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1288 fm.plain(b', ')
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1289 fm.write(b'unstablecount', b'%d unstable',
4581
48521a49a07e stack: rename troubledcount to unstablecount
Anton Shestakov <av6@dwimlabs.net>
parents: 4574
diff changeset
1290 data.unstablecount,
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1291 label=b'topic.list.unstablecount')
3059
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1292
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1293 headcount = len(data.heads)
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1294 if 1 < headcount:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1295 fm.plain(b', ')
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1296 fm.write(b'headcount', b'%d heads',
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1297 headcount,
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1298 label=b'topic.list.headcount.multiple')
3059
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1299
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
1300 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
1301 # 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
1302
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1303 behindcount = data.behindcount
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1304 if 0 < behindcount:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1305 fm.plain(b', ')
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1306 fm.write(b'behindcount', b'%d behind',
3059
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1307 behindcount,
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1308 label=b'topic.list.behindcount')
3059
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1309 elif -1 == behindcount:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1310 fm.plain(b', ')
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1311 fm.write(b'behinderror', b'%s',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1312 _(b'ambiguous destination: %s') % data.behinderror,
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1313 label=b'topic.list.behinderror')
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1314 fm.plain(b')\n')
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1315 fm.end()
1974
20fb4195bfc4 topic: extract the code listing all topics
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1973
diff changeset
1316
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
1317 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
1318 """
4302
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1319 Calculates the last time a topic was used. Returns a generator of 4-tuples:
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1320 (age in seconds, topic name, date, and user who last touched the topic).
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
1321 """
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
1322 curtime = time.time()
4302
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1323 for topic in topics:
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1324 age = -1
2993
725b660d9886 topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2992
diff changeset
1325 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
1326 maxtime = (0, 0)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1327 trevs = repo.revs(b"topic(%s)", topic)
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
1328 # 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
1329 # 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
1330 # 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
1331 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
1332 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
1333 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
1334 # 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
1335 # 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
1336 maxtime = rt
2993
725b660d9886 topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2992
diff changeset
1337 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
1338 # 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
1339 # last touch time.
4942
acc7e27fa5c6 topic: drop compat.getmarkers() and use obsutil.getmarkers() directly
Anton Shestakov <av6@dwimlabs.net>
parents: 4921
diff changeset
1340 obsmarkers = obsutil.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
1341 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
1342 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
1343 if rt[0] > maxtime[0]:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1344 user = marker.metadata().get(b'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
1345 maxtime = rt
2993
725b660d9886 topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2992
diff changeset
1346
3371
753e5ebabe7d topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3297
diff changeset
1347 username = stack.parseusername(user)
4302
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1348 if trevs:
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1349 age = curtime - maxtime[0]
2993
725b660d9886 topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2992
diff changeset
1350
4302
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1351 yield (age, topic, maxtime, username)
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
1352
1848
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
1353 def summaryhook(ui, repo):
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1354 t = getattr(repo, 'currenttopic', b'')
1848
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
1355 if not t:
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
1356 return
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
1357 # i18n: column positioning for "hg summary"
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1358 ui.write(_(b"topic: %s\n") % ui.label(t, b'topic.active'))
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
1359
3022
255e66783505 topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3021
diff changeset
1360 _validmode = [
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1361 b'ignore',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1362 b'warning',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1363 b'enforce',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1364 b'enforce-all',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1365 b'random',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1366 b'random-all',
3022
255e66783505 topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3021
diff changeset
1367 ]
255e66783505 topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3021
diff changeset
1368
3020
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1369 def _configtopicmode(ui):
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1370 """ 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
1371 """
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1372 topicmode = ui.config(b'experimental', b'topic-mode')
3020
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1373
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1374 # 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
1375 if topicmode is None:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1376 enforcetopic = ui.configbool(b'experimental', b'enforce-topic')
3020
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1377 if enforcetopic:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1378 topicmode = b"enforce"
3022
255e66783505 topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3021
diff changeset
1379 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
1380 topicmode = _validmode[0]
3020
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1381
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1382 return topicmode
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1383
1850
0da6bf86b718 commit: add a --topic flag
Matt Mackall <mpm@selenic.com>
parents: 1849
diff changeset
1384 def commitwrap(orig, ui, repo, *args, **opts):
4533
51317ce90bdc topic: only affect `hg commit` behavior for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4532
diff changeset
1385 if not hastopicext(repo):
51317ce90bdc topic: only affect `hg commit` behavior for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4532
diff changeset
1386 return 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
1387 with repo.wlock():
3020
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1388 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
1389 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
1390
89855920fb0f topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents: 3023
diff changeset
1391 notopic = not repo.currenttopic
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1392 mayabort = (topicmode == b"enforce" and not ismergecommit)
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1393 maywarn = (topicmode == b"warning"
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1394 or (topicmode == b"enforce" and ismergecommit))
3024
89855920fb0f topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents: 3023
diff changeset
1395
3030
581a6b9d2c8c test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3028
diff changeset
1396 mayrandom = False
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1397 if topicmode == b"random":
3030
581a6b9d2c8c test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3028
diff changeset
1398 mayrandom = not ismergecommit
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1399 elif topicmode == b"random-all":
3030
581a6b9d2c8c test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3028
diff changeset
1400 mayrandom = True
581a6b9d2c8c test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3028
diff changeset
1401
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1402 if topicmode == b'enforce-all':
3025
e814c553ef32 topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3024
diff changeset
1403 ismergecommit = False
e814c553ef32 topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3024
diff changeset
1404 mayabort = True
e814c553ef32 topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3024
diff changeset
1405 maywarn = False
e814c553ef32 topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3024
diff changeset
1406
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1407 hint = _(b"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
1408 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
1409 t = opts['topic']
6204
364ef033da03 topic: shorter code to write current topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6155
diff changeset
1410 repo.vfs.write(b'topic', t)
3097
f06c86fd2ffd topic: do to check to topic while amending
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3096
diff changeset
1411 elif opts.get('amend'):
f06c86fd2ffd topic: do to check to topic while amending
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3096
diff changeset
1412 pass
3024
89855920fb0f topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents: 3023
diff changeset
1413 elif notopic and mayabort:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1414 msg = _(b"no active topic")
2733
adfbb984ebbb topics: check for topic on commit before a user enters message
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2731
diff changeset
1415 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
1416 elif notopic and maywarn:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1417 ui.warn(_(b"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
1418 if not ui.quiet:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1419 ui.warn((b"(%s)\n") % hint)
3030
581a6b9d2c8c test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3028
diff changeset
1420 elif notopic and mayrandom:
6204
364ef033da03 topic: shorter code to write current topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6155
diff changeset
1421 repo.vfs.write(b'topic', 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
1422 return orig(ui, repo, *args, **opts)
1850
0da6bf86b718 commit: add a --topic flag
Matt Mackall <mpm@selenic.com>
parents: 1849
diff changeset
1423
1852
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
1424 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
1425 ret = orig(repo, ctx, subs, extramsg)
4534
24662f94d126 topic: only wrap committext for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4533
diff changeset
1426 if hastopicext(repo):
24662f94d126 topic: only wrap committext for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4533
diff changeset
1427 t = repo.currenttopic
24662f94d126 topic: only wrap committext for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4533
diff changeset
1428 if t:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1429 ret = ret.replace(b"\nHG: branch",
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1430 b"\nHG: topic '%s'\nHG: branch" % t)
1852
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
1431 return ret
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
1432
2983
c0de0010ec30 topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 2982
diff changeset
1433 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
1434 if opts.get('topic'):
5380
60317988f5ae topic: substitute current topic when `--topic .` is used for outgoing/push
Anton Shestakov <av6@dwimlabs.net>
parents: 5375
diff changeset
1435 topic = opts['topic']
60317988f5ae topic: substitute current topic when `--topic .` is used for outgoing/push
Anton Shestakov <av6@dwimlabs.net>
parents: 5375
diff changeset
1436 if topic == b'.':
60317988f5ae topic: substitute current topic when `--topic .` is used for outgoing/push
Anton Shestakov <av6@dwimlabs.net>
parents: 5375
diff changeset
1437 topic = repo.currenttopic
60317988f5ae topic: substitute current topic when `--topic .` is used for outgoing/push
Anton Shestakov <av6@dwimlabs.net>
parents: 5375
diff changeset
1438 topic = b'literal:' + topic
5375
bed4fc158fc9 topic: treat argument to --topic as a literal topic name explicitly
Anton Shestakov <av6@dwimlabs.net>
parents: 5320
diff changeset
1439 topicrevs = repo.revs(b'topic(%s) - obsolete()', topic)
2982
fef934b7ed86 topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 2939
diff changeset
1440 opts.setdefault('rev', []).extend(topicrevs)
fef934b7ed86 topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 2939
diff changeset
1441 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
1442
1877
69077c65919d topic: handle merge.update function signature change
Augie Fackler <raf@durin42.com>
parents: 1874
diff changeset
1443 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
1444 matcher = kwargs.get('matcher')
e67c526c0a25 update: calculate 'partial' as core does
Sean Farley <sean@farley.io>
parents: 1963
diff changeset
1445 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
1446 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
1447 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
1448 ist0 = False
1853
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1449 try:
5601
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1450 mergemode = repo.ui.config(b'experimental', b'topic.linear-merge')
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1451
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1452 cleanup = lambda: None
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1453 oldrepo = repo
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1454 if mergemode == b'allow-from-bare-branch' and not repo[None].topic():
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1455 unfi = repo.unfiltered()
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1456 oldrepo = repo
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1457 old = unfi.__class__
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1458
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1459 class overridebranch(old):
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1460 def __getitem__(self, rev):
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1461 ret = super(overridebranch, self).__getitem__(rev)
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1462 if rev == node:
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1463 b = ret.branch()
6311
466702ac6c28 topic: complete "//" format support in experimental.topic.linear-merge code
Anton Shestakov <av6@dwimlabs.net>
parents: 6306
diff changeset
1464 tns = ret.topic_namespace()
5601
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1465 t = ret.topic()
6311
466702ac6c28 topic: complete "//" format support in experimental.topic.linear-merge code
Anton Shestakov <av6@dwimlabs.net>
parents: 6306
diff changeset
1466 # topic is required for merging from bare branch
5601
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1467 if t:
6311
466702ac6c28 topic: complete "//" format support in experimental.topic.linear-merge code
Anton Shestakov <av6@dwimlabs.net>
parents: 6306
diff changeset
1468 ret.branch = lambda: common.formatfqbn(b, tns, t)
5601
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1469 return ret
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1470 unfi.__class__ = overridebranch
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1471 if repo.filtername is not None:
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1472 repo = unfi.filtered(repo.filtername)
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1473
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1474 def cleanup():
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1475 unfi.__class__ = old
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1476
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1477 try:
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1478 ret = orig(repo, node, branchmerge, force, *args, **kwargs)
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1479 finally:
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1480 cleanup()
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1481 repo = oldrepo
3946ee4ee3ae topic: add a `exp….topic.linear-merge` option to allow some oedipus
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5566
diff changeset
1482
4535
8dae14cd076a topic: only wrap mergeupdate for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4534
diff changeset
1483 if not hastopicext(repo):
8dae14cd076a topic: only wrap mergeupdate for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4534
diff changeset
1484 return ret
2679
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
1485 # 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
1486 # 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
1487 # 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
1488 # 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
1489 # running.
6245
a54db3e55c88 topic: switch to namespace when updating to a commit, similar to topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6243
diff changeset
1490 otns = repo.currenttns
2984
30f6030dca8f topics: signal to the end user when a topic has been forgotten
Aurélien Campéas
parents: 2983
diff changeset
1491 ot = repo.currenttopic
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1492 if repo.ui.hasconfig(b'experimental', b'topicrebase'):
2679
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
1493 isrebase = True
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1494 if repo.ui.configbool(b'_internal', b'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
1495 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
1496 if ((not partial and not branchmerge) or isrebase) and not ist0:
6245
a54db3e55c88 topic: switch to namespace when updating to a commit, similar to topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6243
diff changeset
1497 tns = b'default'
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1498 t = b''
1853
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1499 pctx = repo[node]
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1500 if pctx.phase() > phases.public:
6245
a54db3e55c88 topic: switch to namespace when updating to a commit, similar to topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6243
diff changeset
1501 tns = pctx.topic_namespace()
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
1502 t = pctx.topic()
6245
a54db3e55c88 topic: switch to namespace when updating to a commit, similar to topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6243
diff changeset
1503 repo.vfs.write(b'topic-namespace', tns)
a54db3e55c88 topic: switch to namespace when updating to a commit, similar to topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6243
diff changeset
1504 if tns != b'default' and tns != otns:
a54db3e55c88 topic: switch to namespace when updating to a commit, similar to topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6243
diff changeset
1505 repo.ui.status(_(b"switching to topic-namespace %s\n") % tns)
6204
364ef033da03 topic: shorter code to write current topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6155
diff changeset
1506 repo.vfs.write(b'topic', t)
1853
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1507 if t and t != ot:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1508 repo.ui.status(_(b"switching to topic %s\n") % t)
4044
c0fbe70f2e48 topic: check that repo.currenttopic is set before using it as an argument
Anton Shestakov <av6@dwimlabs.net>
parents: 4038
diff changeset
1509 if ot and not t:
4652
b72cd597a887 stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents: 4647
diff changeset
1510 st = stack.stack(repo, topic=ot)
b72cd597a887 stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents: 4647
diff changeset
1511 if not st:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1512 repo.ui.status(_(b'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
1513 elif ist0:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1514 repo.ui.status(_(b"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
1515 return ret
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1516 finally:
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1517 wlock.release()
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
1518
2793
fb317d218af0 topic: wrap 'update' in a more flexible way
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
1519 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
1520
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1521 thezeros = set([b't0', b'b0', b's0'])
5008
848ca807f83a topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5007
diff changeset
1522 configoverride = util.nullcontextmanager()
848ca807f83a topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5007
diff changeset
1523 if node in thezeros or rev in thezeros:
848ca807f83a topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5007
diff changeset
1524 configoverride = repo.ui.configoverride({
848ca807f83a topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5007
diff changeset
1525 (b'_internal', b'keep-topic'): b'yes'
848ca807f83a topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5007
diff changeset
1526 }, source=b'topic-extension')
848ca807f83a topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5007
diff changeset
1527 with configoverride:
3614
9ad461df4d4d compat: keep passing arguments as keyword argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3612
diff changeset
1528 return orig(ui, repo, node=node, rev=rev, *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
1529
1854
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1530 def _fixrebase(loaded):
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1531 if not loaded:
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1532 return
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1533
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1534 def savetopic(ctx, extra):
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
1535 if ctx.topic():
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
1536 extra[constants.extrakey] = ctx.topic()
1854
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1537
2679
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
1538 def setrebaseconfig(orig, ui, repo, **opts):
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1539 repo.ui.setconfig(b'experimental', b'topicrebase', b'yes',
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1540 source=b'topic-extension')
2679
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
1541 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
1542
3612
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1543 def new_init(orig, *args, **kwargs):
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1544 runtime = orig(*args, **kwargs)
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1545
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1546 if util.safehasattr(runtime, 'extrafns'):
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1547 runtime.extrafns.append(savetopic)
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1548
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1549 return runtime
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1550
1969
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
1551 try:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1552 rebase = extensions.find(b"rebase")
3612
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1553 extensions.wrapfunction(rebase.rebaseruntime, '__init__', new_init)
2679
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
1554 # 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
1555 # 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
1556 # when we have better options.
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1557 extensions.wrapcommand(rebase.cmdtable, b'rebase', setrebaseconfig)
1969
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
1558 except KeyError:
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
1559 pass
1854
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1560
1946
72246b13bd72 patch: document the section about import/export
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1945
diff changeset
1561 ## 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
1562
1866
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
1563 def _exporttopic(seq, ctx):
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
1564 topic = ctx.topic()
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
1565 if topic:
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1566 return b'EXP-Topic %s' % topic
1866
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
1567 return None
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
1568
1867
c9cacc62fa17 patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1866
diff changeset
1569 def _importtopic(repo, patchdata, extra, opts):
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1570 if b'topic' in patchdata:
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1571 extra[b'topic'] = patchdata[b'topic']
1867
c9cacc62fa17 patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1866
diff changeset
1572
1948
54810b543bf4 patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1947
diff changeset
1573 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
1574 """run at ui setup time to install import/export logic"""
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1575 cmdutil.extraexport.append(b'topic')
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1576 cmdutil.extraexportmap[b'topic'] = _exporttopic
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1577 cmdutil.extrapreimport.append(b'topic')
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1578 cmdutil.extrapreimportmap[b'topic'] = _importtopic
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1579 patch.patchheadermap.append((b'EXP-Topic', b'topic'))
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1580
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1581 ## preserve topic during split
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1582
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1583 def presplitupdatetopic(original, repo, ui, prev, ctx):
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1584 # Save topic of revision
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1585 topic = None
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1586 if util.safehasattr(ctx, 'topic'):
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1587 topic = ctx.topic()
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1588
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1589 # Update the working directory
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1590 original(repo, ui, prev, ctx)
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1591
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1592 # Restore the topic if need
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1593 if topic:
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1594 _changecurrenttopic(repo, topic)
6236
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1595
6239
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1596 def _changecurrenttns(repo, tns):
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1597 if tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1598 with repo.wlock():
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1599 repo.vfs.write(b'topic-namespace', tns)
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1600 else:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1601 repo.vfs.unlinkpath(b'topic-namespace', ignoremissing=True)
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1602
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1603 @command(b'debug-topic-namespace', [
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1604 (b'', b'clear', False, b'clear active topic namespace if any'),
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1605 ],
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1606 _(b'[NAMESPACE|--clear]'))
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1607 def debugtopicnamespace(ui, repo, tns=None, **opts):
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1608 """set or show the current topic namespace"""
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1609 if opts.get('clear'):
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1610 if tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1611 raise error.Abort(_(b"cannot use --clear when setting a topic namespace"))
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1612 tns = None
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1613 elif not tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1614 ui.write(b'%s\n' % repo.currenttns)
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1615 return
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1616 if tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1617 tns = tns.strip()
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1618 if not tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1619 raise error.Abort(_(b"topic namespace cannot consist entirely of whitespace"))
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1620 if b'/' in tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1621 raise error.Abort(_(b"topic namespace cannot contain '/' character"))
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1622 scmutil.checknewlabel(repo, tns, b'topic namespace')
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1623 ctns = repo.currenttns
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1624 _changecurrenttns(repo, tns)
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1625 if ctns == b'default' and tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1626 repo.ui.status(_(b'marked working directory as topic namespace: %s\n')
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1627 % tns)
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1628
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1629 @command(b'debug-topic-namespaces', [])
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1630 def debugtopicnamespaces(ui, repo, **opts):
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1631 """list repository namespaces"""
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1632 for tns in repo.topic_namespaces:
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1633 ui.write(b'%s\n' % (tns,))
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1634
6236
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1635 @command(b'debug-parse-fqbn', commands.formatteropts, _(b'FQBN'), optionalrepo=True)
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1636 def debugparsefqbn(ui, repo, fqbn, **opts):
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1637 """parse branch//namespace/topic string into its components"""
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1638 branch, tns, topic = common.parsefqbn(fqbn)
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1639 opts = pycompat.byteskwargs(opts)
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1640 fm = ui.formatter(b'debug-parse-namespace', opts)
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1641 fm.startitem()
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1642 fm.write(b'branch', b'branch: %s\n', branch)
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1643 fm.write(b'topic_namespace', b'namespace: %s\n', tns)
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1644 fm.write(b'topic', b'topic: %s\n', topic)
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1645 fm.end()
6237
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1646
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1647 @command(b'debug-format-fqbn', [
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1648 (b'b', b'branch', b'', b'branch'),
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1649 (b'n', b'topic-namespace', b'', b'topic namespace'),
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1650 (b't', b'topic', b'', b'topic'),
6266
213db29a19e9 topic: ability to shorten branch//namespace/topic strings when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 6245
diff changeset
1651 (b's', b'short', False, b'short format'),
6237
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1652 ], optionalrepo=True)
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1653 def debugformatfqbn(ui, repo, **opts):
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1654 """format branch, namespace and topic into branch//namespace/topic string"""
6266
213db29a19e9 topic: ability to shorten branch//namespace/topic strings when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 6245
diff changeset
1655 short = common.formatfqbn(opts.get('branch'), opts.get('topic_namespace'), opts.get('topic'), opts.get('short'))
6237
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1656 ui.write(b'%s\n' % short)