Mercurial > evolve
annotate hgext3rd/topic/__init__.py @ 6645:4443117fdf94 stable
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Previously we just tried to wrap bundlerepo.bundlerepository class globally,
but it looks like in some situations it leads to an infinite recursion or
similar issues. This patch tries to fix this by moving the class-wrapping logic
inside a function that is used for creating bundlerepository.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Fri, 05 Jan 2024 13:35:27 -0300 |
parents | 94bf2f307b75 |
children | e9650b5616ac 81fe0a498447 |
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 |
6598
536d950753e6
packaging: mark as developer version
Anton Shestakov <av6@dwimlabs.net>
parents:
6596
diff
changeset
|
239 __version__ = b'1.1.1.dev0' |
3057
cb8ae3cb0bbc
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
240 |
6530 | 241 testedwith = b'4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5' |
6443
223a0b7159c0
topic: drop compatibility with Mercurial 4.8
Anton Shestakov <av6@dwimlabs.net>
parents:
6441
diff
changeset
|
242 minimumhgversion = b'4.9' |
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 | 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 |
6645
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
519 def wrapmakebundlerepository(orig, ui, repopath, bundlepath): |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
520 repo = orig(ui, repopath, bundlepath) |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
521 |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
522 # We want bundle repos to also have caches for topic extension, because we |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
523 # want to, for example, see topic and topic namespaces in `hg incoming` |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
524 # regardless if the bundle repo has topic extension, as long as local repo |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
525 # has topic enabled. |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
526 class topicbundlerepo(repo.__class__): |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
527 @util.propertycache |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
528 def _tnscache(self): |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
529 return {} |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
530 |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
531 @util.propertycache |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
532 def _topiccache(self): |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
533 return {} |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
534 |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
535 def invalidatecaches(self): |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
536 self._tnscache.clear() |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
537 self._topiccache.clear() |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
538 super(topicbundlerepo, self).invalidatecaches() |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
539 |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
540 repo.__class__ = topicbundlerepo |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
541 return repo |
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
542 |
1871
58ef5699fb35
merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1867
diff
changeset
|
543 def uisetup(ui): |
1941
7eb737b7a902
destination: rename 'setupdest' to 'modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1939
diff
changeset
|
544 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
|
545 discovery.modsetup(ui) |
1952
665d6322994e
uisetup: add call to 'topicmap.modsetup'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1951
diff
changeset
|
546 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
|
547 setupimportexport(ui) |
1871
58ef5699fb35
merge: use topic to pick default destination
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1867
diff
changeset
|
548 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
549 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
|
550 |
3159
90515d0bfb08
push: add a --publish flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3158
diff
changeset
|
551 flow.installpushflag(ui) |
90515d0bfb08
push: add a --publish flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3158
diff
changeset
|
552 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
553 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
|
554 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
|
555 _(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
|
556 |
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 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
|
558 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
|
559 _(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
|
560 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
561 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
|
562 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
|
563 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
|
564 _(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
|
565 |
1951
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
566 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
|
567 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
|
568 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
|
569 else: |
d9ee2706487f
compat: add support for upstream rename of merge.update() to _update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5531
diff
changeset
|
570 # 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
|
571 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
|
572 # 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
|
573 # 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
|
574 # 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
|
575 # 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
|
576 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
|
577 |
5685
7ee15bf011d6
topic: wrap branch call during summary
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5680
diff
changeset
|
578 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
|
579 |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
580 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
|
581 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
|
582 extensions.wrapfunction(evolve.rewriteutil, "presplitupdate", |
6417
c37754bb02d4
topic: rename presplitupdatetopic() to wrappresplitupdate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6410
diff
changeset
|
583 wrappresplitupdate) |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
584 except (KeyError, AttributeError): |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
585 pass |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
586 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
587 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
|
588 |
3281
703e8398ac57
topic: move function wrapping from reposetup to uisetup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3235
diff
changeset
|
589 # 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
|
590 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
|
591 # 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
|
592 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
|
593 # 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
|
594 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
|
595 # 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
|
596 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
|
597 # 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
|
598 if util.safehasattr(exchange, '_checkpublish'): |
1a81bbc94d45
topic: check that exchange._checkpublish() exists before wrapping it
Anton Shestakov <av6@dwimlabs.net>
parents:
5221
diff
changeset
|
599 extensions.wrapfunction(exchange, '_checkpublish', |
1a81bbc94d45
topic: check that exchange._checkpublish() exists before wrapping it
Anton Shestakov <av6@dwimlabs.net>
parents:
5221
diff
changeset
|
600 flow.replacecheckpublish) |
5232
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
5231
diff
changeset
|
601 else: |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
5231
diff
changeset
|
602 # hg <= 4.8 (33d30fb1e4ae) |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
5231
diff
changeset
|
603 try: |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
5231
diff
changeset
|
604 evolve = extensions.find(b'evolve') |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
5231
diff
changeset
|
605 extensions.wrapfunction(evolve.safeguard, '_checkpublish', |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
5231
diff
changeset
|
606 flow.replacecheckpublish) |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
5231
diff
changeset
|
607 except (KeyError, AttributeError): |
9ed5f9c5d8ae
topic: hg <= 4.8 compatibility for wrapping exchange._checkpublish()
Anton Shestakov <av6@dwimlabs.net>
parents:
5231
diff
changeset
|
608 pass |
1951
0309cac5d91d
uisetup: move all remaining wrapping into uisetup
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1950
diff
changeset
|
609 |
6117
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
610 try: |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
611 histedit = extensions.find(b'histedit') |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
612 except KeyError: |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
613 pass |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
614 else: |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
615 # 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
|
616 extensions.wrapfunction(histedit.histeditaction, 'applychange', |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
617 applychangewrap) |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
618 |
6537
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
619 # 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
|
620 # 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
|
621 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
|
622 try: |
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
623 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
|
624 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
|
625 except (KeyError, AttributeError): |
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
626 pass |
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
627 |
6645
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
628 extensions.wrapfunction(bundlerepo, 'makebundlerepository', wrapmakebundlerepository) |
6561
d08590ce067d
topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents:
6560
diff
changeset
|
629 |
6645
4443117fdf94
topic: wrap makebundlerepository() to wrap bundlerepository class (issue6856)
Anton Shestakov <av6@dwimlabs.net>
parents:
6612
diff
changeset
|
630 server.setupserver(ui) |
6561
d08590ce067d
topic: also add topic and topic namespace caches to bundlerepository
Anton Shestakov <av6@dwimlabs.net>
parents:
6560
diff
changeset
|
631 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
632 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
|
633 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
|
634 return # this can be a peer in the ssh case (puzzling) |
2007 | 635 |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
636 repo = repo.unfiltered() |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
637 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
638 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
|
639 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
|
640 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
|
641 |
5688
b1e057fb7837
topic: disable inmemory rebase to avoid losing the topic
Matt Harbison <matt_harbison@yahoo.com>
parents:
5644
diff
changeset
|
642 # 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
|
643 # 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
|
644 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
|
645 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
|
646 source=b'topic-extension') |
b1e057fb7837
topic: disable inmemory rebase to avoid losing the topic
Matt Harbison <matt_harbison@yahoo.com>
parents:
5644
diff
changeset
|
647 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
648 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
|
649 |
4531
1d1f8f56daac
topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4524
diff
changeset
|
650 # 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
|
651 hastopicext = True |
1d1f8f56daac
topic: introduce a `hastopicext(repo)` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4524
diff
changeset
|
652 |
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
|
653 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
|
654 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
|
655 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
|
656 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
|
657 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
|
658 mode = b'all' |
2de59d916266
auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5242
diff
changeset
|
659 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
|
660 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
|
661 mode = b'auto' |
2de59d916266
auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5242
diff
changeset
|
662 else: |
2de59d916266
auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5242
diff
changeset
|
663 mode = b'none' |
2de59d916266
auto-publish: issue the capabilities in all cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5242
diff
changeset
|
664 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
|
665 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
|
666 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
|
667 |
1858
4ab1b854ce4e
topics: allow commits that only change topic (issue4725)
Matt Mackall <mpm@selenic.com>
parents:
1857
diff
changeset
|
668 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
|
669 configoverride = util.nullcontextmanager() |
de0151ba3e46
topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4942
diff
changeset
|
670 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
|
671 # 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
|
672 configoverride = self.ui.configoverride({ |
de0151ba3e46
topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4942
diff
changeset
|
673 (b'ui', b'allowemptycommit'): True |
de0151ba3e46
topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4942
diff
changeset
|
674 }) |
de0151ba3e46
topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4942
diff
changeset
|
675 with configoverride: |
2288
b6ea9049693d
topic: directly use "super" call
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2012
diff
changeset
|
676 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
|
677 |
4842
ee0866a279da
topic: fix some API to make it more robust
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
4790
diff
changeset
|
678 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
|
679 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
|
680 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
|
681 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
|
682 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
|
683 return super(topicrepo, self).commitctx(ctx, *args, **kwargs) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
684 |
5680
18a70ae9fb0b
topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5646
diff
changeset
|
685 @util.propertycache |
6238
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
686 def _tnscache(self): |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
687 return {} |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
688 |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
689 @property |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
690 def topic_namespaces(self): |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
691 if self._topic_namespaces is not None: |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
692 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
|
693 namespaces = set([b'none', self.currenttns]) |
6238
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
694 for c in self.set(b'not public()'): |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
695 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
|
696 namespaces.remove(b'none') |
6238
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
697 self._topic_namespaces = namespaces |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
698 return namespaces |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
699 |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
700 @property |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
701 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
|
702 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
|
703 return encoding.tolocal(tns) |
6238
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
704 |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
705 @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
|
706 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
|
707 return {} |
18a70ae9fb0b
topic: add a basic in-memory cache for topic information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5646
diff
changeset
|
708 |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
709 @property |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
710 def topics(self): |
1999 | 711 if self._topics is not None: |
712 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
|
713 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
|
714 for c in self.set(b'not public()'): |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
715 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
|
716 topics.remove(b'') |
1999 | 717 self._topics = topics |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
718 return topics |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
719 |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
720 @property |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
721 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
|
722 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
|
723 return encoding.tolocal(topic) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
724 |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
725 # overwritten at the instance level by topicmap.py |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
726 _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
|
727 |
6271
caf302fb8f4d
topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6268
diff
changeset
|
728 def branchmap(self, topic=None, convertbm=False): |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
729 if topic is None: |
3880
28dadd024299
topic: use self instead of repo in topicrepo methods
Anton Shestakov <av6@dwimlabs.net>
parents:
3834
diff
changeset
|
730 topic = getattr(self, '_autobranchmaptopic', False) |
2653
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
731 topicfilter = topicmap.topicfilter(self.filtername) |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
732 if not topic or topicfilter == self.filtername: |
13313d0cab71
topicmap: massive rework
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2652
diff
changeset
|
733 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
|
734 bm = self.filtered(topicfilter).branchmap() |
caf302fb8f4d
topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6268
diff
changeset
|
735 if convertbm: |
6333
f4ffe1e67a9b
topic: move compatibility for branchcache._entries to topic/compat.py
Anton Shestakov <av6@dwimlabs.net>
parents:
6320
diff
changeset
|
736 entries = compat.bcentries(bm) |
6271
caf302fb8f4d
topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6268
diff
changeset
|
737 for key in list(entries): |
caf302fb8f4d
topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6268
diff
changeset
|
738 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
|
739 if topic: |
caf302fb8f4d
topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6268
diff
changeset
|
740 value = entries.pop(key) |
caf302fb8f4d
topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6268
diff
changeset
|
741 # 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
|
742 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
|
743 entries[key] = value |
caf302fb8f4d
topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6268
diff
changeset
|
744 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
|
745 |
6296
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6294
diff
changeset
|
746 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
|
747 """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
|
748 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
|
749 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
|
750 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
|
751 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
|
752 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
|
753 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
|
754 |
4704
5f90eb8fd63c
evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4669
diff
changeset
|
755 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
|
756 if branch is None: |
5f90eb8fd63c
evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4669
diff
changeset
|
757 branch = self[None].branch() |
6271
caf302fb8f4d
topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6268
diff
changeset
|
758 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
|
759 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
|
760 start=start, |
5f90eb8fd63c
evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4669
diff
changeset
|
761 closed=closed) |
5f90eb8fd63c
evolve: fix confusion in branch heads checking logic when topic in play
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4669
diff
changeset
|
762 |
6360
e959390490c2
branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents:
6336
diff
changeset
|
763 def invalidatecaches(self): |
6554
ba8354de1c4d
topic: invalidate topic namespace cache in repo.invalidatecaches()
Anton Shestakov <av6@dwimlabs.net>
parents:
6536
diff
changeset
|
764 self._tnscache.clear() |
6360
e959390490c2
branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents:
6336
diff
changeset
|
765 self._topiccache.clear() |
e959390490c2
branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents:
6336
diff
changeset
|
766 super(topicrepo, self).invalidatecaches() |
e959390490c2
branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents:
6336
diff
changeset
|
767 |
1999 | 768 def invalidatevolatilesets(self): |
769 # XXX we might be able to move this to something invalidated less often | |
770 super(topicrepo, self).invalidatevolatilesets() | |
6238
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
771 self._topic_namespaces = None |
1999 | 772 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
|
773 |
6360
e959390490c2
branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents:
6336
diff
changeset
|
774 def peer(self, *args, **kwargs): |
e959390490c2
branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents:
6336
diff
changeset
|
775 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
|
776 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
|
777 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
|
778 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
|
779 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
|
780 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
|
781 |
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6294
diff
changeset
|
782 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
|
783 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
|
784 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
|
785 |
445240ccb701
topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents:
6545
diff
changeset
|
786 def tns_heads(self, namespaces): |
445240ccb701
topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents:
6545
diff
changeset
|
787 if b'*' in namespaces: |
445240ccb701
topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents:
6545
diff
changeset
|
788 # 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
|
789 return self._repo.heads() |
445240ccb701
topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents:
6545
diff
changeset
|
790 else: |
445240ccb701
topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents:
6545
diff
changeset
|
791 # 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
|
792 h = [] |
6573
d511eba4cdb0
topic: compatibility for branchmaptns with branchmap from hg 5.0
Anton Shestakov <av6@dwimlabs.net>
parents:
6566
diff
changeset
|
793 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
|
794 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
|
795 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
|
796 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
|
797 h.extend(nodes) |
445240ccb701
topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents:
6545
diff
changeset
|
798 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
|
799 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
|
800 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
|
801 |
2989
53246d237373
topic: skip topic movement message during strip
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2986
diff
changeset
|
802 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
|
803 ctr = self.currenttransaction() |
2989
53246d237373
topic: skip topic movement message during strip
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2986
diff
changeset
|
804 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
|
805 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
|
806 return tr |
2986
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
807 |
3158
678a9802c56b
topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3157
diff
changeset
|
808 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
|
809 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
|
810 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
|
811 # hg <= 5.3 (36f08ae87ef6) |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
812 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
|
813 |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
814 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
|
815 repo = reporef() |
034d6d0efa7d
topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
5193
diff
changeset
|
816 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
|
817 |
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
|
818 def validator(tr2): |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
819 _validate_single_head(tr2) |
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
820 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
|
821 |
6304
c00332abb66b
topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents:
6296
diff
changeset
|
822 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
|
823 # 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
|
824 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
|
825 else: |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
826 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
|
827 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
828 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
|
829 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
|
830 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
|
831 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
|
832 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
|
833 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
|
834 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
|
835 # hg <= 5.3 (36f08ae87ef6) |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
836 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
|
837 |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
838 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
|
839 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
|
840 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
|
841 |
8a772f0c54d9
topics: add a config to reject draft changeset without topic on a server
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3232
diff
changeset
|
842 def validator(tr2): |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
843 _validate_untopiced(tr2) |
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
844 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
|
845 |
6304
c00332abb66b
topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents:
6296
diff
changeset
|
846 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
|
847 # 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
|
848 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
|
849 else: |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
850 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
|
851 |
5930
8d36bfe9968a
topic: add more variables to make a condition fit on one line
Anton Shestakov <av6@dwimlabs.net>
parents:
5919
diff
changeset
|
852 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
|
853 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
|
854 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
|
855 |
678a9802c56b
topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3157
diff
changeset
|
856 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
|
857 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
|
858 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
|
859 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
|
860 origclose() |
678a9802c56b
topic: add an option to automatically publish topic-less changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3157
diff
changeset
|
861 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
|
862 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
|
863 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
|
864 True) |
228caeb8b7af
topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4646
diff
changeset
|
865 if not allow_publish: |
6304
c00332abb66b
topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents:
6296
diff
changeset
|
866 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
|
867 # hg <= 5.3 (36f08ae87ef6) |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
868 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
|
869 |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
870 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
|
871 repo = reporef() |
228caeb8b7af
topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4646
diff
changeset
|
872 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
|
873 |
228caeb8b7af
topic: add a simple option to reject publishing
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4646
diff
changeset
|
874 def validator(tr2): |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
875 _validate_publish(tr2) |
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
876 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
|
877 |
6304
c00332abb66b
topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents:
6296
diff
changeset
|
878 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
|
879 # 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
|
880 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
|
881 else: |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
882 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
|
883 |
6496
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
884 if util.safehasattr(tr, '_validator'): |
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
885 # hg <= 5.3 (36f08ae87ef6) |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
886 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
|
887 |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
888 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
|
889 repo = reporef() |
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
890 find_affected_tns(repo, tr2) |
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
891 |
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
892 def validator(tr2): |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
893 result = origvalidator_affected_tns(tr2) |
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
894 _validate_affected_tns(tr2) |
6496
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
895 return result |
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
896 |
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
897 if util.safehasattr(tr, '_validator'): |
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
898 # hg <= 5.3 (36f08ae87ef6) |
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
899 tr._validator = validator |
fba501baf5cb
topic: find and report topic namespace changes in transactions
Anton Shestakov <av6@dwimlabs.net>
parents:
6489
diff
changeset
|
900 else: |
6574
054a7c342463
topic: use distinct names for distinct origvalidator and _validate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6573
diff
changeset
|
901 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
|
902 |
2988
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
903 # real transaction start |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
904 ct = self.currenttopic |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
905 if not ct: |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
906 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
|
907 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
|
908 |
2986
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
909 reporef = weakref.ref(self) |
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
910 |
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
911 def currenttopicempty(tr): |
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3195
diff
changeset
|
912 # check active topic emptiness |
2986
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
913 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
|
914 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
|
915 empty = csetcount == 0 |
62201935e1a7
topics/ui: detect and signal when an empty changeset becomes non-empty
Aurélien Campéas
parents:
2987
diff
changeset
|
916 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
|
917 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
|
918 % 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
|
919 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
|
920 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
|
921 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
|
922 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
|
923 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
|
924 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
|
925 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
|
926 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
|
927 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
|
928 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
|
929 else: |
5132
fb5f49be3c90
topic: use `%d` for integers instead of `%s` on py3
Pulkit Goyal <7895pulkit@gmail.com>
parents:
5110
diff
changeset
|
930 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
|
931 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
|
932 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
933 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
|
934 return tr |
4746b92cc1f8
topics/ui: signal when an operation entails voiding a topic
Aurélien Campéas
parents:
2985
diff
changeset
|
935 |
1857
a506ed8ab8da
topics: add listnames hook so completion works
Matt Mackall <mpm@selenic.com>
parents:
1856
diff
changeset
|
936 repo.__class__ = topicrepo |
6238
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
937 repo._topic_namespaces = None |
1999 | 938 repo._topics = None |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
939 if util.safehasattr(repo, 'names'): |
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
940 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
|
941 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
|
942 listnames=lambda repo: repo.topics)) |
2928
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
943 |
5183
9ac6779d608c
topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents:
5164
diff
changeset
|
944 templatekeyword = registrar.templatekeyword() |
4152
fb22c7a6ca8b
topic: add topicidx template keyword
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4126
diff
changeset
|
945 |
5183
9ac6779d608c
topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents:
5164
diff
changeset
|
946 @templatekeyword(b'topic', requires={b'ctx'}) |
9ac6779d608c
topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents:
5164
diff
changeset
|
947 def topickw(context, mapping): |
6409
77c4f9773aea
topic: remove templatekeyword name, not needed after 119702a8b415
Anton Shestakov <av6@dwimlabs.net>
parents:
6406
diff
changeset
|
948 """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
|
949 ctx = context.resource(mapping, b'ctx') |
9ac6779d608c
topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents:
5164
diff
changeset
|
950 return ctx.topic() |
3384
2b06f144b6e0
topics: add a new templatekeyword `topic`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3372
diff
changeset
|
951 |
5183
9ac6779d608c
topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents:
5164
diff
changeset
|
952 @templatekeyword(b'topicidx', requires={b'ctx'}) |
9ac6779d608c
topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents:
5164
diff
changeset
|
953 def topicidxkw(context, mapping): |
6409
77c4f9773aea
topic: remove templatekeyword name, not needed after 119702a8b415
Anton Shestakov <av6@dwimlabs.net>
parents:
6406
diff
changeset
|
954 """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
|
955 ctx = context.resource(mapping, b'ctx') |
9ac6779d608c
topic: drop 4.5 compatibility for template keywords
Anton Shestakov <av6@dwimlabs.net>
parents:
5164
diff
changeset
|
956 return ctx.topicidx() |
4152
fb22c7a6ca8b
topic: add topicidx template keyword
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4126
diff
changeset
|
957 |
6241
85abf58c3d8c
topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents:
6240
diff
changeset
|
958 @templatekeyword(b'topic_namespace', requires={b'ctx'}) |
85abf58c3d8c
topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents:
6240
diff
changeset
|
959 def topicnamespacekw(context, mapping): |
6409
77c4f9773aea
topic: remove templatekeyword name, not needed after 119702a8b415
Anton Shestakov <av6@dwimlabs.net>
parents:
6406
diff
changeset
|
960 """String. The topic namespace of the changeset""" |
6241
85abf58c3d8c
topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents:
6240
diff
changeset
|
961 ctx = context.resource(mapping, b'ctx') |
85abf58c3d8c
topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents:
6240
diff
changeset
|
962 return ctx.topic_namespace() |
85abf58c3d8c
topic: namespace template keyword
Anton Shestakov <av6@dwimlabs.net>
parents:
6240
diff
changeset
|
963 |
6243
91d9a279b84a
topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents:
6242
diff
changeset
|
964 @templatekeyword(b'fqbn', requires={b'ctx'}) |
91d9a279b84a
topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents:
6242
diff
changeset
|
965 def fqbnkw(context, mapping): |
6409
77c4f9773aea
topic: remove templatekeyword name, not needed after 119702a8b415
Anton Shestakov <av6@dwimlabs.net>
parents:
6406
diff
changeset
|
966 """String. The branch//namespace/topic of the changeset""" |
6243
91d9a279b84a
topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents:
6242
diff
changeset
|
967 ctx = context.resource(mapping, b'ctx') |
91d9a279b84a
topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents:
6242
diff
changeset
|
968 return ctx.fqbn() |
91d9a279b84a
topic: fqbn template keyword
Anton Shestakov <av6@dwimlabs.net>
parents:
6242
diff
changeset
|
969 |
2928
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
970 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
|
971 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
|
972 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
|
973 return |
6240
2686ecc90791
topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents:
6239
diff
changeset
|
974 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
|
975 if getattr(repo, 'currenttns', b''): |
2686ecc90791
topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents:
6239
diff
changeset
|
976 self._extra[b'topic-namespace'] = repo.currenttns |
2686ecc90791
topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents:
6239
diff
changeset
|
977 else: |
2686ecc90791
topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents:
6239
diff
changeset
|
978 # 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
|
979 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
|
980 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
|
981 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
|
982 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
|
983 else: |
865c33c16508
topic: respect preexisting 'topic' value on workingcommitctx
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4124
diff
changeset
|
984 # 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
|
985 self._extra[constants.extrakey] = b'' |
2928
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
986 |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
987 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
|
988 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
|
989 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
|
990 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
|
991 extra = extra.copy() |
2686ecc90791
topic: store topic namespace in commit extras
Anton Shestakov <av6@dwimlabs.net>
parents:
6239
diff
changeset
|
992 del extra[b'topic-namespace'] |
2928
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
993 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
|
994 extra = extra.copy() |
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
995 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
|
996 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
|
997 # 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
|
998 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
|
999 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
|
1000 # hg <= 4.9 (0e41f40b01cc) |
001eb0f11bcd
topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents:
4519
diff
changeset
|
1001 kwargs = {} |
001eb0f11bcd
topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents:
4519
diff
changeset
|
1002 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
|
1003 kwargs['p1copies'] = p1copies |
001eb0f11bcd
topic: add compatibility for writing copy metadata in changelog.add()
Anton Shestakov <av6@dwimlabs.net>
parents:
4519
diff
changeset
|
1004 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
|
1005 kwargs['p2copies'] = p2copies |
4646
7b986968700b
compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4628
diff
changeset
|
1006 # hg <= 5.0 (f385ba70e4af) |
7b986968700b
compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4628
diff
changeset
|
1007 if filesadded is not None: |
7b986968700b
compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4628
diff
changeset
|
1008 kwargs['filesadded'] = filesadded |
7b986968700b
compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4628
diff
changeset
|
1009 if filesremoved is not None: |
7b986968700b
compat: adjust `wrapadd` for upstream
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4628
diff
changeset
|
1010 kwargs['filesremoved'] = filesremoved |
2928
6275808e89ef
topic: setup 'topic' value for working ctx
Boris Feld <boris.feld@octobus.net>
parents:
2924
diff
changeset
|
1011 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
|
1012 date=date, extra=extra, **kwargs) |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1013 |
6117
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
1014 def applychangewrap(orig, self): |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
1015 orig(self) |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
1016 repo = self.repo |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
1017 rulectx = repo[self.node] |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
1018 |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
1019 topic = None |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
1020 if util.safehasattr(rulectx, 'topic'): |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
1021 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
|
1022 _changecurrenttopic(repo, topic) |
6117
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
1023 |
a27bdd116761
topic: wrap applychange from histedit to preserve topics
Simon Sapin <simon.sapin@octobus.net>
parents:
6088
diff
changeset
|
1024 |
2924
430fb1758d28
topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
1025 # 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
|
1026 revsetpredicate = topicrevset.revsetpredicate |
430fb1758d28
topic: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
1027 |
4715
12c8b24757f4
py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents:
4713
diff
changeset
|
1028 @command(b'topics', [ |
12c8b24757f4
py3: use byte strings for @command registrations
Martin von Zweigbergk <martinvonz@google.com>
parents:
4713
diff
changeset
|
1029 (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
|
1030 (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
|
1031 (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
|
1032 (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
|
1033 (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
|
1034 ] + commands.formatteropts, |
4921
a7c01a2a3974
branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
diff
changeset
|
1035 _(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
|
1036 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
|
1037 ) |
2991
f4956eb3a456
topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2990
diff
changeset
|
1038 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
|
1039 """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
|
1040 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
1041 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
|
1042 |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
1043 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
|
1044 |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
1045 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
|
1046 |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
1047 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
|
1048 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
1049 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
|
1050 |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
1051 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
|
1052 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
1053 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
|
1054 |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
1055 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
|
1056 |
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
1057 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
|
1058 |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2922
diff
changeset
|
1059 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
|
1060 |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
1061 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
|
1062 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
|
1063 |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
1064 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
|
1065 |
2717
ed45a5fb4452
topics: update the help for `hg topics` describing ways to use the command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2712
diff
changeset
|
1066 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
|
1067 |
2869
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
1068 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
|
1069 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
|
1070 active topic, you can do: |
2994
1e8ac0fcd6b7
topics: spell out topics completely in help
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2993
diff
changeset
|
1071 `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
|
1072 |
2011
9c7665e3107b
documentation: some basic update of the documentation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2008
diff
changeset
|
1073 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
|
1074 |
2991
f4956eb3a456
topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2990
diff
changeset
|
1075 clear = opts.get('clear') |
f4956eb3a456
topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2990
diff
changeset
|
1076 list = opts.get('list') |
f4956eb3a456
topics: improve the function signature by accepting arguments as **opts
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2990
diff
changeset
|
1077 rev = opts.get('rev') |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
1078 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
|
1079 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
|
1080 |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
1081 if current and topic: |
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 when setting a topic")) |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
1083 if current and clear: |
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 --current and --clear")) |
2868
e46b68547017
topic: make --clear + topicname invalid
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2867
diff
changeset
|
1085 if clear 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 --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
|
1087 if age and topic: |
6318
3e488afe62f5
topic: use compat.InputError for conflicting CLI flags
Anton Shestakov <av6@dwimlabs.net>
parents:
6311
diff
changeset
|
1088 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
|
1089 |
6320
0c780d972350
topic: use check_incompatible_arguments() for --list with --clear or --rev
Anton Shestakov <av6@dwimlabs.net>
parents:
6319
diff
changeset
|
1090 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
|
1091 |
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
|
1092 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
|
1093 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
|
1094 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
|
1095 |
2889
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
1096 if topic: |
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
1097 topic = topic.strip() |
31cbace4c0f1
topics: make sure we have some restrictions on topic names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2869
diff
changeset
|
1098 if not topic: |
6319
8c664ed9c103
topic: use compat.InputError for invalid topic names
Anton Shestakov <av6@dwimlabs.net>
parents:
6318
diff
changeset
|
1099 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
|
1100 # 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
|
1101 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
|
1102 |
6611
1dc008b6ad21
topic: add a missing comma in the topic name rejection message
Anton Shestakov <av6@dwimlabs.net>
parents:
6610
diff
changeset
|
1103 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
|
1104 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
|
1105 try: |
2ec9c87e8574
topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents:
6205
diff
changeset
|
1106 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
|
1107 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
|
1108 # 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
|
1109 # 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
|
1110 utopic = '' |
2ec9c87e8574
topic: allow unicode symbols in names as long as they are alphanumeric
Anton Shestakov <av6@dwimlabs.net>
parents:
6205
diff
changeset
|
1111 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
|
1112 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
|
1113 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
|
1114 |
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
|
1115 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
|
1116 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
|
1117 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
|
1118 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
|
1119 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
|
1120 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
|
1121 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
|
1122 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
|
1123 |
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
|
1124 if touchedrevs: |
1851
67d53e8e0c1a
topic: only require obsolete support for --change
Matt Mackall <mpm@selenic.com>
parents:
1850
diff
changeset
|
1125 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
|
1126 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
|
1127 if clear: |
2e3f63f4a519
topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2644
diff
changeset
|
1128 topic = None |
2869
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
1129 elif opts.get('current'): |
b629874ccaac
topics: allow use a --current when setting a topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2868
diff
changeset
|
1130 topic = repo.currenttopic |
2645
2e3f63f4a519
topic: further simplify the clear logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2644
diff
changeset
|
1131 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
|
1132 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
|
1133 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
|
1134 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
|
1135 wl = lock = txn = None |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1136 try: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1137 wl = repo.wlock() |
3124
6ef274e01f64
flake8: rename some ambiguous identifier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3097
diff
changeset
|
1138 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
|
1139 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
|
1140 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
|
1141 txn.close() |
4268
d5a2cc19903f
topics: improve the message around topic changing
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
4253
diff
changeset
|
1142 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
|
1143 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
|
1144 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
|
1145 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
|
1146 topic)) |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1147 finally: |
3124
6ef274e01f64
flake8: rename some ambiguous identifier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3097
diff
changeset
|
1148 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
|
1149 repo.invalidate() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1150 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
|
1151 |
2985
f63c97c01f92
topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents:
2984
diff
changeset
|
1152 ct = repo.currenttopic |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1153 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
|
1154 if ct: |
4652
b72cd597a887
stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents:
4647
diff
changeset
|
1155 st = stack.stack(repo, topic=ct) |
b72cd597a887
stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents:
4647
diff
changeset
|
1156 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
|
1157 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
|
1158 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
|
1159 |
1860
b7b9e5028c2a
topics: consistently use empty string instead of None
Matt Mackall <mpm@selenic.com>
parents:
1859
diff
changeset
|
1160 if topic: |
2985
f63c97c01f92
topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents:
2984
diff
changeset
|
1161 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
|
1162 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
|
1163 % 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
|
1164 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
|
1165 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1166 ui.pager(b'topics') |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
1167 # `hg topic --current` |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
1168 ret = 0 |
2985
f63c97c01f92
topics/ui: signal when the topics command creates a new (empty) topic
Aurélien Campéas
parents:
2984
diff
changeset
|
1169 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
|
1170 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
|
1171 ret = 1 |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
1172 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
|
1173 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
|
1174 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
|
1175 label = b'topic.active' |
2867
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
1176 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
|
1177 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
|
1178 fm.end() |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
1179 else: |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
1180 _listtopics(ui, repo, opts) |
5c0b6af37b21
topics: add a current flag to display current topic
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2866
diff
changeset
|
1181 return ret |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1182 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1183 @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
|
1184 (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
|
1185 _(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
|
1186 ] + commands.formatteropts, |
4894
f9743b13de6d
help: categorizing evolve and topic commands
Rodrigo Damazio <rdamazio@google.com>
parents:
4892
diff
changeset
|
1187 _(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
|
1188 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
|
1189 ) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1190 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
|
1191 """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
|
1192 |
2750
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2744
diff
changeset
|
1193 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
|
1194 |
bd3824d1b795
stack: show short node of changesets in `hg stack -v`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2744
diff
changeset
|
1195 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
|
1196 """ |
1990
71410fa2c253
stack: extra argument validation logic outside of showstack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1989
diff
changeset
|
1197 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
|
1198 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
|
1199 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
|
1200 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
|
1201 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
|
1202 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
|
1203 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
|
1204 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
|
1205 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
|
1206 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
|
1207 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1208 @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
|
1209 (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
|
1210 (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
|
1211 ], |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1212 _(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
|
1213 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
|
1214 """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
|
1215 """ |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
1216 |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
1217 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
|
1218 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
|
1219 |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
1220 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
|
1221 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
|
1222 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
|
1223 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
|
1224 |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
1225 bmstore = repo._bookmarks |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
1226 |
2900
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1227 nodetobook = {} |
4742
db3e7f6b5ceb
py3: switch from iteritems() to items() in the topics extension
Martin von Zweigbergk <martinvonz@google.com>
parents:
4719
diff
changeset
|
1228 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
|
1229 if nodetobook.get(revnode): |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1230 nodetobook[revnode].append(book) |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1231 else: |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1232 nodetobook[revnode] = [book] |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1233 |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1234 # 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
|
1235 # warning repeatedly |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1236 skipped = [] |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
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 actions = {} |
2899
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
1239 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1240 lock = wlock = tr = None |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1241 try: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1242 wlock = repo.wlock() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1243 lock = repo.lock() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1244 if bookmark: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1245 try: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1246 node = bmstore[bookmark] |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1247 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
|
1248 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
|
1249 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1250 revnum = repo[node].rev() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1251 if len(nodetobook[node]) > 1: |
5922
8bffab1e7c4f
topic: make two almost identical messages actually identical
Anton Shestakov <av6@dwimlabs.net>
parents:
5920
diff
changeset
|
1252 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
|
1253 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
|
1254 return |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
1255 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
|
1256 if targetrevs: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1257 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
|
1258 |
2908
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1259 elif convertall: |
4742
db3e7f6b5ceb
py3: switch from iteritems() to items() in the topics extension
Martin von Zweigbergk <martinvonz@google.com>
parents:
4719
diff
changeset
|
1260 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
|
1261 revnum = repo[revnode].rev() |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1262 if revnum in skipped: |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1263 continue |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1264 if len(nodetobook[revnode]) > 1: |
5922
8bffab1e7c4f
topic: make two almost identical messages actually identical
Anton Shestakov <av6@dwimlabs.net>
parents:
5920
diff
changeset
|
1265 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
|
1266 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
|
1267 skipped.append(revnum) |
1928e9c802dd
convertbookmark: add logic to skip revisions with multiple bookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2899
diff
changeset
|
1268 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
|
1269 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
|
1270 continue |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
1271 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
|
1272 if targetrevs: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1273 actions[(bmark, revnum)] = targetrevs |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1274 |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1275 if actions: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1276 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
|
1277 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
|
1278 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
|
1279 _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
|
1280 tr.close() |
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 tr.release() |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1283 finally: |
95bb27b8918c
convertbookmark: perform all actions at the end
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2907
diff
changeset
|
1284 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
|
1285 |
2906
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
1286 # 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
|
1287 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
|
1288 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
|
1289 ancestors(bookmark(%s)) |
2909
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
1290 and not ancestors( |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
1291 ( |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
1292 (head() and not bookmark(%s)) |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
1293 or (bookmark() - bookmark(%s)) |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
1294 ) - ( |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
1295 descendants(bookmark(%s)) |
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
1296 - 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
|
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 ) |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
1300 """ |
92566275be77
convertbookmark: extract the revset into a module level constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2905
diff
changeset
|
1301 |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
1302 def _findconvertbmarktopic(repo, bmark): |
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3195
diff
changeset
|
1303 """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
|
1304 |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
1305 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
|
1306 """ |
2909
9ce092b17530
convertbookmark: properly convert stacked bookmarks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2908
diff
changeset
|
1307 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
|
1308 |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
1309 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
|
1310 """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
|
1311 |
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
1312 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
|
1313 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
|
1314 |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
1315 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
|
1316 """ |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
1317 |
2907
d617128279f6
converbookmark: split target computation from actual update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2906
diff
changeset
|
1318 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
|
1319 # 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
|
1320 # 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
|
1321 # 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
|
1322 # changeset |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
1323 if rewrote == 0: |
32306ee32806
topics: add a new debugconvertbookmark command to convert bookmarks to topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2898
diff
changeset
|
1324 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
|
1325 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
|
1326 rewrote)) |
5721
242a0530823a
cleanup: ensure log and output messages have a '\n' terminator
Matt Harbison <matt_harbison@yahoo.com>
parents:
5689
diff
changeset
|
1327 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
|
1328 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
|
1329 |
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
|
1330 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
|
1331 """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
|
1332 |
9c0b293c2785
topics: move the logic to change or clear current topic into a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2657
diff
changeset
|
1333 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
|
1334 with repo.wlock(): |
6204
364ef033da03
topic: shorter code to write current topic
Anton Shestakov <av6@dwimlabs.net>
parents:
6155
diff
changeset
|
1335 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
|
1336 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
|
1337 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
|
1338 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
|
1339 |
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
|
1340 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
|
1341 """ 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
|
1342 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
|
1343 """ |
2642
92e882a82aaf
topics: factor out the logic to change topic in a new function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2625
diff
changeset
|
1344 rewrote = 0 |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1345 p1 = None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1346 p2 = None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1347 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
|
1348 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
|
1349 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
|
1350 |
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
|
1351 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
|
1352 # 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
|
1353 # 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
|
1354 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
|
1355 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
|
1356 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
|
1357 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
|
1358 |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1359 def filectxfn(repo, ctx, path): |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1360 try: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1361 return c[path] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1362 except error.ManifestLookupError: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1363 return None |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1364 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
|
1365 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
|
1366 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
|
1367 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
|
1368 if oldtopic == newtopic: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1369 continue |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1370 if newtopic is None: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1371 del fixedextra[constants.extrakey] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1372 else: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1373 fixedextra[constants.extrakey] = newtopic |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1374 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
|
1375 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
|
1376 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
|
1377 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
|
1378 # 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
|
1379 # 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
|
1380 # 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
|
1381 p1 = c.p1().node() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1382 p2 = c.p2().node() |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1383 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
|
1384 p1 = successors[p1][0] |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1385 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
|
1386 p2 = successors[p2][0] |
3040
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1387 mc = context.memctx(repo, |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1388 (p1, p2), |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1389 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
|
1390 files, |
3040
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1391 filectxfn, |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1392 user=c.user(), |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1393 date=c.date(), |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1394 extra=fixedextra) |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1395 |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1396 # phase handling |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1397 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
|
1398 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
|
1399 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
|
1400 newnode = repo.commitctx(mc) |
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1401 |
3038
103244e34a9c
topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3030
diff
changeset
|
1402 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
|
1403 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
|
1404 rewrote += 1 |
3038
103244e34a9c
topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3030
diff
changeset
|
1405 |
103244e34a9c
topics: use scmutil.cleanupnodes to create markers while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3030
diff
changeset
|
1406 # 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
|
1407 # 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
|
1408 # 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
|
1409 scmutil.cleanupnodes(repo, successors, b'changetopics') |
3040
a05b6580f71c
topics: handle phase correctly while changing topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3038
diff
changeset
|
1410 |
2850
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1411 # move the working copy too |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1412 wctx = repo[None] |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1413 # 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
|
1414 if len(wctx.parents()) == 1: |
a0d6741d4bb8
topics: take locks and start transaction before calling _changetopics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2831
diff
changeset
|
1415 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
|
1416 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
|
1417 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
|
1418 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
|
1419 |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
1420 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
|
1421 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
|
1422 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
|
1423 namemask = b'%s' |
3060
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
1424 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
|
1425 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
|
1426 namemask = b'%%-%is' % maxwidth |
4303
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1427 if opts.get('age'): |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1428 # here we sort by age and topic name |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1429 topicsdata = sorted(_getlasttouched(repo, repo.topics)) |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1430 else: |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1431 # here we sort by topic name only |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1432 topicsdata = ( |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1433 (None, topic, None, None) |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1434 for topic in sorted(repo.topics) |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1435 ) |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1436 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
|
1437 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
|
1438 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
|
1439 label = b'topic' |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
1440 active = (topic == activetopic) |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
1441 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
|
1442 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
|
1443 label = b'topic.active' |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
1444 if not ui.quiet: |
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
1445 # 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
|
1446 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
|
1447 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
|
1448 fm.data(active=active) |
3060
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
1449 |
3372
4138771105bb
topics: list only topic names in quiet mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3371
diff
changeset
|
1450 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
|
1451 fm.plain(b'\n') |
3372
4138771105bb
topics: list only topic names in quiet mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3371
diff
changeset
|
1452 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
|
1453 fm.plain(b' (') |
4303
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1454 if date: |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1455 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
|
1456 timestr = b'empty and active' |
4303
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1457 else: |
78700a59192a
topic: merge _showlasttouched logic into _listtopics
Anton Shestakov <av6@dwimlabs.net>
parents:
4302
diff
changeset
|
1458 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
|
1459 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
|
1460 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
|
1461 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
|
1462 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
|
1463 fm.plain(b', ') |
3060
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
1464 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
|
1465 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
|
1466 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
|
1467 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
|
1468 label=b'topic.list.branches') |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
1469 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1470 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
|
1471 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
|
1472 label=b'topic.list.changesetcount') |
3060
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
1473 |
4581
48521a49a07e
stack: rename troubledcount to unstablecount
Anton Shestakov <av6@dwimlabs.net>
parents:
4574
diff
changeset
|
1474 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
|
1475 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
|
1476 fm.write(b'unstablecount', b'%d unstable', |
4581
48521a49a07e
stack: rename troubledcount to unstablecount
Anton Shestakov <av6@dwimlabs.net>
parents:
4574
diff
changeset
|
1477 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
|
1478 label=b'topic.list.unstablecount') |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
1479 |
3060
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
1480 headcount = len(data.heads) |
f43a310c4338
topics: show changesetcount, troubledcount and headscount by default
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3059
diff
changeset
|
1481 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
|
1482 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
|
1483 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
|
1484 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
|
1485 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
|
1486 |
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
|
1487 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
|
1488 # 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
|
1489 |
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
1490 behindcount = data.behindcount |
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
1491 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
|
1492 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
|
1493 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
|
1494 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 label=b'topic.list.behindcount') |
3059
02b220984b01
topics: use stack.stack() instead of stack.stackdata()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3057
diff
changeset
|
1496 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
|
1497 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
|
1498 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
|
1499 _(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
|
1500 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
|
1501 fm.plain(b')\n') |
1975
acbbf7f0751e
topic: add formatter support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1974
diff
changeset
|
1502 fm.end() |
1974
20fb4195bfc4
topic: extract the code listing all topics
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1973
diff
changeset
|
1503 |
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
|
1504 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
|
1505 """ |
4302
8e9940f1ae56
topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents:
4285
diff
changeset
|
1506 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
|
1507 (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
|
1508 """ |
d39942773163
topics: add a new flag --age which will show last touched time for topics
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2718
diff
changeset
|
1509 curtime = time.time() |
4302
8e9940f1ae56
topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents:
4285
diff
changeset
|
1510 for topic in topics: |
8e9940f1ae56
topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents:
4285
diff
changeset
|
1511 age = -1 |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
1512 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
|
1513 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
|
1514 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
|
1515 # 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
|
1516 # 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
|
1517 # 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
|
1518 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
|
1519 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
|
1520 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
|
1521 # 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
|
1522 # 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
|
1523 maxtime = rt |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
1524 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
|
1525 # 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
|
1526 # last touch time. |
4942
acc7e27fa5c6
topic: drop compat.getmarkers() and use obsutil.getmarkers() directly
Anton Shestakov <av6@dwimlabs.net>
parents:
4921
diff
changeset
|
1527 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
|
1528 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
|
1529 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
|
1530 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
|
1531 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
|
1532 maxtime = rt |
2993
725b660d9886
topics: show the user who last touched the topic in --age
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2992
diff
changeset
|
1533 |
3371
753e5ebabe7d
topics: take logic to parse username to a separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3297
diff
changeset
|
1534 username = stack.parseusername(user) |
4302
8e9940f1ae56
topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents:
4285
diff
changeset
|
1535 if trevs: |
8e9940f1ae56
topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents:
4285
diff
changeset
|
1536 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
|
1537 |
4302
8e9940f1ae56
topic: simplify _showlasttouched and _getlasttouched (and its data structure)
Anton Shestakov <av6@dwimlabs.net>
parents:
4285
diff
changeset
|
1538 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
|
1539 |
1848
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
1540 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
|
1541 t = getattr(repo, 'currenttopic', b'') |
1848
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
1542 if not t: |
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
1543 return |
9a81657deec2
summary: add topic summary hook
Matt Mackall <mpm@selenic.com>
parents:
1847
diff
changeset
|
1544 # 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
|
1545 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
|
1546 |
3022
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
1547 _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
|
1548 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
|
1549 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
|
1550 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
|
1551 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
|
1552 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
|
1553 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
|
1554 ] |
255e66783505
topic: add documentation for the 'topic-mode' option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3021
diff
changeset
|
1555 |
3020
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
1556 def _configtopicmode(ui): |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
1557 """ 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
|
1558 """ |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1559 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
|
1560 |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
1561 # 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
|
1562 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
|
1563 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
|
1564 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
|
1565 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
|
1566 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
|
1567 topicmode = _validmode[0] |
3020
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
1568 |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
1569 return topicmode |
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
1570 |
1850 | 1571 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
|
1572 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
|
1573 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
|
1574 with repo.wlock(): |
3020
361d83261d7a
topic: migrate experimental.enforce-topic to experimental.topic-mode
Boris Feld <boris.feld@octobus.net>
parents:
3014
diff
changeset
|
1575 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
|
1576 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
|
1577 |
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
1578 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
|
1579 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
|
1580 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
|
1581 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
|
1582 |
3030
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
1583 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
|
1584 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
|
1585 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
|
1586 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
|
1587 mayrandom = True |
581a6b9d2c8c
test: add support for random-all topic mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3028
diff
changeset
|
1588 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1589 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
|
1590 ismergecommit = False |
e814c553ef32
topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3024
diff
changeset
|
1591 mayabort = True |
e814c553ef32
topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3024
diff
changeset
|
1592 maywarn = False |
e814c553ef32
topic: add a 'enforce-all' mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3024
diff
changeset
|
1593 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1594 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
|
1595 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
|
1596 t = opts['topic'] |
6204
364ef033da03
topic: shorter code to write current topic
Anton Shestakov <av6@dwimlabs.net>
parents:
6155
diff
changeset
|
1597 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
|
1598 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
|
1599 pass |
3024
89855920fb0f
topicmode: 'enforce' topic mode, no longer warn about untopiced merge
Boris Feld <boris.feld@octobus.net>
parents:
3023
diff
changeset
|
1600 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
|
1601 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
|
1602 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
|
1603 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
|
1604 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
|
1605 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
|
1606 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
|
1607 elif notopic and mayrandom: |
6204
364ef033da03
topic: shorter code to write current topic
Anton Shestakov <av6@dwimlabs.net>
parents:
6155
diff
changeset
|
1608 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
|
1609 return orig(ui, repo, *args, **opts) |
1850 | 1610 |
1852
3084687f7994
commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents:
1851
diff
changeset
|
1611 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
|
1612 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
|
1613 if hastopicext(repo): |
24662f94d126
topic: only wrap committext for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4533
diff
changeset
|
1614 t = repo.currenttopic |
24662f94d126
topic: only wrap committext for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4533
diff
changeset
|
1615 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
|
1616 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
|
1617 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
|
1618 return ret |
3084687f7994
commit: add a topic field to the in-editor commit text
Matt Mackall <mpm@selenic.com>
parents:
1851
diff
changeset
|
1619 |
2983
c0de0010ec30
topic: add a --topic option to "outgoing" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2982
diff
changeset
|
1620 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
|
1621 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
|
1622 topic = opts['topic'] |
60317988f5ae
topic: substitute current topic when `--topic .` is used for outgoing/push
Anton Shestakov <av6@dwimlabs.net>
parents:
5375
diff
changeset
|
1623 if topic == b'.': |
60317988f5ae
topic: substitute current topic when `--topic .` is used for outgoing/push
Anton Shestakov <av6@dwimlabs.net>
parents:
5375
diff
changeset
|
1624 topic = repo.currenttopic |
60317988f5ae
topic: substitute current topic when `--topic .` is used for outgoing/push
Anton Shestakov <av6@dwimlabs.net>
parents:
5375
diff
changeset
|
1625 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
|
1626 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
|
1627 opts.setdefault('rev', []).extend(topicrevs) |
fef934b7ed86
topic: add a --topic option to "push" command
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
2939
diff
changeset
|
1628 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
|
1629 |
1877
69077c65919d
topic: handle merge.update function signature change
Augie Fackler <raf@durin42.com>
parents:
1874
diff
changeset
|
1630 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
|
1631 matcher = kwargs.get('matcher') |
e67c526c0a25
update: calculate 'partial' as core does
Sean Farley <sean@farley.io>
parents:
1963
diff
changeset
|
1632 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
|
1633 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
|
1634 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
|
1635 ist0 = False |
1853
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1636 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
|
1637 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
|
1638 |
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 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
|
1640 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
|
1641 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
|
1642 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
|
1643 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
|
1644 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
|
1645 |
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 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
|
1647 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
|
1648 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
|
1649 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
|
1650 b = ret.branch() |
6311
466702ac6c28
topic: complete "//" format support in experimental.topic.linear-merge code
Anton Shestakov <av6@dwimlabs.net>
parents:
6306
diff
changeset
|
1651 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
|
1652 t = ret.topic() |
6311
466702ac6c28
topic: complete "//" format support in experimental.topic.linear-merge code
Anton Shestakov <av6@dwimlabs.net>
parents:
6306
diff
changeset
|
1653 # 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
|
1654 if t: |
6311
466702ac6c28
topic: complete "//" format support in experimental.topic.linear-merge code
Anton Shestakov <av6@dwimlabs.net>
parents:
6306
diff
changeset
|
1655 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
|
1656 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
|
1657 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
|
1658 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
|
1659 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
|
1660 |
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 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
|
1662 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
|
1663 |
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 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
|
1665 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
|
1666 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
|
1667 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
|
1668 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
|
1669 |
4535
8dae14cd076a
topic: only wrap mergeupdate for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4534
diff
changeset
|
1670 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
|
1671 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
|
1672 # 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
|
1673 # 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
|
1674 # 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
|
1675 # 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
|
1676 # running. |
6245
a54db3e55c88
topic: switch to namespace when updating to a commit, similar to topic
Anton Shestakov <av6@dwimlabs.net>
parents:
6243
diff
changeset
|
1677 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
|
1678 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
|
1679 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
|
1680 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
|
1681 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
|
1682 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
|
1683 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
|
1684 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
|
1685 t = b'' |
1853
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1686 pctx = repo[node] |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1687 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
|
1688 tns = pctx.topic_namespace() |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
1689 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
|
1690 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
|
1691 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
|
1692 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
|
1693 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
|
1694 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
|
1695 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
|
1696 if ot and not t: |
4652
b72cd597a887
stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents:
4647
diff
changeset
|
1697 st = stack.stack(repo, topic=ot) |
b72cd597a887
stack: check if stack is empty more pythonically
Anton Shestakov <av6@dwimlabs.net>
parents:
4647
diff
changeset
|
1698 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
|
1699 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
|
1700 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
|
1701 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
|
1702 return ret |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1703 finally: |
8db7828751b7
topic: wrap the underlying update function rather than the command
Matt Mackall <mpm@selenic.com>
parents:
1852
diff
changeset
|
1704 wlock.release() |
1839
1bc5e62fc0c7
Initial dumb version of topics.
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1705 |
2793
fb317d218af0
topic: wrap 'update' in a more flexible way
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
1706 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
|
1707 |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4812
diff
changeset
|
1708 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
|
1709 configoverride = util.nullcontextmanager() |
848ca807f83a
topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5007
diff
changeset
|
1710 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
|
1711 configoverride = repo.ui.configoverride({ |
848ca807f83a
topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5007
diff
changeset
|
1712 (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
|
1713 }, source=b'topic-extension') |
848ca807f83a
topic: use ui.configoverride() instead of ui.backupconfig()
Martin von Zweigbergk <martinvonz@google.com>
parents:
5007
diff
changeset
|
1714 with configoverride: |
3614
9ad461df4d4d
compat: keep passing arguments as keyword argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3612
diff
changeset
|
1715 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
|
1716 |
1854
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1717 def _fixrebase(loaded): |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1718 if not loaded: |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1719 return |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1720 |
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1721 def savetopic(ctx, extra): |
1861
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
1722 if ctx.topic(): |
972d4e0c3d44
changectx: add topic method
Matt Mackall <mpm@selenic.com>
parents:
1860
diff
changeset
|
1723 extra[constants.extrakey] = ctx.topic() |
1854
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1724 |
2679
5156a67f66a6
topics: update current topic to the topic of newly rebased commit (issue5551)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2677
diff
changeset
|
1725 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
|
1726 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
|
1727 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
|
1728 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
|
1729 |
3612
33b718191bc9
rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents:
3603
diff
changeset
|
1730 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
|
1731 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
|
1732 |
33b718191bc9
rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents:
3603
diff
changeset
|
1733 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
|
1734 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
|
1735 |
33b718191bc9
rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents:
3603
diff
changeset
|
1736 return runtime |
33b718191bc9
rebase: update the rebase wrapping to works with hg 4.6
Boris Feld <boris.feld@octobus.net>
parents:
3603
diff
changeset
|
1737 |
1969
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
1738 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
|
1739 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
|
1740 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
|
1741 # 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
|
1742 # 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
|
1743 # 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
|
1744 extensions.wrapcommand(rebase.cmdtable, b'rebase', setrebaseconfig) |
1969
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
1745 except KeyError: |
a604423c1500
compat: tolerate missing rebase extension
timeless@gmail.com
parents:
1966
diff
changeset
|
1746 pass |
1854
67950fcf1c69
rebase: teach rebase how to copy topics
Matt Mackall <mpm@selenic.com>
parents:
1853
diff
changeset
|
1747 |
1946
72246b13bd72
patch: document the section about import/export
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1945
diff
changeset
|
1748 ## 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
|
1749 |
6539
45689da4ed41
topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents:
6537
diff
changeset
|
1750 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
|
1751 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
|
1752 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
|
1753 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
|
1754 return None |
45689da4ed41
topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents:
6537
diff
changeset
|
1755 |
1866
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
1756 def _exporttopic(seq, ctx): |
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
1757 topic = ctx.topic() |
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
1758 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
|
1759 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
|
1760 return None |
13fc93fb7fbe
patch: add topic to exported patch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1863
diff
changeset
|
1761 |
6539
45689da4ed41
topic: teach hg import/export to handle topic namespace as well
Anton Shestakov <av6@dwimlabs.net>
parents:
6537
diff
changeset
|
1762 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
|
1763 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
|
1764 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
|
1765 |
1867
c9cacc62fa17
patch: import topic from patch header
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1866
diff
changeset
|
1766 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
|
1767 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
|
1768 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
|
1769 |
1948
54810b543bf4
patch: move setup of import/export logic into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1947
diff
changeset
|
1770 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
|
1771 """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
|
1772 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
|
1773 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
|
1774 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
|
1775 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
|
1776 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
|
1777 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
|
1778 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
|
1779 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
|
1780 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
|
1781 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
|
1782 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1783 ## preserve topic during split |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1784 |
6417
c37754bb02d4
topic: rename presplitupdatetopic() to wrappresplitupdate()
Anton Shestakov <av6@dwimlabs.net>
parents:
6410
diff
changeset
|
1785 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
|
1786 # Save topic of revision |
6418
50c4ed02ac6d
topic: make hg split preserve topic namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6417
diff
changeset
|
1787 tns = None |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1788 topic = None |
6418
50c4ed02ac6d
topic: make hg split preserve topic namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6417
diff
changeset
|
1789 if util.safehasattr(ctx, 'topic_namespace'): |
50c4ed02ac6d
topic: make hg split preserve topic namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6417
diff
changeset
|
1790 tns = ctx.topic_namespace() |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1791 if util.safehasattr(ctx, 'topic'): |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1792 topic = ctx.topic() |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1793 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1794 # Update the working directory |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1795 original(repo, ui, prev, ctx) |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1796 |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1797 # 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
|
1798 if tns != b'none': |
6418
50c4ed02ac6d
topic: make hg split preserve topic namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6417
diff
changeset
|
1799 _changecurrenttns(repo, tns) |
2667
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1800 if topic: |
e7079bba383d
topic: makes split keep the topic
Boris Feld <boris.feld@octobus.net>
parents:
2665
diff
changeset
|
1801 _changecurrenttopic(repo, topic) |
6236
7ad8107d953a
topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents:
6206
diff
changeset
|
1802 |
6537
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
1803 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
|
1804 # hg <= 6.1 (d4752aeb20f1) |
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
1805 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
|
1806 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
|
1807 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
|
1808 else: |
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
1809 orig(repo, revs, action) |
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
1810 |
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
1811 # 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
|
1812 # 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
|
1813 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
|
1814 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
|
1815 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
|
1816 disallowed = namespaces - allow |
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
1817 if disallowed: |
80d5d4e587f7
topic: experimental config option and topic namespace checking in precheck()
Anton Shestakov <av6@dwimlabs.net>
parents:
6535
diff
changeset
|
1818 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
|
1819 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
|
1820 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
|
1821 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
|
1822 |
6239
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1823 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
|
1824 if tns != b'none': |
6239
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1825 with repo.wlock(): |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1826 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
|
1827 else: |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1828 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
|
1829 |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1830 @command(b'debug-topic-namespace', [ |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1831 (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
|
1832 ], |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1833 _(b'[NAMESPACE|--clear]')) |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1834 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
|
1835 """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
|
1836 if opts.get('clear'): |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1837 if tns: |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1838 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
|
1839 tns = b'none' |
6239
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1840 elif not tns: |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1841 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
|
1842 return |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1843 if tns: |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1844 tns = tns.strip() |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1845 if not 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 consist entirely of whitespace")) |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1847 if b'/' in tns: |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1848 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
|
1849 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
|
1850 |
94bf2f307b75
topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents:
6611
diff
changeset
|
1851 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
|
1852 b"'-', '_' and '.' characters") |
94bf2f307b75
topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents:
6611
diff
changeset
|
1853 try: |
94bf2f307b75
topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents:
6611
diff
changeset
|
1854 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
|
1855 except error.Abort: |
94bf2f307b75
topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents:
6611
diff
changeset
|
1856 # 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
|
1857 # 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
|
1858 utns = '' |
94bf2f307b75
topic: check that topic namespace names are human-readable like topics
Anton Shestakov <av6@dwimlabs.net>
parents:
6611
diff
changeset
|
1859 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
|
1860 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
|
1861 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
|
1862 ctns = repo.currenttns |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1863 _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
|
1864 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
|
1865 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
|
1866 % tns) |
8861e33f3bb2
topic: setting current repo namespace with debug-namespace
Anton Shestakov <av6@dwimlabs.net>
parents:
6238
diff
changeset
|
1867 |
6238
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
1868 @command(b'debug-topic-namespaces', []) |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
1869 def debugtopicnamespaces(ui, repo, **opts): |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
1870 """list repository namespaces""" |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
1871 for tns in repo.topic_namespaces: |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
1872 ui.write(b'%s\n' % (tns,)) |
6bbd16579f0f
topic: list namespaces with debug-namespaces
Anton Shestakov <av6@dwimlabs.net>
parents:
6237
diff
changeset
|
1873 |
6236
7ad8107d953a
topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents:
6206
diff
changeset
|
1874 @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
|
1875 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
|
1876 """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
|
1877 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
|
1878 opts = pycompat.byteskwargs(opts) |
7ad8107d953a
topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents:
6206
diff
changeset
|
1879 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
|
1880 fm.startitem() |
7ad8107d953a
topic: introduce topic namespaces concept starting with simple parsing
Anton Shestakov <av6@dwimlabs.net>
parents:
6206
diff
changeset
|
1881 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
|
1882 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
|
1883 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
|
1884 fm.end() |
6237
0b9042408809
topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents:
6236
diff
changeset
|
1885 |
0b9042408809
topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents:
6236
diff
changeset
|
1886 @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
|
1887 (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
|
1888 (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
|
1889 (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
|
1890 (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
|
1891 ], optionalrepo=True) |
0b9042408809
topic: formatting branch, namespace and topic into fully qualified branch name
Anton Shestakov <av6@dwimlabs.net>
parents:
6236
diff
changeset
|
1892 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
|
1893 """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
|
1894 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
|
1895 ui.write(b'%s\n' % short) |