annotate hgext3rd/topic/__init__.py @ 6614:e0596b012b69

branching: merge with stable
author Anton Shestakov <av6@dwimlabs.net>
date Sat, 16 Dec 2023 13:23:38 -0300
parents 6116a0208449 94bf2f307b75
children 9e442e116621
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,
6561
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
168 bundlerepo,
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
169 changelog,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
170 cmdutil,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
171 commands,
6334
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
172 configitems,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
173 context,
6206
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
174 encoding,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
175 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
176 exchange,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
177 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
178 hg,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
179 localrepo,
2890
1e3d97486861 topics: import lock as lockmods
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2889
diff changeset
180 lock as lockmod,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
181 merge,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
182 namespaces,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
183 node,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
184 obsolete,
4942
acc7e27fa5c6 topic: drop compat.getmarkers() and use obsutil.getmarkers() directly
Anton Shestakov <av6@dwimlabs.net>
parents: 4921
diff changeset
185 obsutil,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
186 patch,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
187 phases,
4752
8a73a8df63b6 py3: convert opts keys to bytes before passing to core APIs
Martin von Zweigbergk <martinvonz@google.com>
parents: 4748
diff changeset
188 pycompat,
2464
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2428
diff changeset
189 registrar,
6537
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
190 rewriteutil,
2889
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
191 scmutil,
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
192 smartset,
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
193 templatefilters,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
194 util,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
195 )
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
196
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
197 from . import (
4531
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
198 common,
6318
3e488afe62f5 topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents: 6311
diff changeset
199 compat,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
200 constants,
3532
68e99d2c6267 prev: fix the breakage of `hg previous` from obsolete cset
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3447
diff changeset
201 destination,
68e99d2c6267 prev: fix the breakage of `hg previous` from obsolete cset
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3447
diff changeset
202 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
203 flow,
3532
68e99d2c6267 prev: fix the breakage of `hg previous` from obsolete cset
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3447
diff changeset
204 randomname,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
205 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
206 server,
1932
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
207 stack,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
208 topicmap,
880aac9dbfa6 init: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1918
diff changeset
209 )
1843
0ba067a97d06 revset: add a topic() revset for querying topics
Augie Fackler <augie@google.com>
parents: 1842
diff changeset
210
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
211 cmdtable = {}
3971
9f8b99b3d9b5 topic: drop compat layer for `command`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3945
diff changeset
212 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
213 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
214 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
215 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
216 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
217 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
218 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
219 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
220 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
221 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
222 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
223 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
224 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
225 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
226 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
227 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
228 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
229 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
230 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
231 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
232 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
233 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
234 # 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
235 # (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
236 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
237 }
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
238
6599
6035b539aa3b branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6598
diff changeset
239 __version__ = b'1.2.0.dev0'
3057
cb8ae3cb0bbc branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3040 3048
diff changeset
240
6604
6116a0208449 topic: formally drop compatibility with hg 4.9 through 5.5
Anton Shestakov <av6@dwimlabs.net>
parents: 6600
diff changeset
241 testedwith = b'5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5'
6116a0208449 topic: formally drop compatibility with hg 4.9 through 5.5
Anton Shestakov <av6@dwimlabs.net>
parents: 6600
diff changeset
242 minimumhgversion = b'5.6'
4713
fbe7f35a6926 py3: make metadata values be byte strings as Mercurial expects
Martin von Zweigbergk <martinvonz@google.com>
parents: 4704
diff changeset
243 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
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 configtable = {}
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
246 configitem = registrar.configitem(configtable)
3082
326e0ee1eed1 topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3071
diff changeset
247
6334
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-topic',
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'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
252 default=False,
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-mode',
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
255 default=None,
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.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
258 default=False,
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'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
261 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
262 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
263 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
264 default=False,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
265 )
6336
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
266 # 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
267 # enabled for local repo
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
268 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
269 default=False,
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
270 )
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
271 # 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
272 configitem(b'_internal', b'tns-publish',
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
273 default=False,
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6334
diff changeset
274 )
6564
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6561
diff changeset
275 # used for signaling that the current command has explicit target arguments
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6561
diff changeset
276 # (e.g. --rev or --branch) and we should ignore tns-default-* config
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6561
diff changeset
277 configitem(b'_internal', b'tns-explicit-target',
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6561
diff changeset
278 default=False,
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6561
diff changeset
279 )
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
280 configitem(b'devel', b'tns-report-transactions',
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
281 default=lambda: [],
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
282 )
6537
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
283 # used for allowing users to rewrite history only in their "own" topic
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
284 # namespaces
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
285 configitem(b'experimental', b'tns-allow-rewrite',
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
286 default=configitems.dynamicdefault,
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
287 )
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
288 configitem(b'experimental', b'tns-default-pull-namespaces',
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
289 default=configitems.dynamicdefault,
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
290 )
6334
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
291 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
292 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
293 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
294 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
295 default=False,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
296 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
297 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
298 default="reject",
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
299 )
3082
326e0ee1eed1 topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3071
diff changeset
300
6334
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
301 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
302 # 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
303 #
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
304 # 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
305 # 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
306 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
307 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
308 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
309 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
310 default=None,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
311 )
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
312 if (b'devel' not in ui._knownconfig
6560
abbba073aa88 topic: check for devel.randomseed existence correctly
Anton Shestakov <av6@dwimlabs.net>
parents: 6552
diff changeset
313 or not ui._knownconfig[b'devel'].get(b'randomseed')):
6334
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
314 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
315 default=None,
ef8c1637321a topic: mercurial.configitems and mercurial.registrar.configitem is in hg 4.3
Anton Shestakov <av6@dwimlabs.net>
parents: 6333
diff changeset
316 )
3082
326e0ee1eed1 topic: register config items
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3071
diff changeset
317
6240
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
318 def _contexttns(self, force=False):
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
319 if not force and not self.mutable():
6487
963471ebe26a topic: make topic namespace use string "none" as the default/empty value
Anton Shestakov <av6@dwimlabs.net>
parents: 6480
diff changeset
320 return b'none'
6240
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
321 cache = getattr(self._repo, '_tnscache', None)
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
322 # 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
323 if cache is None:
6487
963471ebe26a topic: make topic namespace use string "none" as the default/empty value
Anton Shestakov <av6@dwimlabs.net>
parents: 6480
diff changeset
324 return b'none'
6552
81e89d943a4e topic: pretend changeset has no topic namespace if it doesn't have a topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6549
diff changeset
325 # topic namespace is meaningless when topic is not set
81e89d943a4e topic: pretend changeset has no topic namespace if it doesn't have a topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6549
diff changeset
326 if not self.topic(force):
81e89d943a4e topic: pretend changeset has no topic namespace if it doesn't have a topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6549
diff changeset
327 return b'none'
6240
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
328 if self.rev() is None:
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
329 # don't cache volatile ctx instances that aren't stored on-disk yet
6487
963471ebe26a topic: make topic namespace use string "none" as the default/empty value
Anton Shestakov <av6@dwimlabs.net>
parents: 6480
diff changeset
330 return self.extra().get(b'topic-namespace', b'none')
6240
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
331 tns = cache.get(self.rev())
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
332 if tns is None:
6487
963471ebe26a topic: make topic namespace use string "none" as the default/empty value
Anton Shestakov <av6@dwimlabs.net>
parents: 6480
diff changeset
333 tns = self.extra().get(b'topic-namespace', b'none')
6240
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
334 self._repo._tnscache[self.rev()] = tns
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
335 return tns
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
336
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
337 context.basectx.topic_namespace = _contexttns
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
338
2656
4a148ca3e80d topic: update the changectx method to respect phases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2655
diff changeset
339 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
340 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
341 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
342 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
343 # 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
344 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
345 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
346 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
347 # 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
348 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
349 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
350 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
351 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
352 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
353 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
354
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
355 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
356
2744
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
357 def _contexttopicidx(self):
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
358 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
359 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
360 # 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
361 # 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
362 return None
2915
b3abdb3d819e stack: replace 'getstack' with direct call to 'stack'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2912
diff changeset
363 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
364 try:
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
365 return revlist.index(self.rev())
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
366 except IndexError:
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
367 # 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
368 return None
ddfe336de779 topic: add a 'topicidx()' to context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2740
diff changeset
369 context.basectx.topicidx = _contexttopicidx
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
370
6242
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
371 def _contextfqbn(self):
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
372 """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
373 qualified branch name
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
374 """
6268
63d6cc96557c topic: get branch from extra data in ctx.fqbn()
Anton Shestakov <av6@dwimlabs.net>
parents: 6266
diff changeset
375 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
376 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
377
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
378 context.basectx.fqbn = _contextfqbn
a433fe0cea21 topic: add ctx.fqbn() method
Anton Shestakov <av6@dwimlabs.net>
parents: 6241
diff changeset
379
4801
16c1398b0063 python3: prefix all regex to work with python 2 and 3
Raphaël Gomès <rgomes@octobus.net>
parents: 4791
diff changeset
380 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
381 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
382
4531
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
383 hastopicext = common.hastopicext
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
384
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
385 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
386 revs = None
4065
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
387 if stackrev.match(name):
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
388 idx = int(name[1:])
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
389 tname = topic = repo.currenttopic
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
390 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
391 ttype = b'topic'
4065
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
392 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
393 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
394 ttype = b'branch'
4065
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
395 tname = branch = repo[None].branch()
fbc51e98cf13 alias: allow reference through 's#'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4044
diff changeset
396 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
397 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
398 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
399 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
400 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
401 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
402 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
403 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
404
b933a8068c17 topic: add some initial support for using stack on named branch
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2668
diff changeset
405 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
406 try:
2712
f19b314d8475 topics: add t0 and b0 to the stack
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2711
diff changeset
407 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
408 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
409 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
410 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
411 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
412 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
413 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
414 # 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
415 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
416 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
417 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
418 return [repo[r].node()]
2008
e3ddd696394f flake8: fix E713 style
Sean Farley <sean@farley.io>
parents: 2007
diff changeset
419 if name not in repo.topics:
2000
c413e7c96265 init: guard _namemap with repo.topics (issue5351)
timeless@gmail.com
parents: 1999
diff changeset
420 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
421 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
422 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
423
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
424 def _nodemap(repo, node):
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
425 ctx = repo[node]
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
426 t = ctx.topic()
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
427 if t and ctx.phase() > phases.public:
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
428 return [t]
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
429 return []
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
430
5685
7ee15bf011d6 topic: wrap branch call during summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5680
diff changeset
431 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
432 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
433 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
434
6376
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
435 def wrapwctxbranch(orig, self):
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
436 branch = orig(self)
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
437 return common.formatfqbn(branch=branch)
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
438
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
439 def wrapwctxdirty(orig, self, missing=False, merge=True, branch=True):
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
440 """check whether a working directory is modified"""
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
441 # check subrepos first
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
442 for s in sorted(self.substate):
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
443 if self.sub(s).dirty(missing=missing):
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
444 return True
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
445 # check current working dir
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
446 return (
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
447 (merge and self.p2())
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
448 or (branch and self.branch() != common.formatfqbn(branch=self.p1().branch()))
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
449 or self.modified()
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
450 or self.added()
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
451 or self.removed()
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
452 or (missing and self.deleted())
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
453 )
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
454
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
455 def find_affected_tns(repo, tr):
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
456 origrepolen = tr.changes[b'origrepolen']
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
457 unfi = repo.unfiltered()
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
458
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
459 affected = set()
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
460 # These are the new changesets that weren't in the repo before this
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
461 # transaction
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
462 for rev in smartset.spanset(repo, start=origrepolen):
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
463 ctx = unfi[rev]
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
464 tns = ctx.topic_namespace()
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
465 affected.add(tns)
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
466
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
467 # These are the changesets obsoleted by this transaction
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
468 for rev in obsutil.getobsoleted(repo, tr):
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
469 ctx = unfi[rev]
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
470 tns = ctx.topic_namespace()
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
471 affected.add(tns)
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
472
6498
7ecb0f9cc7f3 topic: report namespace changes in more cases of phase movements
Anton Shestakov <av6@dwimlabs.net>
parents: 6497
diff changeset
473 # Phase movements, we only care about:
7ecb0f9cc7f3 topic: report namespace changes in more cases of phase movements
Anton Shestakov <av6@dwimlabs.net>
parents: 6497
diff changeset
474 # - publishing changesets (since they lose topic namespace)
7ecb0f9cc7f3 topic: report namespace changes in more cases of phase movements
Anton Shestakov <av6@dwimlabs.net>
parents: 6497
diff changeset
475 # - forcefully making changesets draft again
7ecb0f9cc7f3 topic: report namespace changes in more cases of phase movements
Anton Shestakov <av6@dwimlabs.net>
parents: 6497
diff changeset
476 # - turning secret changesets draft and making them visible to peers
7ecb0f9cc7f3 topic: report namespace changes in more cases of phase movements
Anton Shestakov <av6@dwimlabs.net>
parents: 6497
diff changeset
477 tnsphases = (phases.secret, phases.draft)
6544
44bc900ba5db topic: compatibility for tr.changes[b'phases'] in hg 5.3 and older
Anton Shestakov <av6@dwimlabs.net>
parents: 6542
diff changeset
478 phasechanges = tr.changes[b'phases']
44bc900ba5db topic: compatibility for tr.changes[b'phases'] in hg 5.3 and older
Anton Shestakov <av6@dwimlabs.net>
parents: 6542
diff changeset
479 if isinstance(phasechanges, dict):
44bc900ba5db topic: compatibility for tr.changes[b'phases'] in hg 5.3 and older
Anton Shestakov <av6@dwimlabs.net>
parents: 6542
diff changeset
480 # hg <= 5.3 (fdc802f29b2c)
44bc900ba5db topic: compatibility for tr.changes[b'phases'] in hg 5.3 and older
Anton Shestakov <av6@dwimlabs.net>
parents: 6542
diff changeset
481 phasechanges = [((k,), v) for k, v in phasechanges.items()]
44bc900ba5db topic: compatibility for tr.changes[b'phases'] in hg 5.3 and older
Anton Shestakov <av6@dwimlabs.net>
parents: 6542
diff changeset
482 for revs, (old, new) in phasechanges:
6498
7ecb0f9cc7f3 topic: report namespace changes in more cases of phase movements
Anton Shestakov <av6@dwimlabs.net>
parents: 6497
diff changeset
483 if old not in tnsphases and new not in tnsphases:
7ecb0f9cc7f3 topic: report namespace changes in more cases of phase movements
Anton Shestakov <av6@dwimlabs.net>
parents: 6497
diff changeset
484 # Skip phase movement if there is no phase (old or new) that has
7ecb0f9cc7f3 topic: report namespace changes in more cases of phase movements
Anton Shestakov <av6@dwimlabs.net>
parents: 6497
diff changeset
485 # visible topic namespace (i.e. draft and secret)
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
486 continue
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
487 revs = [rev for rev in revs if rev < origrepolen]
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
488 for rev in revs:
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
489 ctx = unfi[rev]
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
490 tns = ctx.topic_namespace(force=True)
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
491 affected.add(tns)
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
492
6497
4e0f760d332e topic: also find and report topic namespace changes caused by bookmarks
Anton Shestakov <av6@dwimlabs.net>
parents: 6496
diff changeset
493 # We want to detect any bookmark movement, even within one topic namespace
4e0f760d332e topic: also find and report topic namespace changes caused by bookmarks
Anton Shestakov <av6@dwimlabs.net>
parents: 6496
diff changeset
494 for name, nodes in tr.changes[b'bookmarks'].items():
4e0f760d332e topic: also find and report topic namespace changes caused by bookmarks
Anton Shestakov <av6@dwimlabs.net>
parents: 6496
diff changeset
495 for n in nodes:
4e0f760d332e topic: also find and report topic namespace changes caused by bookmarks
Anton Shestakov <av6@dwimlabs.net>
parents: 6496
diff changeset
496 if n is not None and n in unfi:
4e0f760d332e topic: also find and report topic namespace changes caused by bookmarks
Anton Shestakov <av6@dwimlabs.net>
parents: 6496
diff changeset
497 ctx = unfi[n]
4e0f760d332e topic: also find and report topic namespace changes caused by bookmarks
Anton Shestakov <av6@dwimlabs.net>
parents: 6496
diff changeset
498 tns = ctx.topic_namespace()
4e0f760d332e topic: also find and report topic namespace changes caused by bookmarks
Anton Shestakov <av6@dwimlabs.net>
parents: 6496
diff changeset
499 affected.add(tns)
4e0f760d332e topic: also find and report topic namespace changes caused by bookmarks
Anton Shestakov <av6@dwimlabs.net>
parents: 6496
diff changeset
500
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
501 # We don't care about changesets without topic namespace
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
502 affected.discard(b'none')
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
503
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
504 tr.changes[b'tns'] = affected
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
505 report_affected_tns(repo, tr)
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
506
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
507 def report_affected_tns(repo, tr):
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
508 report = set(repo.ui.configlist(b'devel', b'tns-report-transactions'))
6545
7b2bd0332b56 topic: transaction names sometimes need stripping of URLs
Anton Shestakov <av6@dwimlabs.net>
parents: 6544
diff changeset
509 # transaction names sometimes also have a URL after a newline byte
7b2bd0332b56 topic: transaction names sometimes need stripping of URLs
Anton Shestakov <av6@dwimlabs.net>
parents: 6544
diff changeset
510 trnames = (trname.partition(b'\n')[0] for trname in tr._names)
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
511 if b'*' not in report:
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
512 # * matches any transaction
6545
7b2bd0332b56 topic: transaction names sometimes need stripping of URLs
Anton Shestakov <av6@dwimlabs.net>
parents: 6544
diff changeset
513 if not any(trname in report for trname in trnames):
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
514 return
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
515
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
516 if tr.changes[b'tns']:
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
517 repo.ui.status(b'topic namespaces affected: %s\n' % b' '.join(sorted(tr.changes[b'tns'])))
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
518
1871
58ef5699fb35 merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1867
diff changeset
519 def uisetup(ui):
1941
7eb737b7a902 destination: rename 'setupdest' to 'modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1939
diff changeset
520 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
521 discovery.modsetup(ui)
1952
665d6322994e uisetup: add call to 'topicmap.modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1951
diff changeset
522 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
523 setupimportexport(ui)
1871
58ef5699fb35 merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1867
diff changeset
524
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
525 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
526
3159
90515d0bfb08 push: add a --publish flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3158
diff changeset
527 flow.installpushflag(ui)
90515d0bfb08 push: add a --publish flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3158
diff changeset
528
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
529 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
530 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
531 _(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
532
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
533 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
534 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
535 _(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
536
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
537 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
538 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
539 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
540 _(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
541
1951
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
542 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
543 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
544 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
545 else:
d9ee2706487f compat: add support for upstream rename of merge.update() to _update()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5531
diff changeset
546 # 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
547 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
548 # 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
549 # 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
550 # 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
551 # 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
552 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
553
5685
7ee15bf011d6 topic: wrap branch call during summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5680
diff changeset
554 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
555
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
556 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
557 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
558 extensions.wrapfunction(evolve.rewriteutil, "presplitupdate",
6417
c37754bb02d4 topic: rename presplitupdatetopic() to wrappresplitupdate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6410
diff changeset
559 wrappresplitupdate)
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
560 except (KeyError, AttributeError):
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
561 pass
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
562
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
563 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
564
3281
703e8398ac57 topic: move function wrapping from reposetup to uisetup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3235
diff changeset
565 # 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
566 extensions.wrapfunction(context.workingctx, '__init__', wrapinit)
6376
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
567 # Wrap workingctx.branch() to return branch name in the "//" format
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
568 extensions.wrapfunction(context.workingctx, 'branch', wrapwctxbranch)
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
569 # Wrap workingctx.dirty() to check branch//namespace/topic
5c8196a550b6 topic: make hg stack work for branches with double slashes in them
Anton Shestakov <av6@dwimlabs.net>
parents: 6371
diff changeset
570 extensions.wrapfunction(context.workingctx, 'dirty', wrapwctxdirty)
3281
703e8398ac57 topic: move function wrapping from reposetup to uisetup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3235
diff changeset
571 # 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
572 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
573 # 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
574 if util.safehasattr(exchange, '_checkpublish'):
1a81bbc94d45 topic: check that exchange._checkpublish() exists before wrapping it
Anton Shestakov <av6@dwimlabs.net>
parents: 5221
diff changeset
575 extensions.wrapfunction(exchange, '_checkpublish',
1a81bbc94d45 topic: check that exchange._checkpublish() exists before wrapping it
Anton Shestakov <av6@dwimlabs.net>
parents: 5221
diff changeset
576 flow.replacecheckpublish)
5232
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
577 else:
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
578 # hg <= 4.8 (33d30fb1e4ae)
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
579 try:
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
580 evolve = extensions.find(b'evolve')
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
581 extensions.wrapfunction(evolve.safeguard, '_checkpublish',
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
582 flow.replacecheckpublish)
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
583 except (KeyError, AttributeError):
9ed5f9c5d8ae topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents: 5231
diff changeset
584 pass
1951
0309cac5d91d uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1950
diff changeset
585
6117
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
586 try:
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
587 histedit = extensions.find(b'histedit')
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
588 except KeyError:
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
589 pass
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
590 else:
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
591 # 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
592 extensions.wrapfunction(histedit.histeditaction, 'applychange',
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
593 applychangewrap)
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
594
6537
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
595 # Wrapping precheck() both in core and in evolve to make sure all rewrite
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
596 # operations that could use precheck() are covered
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
597 extensions.wrapfunction(rewriteutil, 'precheck', wrapprecheck)
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
598 try:
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
599 evolve = extensions.find(b'evolve')
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
600 extensions.wrapfunction(evolve.rewriteutil, 'precheck', wrapprecheck)
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
601 except (KeyError, AttributeError):
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
602 pass
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
603
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5111
diff changeset
604 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
605
6561
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
606 # We want bundle repos to also have caches for topic extension, because we
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
607 # want to, for example, see topic and topic namespaces in `hg incoming`
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
608 # regardless if the bundle repo has topic extension, as long as local repo
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
609 # has topic enabled.
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
610 class topicbundlerepo(bundlerepo.bundlerepository):
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
611 @util.propertycache
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
612 def _tnscache(self):
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
613 return {}
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
614
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
615 @util.propertycache
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
616 def _topiccache(self):
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
617 return {}
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
618
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
619 def invalidatecaches(self):
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
620 self._tnscache.clear()
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
621 self._topiccache.clear()
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
622 super(topicbundlerepo, self).invalidatecaches()
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
623
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
624 bundlerepo.bundlerepository = topicbundlerepo
d08590ce067d topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents: 6560
diff changeset
625
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
626 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
627 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
628 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
629
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
630 repo = repo.unfiltered()
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
631
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
632 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
633 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
634 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
635
5688
b1e057fb7837 topic: disable inmemory rebase to avoid losing the topic
Matt Harbison <matt_harbison@yahoo.com>
parents: 5644
diff changeset
636 # 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
637 # 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
638 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
639 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
640 source=b'topic-extension')
b1e057fb7837 topic: disable inmemory rebase to avoid losing the topic
Matt Harbison <matt_harbison@yahoo.com>
parents: 5644
diff changeset
641
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
642 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
643
4531
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
644 # 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
645 hastopicext = True
1d1f8f56daac topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4524
diff changeset
646
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
647 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
648 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
649 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
650 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
651 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
652 mode = b'all'
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
653 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
654 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
655 mode = b'auto'
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
656 else:
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
657 mode = b'none'
2de59d916266 auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5242
diff changeset
658 caps.add(b'ext-topics-publish=%s' % mode)
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
659 caps.add(b'ext-topics-tns-heads')
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
660 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
661
1858
4ab1b854ce4e topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents: 1857
diff changeset
662 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
663 configoverride = util.nullcontextmanager()
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
664 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
665 # 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
666 configoverride = self.ui.configoverride({
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
667 (b'ui', b'allowemptycommit'): True
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
668 })
de0151ba3e46 topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 4942
diff changeset
669 with configoverride:
2288
b6ea9049693d topic: directly use "super" call
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2012
diff changeset
670 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
671
4842
ee0866a279da topic: fix some API to make it more robust
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 4790
diff changeset
672 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
673 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
674 current = self.currenttopic
6536
90b631fde2d7 topic: only set topic on workingcommitctx if it doesn't already have one
Anton Shestakov <av6@dwimlabs.net>
parents: 6529
diff changeset
675 if current and constants.extrakey not in ctx.extra():
1855
f241a00e93a7 topics: only apply topic to commits of the working copy
Matt Mackall <mpm@selenic.com>
parents: 1854
diff changeset
676 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
677 return super(topicrepo, self).commitctx(ctx, *args, **kwargs)
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
678
5680
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
679 @util.propertycache
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
680 def _tnscache(self):
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
681 return {}
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
682
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
683 @property
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
684 def topic_namespaces(self):
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
685 if self._topic_namespaces is not None:
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
686 return self._topic_namespaces
6489
71a8d4db4f55 topic: don't show "none" in the list of topic namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
687 namespaces = set([b'none', self.currenttns])
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
688 for c in self.set(b'not public()'):
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
689 namespaces.add(c.topic_namespace())
6489
71a8d4db4f55 topic: don't show "none" in the list of topic namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
690 namespaces.remove(b'none')
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
691 self._topic_namespaces = namespaces
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
692 return namespaces
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
693
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
694 @property
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
695 def currenttns(self):
6610
ae7c75c43f92 topic: properly decode topic and topic namespace after reading from disk
Anton Shestakov <av6@dwimlabs.net>
parents: 6598
diff changeset
696 tns = self.vfs.tryread(b'topic-namespace') or b'none'
ae7c75c43f92 topic: properly decode topic and topic namespace after reading from disk
Anton Shestakov <av6@dwimlabs.net>
parents: 6598
diff changeset
697 return encoding.tolocal(tns)
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
698
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
699 @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
700 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
701 return {}
18a70ae9fb0b topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5646
diff changeset
702
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
703 @property
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
704 def topics(self):
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
705 if self._topics is not None:
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
706 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
707 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
708 for c in self.set(b'not public()'):
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
709 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
710 topics.remove(b'')
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
711 self._topics = topics
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
712 return topics
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
713
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
714 @property
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
715 def currenttopic(self):
6610
ae7c75c43f92 topic: properly decode topic and topic namespace after reading from disk
Anton Shestakov <av6@dwimlabs.net>
parents: 6598
diff changeset
716 topic = self.vfs.tryread(b'topic')
ae7c75c43f92 topic: properly decode topic and topic namespace after reading from disk
Anton Shestakov <av6@dwimlabs.net>
parents: 6598
diff changeset
717 return encoding.tolocal(topic)
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
718
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
719 # overwritten at the instance level by topicmap.py
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
720 _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
721
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
722 def branchmap(self, topic=None, convertbm=False):
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
723 if topic is None:
3880
28dadd024299 topic: use self instead of repo in topicrepo methods
Anton Shestakov <av6@dwimlabs.net>
parents: 3834
diff changeset
724 topic = getattr(self, '_autobranchmaptopic', False)
2653
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
725 topicfilter = topicmap.topicfilter(self.filtername)
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
726 if not topic or topicfilter == self.filtername:
13313d0cab71 topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2652
diff changeset
727 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
728 bm = self.filtered(topicfilter).branchmap()
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
729 if convertbm:
6333
f4ffe1e67a9b topic: move compatibility for branchcache._entries to topic/compat.py
Anton Shestakov <av6@dwimlabs.net>
parents: 6320
diff changeset
730 entries = compat.bcentries(bm)
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
731 for key in list(entries):
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
732 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
733 if topic:
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
734 value = entries.pop(key)
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
735 # 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
736 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
737 entries[key] = value
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
738 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
739
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
740 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
741 """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
742 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
743 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
744 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
745 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
746 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
747 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
748
4704
5f90eb8fd63c evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4669
diff changeset
749 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
750 if branch is None:
6600
421dc5c11108 topic: use dirstate.branch() instead of wdir.branch()
Anton Shestakov <av6@dwimlabs.net>
parents: 6599
diff changeset
751 # using dirstate.branch() instead of self[None].branch()
421dc5c11108 topic: use dirstate.branch() instead of wdir.branch()
Anton Shestakov <av6@dwimlabs.net>
parents: 6599
diff changeset
752 # because we wrap context.branch method to return branch
421dc5c11108 topic: use dirstate.branch() instead of wdir.branch()
Anton Shestakov <av6@dwimlabs.net>
parents: 6599
diff changeset
753 # already in FQBN format, and we can't give it to formatfqbn()
421dc5c11108 topic: use dirstate.branch() instead of wdir.branch()
Anton Shestakov <av6@dwimlabs.net>
parents: 6599
diff changeset
754 # again directly
421dc5c11108 topic: use dirstate.branch() instead of wdir.branch()
Anton Shestakov <av6@dwimlabs.net>
parents: 6599
diff changeset
755 branch = self.dirstate.branch()
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6268
diff changeset
756 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
757 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
758 start=start,
5f90eb8fd63c evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4669
diff changeset
759 closed=closed)
5f90eb8fd63c evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4669
diff changeset
760
6360
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
761 def invalidatecaches(self):
6554
ba8354de1c4d topic: invalidate topic namespace cache in repo.invalidatecaches()
Anton Shestakov <av6@dwimlabs.net>
parents: 6536
diff changeset
762 self._tnscache.clear()
6360
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
763 self._topiccache.clear()
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
764 super(topicrepo, self).invalidatecaches()
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
765
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
766 def invalidatevolatilesets(self):
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
767 # 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
768 super(topicrepo, self).invalidatevolatilesets()
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
769 self._topic_namespaces = None
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
770 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
771
6360
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
772 def peer(self, *args, **kwargs):
e959390490c2 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336
diff changeset
773 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
774 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
775 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
776 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
777 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
778 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
779
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6294
diff changeset
780 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
781 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
782 return self._repo.branchmaptns(topic=usetopic)
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
783
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
784 def tns_heads(self, namespaces):
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
785 if b'*' in namespaces:
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
786 # pulling all topic namespaces, all changesets are visible
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
787 return self._repo.heads()
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
788 else:
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
789 # only changesets in the selected topic namespaces are visible
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
790 h = []
6573
d511eba4cdb0 topic: compatibility for branchmaptns with branchmap from hg 5.0
Anton Shestakov <av6@dwimlabs.net>
parents: 6566
diff changeset
791 entries = compat.bcentries(self._repo.branchmaptns())
d511eba4cdb0 topic: compatibility for branchmaptns with branchmap from hg 5.0
Anton Shestakov <av6@dwimlabs.net>
parents: 6566
diff changeset
792 for branch, nodes in compat.branchmapitems(entries):
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
793 namedbranch, tns, topic = common.parsefqbn(branch)
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
794 if tns == b'none' or tns in namespaces:
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
795 h.extend(nodes)
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6545
diff changeset
796 return h
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
797 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
798 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
799
2989
53246d237373 topic: skip topic movement message during strip
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2986
diff changeset
800 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
801 ctr = self.currenttransaction()
2989
53246d237373 topic: skip topic movement message during strip
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2986
diff changeset
802 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
803 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
804 return tr
2986
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
805
3158
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
806 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
807 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
808 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
809 # hg <= 5.3 (36f08ae87ef6)
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
810 origvalidator_single_head = tr._validator
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
811
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
812 def _validate_single_head(tr2):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
813 repo = reporef()
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
814 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
815
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
816 def validator(tr2):
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
817 _validate_single_head(tr2)
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
818 return origvalidator_single_head(tr2)
4123
119fced5a891 topic: add a compatibility to access transaction's validator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4117
diff changeset
819
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
820 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
821 # 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
822 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
823 else:
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
824 tr.addvalidator(b'000-enforce-single-head', _validate_single_head)
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
825
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
826 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
827 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
828 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
829 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
830 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
831 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
832 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
833 # hg <= 5.3 (36f08ae87ef6)
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
834 origvalidator_untopiced = 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
835
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
836 def _validate_untopiced(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
837 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
838 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
839
8a772f0c54d9 topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3232
diff changeset
840 def validator(tr2):
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
841 _validate_untopiced(tr2)
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
842 return origvalidator_untopiced(tr2)
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
843
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
844 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
845 # 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
846 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
847 else:
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
848 tr.addvalidator(b'000-reject-untopiced', _validate_untopiced)
3235
8a772f0c54d9 topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3232
diff changeset
849
5930
8d36bfe9968a topic: add more variables to make a condition fit on one line
Anton Shestakov <av6@dwimlabs.net>
parents: 5919
diff changeset
850 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
851 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
852 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
853
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
854 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
855 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
856 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
857 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
858 origclose()
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
859 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
860 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
861 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
862 True)
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
863 if not allow_publish:
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
864 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
865 # hg <= 5.3 (36f08ae87ef6)
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
866 origvalidator_publish = tr._validator
4647
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
867
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
868 def _validate_publish(tr2):
4647
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
869 repo = reporef()
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
870 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
871
228caeb8b7af topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4646
diff changeset
872 def validator(tr2):
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
873 _validate_publish(tr2)
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
874 return origvalidator_publish(tr2)
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
875
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
876 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
877 # 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
878 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
879 else:
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
880 tr.addvalidator(b'000-reject-publish', _validate_publish)
3158
678a9802c56b topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3157
diff changeset
881
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
882 if util.safehasattr(tr, '_validator'):
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
883 # hg <= 5.3 (36f08ae87ef6)
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
884 origvalidator_affected_tns = tr._validator
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
885
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
886 def _validate_affected_tns(tr2):
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
887 repo = reporef()
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
888 find_affected_tns(repo, tr2)
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
889
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
890 def validator(tr2):
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
891 result = origvalidator_affected_tns(tr2)
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
892 _validate_affected_tns(tr2)
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
893 return result
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
894
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
895 if util.safehasattr(tr, '_validator'):
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
896 # hg <= 5.3 (36f08ae87ef6)
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
897 tr._validator = validator
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
898 else:
6574
054a7c342463 topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
899 tr.addvalidator(b'999-find-affected-tns', _validate_affected_tns)
6496
fba501baf5cb topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents: 6489
diff changeset
900
2988
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
901 # real transaction start
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
902 ct = self.currenttopic
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
903 if not ct:
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
904 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
905 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
906
2986
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
907 reporef = weakref.ref(self)
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
908
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
909 def currenttopicempty(tr):
3225
28fb347a5bf8 typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents: 3195
diff changeset
910 # check active topic emptiness
2986
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
911 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
912 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
913 empty = csetcount == 0
62201935e1a7 topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents: 2987
diff changeset
914 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
915 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
916 % 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
917 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
918 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
919 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
920 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
921 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
922 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
923 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
924 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
925 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
926 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
927 else:
5132
fb5f49be3c90 topic: use `%d` for integers instead of `%s` on py3
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5110
diff changeset
928 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
929 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
930
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
931 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
932 return tr
4746b92cc1f8 topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents: 2985
diff changeset
933
1857
a506ed8ab8da topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents: 1856
diff changeset
934 repo.__class__ = topicrepo
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
935 repo._topic_namespaces = None
1999
fe76e9c92fff init: cache repo.topics
timeless@gmail.com
parents: 1998
diff changeset
936 repo._topics = None
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
937 if util.safehasattr(repo, 'names'):
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
938 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
939 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
940 listnames=lambda repo: repo.topics))
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
941
5183
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
942 templatekeyword = registrar.templatekeyword()
4152
fb22c7a6ca8b topic: add topicidx template keyword
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4126
diff changeset
943
5183
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
944 @templatekeyword(b'topic', requires={b'ctx'})
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
945 def topickw(context, mapping):
6409
77c4f9773aea topic: remove templatekeyword name, not needed after 119702a8b415
Anton Shestakov <av6@dwimlabs.net>
parents: 6406
diff changeset
946 """String. The topic of the changeset"""
5183
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
947 ctx = context.resource(mapping, b'ctx')
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
948 return ctx.topic()
3384
2b06f144b6e0 topics: add a new templatekeyword `topic`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3372
diff changeset
949
5183
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
950 @templatekeyword(b'topicidx', requires={b'ctx'})
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
951 def topicidxkw(context, mapping):
6409
77c4f9773aea topic: remove templatekeyword name, not needed after 119702a8b415
Anton Shestakov <av6@dwimlabs.net>
parents: 6406
diff changeset
952 """Integer. Index of the changeset as a stack alias"""
5183
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
953 ctx = context.resource(mapping, b'ctx')
9ac6779d608c topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents: 5164
diff changeset
954 return ctx.topicidx()
4152
fb22c7a6ca8b topic: add topicidx template keyword
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 4126
diff changeset
955
6241
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
956 @templatekeyword(b'topic_namespace', requires={b'ctx'})
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
957 def topicnamespacekw(context, mapping):
6409
77c4f9773aea topic: remove templatekeyword name, not needed after 119702a8b415
Anton Shestakov <av6@dwimlabs.net>
parents: 6406
diff changeset
958 """String. The topic namespace of the changeset"""
6241
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
959 ctx = context.resource(mapping, b'ctx')
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
960 return ctx.topic_namespace()
85abf58c3d8c topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6240
diff changeset
961
6243
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
962 @templatekeyword(b'fqbn', requires={b'ctx'})
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
963 def fqbnkw(context, mapping):
6409
77c4f9773aea topic: remove templatekeyword name, not needed after 119702a8b415
Anton Shestakov <av6@dwimlabs.net>
parents: 6406
diff changeset
964 """String. The branch//namespace/topic of the changeset"""
6243
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
965 ctx = context.resource(mapping, b'ctx')
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
966 return ctx.fqbn()
91d9a279b84a topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 6242
diff changeset
967
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
968 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
969 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
970 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
971 return
6240
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
972 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
973 if getattr(repo, 'currenttns', b''):
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
974 self._extra[b'topic-namespace'] = repo.currenttns
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
975 else:
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
976 # Default value will be dropped from extra by another hack at the changegroup level
6487
963471ebe26a topic: make topic namespace use string "none" as the default/empty value
Anton Shestakov <av6@dwimlabs.net>
parents: 6480
diff changeset
977 self._extra[b'topic-namespace'] = b'none'
4125
865c33c16508 topic: respect preexisting 'topic' value on workingcommitctx
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4124
diff changeset
978 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
979 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
980 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
981 else:
865c33c16508 topic: respect preexisting 'topic' value on workingcommitctx
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4124
diff changeset
982 # 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
983 self._extra[constants.extrakey] = b''
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
984
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
985 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
986 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
987 filesadded=None, filesremoved=None):
6487
963471ebe26a topic: make topic namespace use string "none" as the default/empty value
Anton Shestakov <av6@dwimlabs.net>
parents: 6480
diff changeset
988 if b'topic-namespace' in extra and extra[b'topic-namespace'] == b'none':
6240
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
989 extra = extra.copy()
2686ecc90791 topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents: 6239
diff changeset
990 del extra[b'topic-namespace']
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
991 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
992 extra = extra.copy()
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
993 del extra[constants.extrakey]
6549
e45bfd1e0588 topic: don't write namespace into commit extras if there's no topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6548
diff changeset
994 if constants.extrakey not in extra and b'topic-namespace' in extra:
e45bfd1e0588 topic: don't write namespace into commit extras if there's no topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6548
diff changeset
995 # if topic is not in extra, drop namespace as well
e45bfd1e0588 topic: don't write namespace into commit extras if there's no topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6548
diff changeset
996 extra = extra.copy()
e45bfd1e0588 topic: don't write namespace into commit extras if there's no topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6548
diff changeset
997 del extra[b'topic-namespace']
4522
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
998 # hg <= 4.9 (0e41f40b01cc)
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
999 kwargs = {}
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
1000 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
1001 kwargs['p1copies'] = p1copies
001eb0f11bcd topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents: 4519
diff changeset
1002 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
1003 kwargs['p2copies'] = p2copies
4646
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
1004 # hg <= 5.0 (f385ba70e4af)
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
1005 if filesadded is not None:
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
1006 kwargs['filesadded'] = filesadded
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
1007 if filesremoved is not None:
7b986968700b compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4628
diff changeset
1008 kwargs['filesremoved'] = filesremoved
2928
6275808e89ef topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents: 2924
diff changeset
1009 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
1010 date=date, extra=extra, **kwargs)
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
1011
6117
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
1012 def applychangewrap(orig, self):
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
1013 orig(self)
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
1014 repo = self.repo
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
1015 rulectx = repo[self.node]
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
1016
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
1017 topic = None
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
1018 if util.safehasattr(rulectx, 'topic'):
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
1019 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
1020 _changecurrenttopic(repo, topic)
6117
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
1021
a27bdd116761 topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents: 6088
diff changeset
1022
2924
430fb1758d28 topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2923
diff changeset
1023 # 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
1024 revsetpredicate = topicrevset.revsetpredicate
430fb1758d28 topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2923
diff changeset
1025
4715
12c8b24757f4 py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents: 4713
diff changeset
1026 @command(b'topics', [
12c8b24757f4 py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents: 4713
diff changeset
1027 (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
1028 (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
1029 (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
1030 (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
1031 (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
1032 ] + commands.formatteropts,
4921
a7c01a2a3974 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4894 4914
diff changeset
1033 _(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
1034 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
1035 )
2991
f4956eb3a456 topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2990
diff changeset
1036 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
1037 """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
1038
2923
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
1039 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
1040
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
1041 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
1042
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
1043 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
1044
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
1045 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
1046
2923
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
1047 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
1048
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
1049 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
1050
2923
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
1051 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
1052
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
1053 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
1054
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
1055 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
1056
2923
8c2d3c474fc6 doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2922
diff changeset
1057 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
1058
2993
725b660d9886 topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2992
diff changeset
1059 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
1060 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
1061
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
1062 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
1063
2717
ed45a5fb4452 topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2712
diff changeset
1064 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
1065
2869
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
1066 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
1067 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
1068 active topic, you can do:
2994
1e8ac0fcd6b7 topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2993
diff changeset
1069 `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
1070
2011
9c7665e3107b documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2008
diff changeset
1071 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
1072
2991
f4956eb3a456 topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2990
diff changeset
1073 clear = opts.get('clear')
f4956eb3a456 topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2990
diff changeset
1074 list = opts.get('list')
f4956eb3a456 topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2990
diff changeset
1075 rev = opts.get('rev')
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
1076 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
1077 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
1078
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
1079 if current and topic:
6318
3e488afe62f5 topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents: 6311
diff changeset
1080 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
1081 if current and clear:
6318
3e488afe62f5 topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents: 6311
diff changeset
1082 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
1083 if clear and topic:
6318
3e488afe62f5 topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents: 6311
diff changeset
1084 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
1085 if age and topic:
6318
3e488afe62f5 topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents: 6311
diff changeset
1086 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
1087
6320
0c780d972350 topic: use check_incompatible_arguments() for --list with --clear or --rev
Anton Shestakov <av6@dwimlabs.net>
parents: 6319
diff changeset
1088 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
1089
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
1090 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
1091 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
1092 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
1093
2889
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
1094 if topic:
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
1095 topic = topic.strip()
31cbace4c0f1 topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2869
diff changeset
1096 if not topic:
6319
8c664ed9c103 topic: use compat.InputError for invalid topic names
Anton Shestakov <av6@dwimlabs.net>
parents: 6318
diff changeset
1097 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
1098 # 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
1099 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
1100
6611
1dc008b6ad21 topic: add a missing comma in the topic name rejection message
Anton Shestakov <av6@dwimlabs.net>
parents: 6610
diff changeset
1101 helptxt = _(b"topic names can only consist of alphanumeric, '-',"
6206
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
1102 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
1103 try:
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
1104 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
1105 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
1106 # 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
1107 # 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
1108 utopic = ''
2ec9c87e8574 topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents: 6205
diff changeset
1109 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
1110 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
1111 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
1112
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
1113 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
1114 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
1115 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
1116 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
1117 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
1118 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
1119 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
1120 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
1121
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
1122 if touchedrevs:
1851
67d53e8e0c1a topic: only require obsolete support for --change
Matt Mackall <mpm@selenic.com>
parents: 1850
diff changeset
1123 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
1124 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
1125 if clear:
2e3f63f4a519 topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2644
diff changeset
1126 topic = None
2869
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
1127 elif opts.get('current'):
b629874ccaac topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2868
diff changeset
1128 topic = repo.currenttopic
2645
2e3f63f4a519 topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2644
diff changeset
1129 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
1130 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
1131 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
1132 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
1133 wl = lock = txn = None
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1134 try:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1135 wl = repo.wlock()
3124
6ef274e01f64 flake8: rename some ambiguous identifier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3097
diff changeset
1136 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
1137 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
1138 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
1139 txn.close()
4268
d5a2cc19903f topics: improve the message around topic changing
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 4253
diff changeset
1140 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
1141 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
1142 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
1143 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
1144 topic))
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1145 finally:
3124
6ef274e01f64 flake8: rename some ambiguous identifier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3097
diff changeset
1146 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
1147 repo.invalidate()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1148 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
1149
2985
f63c97c01f92 topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents: 2984
diff changeset
1150 ct = repo.currenttopic
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
1151 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
1152 if ct:
4652
b72cd597a887 stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents: 4647
diff changeset
1153 st = stack.stack(repo, topic=ct)
b72cd597a887 stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents: 4647
diff changeset
1154 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
1155 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
1156 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
1157
1860
b7b9e5028c2a topics: consistently use empty string instead of None
Matt Mackall <mpm@selenic.com>
parents: 1859
diff changeset
1158 if topic:
2985
f63c97c01f92 topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents: 2984
diff changeset
1159 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
1160 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
1161 % 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
1162 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
1163
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1164 ui.pager(b'topics')
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
1165 # `hg topic --current`
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
1166 ret = 0
2985
f63c97c01f92 topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents: 2984
diff changeset
1167 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
1168 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
1169 ret = 1
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
1170 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
1171 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
1172 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
1173 label = b'topic.active'
2867
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
1174 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
1175 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
1176 fm.end()
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
1177 else:
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
1178 _listtopics(ui, repo, opts)
5c0b6af37b21 topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2866
diff changeset
1179 return ret
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
1180
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1181 @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
1182 (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
1183 _(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
1184 ] + commands.formatteropts,
4894
f9743b13de6d help: categorizing evolve and topic commands
Rodrigo Damazio <rdamazio@google.com>
parents: 4892
diff changeset
1185 _(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
1186 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
1187 )
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 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
1189 """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
1190
2750
bd3824d1b795 stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2744
diff changeset
1191 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
1192
bd3824d1b795 stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2744
diff changeset
1193 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
1194 """
1990
71410fa2c253 stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1989
diff changeset
1195 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
1196 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
1197 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
1198 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
1199 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
1200 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
1201 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
1202 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
1203 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
1204 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
1205
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1206 @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
1207 (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
1208 (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
1209 ],
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1210 _(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
1211 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
1212 """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
1213 """
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1214
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1215 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
1216 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
1217
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1218 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
1219 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
1220 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
1221 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
1222
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1223 bmstore = repo._bookmarks
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1224
2900
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1225 nodetobook = {}
4742
db3e7f6b5ceb py3: switch from iteritems() to items() in the topics extension
Martin von Zweigbergk <martinvonz@google.com>
parents: 4719
diff changeset
1226 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
1227 if nodetobook.get(revnode):
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1228 nodetobook[revnode].append(book)
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1229 else:
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1230 nodetobook[revnode] = [book]
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1231
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1232 # 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
1233 # warning repeatedly
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1234 skipped = []
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1235
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1236 actions = {}
2899
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1237
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1238 lock = wlock = tr = None
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1239 try:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1240 wlock = repo.wlock()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1241 lock = repo.lock()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1242 if bookmark:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1243 try:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1244 node = bmstore[bookmark]
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1245 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
1246 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
1247
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1248 revnum = repo[node].rev()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1249 if len(nodetobook[node]) > 1:
5922
8bffab1e7c4f topic: make two almost identical messages actually identical
Anton Shestakov <av6@dwimlabs.net>
parents: 5920
diff changeset
1250 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
1251 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
1252 return
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1253 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
1254 if targetrevs:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1255 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
1256
2908
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1257 elif convertall:
4742
db3e7f6b5ceb py3: switch from iteritems() to items() in the topics extension
Martin von Zweigbergk <martinvonz@google.com>
parents: 4719
diff changeset
1258 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
1259 revnum = repo[revnode].rev()
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1260 if revnum in skipped:
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1261 continue
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1262 if len(nodetobook[revnode]) > 1:
5922
8bffab1e7c4f topic: make two almost identical messages actually identical
Anton Shestakov <av6@dwimlabs.net>
parents: 5920
diff changeset
1263 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
1264 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
1265 skipped.append(revnum)
1928e9c802dd convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2899
diff changeset
1266 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
1267 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
1268 continue
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1269 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
1270 if targetrevs:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1271 actions[(bmark, revnum)] = targetrevs
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1272
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1273 if actions:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1274 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
1275 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
1276 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
1277 _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
1278 tr.close()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1279 finally:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1280 tr.release()
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1281 finally:
95bb27b8918c convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2907
diff changeset
1282 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
1283
2906
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1284 # 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
1285 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
1286 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
1287 ancestors(bookmark(%s))
2909
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1288 and not ancestors(
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1289 (
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1290 (head() and not bookmark(%s))
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1291 or (bookmark() - bookmark(%s))
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1292 ) - (
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1293 descendants(bookmark(%s))
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1294 - 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
1295 )
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1296 )
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1297 )
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1298 """
92566275be77 convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2905
diff changeset
1299
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1300 def _findconvertbmarktopic(repo, bmark):
3225
28fb347a5bf8 typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents: 3195
diff changeset
1301 """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
1302
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1303 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
1304 """
2909
9ce092b17530 convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2908
diff changeset
1305 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
1306
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1307 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
1308 """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
1309
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1310 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
1311 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
1312
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1313 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
1314 """
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1315
2907
d617128279f6 converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2906
diff changeset
1316 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
1317 # 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
1318 # 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
1319 # 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
1320 # changeset
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1321 if rewrote == 0:
32306ee32806 topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2898
diff changeset
1322 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
1323 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
1324 rewrote))
5721
242a0530823a cleanup: ensure log and output messages have a '\n' terminator
Matt Harbison <matt_harbison@yahoo.com>
parents: 5689
diff changeset
1325 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
1326 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
1327
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
1328 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
1329 """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
1330
9c0b293c2785 topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2657
diff changeset
1331 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
1332 with repo.wlock():
6204
364ef033da03 topic: shorter code to write current topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6155
diff changeset
1333 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
1334 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
1335 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
1336 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
1337
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
1338 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
1339 """ 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
1340 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
1341 """
2642
92e882a82aaf topics: factor out the logic to change topic in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2625
diff changeset
1342 rewrote = 0
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1343 p1 = None
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1344 p2 = None
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1345 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
1346 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
1347 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
1348
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
1349 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
1350 # 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
1351 # 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
1352 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
1353 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
1354 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
1355 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
1356
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1357 def filectxfn(repo, ctx, path):
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1358 try:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1359 return c[path]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1360 except error.ManifestLookupError:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1361 return None
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1362 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
1363 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
1364 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
1365 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
1366 if oldtopic == newtopic:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1367 continue
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1368 if newtopic is None:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1369 del fixedextra[constants.extrakey]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1370 else:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1371 fixedextra[constants.extrakey] = newtopic
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1372 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
1373 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
1374 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
1375 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
1376 # 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
1377 # 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
1378 # 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
1379 p1 = c.p1().node()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1380 p2 = c.p2().node()
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1381 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
1382 p1 = successors[p1][0]
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1383 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
1384 p2 = successors[p2][0]
3040
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1385 mc = context.memctx(repo,
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1386 (p1, p2),
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1387 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
1388 files,
3040
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1389 filectxfn,
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1390 user=c.user(),
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1391 date=c.date(),
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1392 extra=fixedextra)
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1393
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1394 # phase handling
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1395 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
1396 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
1397 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
1398 newnode = repo.commitctx(mc)
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1399
3038
103244e34a9c topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3030
diff changeset
1400 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
1401 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
1402 rewrote += 1
3038
103244e34a9c topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3030
diff changeset
1403
103244e34a9c topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3030
diff changeset
1404 # 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
1405 # 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
1406 # 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
1407 scmutil.cleanupnodes(repo, successors, b'changetopics')
3040
a05b6580f71c topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3038
diff changeset
1408
2850
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1409 # move the working copy too
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1410 wctx = repo[None]
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1411 # 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
1412 if len(wctx.parents()) == 1:
a0d6741d4bb8 topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2831
diff changeset
1413 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
1414 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
1415 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
1416 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
1417
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1418 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
1419 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
1420 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
1421 namemask = b'%s'
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1422 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
1423 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
1424 namemask = b'%%-%is' % maxwidth
4303
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1425 if opts.get('age'):
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1426 # here we sort by age and topic name
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1427 topicsdata = sorted(_getlasttouched(repo, repo.topics))
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1428 else:
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1429 # here we sort by topic name only
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1430 topicsdata = (
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1431 (None, topic, None, None)
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1432 for topic in sorted(repo.topics)
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1433 )
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1434 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
1435 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
1436 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
1437 label = b'topic'
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1438 active = (topic == activetopic)
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1439 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
1440 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
1441 label = b'topic.active'
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1442 if not ui.quiet:
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1443 # 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
1444 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
1445 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
1446 fm.data(active=active)
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1447
3372
4138771105bb topics: list only topic names in quiet mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3371
diff changeset
1448 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
1449 fm.plain(b'\n')
3372
4138771105bb topics: list only topic names in quiet mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3371
diff changeset
1450 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
1451 fm.plain(b' (')
4303
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1452 if date:
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1453 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
1454 timestr = b'empty and active'
4303
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1455 else:
78700a59192a topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents: 4302
diff changeset
1456 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
1457 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
1458 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
1459 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
1460 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
1461 fm.plain(b', ')
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1462 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
1463 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
1464 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
1465 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
1466 label=b'topic.list.branches')
3059
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1467
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1468 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
1469 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
1470 label=b'topic.list.changesetcount')
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1471
4581
48521a49a07e stack: rename troubledcount to unstablecount
Anton Shestakov <av6@dwimlabs.net>
parents: 4574
diff changeset
1472 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
1473 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
1474 fm.write(b'unstablecount', b'%d unstable',
4581
48521a49a07e stack: rename troubledcount to unstablecount
Anton Shestakov <av6@dwimlabs.net>
parents: 4574
diff changeset
1475 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
1476 label=b'topic.list.unstablecount')
3059
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1477
3060
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1478 headcount = len(data.heads)
f43a310c4338 topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3059
diff changeset
1479 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
1480 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
1481 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
1482 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
1483 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
1484
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
1485 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
1486 # 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
1487
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1488 behindcount = data.behindcount
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1489 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
1490 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
1491 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
1492 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
1493 label=b'topic.list.behindcount')
3059
02b220984b01 topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3057
diff changeset
1494 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
1495 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
1496 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
1497 _(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
1498 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
1499 fm.plain(b')\n')
1975
acbbf7f0751e topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1974
diff changeset
1500 fm.end()
1974
20fb4195bfc4 topic: extract the code listing all topics
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 1973
diff changeset
1501
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
1502 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
1503 """
4302
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1504 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
1505 (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
1506 """
d39942773163 topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2718
diff changeset
1507 curtime = time.time()
4302
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1508 for topic in topics:
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1509 age = -1
2993
725b660d9886 topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2992
diff changeset
1510 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
1511 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
1512 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
1513 # 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
1514 # 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
1515 # 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
1516 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
1517 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
1518 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
1519 # 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
1520 # 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
1521 maxtime = rt
2993
725b660d9886 topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2992
diff changeset
1522 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
1523 # 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
1524 # last touch time.
4942
acc7e27fa5c6 topic: drop compat.getmarkers() and use obsutil.getmarkers() directly
Anton Shestakov <av6@dwimlabs.net>
parents: 4921
diff changeset
1525 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
1526 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
1527 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
1528 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
1529 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
1530 maxtime = rt
2993
725b660d9886 topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2992
diff changeset
1531
3371
753e5ebabe7d topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 3297
diff changeset
1532 username = stack.parseusername(user)
4302
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1533 if trevs:
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1534 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
1535
4302
8e9940f1ae56 topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents: 4285
diff changeset
1536 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
1537
1848
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
1538 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
1539 t = getattr(repo, 'currenttopic', b'')
1848
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
1540 if not t:
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
1541 return
9a81657deec2 summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents: 1847
diff changeset
1542 # 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
1543 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
1544
3022
255e66783505 topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3021
diff changeset
1545 _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
1546 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
1547 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
1548 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
1549 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
1550 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
1551 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
1552 ]
255e66783505 topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3021
diff changeset
1553
3020
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1554 def _configtopicmode(ui):
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1555 """ 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
1556 """
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 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
1558
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1559 # 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
1560 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
1561 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
1562 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
1563 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
1564 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
1565 topicmode = _validmode[0]
3020
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1566
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1567 return topicmode
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1568
1850
0da6bf86b718 commit: add a --topic flag
Matt Mackall <mpm@selenic.com>
parents: 1849
diff changeset
1569 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
1570 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
1571 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
1572 with repo.wlock():
3020
361d83261d7a topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents: 3014
diff changeset
1573 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
1574 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
1575
89855920fb0f topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents: 3023
diff changeset
1576 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
1577 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
1578 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
1579 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
1580
3030
581a6b9d2c8c test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3028
diff changeset
1581 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
1582 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
1583 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
1584 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
1585 mayrandom = True
581a6b9d2c8c test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3028
diff changeset
1586
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1587 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
1588 ismergecommit = False
e814c553ef32 topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3024
diff changeset
1589 mayabort = True
e814c553ef32 topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3024
diff changeset
1590 maywarn = False
e814c553ef32 topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3024
diff changeset
1591
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1592 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
1593 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
1594 t = opts['topic']
6204
364ef033da03 topic: shorter code to write current topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6155
diff changeset
1595 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
1596 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
1597 pass
3024
89855920fb0f topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents: 3023
diff changeset
1598 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
1599 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
1600 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
1601 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
1602 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
1603 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
1604 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
1605 elif notopic and mayrandom:
6204
364ef033da03 topic: shorter code to write current topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6155
diff changeset
1606 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
1607 return orig(ui, repo, *args, **opts)
1850
0da6bf86b718 commit: add a --topic flag
Matt Mackall <mpm@selenic.com>
parents: 1849
diff changeset
1608
1852
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
1609 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
1610 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
1611 if hastopicext(repo):
24662f94d126 topic: only wrap committext for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4533
diff changeset
1612 t = repo.currenttopic
24662f94d126 topic: only wrap committext for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4533
diff changeset
1613 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
1614 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
1615 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
1616 return ret
3084687f7994 commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents: 1851
diff changeset
1617
2983
c0de0010ec30 topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 2982
diff changeset
1618 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
1619 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
1620 topic = opts['topic']
60317988f5ae topic: substitute current topic when `--topic .` is used for outgoing/push
Anton Shestakov <av6@dwimlabs.net>
parents: 5375
diff changeset
1621 if topic == b'.':
60317988f5ae topic: substitute current topic when `--topic .` is used for outgoing/push
Anton Shestakov <av6@dwimlabs.net>
parents: 5375
diff changeset
1622 topic = repo.currenttopic
60317988f5ae topic: substitute current topic when `--topic .` is used for outgoing/push
Anton Shestakov <av6@dwimlabs.net>
parents: 5375
diff changeset
1623 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
1624 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
1625 opts.setdefault('rev', []).extend(topicrevs)
fef934b7ed86 topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 2939
diff changeset
1626 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
1627
1877
69077c65919d topic: handle merge.update function signature change
Augie Fackler <raf@durin42.com>
parents: 1874
diff changeset
1628 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
1629 matcher = kwargs.get('matcher')
e67c526c0a25 update: calculate 'partial' as core does
Sean Farley <sean@farley.io>
parents: 1963
diff changeset
1630 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
1631 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
1632 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
1633 ist0 = False
1853
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1634 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
1635 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
1636
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
1637 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
1638 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
1639 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
1640 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
1641 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
1642 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
1643
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
1644 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
1645 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
1646 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
1647 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
1648 b = ret.branch()
6311
466702ac6c28 topic: complete "//" format support in experimental.topic.linear-merge code
Anton Shestakov <av6@dwimlabs.net>
parents: 6306
diff changeset
1649 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
1650 t = ret.topic()
6311
466702ac6c28 topic: complete "//" format support in experimental.topic.linear-merge code
Anton Shestakov <av6@dwimlabs.net>
parents: 6306
diff changeset
1651 # 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
1652 if t:
6311
466702ac6c28 topic: complete "//" format support in experimental.topic.linear-merge code
Anton Shestakov <av6@dwimlabs.net>
parents: 6306
diff changeset
1653 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
1654 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
1655 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
1656 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
1657 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
1658
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
1659 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
1660 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
1661
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
1662 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
1663 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
1664 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
1665 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
1666 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
1667
4535
8dae14cd076a topic: only wrap mergeupdate for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4534
diff changeset
1668 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
1669 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
1670 # 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
1671 # 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
1672 # 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
1673 # 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
1674 # running.
6245
a54db3e55c88 topic: switch to namespace when updating to a commit, similar to topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6243
diff changeset
1675 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
1676 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
1677 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
1678 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
1679 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
1680 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
1681 if ((not partial and not branchmerge) or isrebase) and not ist0:
6487
963471ebe26a topic: make topic namespace use string "none" as the default/empty value
Anton Shestakov <av6@dwimlabs.net>
parents: 6480
diff changeset
1682 tns = b'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
1683 t = b''
1853
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1684 pctx = repo[node]
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1685 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
1686 tns = pctx.topic_namespace()
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
1687 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
1688 repo.vfs.write(b'topic-namespace', tns)
6487
963471ebe26a topic: make topic namespace use string "none" as the default/empty value
Anton Shestakov <av6@dwimlabs.net>
parents: 6480
diff changeset
1689 if tns != b'none' and tns != otns:
6245
a54db3e55c88 topic: switch to namespace when updating to a commit, similar to topic
Anton Shestakov <av6@dwimlabs.net>
parents: 6243
diff changeset
1690 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
1691 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
1692 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
1693 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
1694 if ot and not t:
4652
b72cd597a887 stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents: 4647
diff changeset
1695 st = stack.stack(repo, topic=ot)
b72cd597a887 stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents: 4647
diff changeset
1696 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
1697 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
1698 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
1699 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
1700 return ret
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1701 finally:
8db7828751b7 topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents: 1852
diff changeset
1702 wlock.release()
1839
1bc5e62fc0c7 Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff changeset
1703
2793
fb317d218af0 topic: wrap 'update' in a more flexible way
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2762
diff changeset
1704 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
1705
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1706 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
1707 configoverride = util.nullcontextmanager()
848ca807f83a topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5007
diff changeset
1708 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
1709 configoverride = repo.ui.configoverride({
848ca807f83a topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5007
diff changeset
1710 (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
1711 }, source=b'topic-extension')
848ca807f83a topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents: 5007
diff changeset
1712 with configoverride:
3614
9ad461df4d4d compat: keep passing arguments as keyword argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3612
diff changeset
1713 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
1714
1854
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1715 def _fixrebase(loaded):
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1716 if not loaded:
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1717 return
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1718
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1719 def savetopic(ctx, extra):
1861
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
1720 if ctx.topic():
972d4e0c3d44 changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents: 1860
diff changeset
1721 extra[constants.extrakey] = ctx.topic()
1854
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1722
2679
5156a67f66a6 topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 2677
diff changeset
1723 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
1724 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
1725 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
1726 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
1727
3612
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1728 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
1729 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
1730
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1731 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
1732 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
1733
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1734 return runtime
33b718191bc9 rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents: 3603
diff changeset
1735
1969
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
1736 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
1737 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
1738 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
1739 # 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
1740 # 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
1741 # 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
1742 extensions.wrapcommand(rebase.cmdtable, b'rebase', setrebaseconfig)
1969
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
1743 except KeyError:
a604423c1500 compat: tolerate missing rebase extension
timeless@gmail.com
parents: 1966
diff changeset
1744 pass
1854
67950fcf1c69 rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents: 1853
diff changeset
1745
1946
72246b13bd72 patch: document the section about import/export
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1945
diff changeset
1746 ## 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
1747
6539
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1748 def _exporttns(seq, ctx):
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1749 tns = ctx.topic_namespace()
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1750 if tns != b'none':
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1751 return b'EXP-Topic-Namespace %s' % tns
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1752 return None
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1753
1866
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
1754 def _exporttopic(seq, ctx):
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
1755 topic = ctx.topic()
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
1756 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
1757 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
1758 return None
13fc93fb7fbe patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1863
diff changeset
1759
6539
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1760 def _importtns(repo, patchdata, extra, opts):
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1761 if b'topic-namespace' in patchdata:
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1762 extra[b'topic-namespace'] = patchdata[b'topic-namespace']
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1763
1867
c9cacc62fa17 patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1866
diff changeset
1764 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
1765 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
1766 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
1767
1948
54810b543bf4 patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1947
diff changeset
1768 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
1769 """run at ui setup time to install import/export logic"""
6539
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1770 cmdutil.extraexport.append(b'topic-namespace')
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1771 cmdutil.extraexportmap[b'topic-namespace'] = _exporttns
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1772 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
1773 cmdutil.extraexportmap[b'topic'] = _exporttopic
6539
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1774 cmdutil.extrapreimport.append(b'topic-namespace')
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1775 cmdutil.extrapreimportmap[b'topic-namespace'] = _importtns
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4812
diff changeset
1776 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
1777 cmdutil.extrapreimportmap[b'topic'] = _importtopic
6539
45689da4ed41 topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents: 6537
diff changeset
1778 patch.patchheadermap.append((b'EXP-Topic-Namespace', b'topic-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
1779 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
1780
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1781 ## preserve topic during split
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1782
6417
c37754bb02d4 topic: rename presplitupdatetopic() to wrappresplitupdate()
Anton Shestakov <av6@dwimlabs.net>
parents: 6410
diff changeset
1783 def wrappresplitupdate(original, repo, ui, prev, ctx):
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1784 # Save topic of revision
6418
50c4ed02ac6d topic: make hg split preserve topic namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6417
diff changeset
1785 tns = None
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1786 topic = None
6418
50c4ed02ac6d topic: make hg split preserve topic namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6417
diff changeset
1787 if util.safehasattr(ctx, 'topic_namespace'):
50c4ed02ac6d topic: make hg split preserve topic namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6417
diff changeset
1788 tns = ctx.topic_namespace()
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1789 if util.safehasattr(ctx, 'topic'):
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1790 topic = ctx.topic()
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1791
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1792 # Update the working directory
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1793 original(repo, ui, prev, ctx)
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1794
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1795 # Restore the topic if need
6535
d324fa553620 topic: check if tns is "none" in one more place
Anton Shestakov <av6@dwimlabs.net>
parents: 6534
diff changeset
1796 if tns != b'none':
6418
50c4ed02ac6d topic: make hg split preserve topic namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6417
diff changeset
1797 _changecurrenttns(repo, tns)
2667
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1798 if topic:
e7079bba383d topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents: 2665
diff changeset
1799 _changecurrenttopic(repo, topic)
6236
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1800
6537
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1801 def wrapprecheck(orig, repo, revs, action=b'rewrite', check_divergence=True):
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1802 # hg <= 6.1 (d4752aeb20f1)
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1803 args = pycompat.getargspec(orig).args
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1804 if r'check_divergence' in args:
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1805 orig(repo, revs, action, check_divergence=check_divergence)
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1806 else:
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1807 orig(repo, revs, action)
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1808
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1809 # TODO: at some point in future the default will change from '*' to the
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1810 # default topic namespace for the current user
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1811 allow = set(repo.ui.configlist(b'experimental', b'tns-allow-rewrite', [b'*']))
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1812 if b'*' not in allow:
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1813 namespaces = set(repo[rev].topic_namespace() for rev in revs)
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1814 disallowed = namespaces - allow
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1815 if disallowed:
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1816 msg = _(b"refusing to %s changesets with these topic namespaces: %s")
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1817 msg %= (action, b' '.join(disallowed))
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1818 hint = _(b"modify experimental.tns-allow-rewrite to allow rewriting changesets from these topic namespaces")
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1819 raise compat.InputError(msg, hint=hint)
80d5d4e587f7 topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents: 6535
diff changeset
1820
6239
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1821 def _changecurrenttns(repo, tns):
6534
43a1bacf6a14 topic: write topic namespace to disk if it's not "none"
Anton Shestakov <av6@dwimlabs.net>
parents: 6530
diff changeset
1822 if tns != b'none':
6239
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1823 with repo.wlock():
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1824 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
1825 else:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1826 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
1827
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1828 @command(b'debug-topic-namespace', [
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1829 (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
1830 ],
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1831 _(b'[NAMESPACE|--clear]'))
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1832 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
1833 """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
1834 if opts.get('clear'):
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1835 if tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1836 raise error.Abort(_(b"cannot use --clear when setting a topic namespace"))
6534
43a1bacf6a14 topic: write topic namespace to disk if it's not "none"
Anton Shestakov <av6@dwimlabs.net>
parents: 6530
diff changeset
1837 tns = b'none'
6239
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1838 elif not tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1839 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
1840 return
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1841 if tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1842 tns = tns.strip()
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1843 if not tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1844 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
1845 if b'/' in tns:
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1846 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
1847 scmutil.checknewlabel(repo, tns, b'topic namespace')
6612
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1848
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1849 helptxt = _(b"topic namespace names can only consist of alphanumeric, "
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1850 b"'-', '_' and '.' characters")
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1851 try:
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1852 utns = encoding.unifromlocal(tns)
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1853 except error.Abort:
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1854 # Maybe we should allow these topic names as well, as long as they
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1855 # don't break any other rules
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1856 utns = ''
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1857 rmatch = re.match(r'[-_.\w]+', utns, re.UNICODE)
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1858 if not utns or not rmatch or rmatch.group(0) != utns:
94bf2f307b75 topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents: 6611
diff changeset
1859 raise compat.InputError(_(b"invalid topic namespace name: '%s'") % tns, hint=helptxt)
6239
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1860 ctns = repo.currenttns
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1861 _changecurrenttns(repo, tns)
6541
09fb1cfb5adc topic: update hg debug-topic-namespace to treat "none" as the empty value
Anton Shestakov <av6@dwimlabs.net>
parents: 6539
diff changeset
1862 if ctns == b'none' and tns != b'none':
6239
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1863 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
1864 % tns)
8861e33f3bb2 topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents: 6238
diff changeset
1865
6238
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1866 @command(b'debug-topic-namespaces', [])
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1867 def debugtopicnamespaces(ui, repo, **opts):
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1868 """list repository namespaces"""
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1869 for tns in repo.topic_namespaces:
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1870 ui.write(b'%s\n' % (tns,))
6bbd16579f0f topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents: 6237
diff changeset
1871
6236
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1872 @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
1873 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
1874 """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
1875 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
1876 opts = pycompat.byteskwargs(opts)
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1877 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
1878 fm.startitem()
7ad8107d953a topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents: 6206
diff changeset
1879 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
1880 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
1881 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
1882 fm.end()
6237
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1883
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1884 @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
1885 (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
1886 (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
1887 (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
1888 (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
1889 ], optionalrepo=True)
0b9042408809 topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents: 6236
diff changeset
1890 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
1891 """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
1892 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
1893 ui.write(b'%s\n' % short)