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