Mercurial > evolve
annotate hgext/obsolete.py @ 431:bd05022c7856
obsolete: add and use templatekw decorator
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Tue, 07 Aug 2012 14:08:20 +0200 |
parents | 07db1d511faf |
children | 6347bc69b49a |
rev | line source |
---|---|
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
1 # obsolete.py - introduce the obsolete concept in mercurial. |
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
2 # |
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
3 # Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
4 # Logilab SA <contact@logilab.fr> |
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
5 # |
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
7 # GNU General Public License version 2 or any later version. |
69
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
8 """Introduce the Obsolete concept to mercurial |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
9 |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
10 General concept |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
11 =============== |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
12 |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
13 This extension introduces the *obsolete* concept. It adds a new *obsolete* |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
14 relation between two changesets. A relation ``<changeset B> obsolete <changeset |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
15 A>`` is set to denote that ``<changeset B>`` is new version of ``<changeset |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
16 A>``. |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
17 |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
18 The *obsolete* relation act as a **perpendicular history** to the standard |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
19 changeset history. Standard changeset history versions files. The *obsolete* |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
20 relation versions changesets. |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
21 |
228
5a17c0d41a00
proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
226
diff
changeset
|
22 :obsolete: a changeset that has been replaced by another one. |
5a17c0d41a00
proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
226
diff
changeset
|
23 :unstable: a changeset that is not obsolete but has an obsolete ancestor. |
85
531058dbd703
[obsolete] vocabulary update suggestion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
84
diff
changeset
|
24 :suspended: an obsolete changeset with unstable descendant. |
228
5a17c0d41a00
proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
226
diff
changeset
|
25 :extinct: an obsolete changeset without unstable descendant. |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
26 (subject to garbage collection) |
85
531058dbd703
[obsolete] vocabulary update suggestion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
84
diff
changeset
|
27 |
531058dbd703
[obsolete] vocabulary update suggestion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
84
diff
changeset
|
28 Another name for unstable could be out of sync. |
69
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
29 |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
30 |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
31 Usage and Feature |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
32 ================= |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
33 |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
34 |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
35 New commands |
228
5a17c0d41a00
proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
226
diff
changeset
|
36 ------------ |
69
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
37 |
415
ea7f2a4ad530
obsolete: fix doc, rebase no longer aborts with --keep
Patrick Mezard <patrick@mezard.eu>
parents:
409
diff
changeset
|
38 Note that rebased changesets are now marked obsolete instead of being stripped. |
275
336210dada95
obsolete: make rebase abort with --keep
Patrick Mezard <patrick@mezard.eu>
parents:
274
diff
changeset
|
39 |
69
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
40 """ |
228
5a17c0d41a00
proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
226
diff
changeset
|
41 |
379
881c3eca314a
Wider triggering of the debug marker abort
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
378
diff
changeset
|
42 import os, sys |
54
ad1a4fb0fc49
Make states more resilient to missing head
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
53
diff
changeset
|
43 try: |
ad1a4fb0fc49
Make states more resilient to missing head
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
53
diff
changeset
|
44 from cStringIO import StringIO |
ad1a4fb0fc49
Make states more resilient to missing head
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
53
diff
changeset
|
45 except ImportError: |
ad1a4fb0fc49
Make states more resilient to missing head
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
53
diff
changeset
|
46 from StringIO import StringIO |
ad1a4fb0fc49
Make states more resilient to missing head
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
53
diff
changeset
|
47 |
75
d7b11772f0b5
[obsolete] published changeset can't be obsoleted
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
74
diff
changeset
|
48 from mercurial.i18n import _ |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
49 |
224 | 50 import json |
89
757153438e58
[obsolet] base64 encore obsolete rel for pushkey
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
87
diff
changeset
|
51 |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
52 import struct |
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
53 from mercurial import util, base85 |
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
54 |
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
55 _pack = struct.pack |
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
56 _unpack = struct.unpack |
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
57 |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
58 from mercurial import util |
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
59 from mercurial import context |
39 | 60 from mercurial import revset |
40
b9a5a596d9ef
proper computation of hidden changeset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
39
diff
changeset
|
61 from mercurial import scmutil |
42
eb6a06d7eae3
Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
41
diff
changeset
|
62 from mercurial import extensions |
44
b243c10a5fbe
Add pushkey support for pull and push
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
43
diff
changeset
|
63 from mercurial import pushkey |
46
3b0364fc822f
Do not propagate obsolete changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
44
diff
changeset
|
64 from mercurial import discovery |
3b0364fc822f
Do not propagate obsolete changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
44
diff
changeset
|
65 from mercurial import error |
79
9906560f585e
[obsolete] issue a warning when parent of current directory is obsolete.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
75
diff
changeset
|
66 from mercurial import commands |
114
1a64195e2b09
nicer hiddenrevs init
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
112
diff
changeset
|
67 from mercurial import changelog |
115
d60eddda9546
add an option to ensure unstable are secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
114
diff
changeset
|
68 from mercurial import phases |
80
5d029a358252
[obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
79
diff
changeset
|
69 from mercurial.node import hex, bin, short, nullid |
52
62bdc2567099
Rollback support
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
51
diff
changeset
|
70 from mercurial.lock import release |
252
470232cea503
[obsolete] fix new api: use the new phase cache api
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
228
diff
changeset
|
71 from mercurial import localrepo |
276
f26e9bc5f7fc
obsolete: use new-style command registration
Patrick Mezard <patrick@mezard.eu>
parents:
275
diff
changeset
|
72 from mercurial import cmdutil |
299
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
73 from mercurial import templatekw |
405
b5b1bf5166a2
obsolete: enable obsolete feature
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
399
diff
changeset
|
74 from mercurial import obsolete |
428
1c82147e9395
obsolete: remove 2.2 compat hack
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
423
diff
changeset
|
75 from mercurial.localrepo import storecache |
412
7d30d1becfc4
obsolete: simplify obsolete feature enabling
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
411
diff
changeset
|
76 obsolete._enabled = True |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
77 |
160
24346b78cd99
mercurial 2.1.2 compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
150
diff
changeset
|
78 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
79 ### Extension helper |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
80 ############################# |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
81 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
82 ### setup code |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
83 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
84 class exthelper(object): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
85 """Helper for modular extension setup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
86 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
87 A single helper should be intanciated for each extension. Helper method are |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
88 then used as decorator for various purpose. |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
89 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
90 All decorator returns the original function and may be chained. |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
91 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
92 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
93 def __init__(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
94 self._uicallables = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
95 self._extcallables = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
96 self._repocallables = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
97 self._revsetsymbols = [] |
431
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
98 self._templatekws = [] |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
99 self._commandwrappers = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
100 self._extcommandwrappers = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
101 self._functionwrappers = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
102 self._duckpunchers = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
103 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
104 def final_uisetup(self, ui): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
105 """Method to be used as a the extension uisetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
106 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
107 The following operations belong here: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
108 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
109 - Changes to ui.__class__ . The ui object that will be used to run the |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
110 command has not yet been created. Changes made here will affect ui |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
111 objects created after this, and in particular the ui that will be |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
112 passed to runcommand |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
113 - Command wraps (extensions.wrapcommand) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
114 - Changes that need to be visible by other extensions: because |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
115 initialization occurs in phases (all extensions run uisetup, then all |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
116 run extsetup), a change made here will be visible by other extensions |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
117 during extsetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
118 - Monkeypatches or function wraps (extensions.wrapfunction) of dispatch |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
119 module members |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
120 - Setup of pre-* and post-* hooks |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
121 - pushkey setup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
122 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
123 for cont, funcname, func in self._duckpunchers: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
124 setattr(cont, funcname, func) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
125 for command, wrapper in self._commandwrappers: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
126 extensions.wrapcommand(commands.table, command, wrapper) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
127 for cont, funcname, wrapper in self._functionwrappers: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
128 extensions.wrapfunction(cont, funcname, wrapper) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
129 for c in self._uicallables: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
130 c(ui) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
131 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
132 def final_extsetup(self, ui): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
133 """Method to be used as a the extension extsetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
134 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
135 The following operations belong here: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
136 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
137 - Changes depending on the status of other extensions. (if extensions.find('mq')) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
138 - Add a global option to all commands |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
139 - Extend revsets |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
140 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
141 knownexts = {} |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
142 for name, symbol in self._revsetsymbols: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
143 revset.symbols[name] = symbol |
431
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
144 for name, kw in self._templatekws: |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
145 templatekw.keywords[name] = kw |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
146 for ext, command, wrapper in self._extcommandwrappers: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
147 if ext not in knownexts: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
148 e = extensions.find('rebase') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
149 if e is None: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
150 raise util.Abort('extension %s not found' %e) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
151 knownexts[ext] = e.cmdtable |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
152 extensions.wrapcommand(knownexts[ext], commands, wrapper) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
153 for c in self._extcallables: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
154 c(ui) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
155 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
156 def final_reposetup(self, ui, repo): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
157 """Method to be used as a the extension reposetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
158 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
159 The following operations belong here: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
160 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
161 - All hooks but pre-* and post-* |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
162 - Modify configuration variables |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
163 - Changes to repo.__class__, repo.dirstate.__class__ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
164 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
165 for c in self._repocallables: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
166 c(ui, repo) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
167 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
168 def uisetup(self, call): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
169 """Decorated function will be executed during uisetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
170 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
171 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
172 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
173 @eh.uisetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
174 def setupbabar(ui): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
175 print 'this is uisetup!' |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
176 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
177 self._uicallables.append(call) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
178 return call |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
179 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
180 def extsetup(self, call): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
181 """Decorated function will be executed during extsetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
182 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
183 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
184 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
185 @eh.extsetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
186 def setupcelestine(ui): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
187 print 'this is extsetup!' |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
188 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
189 self._uicallables.append(call) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
190 return call |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
191 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
192 def reposetup(self, call): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
193 """Decorated function will be executed during reposetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
194 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
195 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
196 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
197 @eh.reposetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
198 def setupzephir(ui, repo): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
199 print 'this is reposetup!' |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
200 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
201 self._repocallables.append(call) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
202 return call |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
203 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
204 def revset(self, symbolname): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
205 """Decorated function is a revset symbol |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
206 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
207 The name of the symbol must be given as the decorator argument. |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
208 The symbol is added during `extsetup`. |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
209 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
210 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
211 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
212 @eh.revset('hidden') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
213 def revsetbabar(repo, subset, x): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
214 args = revset.getargs(x, 0, 0, 'babar accept no argument') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
215 return [r for r in subset if 'babar' in repo[r].description()] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
216 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
217 def dec(symbol): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
218 self._revsetsymbols.append((symbolname, symbol)) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
219 return symbol |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
220 return dec |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
221 |
431
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
222 |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
223 def templatekw(self, keywordname): |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
224 """Decorated function is a revset keyword |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
225 |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
226 The name of the keyword must be given as the decorator argument. |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
227 The symbol is added during `extsetup`. |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
228 |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
229 example:: |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
230 |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
231 @eh.templatekw('babar') |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
232 def kwbabar(ctx): |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
233 return 'babar' |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
234 """ |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
235 def dec(keyword): |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
236 self._templatekws.append((keywordname, keyword)) |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
237 return keyword |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
238 return dec |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
239 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
240 def wrapcommand(self, command, extension=None): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
241 """Decorated function is a command wrapper |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
242 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
243 The name of the command must be given as the decorator argument. |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
244 The wrapping is installed during `uisetup`. |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
245 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
246 If the second option `extension` argument is provided, the wrapping |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
247 will be applied in the extension commandtable. This argument must be a |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
248 string that will be searched using `extension.find` if not found and |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
249 Abort error is raised. If the wrapping apply to an extension, it is |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
250 installed during `extsetup` |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
251 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
252 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
253 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
254 @eh.wrapcommand('summary') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
255 def wrapsummary(orig, ui, repo, *args, **kwargs): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
256 ui.note('Barry!') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
257 return orig(ui, repo, *args, **kwargs) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
258 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
259 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
260 def dec(wrapper): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
261 if extension is None: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
262 self._commandwrappers.append((command, wrapper)) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
263 else: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
264 self._extcommandwrappers.append((extension, command, wrapper)) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
265 return wrapper |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
266 return dec |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
267 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
268 def wrapfunction(self, container, funcname): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
269 """Decorated function is a function wrapper |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
270 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
271 This function take two argument, the container and the name of the |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
272 function to wrap. The wrapping is performed during `uisetup`. |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
273 (there is don't support extension) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
274 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
275 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
276 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
277 @eh.function(discovery, 'checkheads') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
278 def wrapfunction(orig, *args, **kwargs): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
279 ui.note('His head smashed in and his heart cut out') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
280 return orig(*args, **kwargs) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
281 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
282 def dec(wrapper): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
283 self._functionwrappers.append((container, funcname, wrapper)) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
284 return wrapper |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
285 return dec |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
286 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
287 def addattr(self, container, funcname): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
288 """Decorated function is to be added to the container |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
289 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
290 This function take two argument, the container and the name of the |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
291 function to wrap. The wrapping is performed during `uisetup`. |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
292 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
293 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
294 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
295 @eh.function(context.changectx, 'babar') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
296 def babar(ctx): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
297 return 'babar' in ctx.description |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
298 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
299 def dec(func): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
300 self._duckpunchers.append((container, funcname, func)) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
301 return func |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
302 return dec |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
303 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
304 eh = exthelper() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
305 uisetup = eh.final_uisetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
306 extsetup = eh.final_extsetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
307 reposetup = eh.final_reposetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
308 |
160
24346b78cd99
mercurial 2.1.2 compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
150
diff
changeset
|
309 |
72
774932a6cc0d
[obsolete] rationalize doc header.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
71
diff
changeset
|
310 ### Patch changectx |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
311 ############################# |
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
312 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
313 @eh.addattr(context.changectx, 'unstable') |
148
8e93e1f67205
obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
144
diff
changeset
|
314 def unstable(ctx): |
8e93e1f67205
obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
144
diff
changeset
|
315 """is the changeset unstable (have obsolete ancestor)""" |
8e93e1f67205
obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
144
diff
changeset
|
316 if ctx.node() is None: |
8e93e1f67205
obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
144
diff
changeset
|
317 return False |
8e93e1f67205
obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
144
diff
changeset
|
318 return ctx.rev() in ctx._repo._unstableset |
8e93e1f67205
obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
144
diff
changeset
|
319 |
8e93e1f67205
obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
144
diff
changeset
|
320 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
321 @eh.addattr(context.changectx, 'extinct') |
213
ea4aa1890b16
obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
212
diff
changeset
|
322 def extinct(ctx): |
ea4aa1890b16
obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
212
diff
changeset
|
323 """is the changeset extinct by other""" |
ea4aa1890b16
obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
212
diff
changeset
|
324 if ctx.node() is None: |
ea4aa1890b16
obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
212
diff
changeset
|
325 return False |
ea4aa1890b16
obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
212
diff
changeset
|
326 return ctx.rev() in ctx._repo._extinctset |
ea4aa1890b16
obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
212
diff
changeset
|
327 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
328 @eh.addattr(context.changectx, 'latecomer') |
307
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
329 def latecomer(ctx): |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
330 """is the changeset latecomer (Try to succeed to public change)""" |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
331 if ctx.node() is None: |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
332 return False |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
333 return ctx.rev() in ctx._repo._latecomerset |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
334 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
335 @eh.addattr(context.changectx, 'conflicting') |
354
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
336 def conflicting(ctx): |
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
337 """is the changeset conflicting (Try to succeed to public change)""" |
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
338 if ctx.node() is None: |
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
339 return False |
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
340 return ctx.rev() in ctx._repo._conflictingset |
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
341 |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
342 |
72
774932a6cc0d
[obsolete] rationalize doc header.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
71
diff
changeset
|
343 ### revset |
39 | 344 ############################# |
345 | |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
346 @eh.revset('hidden') |
321
41ba89f0caa5
obsolete: add an hidden revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
320
diff
changeset
|
347 def revsethidden(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
348 """``hidden()`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
349 Changeset is hidden. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
350 """ |
321
41ba89f0caa5
obsolete: add an hidden revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
320
diff
changeset
|
351 args = revset.getargs(x, 0, 0, 'hidden takes no argument') |
398
42828b0ace98
obsolete: fix hidden() revset
Patrick Mezard <patrick@mezard.eu>
parents:
397
diff
changeset
|
352 return [r for r in subset if r in repo.hiddenrevs] |
112
eae9be0ee00e
adapt obsolete to phase.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
109
diff
changeset
|
353 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
354 @eh.revset('obsolete') |
39 | 355 def revsetobsolete(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
356 """``obsolete()`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
357 Changeset is obsolete. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
358 """ |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
359 args = revset.getargs(x, 0, 0, 'obsolete takes no argument') |
252
470232cea503
[obsolete] fix new api: use the new phase cache api
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
228
diff
changeset
|
360 return [r for r in subset if r in repo._obsoleteset and repo._phasecache.phase(repo, r) > 0] |
470232cea503
[obsolete] fix new api: use the new phase cache api
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
228
diff
changeset
|
361 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
362 @eh.revset('unstable') |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
363 def revsetunstable(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
364 """``unstable()`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
365 Unstable changesets are non-obsolete with obsolete ancestors. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
366 """ |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
367 args = revset.getargs(x, 0, 0, 'unstable takes no arguments') |
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
368 return [r for r in subset if r in repo._unstableset] |
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
369 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
370 @eh.revset('suspended') |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
371 def revsetsuspended(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
372 """``suspended()`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
373 Obsolete changesets with non-obsolete descendants. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
374 """ |
310
2d0dc5c18489
[obsolete] fix revset error message
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
308
diff
changeset
|
375 args = revset.getargs(x, 0, 0, 'suspended takes no arguments') |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
376 return [r for r in subset if r in repo._suspendedset] |
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
377 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
378 @eh.revset('extinct') |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
379 def revsetextinct(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
380 """``extinct()`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
381 Obsolete changesets with obsolete descendants only. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
382 """ |
310
2d0dc5c18489
[obsolete] fix revset error message
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
308
diff
changeset
|
383 args = revset.getargs(x, 0, 0, 'extinct takes no arguments') |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
384 return [r for r in subset if r in repo._extinctset] |
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
385 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
386 @eh.revset('latecomer') |
307
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
387 def revsetlatecomer(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
388 """``latecomer()`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
389 Changesets marked as successors of public changesets. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
390 """ |
310
2d0dc5c18489
[obsolete] fix revset error message
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
308
diff
changeset
|
391 args = revset.getargs(x, 0, 0, 'latecomer takes no arguments') |
307
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
392 return [r for r in subset if r in repo._latecomerset] |
143
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
393 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
394 @eh.revset('conflicting') |
354
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
395 def revsetconflicting(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
396 """``conflicting()`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
397 Changesets marked as successors of a same changeset. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
398 """ |
354
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
399 args = revset.getargs(x, 0, 0, 'conflicting takes no arguments') |
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
400 return [r for r in subset if r in repo._conflictingset] |
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
401 |
305
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
402 def _precursors(repo, s): |
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
403 """Precursor of a changeset""" |
143
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
404 cs = set() |
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
405 nm = repo.changelog.nodemap |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
406 markerbysubj = repo.obsstore.successors |
143
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
407 for r in s: |
224 | 408 for p in markerbysubj.get(repo[r].node(), ()): |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
409 pr = nm.get(p[0]) |
143
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
410 if pr is not None: |
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
411 cs.add(pr) |
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
412 return cs |
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
413 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
414 @eh.revset('obsparents') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
415 @eh.revset('precursors') |
305
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
416 def revsetprecursors(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
417 """``precursors(set)`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
418 Immediate precursors of changesets in set. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
419 """ |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
420 s = revset.getset(repo, range(len(repo)), x) |
305
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
421 cs = _precursors(repo, s) |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
422 return [r for r in subset if r in cs] |
143
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
423 |
305
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
424 def _allprecursors(repo, s): # XXX we need a better naming |
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
425 """transitive precursors of a subset""" |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
426 toproceed = [repo[r].node() for r in s] |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
427 seen = set() |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
428 allsubjects = repo.obsstore.successors |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
429 while toproceed: |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
430 nc = toproceed.pop() |
224 | 431 for mark in allsubjects.get(nc, ()): |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
432 np = mark[0] |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
433 if np not in seen: |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
434 seen.add(np) |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
435 toproceed.append(np) |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
436 nm = repo.changelog.nodemap |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
437 cs = set() |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
438 for p in seen: |
204
50039b9b535e
2.2 compat: nodemap.get take a single argument now.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
203
diff
changeset
|
439 pr = nm.get(p) |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
440 if pr is not None: |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
441 cs.add(pr) |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
442 return cs |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
443 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
444 @eh.revset('obsancestors') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
445 @eh.revset('allprecursors') |
305
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
446 def revsetallprecursors(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
447 """``allprecursors(set)`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
448 Transitive precursors of changesets in set. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
449 """ |
143
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
450 s = revset.getset(repo, range(len(repo)), x) |
305
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
451 cs = _allprecursors(repo, s) |
143
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
452 return [r for r in subset if r in cs] |
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
453 |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
454 def _successors(repo, s): |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
455 """Successors of a changeset""" |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
456 cs = set() |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
457 nm = repo.changelog.nodemap |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
458 markerbyobj = repo.obsstore.precursors |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
459 for r in s: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
460 for p in markerbyobj.get(repo[r].node(), ()): |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
461 for sub in p[1]: |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
462 sr = nm.get(sub) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
463 if sr is not None: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
464 cs.add(sr) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
465 return cs |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
466 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
467 @eh.revset('obschildrend') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
468 @eh.revset('successors') |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
469 def revsetsuccessors(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
470 """``successors(set)`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
471 Immediate successors of changesets in set. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
472 """ |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
473 s = revset.getset(repo, range(len(repo)), x) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
474 cs = _successors(repo, s) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
475 return [r for r in subset if r in cs] |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
476 |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
477 def _allsuccessors(repo, s): # XXX we need a better naming |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
478 """transitive successors of a subset""" |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
479 toproceed = [repo[r].node() for r in s] |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
480 seen = set() |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
481 allobjects = repo.obsstore.precursors |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
482 while toproceed: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
483 nc = toproceed.pop() |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
484 for mark in allobjects.get(nc, ()): |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
485 for sub in mark[1]: |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
486 if sub not in seen: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
487 seen.add(sub) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
488 toproceed.append(sub) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
489 nm = repo.changelog.nodemap |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
490 cs = set() |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
491 for s in seen: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
492 sr = nm.get(s) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
493 if sr is not None: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
494 cs.add(sr) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
495 return cs |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
496 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
497 @eh.revset('obsdescendants') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
498 @eh.revset('allsuccessors') |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
499 def revsetallsuccessors(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
500 """``allsuccessors(set)`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
501 Transitive successors of changesets in set. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
502 """ |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
503 s = revset.getset(repo, range(len(repo)), x) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
504 cs = _allsuccessors(repo, s) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
505 return [r for r in subset if r in cs] |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
506 |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
507 |
299
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
508 ### template keywords |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
509 ##################### |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
510 |
431
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
511 @eh.templatekw('obsolete') |
299
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
512 def obsoletekw(repo, ctx, templ, **args): |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
513 """:obsolete: String. The obsolescence level of the node, could be |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
514 ``stable``, ``unstable``, ``suspended`` or ``extinct``. |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
515 """ |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
516 rev = ctx.rev() |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
517 if rev in repo._extinctset: |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
518 return 'extinct' |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
519 if rev in repo._suspendedset: |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
520 return 'suspended' |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
521 if rev in repo._unstableset: |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
522 return 'unstable' |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
523 return 'stable' |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
524 |
71
19e1930587a0
[obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
70
diff
changeset
|
525 ### Other Extension compat |
19e1930587a0
[obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
70
diff
changeset
|
526 ############################ |
19e1930587a0
[obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
70
diff
changeset
|
527 |
150
f12fd2410a60
obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
148
diff
changeset
|
528 |
253
8ee6c5b98d73
[obsolete] fix new api: be more flexible on rebase's buildstate signature
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
252
diff
changeset
|
529 def buildstate(orig, repo, dest, rebaseset, *ags, **kws): |
150
f12fd2410a60
obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
148
diff
changeset
|
530 """wrapper for rebase 's buildstate that exclude obsolete changeset""" |
f12fd2410a60
obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
148
diff
changeset
|
531 rebaseset = repo.revs('%ld - extinct()', rebaseset) |
253
8ee6c5b98d73
[obsolete] fix new api: be more flexible on rebase's buildstate signature
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
252
diff
changeset
|
532 return orig(repo, dest, rebaseset, *ags, **kws) |
150
f12fd2410a60
obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
148
diff
changeset
|
533 |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
534 def defineparents(orig, repo, rev, target, state, *args, **kwargs): |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
535 rebasestate = getattr(repo, '_rebasestate', None) |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
536 if rebasestate is not None: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
537 repo._rebasestate = dict(state) |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
538 repo._rebasetarget = target |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
539 return orig(repo, rev, target, state, *args, **kwargs) |
150
f12fd2410a60
obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
148
diff
changeset
|
540 |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
541 def concludenode(orig, repo, rev, p1, *args, **kwargs): |
74
c7dd26dec7fc
[obsolete] update docstring
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
73
diff
changeset
|
542 """wrapper for rebase 's concludenode that set obsolete relation""" |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
543 newrev = orig(repo, rev, p1, *args, **kwargs) |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
544 rebasestate = getattr(repo, '_rebasestate', None) |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
545 if rebasestate is not None: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
546 if newrev is not None: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
547 nrev = repo[newrev].rev() |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
548 else: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
549 nrev = p1 |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
550 repo._rebasestate[rev] = nrev |
71
19e1930587a0
[obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
70
diff
changeset
|
551 return newrev |
19e1930587a0
[obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
70
diff
changeset
|
552 |
274
6622a24f3b0f
obsolete: fix rebase wrapping
Patrick Mezard <patrick@mezard.eu>
parents:
273
diff
changeset
|
553 def cmdrebase(orig, ui, repo, *args, **kwargs): |
311
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
554 |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
555 reallykeep = kwargs.get('keep', False) |
275
336210dada95
obsolete: make rebase abort with --keep
Patrick Mezard <patrick@mezard.eu>
parents:
274
diff
changeset
|
556 kwargs = dict(kwargs) |
84
c4cc5f3bcf12
[obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
83
diff
changeset
|
557 kwargs['keep'] = True |
c4cc5f3bcf12
[obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
83
diff
changeset
|
558 |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
559 # We want to mark rebased revision as obsolete and set their |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
560 # replacements if any. Doing it in concludenode() prevents |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
561 # aborting the rebase, and is not called with all relevant |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
562 # revisions in --collapse case. Instead, we try to track the |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
563 # rebase state structure by sampling/updating it in |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
564 # defineparents() and concludenode(). The obsolete markers are |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
565 # added from this state after a successful call. |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
566 repo._rebasestate = {} |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
567 repo._rebasetarget = None |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
568 try: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
569 res = orig(ui, repo, *args, **kwargs) |
311
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
570 if not reallykeep: |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
571 # Filter nullmerge or unrebased entries |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
572 repo._rebasestate = dict(p for p in repo._rebasestate.iteritems() |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
573 if p[1] >= 0) |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
574 if not res and not kwargs.get('abort') and repo._rebasestate: |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
575 # Rebased revisions are assumed to be descendants of |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
576 # targetrev. If a source revision is mapped to targetrev |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
577 # or to another rebased revision, it must have been |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
578 # removed. |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
579 targetrev = repo[repo._rebasetarget].rev() |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
580 newrevs = set([targetrev]) |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
581 replacements = {} |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
582 for rev, newrev in sorted(repo._rebasestate.items()): |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
583 oldnode = repo[rev].node() |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
584 if newrev not in newrevs: |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
585 newnode = repo[newrev].node() |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
586 newrevs.add(newrev) |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
587 else: |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
588 newnode = nullid |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
589 replacements[oldnode] = newnode |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
590 |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
591 if kwargs.get('collapse'): |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
592 newnodes = set(n for n in replacements.values() if n != nullid) |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
593 if newnodes: |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
594 # Collapsing into more than one revision? |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
595 assert len(newnodes) == 1, newnodes |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
596 newnode = newnodes.pop() |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
597 else: |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
598 newnode = nullid |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
599 repo.addcollapsedobsolete(replacements, newnode) |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
600 else: |
311
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
601 for oldnode, newnode in replacements.iteritems(): |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
602 repo.addobsolete(newnode, oldnode) |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
603 return res |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
604 finally: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
605 delattr(repo, '_rebasestate') |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
606 delattr(repo, '_rebasetarget') |
84
c4cc5f3bcf12
[obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
83
diff
changeset
|
607 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
608 @eh.extsetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
609 def _rebasewrapping(ui): |
356
56d4c6207ef9
Move obserror warning into the obsolete extension.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
354
diff
changeset
|
610 # warning about more obsolete |
42
eb6a06d7eae3
Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
41
diff
changeset
|
611 try: |
eb6a06d7eae3
Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
41
diff
changeset
|
612 rebase = extensions.find('rebase') |
eb6a06d7eae3
Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
41
diff
changeset
|
613 if rebase: |
356
56d4c6207ef9
Move obserror warning into the obsolete extension.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
354
diff
changeset
|
614 entry = extensions.wrapcommand(rebase.cmdtable, 'rebase', warnobserrors) |
150
f12fd2410a60
obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
148
diff
changeset
|
615 extensions.wrapfunction(rebase, 'buildstate', buildstate) |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
616 extensions.wrapfunction(rebase, 'defineparents', defineparents) |
42
eb6a06d7eae3
Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
41
diff
changeset
|
617 extensions.wrapfunction(rebase, 'concludenode', concludenode) |
84
c4cc5f3bcf12
[obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
83
diff
changeset
|
618 extensions.wrapcommand(rebase.cmdtable, "rebase", cmdrebase) |
42
eb6a06d7eae3
Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
41
diff
changeset
|
619 except KeyError: |
305
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
620 pass # rebase not found |
39 | 621 |
214
a140d1857931
obsolete: do not warn about unpushed extinct changeset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
213
diff
changeset
|
622 ### Discovery wrapping |
a140d1857931
obsolete: do not warn about unpushed extinct changeset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
213
diff
changeset
|
623 ############################# |
a140d1857931
obsolete: do not warn about unpushed extinct changeset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
213
diff
changeset
|
624 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
625 @eh.wrapfunction(discovery, 'checkheads') |
217
786eb34d93ea
obsolete: refuse to push unstable changeset without -f
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
215
diff
changeset
|
626 def wrapcheckheads(orig, repo, remote, outgoing, *args, **kwargs): |
218
ace5608350b6
obsolete: do no complain when push create a new head but obsolete an old one.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
217
diff
changeset
|
627 """wrap mercurial.discovery.checkheads |
ace5608350b6
obsolete: do no complain when push create a new head but obsolete an old one.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
217
diff
changeset
|
628 |
ace5608350b6
obsolete: do no complain when push create a new head but obsolete an old one.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
217
diff
changeset
|
629 * prevent unstability to be pushed |
ace5608350b6
obsolete: do no complain when push create a new head but obsolete an old one.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
217
diff
changeset
|
630 * patch remote to ignore obsolete heads on remote |
ace5608350b6
obsolete: do no complain when push create a new head but obsolete an old one.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
217
diff
changeset
|
631 """ |
ace5608350b6
obsolete: do no complain when push create a new head but obsolete an old one.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
217
diff
changeset
|
632 # do not push instability |
376
188afb394e10
obsolete: move hint punching to push
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
375
diff
changeset
|
633 for h in outgoing.missingheads: |
390
54582eebeb08
obsolete: fix typos, improve messages
Patrick Mezard <patrick@mezard.eu>
parents:
388
diff
changeset
|
634 # Checking heads is enough, obsolete descendants are either |
54582eebeb08
obsolete: fix typos, improve messages
Patrick Mezard <patrick@mezard.eu>
parents:
388
diff
changeset
|
635 # obsolete or unstable. |
388
97b75bbfacc5
obsolete: rely on core for context and reveset which exist there
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
387
diff
changeset
|
636 ctx = repo[h] |
376
188afb394e10
obsolete: move hint punching to push
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
375
diff
changeset
|
637 if ctx.latecomer(): |
390
54582eebeb08
obsolete: fix typos, improve messages
Patrick Mezard <patrick@mezard.eu>
parents:
388
diff
changeset
|
638 raise util.Abort(_("push includes a latecomer changeset: %s!") |
376
188afb394e10
obsolete: move hint punching to push
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
375
diff
changeset
|
639 % ctx) |
188afb394e10
obsolete: move hint punching to push
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
375
diff
changeset
|
640 if ctx.conflicting(): |
390
54582eebeb08
obsolete: fix typos, improve messages
Patrick Mezard <patrick@mezard.eu>
parents:
388
diff
changeset
|
641 raise util.Abort(_("push includes a conflicting changeset: %s!") |
376
188afb394e10
obsolete: move hint punching to push
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
375
diff
changeset
|
642 % ctx) |
382
58fdb2180064
Use the core check heads mecanism to prevent zaelous warning
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
381
diff
changeset
|
643 return orig(repo, remote, outgoing, *args, **kwargs) |
217
786eb34d93ea
obsolete: refuse to push unstable changeset without -f
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
215
diff
changeset
|
644 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
645 @eh.wrapfunction(phases, 'advanceboundary') |
307
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
646 def wrapclearcache(orig, repo, *args, **kwargs): |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
647 try: |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
648 return orig(repo, *args, **kwargs) |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
649 finally: |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
650 repo._clearobsoletecache() |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
651 |
217
786eb34d93ea
obsolete: refuse to push unstable changeset without -f
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
215
diff
changeset
|
652 |
71
19e1930587a0
[obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
70
diff
changeset
|
653 ### New commands |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
654 ############################# |
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
655 |
276
f26e9bc5f7fc
obsolete: use new-style command registration
Patrick Mezard <patrick@mezard.eu>
parents:
275
diff
changeset
|
656 cmdtable = {} |
f26e9bc5f7fc
obsolete: use new-style command registration
Patrick Mezard <patrick@mezard.eu>
parents:
275
diff
changeset
|
657 command = cmdutil.command(cmdtable) |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
658 |
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
659 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
660 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
661 @command('debugsuccessors', [], '') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
662 def cmddebugsuccessors(ui, repo): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
663 """dump obsolete changesets and their successors |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
664 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
665 Each line matches an existing marker, the first identifier is the |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
666 obsolete changeset identifier, followed by it successors. |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
667 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
668 lock = repo.lock() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
669 try: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
670 allsuccessors = repo.obsstore.precursors |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
671 for old in sorted(allsuccessors): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
672 successors = [sorted(m[1]) for m in allsuccessors[old]] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
673 for i, group in enumerate(sorted(successors)): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
674 ui.write('%s' % short(old)) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
675 for new in group: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
676 ui.write(' %s' % short(new)) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
677 ui.write('\n') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
678 finally: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
679 lock.release() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
680 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
681 ### Altering existing command |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
682 ############################# |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
683 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
684 @eh.wrapcommand("update") |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
685 @eh.wrapcommand("pull") |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
686 def wrapmayobsoletewc(origfn, ui, repo, *args, **opts): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
687 res = origfn(ui, repo, *args, **opts) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
688 if repo['.'].obsolete(): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
689 ui.warn(_('Working directory parent is obsolete\n')) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
690 return res |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
691 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
692 def warnobserrors(orig, ui, repo, *args, **kwargs): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
693 """display warning is the command resulted in more instable changeset""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
694 priorunstables = len(repo.revs('unstable()')) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
695 priorlatecomers = len(repo.revs('latecomer()')) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
696 priorconflictings = len(repo.revs('conflicting()')) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
697 #print orig, priorunstables |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
698 #print len(repo.revs('secret() - obsolete()')) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
699 try: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
700 return orig(ui, repo, *args, **kwargs) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
701 finally: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
702 newunstables = len(repo.revs('unstable()')) - priorunstables |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
703 newlatecomers = len(repo.revs('latecomer()')) - priorlatecomers |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
704 newconflictings = len(repo.revs('conflicting()')) - priorconflictings |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
705 #print orig, newunstables |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
706 #print len(repo.revs('secret() - obsolete()')) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
707 if newunstables > 0: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
708 ui.warn(_('%i new unstables changesets\n') % newunstables) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
709 if newlatecomers > 0: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
710 ui.warn(_('%i new latecomers changesets\n') % newlatecomers) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
711 if newconflictings > 0: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
712 ui.warn(_('%i new conflictings changesets\n') % newconflictings) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
713 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
714 @eh.extsetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
715 def _coreobserrorwrapping(ui): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
716 # warning about more obsolete |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
717 for cmd in ['commit', 'push', 'pull', 'graft', 'phase', 'unbundle']: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
718 entry = extensions.wrapcommand(commands.table, cmd, warnobserrors) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
719 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
720 @eh.wrapfunction(cmdutil, 'amend') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
721 def wrapcmdutilamend(orig, ui, repo, commitfunc, old, *args, **kwargs): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
722 oldnode = old.node() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
723 new = orig(ui, repo, commitfunc, old, *args, **kwargs) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
724 if new != oldnode: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
725 lock = repo.lock() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
726 try: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
727 tr = repo.transaction('post-amend-obst') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
728 try: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
729 meta = { |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
730 'date': '%i %i' % util.makedate(), |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
731 'user': ui.username(), |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
732 } |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
733 repo.obsstore.create(tr, oldnode, [new], 0, meta) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
734 tr.close() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
735 repo._clearobsoletecache() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
736 finally: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
737 tr.release() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
738 finally: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
739 lock.release() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
740 return new |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
741 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
742 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
743 ### diagnostique tools |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
744 ############################# |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
745 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
746 def unstables(repo): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
747 """Return all unstable changeset""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
748 return scmutil.revrange(repo, ['obsolete():: and (not obsolete())']) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
749 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
750 def newerversion(repo, obs): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
751 """Return the newer version of an obsolete changeset""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
752 toproceed = set([(obs,)]) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
753 # XXX known optimization available |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
754 newer = set() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
755 objectrels = repo.obsstore.precursors |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
756 while toproceed: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
757 current = toproceed.pop() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
758 assert len(current) <= 1, 'splitting not handled yet. %r' % current |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
759 current = [n for n in current if n != nullid] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
760 if current: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
761 n, = current |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
762 if n in objectrels: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
763 markers = objectrels[n] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
764 for mark in markers: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
765 toproceed.add(tuple(mark[1])) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
766 else: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
767 newer.add(tuple(current)) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
768 else: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
769 newer.add(()) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
770 return sorted(newer) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
771 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
772 ### repo subclassing |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
773 ############################# |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
774 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
775 @eh.reposetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
776 def _reposetup(ui, repo): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
777 if not repo.local(): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
778 return |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
779 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
780 if not util.safehasattr(repo.opener, 'tryread'): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
781 raise util.Abort('Obsolete extension requires Mercurial 2.2 (or later)') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
782 opush = repo.push |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
783 o_updatebranchcache = repo.updatebranchcache |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
784 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
785 # /!\ api change in Hg 2.2 (97efd26eb9576f39590812ea9) /!\ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
786 if util.safehasattr(repo, '_journalfiles'): # Hg 2.2 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
787 o_journalfiles = repo._journalfiles |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
788 o_writejournal = repo._writejournal |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
789 o_hook = repo.hook |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
790 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
791 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
792 class obsoletingrepo(repo.__class__): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
793 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
794 # workaround |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
795 def hook(self, name, throw=False, **args): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
796 if 'pushkey' in name: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
797 args.pop('new') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
798 args.pop('old') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
799 return o_hook(name, throw=False, **args) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
800 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
801 ### Public method |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
802 # XXX Kill me |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
803 def obsoletedby(self, node): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
804 """return the set of node that make <node> obsolete (obj)""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
805 others = set() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
806 for marker in self.obsstore.precursors.get(node, []): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
807 others.update(marker[1]) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
808 return others |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
809 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
810 # XXX Kill me |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
811 def obsolete(self, node): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
812 """return the set of node that <node> make obsolete (sub)""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
813 return set(marker[0] for marker in self.obsstore.successors.get(node, [])) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
814 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
815 # XXX move me on obssotre |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
816 @util.propertycache |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
817 def _obsoleteset(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
818 """the set of obsolete revision""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
819 obs = set() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
820 nm = self.changelog.nodemap |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
821 for prec in self.obsstore.precursors: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
822 rev = nm.get(prec) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
823 if rev is not None: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
824 obs.add(rev) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
825 return obs |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
826 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
827 # XXX move me on obssotre |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
828 @util.propertycache |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
829 def _unstableset(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
830 """the set of non obsolete revision with obsolete parent""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
831 return set(self.revs('(obsolete()::) - obsolete()')) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
832 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
833 # XXX move me on obssotre |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
834 @util.propertycache |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
835 def _suspendedset(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
836 """the set of obsolete parent with non obsolete descendant""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
837 return set(self.revs('obsolete() and obsolete()::unstable()')) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
838 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
839 # XXX move me on obssotre |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
840 @util.propertycache |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
841 def _extinctset(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
842 """the set of obsolete parent without non obsolete descendant""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
843 return set(self.revs('obsolete() - obsolete()::unstable()')) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
844 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
845 # XXX move me on obssotre |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
846 @util.propertycache |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
847 def _latecomerset(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
848 """the set of rev trying to obsolete public revision""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
849 query = 'allsuccessors(public()) - obsolete() - public()' |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
850 return set(self.revs(query)) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
851 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
852 # XXX move me on obssotre |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
853 @util.propertycache |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
854 def _conflictingset(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
855 """the set of rev trying to obsolete public revision""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
856 conflicting = set() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
857 obsstore = self.obsstore |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
858 newermap = {} |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
859 for ctx in self.set('(not public()) - obsolete()'): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
860 prec = obsstore.successors.get(ctx.node(), ()) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
861 toprocess = set(prec) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
862 while toprocess: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
863 prec = toprocess.pop()[0] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
864 if prec not in newermap: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
865 newermap[prec] = newerversion(self, prec) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
866 newer = [n for n in newermap[prec] if n] # filter kill |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
867 if len(newer) > 1: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
868 conflicting.add(ctx.rev()) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
869 break |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
870 toprocess.update(obsstore.successors.get(prec, ())) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
871 return conflicting |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
872 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
873 def _clearobsoletecache(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
874 if '_obsoleteset' in vars(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
875 del self._obsoleteset |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
876 self._clearunstablecache() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
877 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
878 def updatebranchcache(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
879 o_updatebranchcache() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
880 self._clearunstablecache() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
881 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
882 def _clearunstablecache(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
883 if '_unstableset' in vars(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
884 del self._unstableset |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
885 if '_suspendedset' in vars(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
886 del self._suspendedset |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
887 if '_extinctset' in vars(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
888 del self._extinctset |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
889 if '_latecomerset' in vars(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
890 del self._latecomerset |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
891 if '_conflictingset' in vars(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
892 del self._conflictingset |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
893 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
894 # XXX kill me |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
895 def addobsolete(self, sub, obj): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
896 """Add a relation marking that node <sub> is a new version of <obj>""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
897 assert sub != obj |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
898 if not repo[obj].phase(): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
899 if sub is None: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
900 self.ui.warn( |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
901 _("trying to kill immutable changeset %(obj)s\n") |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
902 % {'obj': short(obj)}) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
903 if sub is not None: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
904 self.ui.warn( |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
905 _("%(sub)s try to obsolete immutable changeset %(obj)s\n") |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
906 % {'sub': short(sub), 'obj': short(obj)}) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
907 lock = self.lock() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
908 try: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
909 tr = self.transaction('add-obsolete') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
910 try: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
911 meta = { |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
912 'date': '%i %i' % util.makedate(), |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
913 'user': ui.username(), |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
914 } |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
915 subs = (sub == nullid) and [] or [sub] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
916 mid = self.obsstore.create(tr, obj, subs, 0, meta) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
917 tr.close() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
918 self._clearobsoletecache() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
919 return mid |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
920 finally: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
921 tr.release() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
922 finally: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
923 lock.release() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
924 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
925 # XXX kill me |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
926 def addcollapsedobsolete(self, oldnodes, newnode): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
927 """Mark oldnodes as collapsed into newnode.""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
928 # Assume oldnodes are all descendants of a single rev |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
929 rootrevs = self.revs('roots(%ln)', oldnodes) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
930 assert len(rootrevs) == 1, rootrevs |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
931 #rootnode = self[rootrevs[0]].node() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
932 for n in oldnodes: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
933 self.addobsolete(newnode, n) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
934 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
935 ### pull // push support |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
936 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
937 def push(self, remote, *args, **opts): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
938 """wrapper around pull that pull obsolete relation""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
939 try: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
940 result = opush(remote, *args, **opts) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
941 except util.Abort, ex: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
942 hint = _("use 'hg stabilize' to get a stable history " |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
943 "or --force to ignore warnings") |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
944 if (len(ex.args) >= 1 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
945 and ex.args[0].startswith('push includes ') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
946 and ex.hint is None): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
947 ex.hint = hint |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
948 raise |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
949 return result |
430
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
950 repo.__class__ = obsoletingrepo |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
951 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
952 |
430
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
953 ##################################################################### |
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
954 ### Older format management ### |
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
955 ##################################################################### |
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
956 |
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
957 # Code related to detection and management of older legacy format never |
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
958 # handled by core |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
959 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
960 @eh.reposetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
961 def _checkoldobsolete(ui, repo): |
430
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
962 """Detect that a repo still carry some old obsolete format |
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
963 """ |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
964 if not repo.local(): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
965 return |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
966 for arg in sys.argv: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
967 if 'debugc' in arg: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
968 break |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
969 else: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
970 data = repo.opener.tryread('obsolete-relations') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
971 if not data: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
972 data = repo.sopener.tryread('obsoletemarkers') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
973 if data: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
974 raise util.Abort('old format of obsolete marker detected!\n' |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
975 'run `hg debugconvertobsolete` once.') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
976 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
977 def _obsdeserialise(flike): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
978 """read a file like object serialised with _obsserialise |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
979 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
980 this desierialize into a {subject -> objects} mapping""" |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
981 rels = {} |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
982 for line in flike: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
983 subhex, objhex = line.split() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
984 subnode = bin(subhex) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
985 if subnode == nullid: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
986 subnode = None |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
987 rels.setdefault( subnode, set()).add(bin(objhex)) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
988 return rels |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
989 |
276
f26e9bc5f7fc
obsolete: use new-style command registration
Patrick Mezard <patrick@mezard.eu>
parents:
275
diff
changeset
|
990 @command('debugconvertobsolete', [], '') |
224 | 991 def cmddebugconvertobsolete(ui, repo): |
278
fa0b9b8a83c0
obsolete: add or fix debug commands help
Patrick Mezard <patrick@mezard.eu>
parents:
277
diff
changeset
|
992 """import markers from an .hg/obsolete-relations file""" |
224 | 993 cnt = 0 |
337
ebfd1b96a013
obsolete: convert try to guess what invalid node id are
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
336
diff
changeset
|
994 err = 0 |
224 | 995 l = repo.lock() |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
996 some = False |
224 | 997 try: |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
998 unlink = [] |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
999 tr = repo.transaction('convert-obsolete') |
224 | 1000 try: |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1001 repo._importoldobsolete = True |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1002 store = repo.obsstore |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1003 ### very first format |
224 | 1004 try: |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1005 f = repo.opener('obsolete-relations') |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1006 try: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1007 some = True |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1008 for line in f: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1009 subhex, objhex = line.split() |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1010 suc = bin(subhex) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1011 prec = bin(objhex) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1012 sucs = (suc==nullid) and [] or [suc] |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1013 meta = { |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1014 'date': '%i %i' % util.makedate(), |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1015 'user': ui.username(), |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1016 } |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1017 try: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1018 store.create(tr, prec, sucs, 0, meta) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1019 cnt += 1 |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1020 except ValueError: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1021 repo.ui.write_err("invalid old marker line: %s" |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1022 % (line)) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1023 err += 1 |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1024 finally: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1025 f.close() |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1026 unlink.append(repo.join('obsolete-relations')) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1027 except IOError: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1028 pass |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1029 ### second (json) format |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1030 data = repo.sopener.tryread('obsoletemarkers') |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1031 if data: |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
1032 some = True |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1033 for oldmark in json.loads(data): |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1034 del oldmark['id'] # dropped for now |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1035 del oldmark['reason'] # unused until then |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1036 oldobject = str(oldmark.pop('object')) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1037 oldsubjects = [str(s) for s in oldmark.pop('subjects', [])] |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1038 LOOKUP_ERRORS = (error.RepoLookupError, error.LookupError) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1039 if len(oldobject) != 40: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1040 try: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1041 oldobject = repo[oldobject].node() |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1042 except LOOKUP_ERRORS: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1043 pass |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1044 if any(len(s) != 40 for s in oldsubjects): |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1045 try: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1046 oldsubjects = [repo[s].node() for s in oldsubjects] |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1047 except LOOKUP_ERRORS: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1048 pass |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1049 |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1050 oldmark['date'] = '%i %i' % tuple(oldmark['date']) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1051 meta = dict((k.encode('utf-8'), v.encode('utf-8')) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1052 for k, v in oldmark.iteritems()) |
341
7653f80fd7a4
obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
340
diff
changeset
|
1053 try: |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1054 succs = [bin(n) for n in oldsubjects] |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1055 succs = [n for n in succs if n != nullid] |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1056 store.create(tr, bin(oldobject), succs, |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1057 0, meta) |
341
7653f80fd7a4
obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
340
diff
changeset
|
1058 cnt += 1 |
7653f80fd7a4
obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
340
diff
changeset
|
1059 except ValueError: |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1060 repo.ui.write_err("invalid marker %s -> %s\n" |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1061 % (oldobject, oldsubjects)) |
341
7653f80fd7a4
obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
340
diff
changeset
|
1062 err += 1 |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1063 unlink.append(repo.sjoin('obsoletemarkers')) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1064 tr.close() |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1065 for path in unlink: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1066 util.unlink(path) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1067 finally: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1068 tr.release() |
224 | 1069 finally: |
1070 del repo._importoldobsolete | |
1071 l.release() | |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
1072 if not some: |
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
1073 ui.warn('nothing to do\n') |
224 | 1074 ui.status('%i obsolete marker converted\n' % cnt) |
337
ebfd1b96a013
obsolete: convert try to guess what invalid node id are
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
336
diff
changeset
|
1075 if err: |
ebfd1b96a013
obsolete: convert try to guess what invalid node id are
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
336
diff
changeset
|
1076 ui.write_err('%i conversion failed. check you graph!\n' % err) |