Mercurial > evolve
annotate hgext/obsolete.py @ 479:b63da0fb8ee5
obsolete: add obsolete data to summary.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Thu, 23 Aug 2012 12:23:34 +0200 |
parents | 1f8f8dd75d18 |
children | cd1d5b7308be |
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 |
456
79aacd34bf1e
obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents:
455
diff
changeset
|
13 This extension introduces the *obsolete* concept. The relation |
79aacd34bf1e
obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents:
455
diff
changeset
|
14 ``<changeset B> obsoletes <changeset A>`` denotes that ``<changeset B>`` |
79aacd34bf1e
obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents:
455
diff
changeset
|
15 is a new version of ``<changeset A>``. |
69
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
16 |
456
79aacd34bf1e
obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents:
455
diff
changeset
|
17 The *obsolete* relations act as an history **orthogonal** to the regular |
79aacd34bf1e
obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents:
455
diff
changeset
|
18 changesets history. Regular changesets history versions files. *Obsolete* |
79aacd34bf1e
obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents:
455
diff
changeset
|
19 relations version changesets. |
69
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
20 |
228
5a17c0d41a00
proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
226
diff
changeset
|
21 :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
|
22 :unstable: a changeset that is not obsolete but has an obsolete ancestor. |
456
79aacd34bf1e
obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents:
455
diff
changeset
|
23 :suspended: an obsolete changeset with unstable descendants. |
79aacd34bf1e
obsolete: simplify module docstring
Patrick Mezard <patrick@mezard.eu>
parents:
455
diff
changeset
|
24 :extinct: an obsolete changeset without unstable descendants. |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
25 (subject to garbage collection) |
85
531058dbd703
[obsolete] vocabulary update suggestion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
84
diff
changeset
|
26 |
531058dbd703
[obsolete] vocabulary update suggestion
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
84
diff
changeset
|
27 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
|
28 |
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 Usage and Feature |
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
31 ================= |
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 New commands |
228
5a17c0d41a00
proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
226
diff
changeset
|
35 ------------ |
69
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
36 |
415
ea7f2a4ad530
obsolete: fix doc, rebase no longer aborts with --keep
Patrick Mezard <patrick@mezard.eu>
parents:
409
diff
changeset
|
37 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
|
38 |
69
aee53d546849
[obsolete] update doc
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
58
diff
changeset
|
39 """ |
228
5a17c0d41a00
proof-read documentation and docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
226
diff
changeset
|
40 |
54
ad1a4fb0fc49
Make states more resilient to missing head
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
53
diff
changeset
|
41 |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
42 |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
43 from mercurial import util |
433
aa1255c2ac8f
obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
432
diff
changeset
|
44 |
aa1255c2ac8f
obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
432
diff
changeset
|
45 try: |
aa1255c2ac8f
obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
432
diff
changeset
|
46 from mercurial import obsolete |
aa1255c2ac8f
obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
432
diff
changeset
|
47 obsolete._enabled = True |
aa1255c2ac8f
obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
432
diff
changeset
|
48 except ImportError: |
458
5d47d854716e
obsolete: fix indentation in obsolete import block
Patrick Mezard <patrick@mezard.eu>
parents:
457
diff
changeset
|
49 raise util.Abort('Obsolete extension requires Mercurial 2.3 (or later)') |
433
aa1255c2ac8f
obsolete: move version checks at the start of the file
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
432
diff
changeset
|
50 |
439
6cff54825233
obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
438
diff
changeset
|
51 import sys |
6cff54825233
obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
438
diff
changeset
|
52 from mercurial.i18n import _ |
6cff54825233
obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
438
diff
changeset
|
53 from mercurial import cmdutil |
6cff54825233
obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
438
diff
changeset
|
54 from mercurial import commands |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
55 from mercurial import context |
46
3b0364fc822f
Do not propagate obsolete changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
44
diff
changeset
|
56 from mercurial import discovery |
3b0364fc822f
Do not propagate obsolete changeset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
44
diff
changeset
|
57 from mercurial import error |
439
6cff54825233
obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
438
diff
changeset
|
58 from mercurial import extensions |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
59 from mercurial import localrepo |
115
d60eddda9546
add an option to ensure unstable are secret
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
114
diff
changeset
|
60 from mercurial import phases |
439
6cff54825233
obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
438
diff
changeset
|
61 from mercurial import revset |
6cff54825233
obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
438
diff
changeset
|
62 from mercurial import scmutil |
299
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
63 from mercurial import templatekw |
473
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
64 from mercurial import merge |
435
97d82fbd2c24
obsolete: clean up import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
434
diff
changeset
|
65 from mercurial.node import bin, short, nullid |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
66 |
459
3477326461e3
obsolete: more typos and cleanup
Patrick Mezard <patrick@mezard.eu>
parents:
458
diff
changeset
|
67 # This extension contains the following code |
432
6347bc69b49a
obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
431
diff
changeset
|
68 # |
6347bc69b49a
obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
431
diff
changeset
|
69 # - Extension Helper code |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
70 # - Obsolescence cache |
432
6347bc69b49a
obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
431
diff
changeset
|
71 # - ... |
6347bc69b49a
obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
431
diff
changeset
|
72 # - Older format compat |
160
24346b78cd99
mercurial 2.1.2 compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
150
diff
changeset
|
73 |
432
6347bc69b49a
obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
431
diff
changeset
|
74 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
75 |
432
6347bc69b49a
obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
431
diff
changeset
|
76 ##################################################################### |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
77 ### Extension helper ### |
432
6347bc69b49a
obsolete: some more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
431
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 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
80 class exthelper(object): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
81 """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
|
82 |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
83 A single helper should be instanciated for each extension. Helper |
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
84 methods are then used as decorator for various purpose. |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
85 |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
86 All decorators return the original function and may be chained. |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
87 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
88 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
89 def __init__(self): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
90 self._uicallables = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
91 self._extcallables = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
92 self._repocallables = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
93 self._revsetsymbols = [] |
431
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
94 self._templatekws = [] |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
95 self._commandwrappers = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
96 self._extcommandwrappers = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
97 self._functionwrappers = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
98 self._duckpunchers = [] |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
99 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
100 def final_uisetup(self, ui): |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
101 """Method to be used as the extension uisetup |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
102 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
103 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
|
104 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
105 - 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
|
106 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
|
107 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
|
108 passed to runcommand |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
109 - Command wraps (extensions.wrapcommand) |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
110 - Changes that need to be visible to other extensions: because |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
111 initialization occurs in phases (all extensions run uisetup, then all |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
112 run extsetup), a change made here will be visible to other extensions |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
113 during extsetup |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
114 - Monkeypatch or wrap function (extensions.wrapfunction) of dispatch |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
115 module members |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
116 - 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
|
117 - pushkey setup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
118 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
119 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
|
120 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
|
121 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
|
122 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
|
123 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
|
124 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
|
125 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
|
126 c(ui) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
127 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
128 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
|
129 """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
|
130 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
131 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
|
132 |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
133 - Changes depending on the status of other extensions. (if |
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
134 extensions.find('mq')) |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
135 - Add a global option to all commands |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
136 - Register revset functions |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
137 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
138 knownexts = {} |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
139 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
|
140 revset.symbols[name] = symbol |
431
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
141 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
|
142 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
|
143 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
|
144 if ext not in knownexts: |
462
d38e02332c2c
obsolet: fix extension help code about extension wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
461
diff
changeset
|
145 e = extensions.find(ext) |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
146 if e is None: |
462
d38e02332c2c
obsolet: fix extension help code about extension wrapping
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
461
diff
changeset
|
147 raise util.Abort('extension %s not found' % ext) |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
148 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
|
149 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
|
150 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
|
151 c(ui) |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
152 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
153 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
|
154 """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
|
155 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
156 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
|
157 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
158 - 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
|
159 - Modify configuration variables |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
160 - 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
|
161 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
162 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
|
163 c(ui, repo) |
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 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
|
166 """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
|
167 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
168 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
169 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
170 @eh.uisetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
171 def setupbabar(ui): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
172 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
|
173 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
174 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
|
175 return call |
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 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
|
178 """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
|
179 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
180 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
181 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
182 @eh.extsetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
183 def setupcelestine(ui): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
184 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
|
185 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
186 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
|
187 return call |
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 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
|
190 """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
|
191 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
192 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
193 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
194 @eh.reposetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
195 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
|
196 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
|
197 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
198 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
|
199 return call |
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 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
|
202 """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
|
203 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
204 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
|
205 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
|
206 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
207 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
208 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
209 @eh.revset('hidden') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
210 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
|
211 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
|
212 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
|
213 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
214 def dec(symbol): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
215 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
|
216 return symbol |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
217 return dec |
160
24346b78cd99
mercurial 2.1.2 compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
150
diff
changeset
|
218 |
24346b78cd99
mercurial 2.1.2 compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
150
diff
changeset
|
219 |
431
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
220 def templatekw(self, keywordname): |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
221 """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
|
222 |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
223 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
|
224 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
|
225 |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
226 example:: |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
227 |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
228 @eh.templatekw('babar') |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
229 def kwbabar(ctx): |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
230 return 'babar' |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
231 """ |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
232 def dec(keyword): |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
233 self._templatekws.append((keywordname, keyword)) |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
234 return keyword |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
235 return dec |
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
236 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
237 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
|
238 """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
|
239 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
240 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
|
241 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
|
242 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
243 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
|
244 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
|
245 string that will be searched using `extension.find` if not found and |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
246 Abort error is raised. If the wrapping applies to an extension, it is |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
247 installed during `extsetup` |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
248 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
249 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
250 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
251 @eh.wrapcommand('summary') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
252 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
|
253 ui.note('Barry!') |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
254 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
|
255 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
256 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
257 def dec(wrapper): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
258 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
|
259 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
|
260 else: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
261 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
|
262 return wrapper |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
263 return dec |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
264 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
265 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
|
266 """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
|
267 |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
268 This function takes two arguments, the container and the name of the |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
269 function to wrap. The wrapping is performed during `uisetup`. |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
270 (there is no extension support) |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
271 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
272 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
273 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
274 @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
|
275 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
|
276 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
|
277 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
|
278 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
279 def dec(wrapper): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
280 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
|
281 return wrapper |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
282 return dec |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
283 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
284 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
|
285 """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
|
286 |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
287 This function takes two arguments, the container and the name of the |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
288 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
|
289 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
290 example:: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
291 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
292 @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
|
293 def babar(ctx): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
294 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
|
295 """ |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
296 def dec(func): |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
297 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
|
298 return func |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
299 return dec |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
300 |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
301 eh = exthelper() |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
302 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
|
303 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
|
304 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
|
305 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
306 ##################################################################### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
307 ### Obsolescence Caching Logic ### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
308 ##################################################################### |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
309 |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
310 # Obsolescence related logic can be very slow if we don't have efficient cache. |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
311 # |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
312 # This section implements a cache mechanism that did not make it into core for |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
313 # time reason. It store meaningful set of revision related to obsolescence |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
314 # (obsolete, unstabletble ... |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
315 # |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
316 # Here is: |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
317 # |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
318 # - Computation of meaningful set, |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
319 # - Cache access logic, |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
320 # - Cache invalidation logic, |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
321 # - revset and ctx using this cache. |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
322 # |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
323 |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
324 |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
325 ### Computation of meaningful set |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
326 # |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
327 # Most set can be computed with "simple" revset. |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
328 |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
329 #: { set name -> function to compute this set } mapping |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
330 #: function take a single "repo" argument. |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
331 #: |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
332 #: Use the `cachefor` decorator to register new cache function |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
333 cachefuncs = {} |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
334 def cachefor(name): |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
335 """Decorator to register a function as computing the cache for a set""" |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
336 def decorator(func): |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
337 assert name not in cachefuncs |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
338 cachefuncs[name] = func |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
339 return func |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
340 return decorator |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
341 |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
342 @cachefor('obsolete') |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
343 def _computeobsoleteset(repo): |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
344 """the set of obsolete revisions""" |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
345 obs = set() |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
346 nm = repo.changelog.nodemap |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
347 for prec in repo.obsstore.precursors: |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
348 rev = nm.get(prec) |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
349 if rev is not None: |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
350 obs.add(rev) |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
351 return set(repo.revs('%ld - public()', obs)) |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
352 |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
353 @cachefor('unstable') |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
354 def _computeunstableset(repo): |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
355 """the set of non obsolete revisions with obsolete parents""" |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
356 return set(repo.revs('(obsolete()::) - obsolete()')) |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
357 |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
358 @cachefor('suspended') |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
359 def _computesuspendedset(repo): |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
360 """the set of obsolete parents with non obsolete descendants""" |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
361 return set(repo.revs('obsolete() and obsolete()::unstable()')) |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
362 |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
363 @cachefor('extinct') |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
364 def _computeextinctset(repo): |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
365 """the set of obsolete parents without non obsolete descendants""" |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
366 return set(repo.revs('obsolete() - obsolete()::unstable()')) |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
367 |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
368 @eh.wrapfunction(obsolete.obsstore, '__init__') |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
369 def _initobsstorecache(orig, obsstore, *args, **kwargs): |
457
0fc4addd881c
obsolete: fix docstrings
Patrick Mezard <patrick@mezard.eu>
parents:
456
diff
changeset
|
370 """add a cache attribute to obsstore""" |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
371 obsstore.caches = {} |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
372 return orig(obsstore, *args, **kwargs) |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
373 |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
374 ### Cache access |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
375 |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
376 def getobscache(repo, name): |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
377 """Return the set of revision that belong to the <name> set |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
378 |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
379 Such access may compute the set and cache it for future use""" |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
380 if not repo.obsstore: |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
381 return () |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
382 if name not in repo.obsstore.caches: |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
383 repo.obsstore.caches[name] = cachefuncs[name](repo) |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
384 return repo.obsstore.caches[name] |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
385 |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
386 ### Cache clean up |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
387 # |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
388 # To be simple we need to invalidate obsolescence cache when: |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
389 # |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
390 # - new changeset is added: |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
391 # - public phase is changed |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
392 # - obsolescence marker are added |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
393 # - strip is used a repo |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
394 |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
395 |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
396 def clearobscaches(repo): |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
397 """Remove all obsolescence related cache from a repo |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
398 |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
399 This remove all cache in obsstore is the obsstore already exist on the |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
400 repo. |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
401 |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
402 (We could be smarter here)""" |
449
4f23f224afb4
obsolete: Improves cache invalidation logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
448
diff
changeset
|
403 if 'obsstore' in repo._filecache: |
4f23f224afb4
obsolete: Improves cache invalidation logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
448
diff
changeset
|
404 repo.obsstore.caches.clear() |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
405 |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
406 @eh.wrapfunction(localrepo.localrepository, 'addchangegroup') # new changeset |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
407 @eh.wrapfunction(phases, 'retractboundary') # phase movement |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
408 @eh.wrapfunction(phases, 'advanceboundary') # phase movement |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
409 @eh.wrapfunction(localrepo.localrepository, 'destroyed') # strip |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
410 def wrapclearcache(orig, repo, *args, **kwargs): |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
411 try: |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
412 return orig(repo, *args, **kwargs) |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
413 finally: |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
414 # we are a bit wide here |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
415 # we could restrict to: |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
416 # advanceboundary + phase==public |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
417 # retractboundary + phase==draft |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
418 clearobscaches(repo) |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
419 |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
420 @eh.wrapfunction(obsolete.obsstore, 'add') # new marker |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
421 def clearonadd(orig, obsstore, *args, **kwargs): |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
422 try: |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
423 return orig(obsstore, *args, **kwargs) |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
424 finally: |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
425 obsstore.caches.clear() |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
426 |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
427 ### Use the case |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
428 # Function in core that could benefic from the cache are overwritten by cache using version |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
429 |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
430 # changectx method |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
431 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
432 @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
|
433 def unstable(ctx): |
8e93e1f67205
obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
144
diff
changeset
|
434 """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
|
435 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
|
436 return False |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
437 return ctx.rev() in getobscache(ctx._repo, 'unstable') |
148
8e93e1f67205
obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
144
diff
changeset
|
438 |
8e93e1f67205
obsolete: define an unstable property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
144
diff
changeset
|
439 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
440 @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
|
441 def extinct(ctx): |
ea4aa1890b16
obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
212
diff
changeset
|
442 """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
|
443 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
|
444 return False |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
445 return ctx.rev() in getobscache(ctx._repo, 'extinct') |
213
ea4aa1890b16
obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
212
diff
changeset
|
446 |
450
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
447 # revset |
4d18739b506b
obsolete: document the cache stuff
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
449
diff
changeset
|
448 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
449 @eh.revset('obsolete') |
39 | 450 def revsetobsolete(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
451 """``obsolete()`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
452 Changeset is obsolete. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
453 """ |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
454 args = revset.getargs(x, 0, 0, 'obsolete takes no argument') |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
455 obsoletes = getobscache(repo, 'obsolete') |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
456 return [r for r in subset if r in obsoletes] |
252
470232cea503
[obsolete] fix new api: use the new phase cache api
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
228
diff
changeset
|
457 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
458 @eh.revset('unstable') |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
459 def revsetunstable(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
460 """``unstable()`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
461 Unstable changesets are non-obsolete with obsolete ancestors. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
462 """ |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
463 args = revset.getargs(x, 0, 0, 'unstable takes no arguments') |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
464 unstables = getobscache(repo, 'unstable') |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
465 return [r for r in subset if r in unstables] |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
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('extinct') |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
468 def revsetextinct(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
469 """``extinct()`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
470 Obsolete changesets with obsolete descendants only. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
471 """ |
310
2d0dc5c18489
[obsolete] fix revset error message
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
308
diff
changeset
|
472 args = revset.getargs(x, 0, 0, 'extinct takes no arguments') |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
473 extincts = getobscache(repo, 'extinct') |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
474 return [r for r in subset if r in extincts] |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
475 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
476 ##################################################################### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
477 ### Complete troubles computation logic ### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
478 ##################################################################### |
213
ea4aa1890b16
obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
212
diff
changeset
|
479 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
480 # there is two kind of trouble not handled by core right now: |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
481 # - latecomer: (successors for public changeset) |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
482 # - conflicting: (two changeset try to succeed to the same precursors) |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
483 # |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
484 # This section add support for those two addition trouble |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
485 # |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
486 # - Cache computation |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
487 # - revset and ctx method |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
488 # - push warning |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
489 |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
490 ### Cache computation |
470
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
491 latediff = 1 # flag to prevent taking late comer fix into account |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
492 |
448
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
493 @cachefor('latecomer') |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
494 def _computelatecomerset(repo): |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
495 """the set of rev trying to obsolete public revision""" |
470
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
496 candidates = _allsuccessors(repo, repo.revs('public()'), |
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
497 haltonflags=latediff) |
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
498 query = '%ld - obsolete() - public()' |
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
499 return set(repo.revs(query, candidates)) |
213
ea4aa1890b16
obsolete: add an extinct property on context
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
212
diff
changeset
|
500 |
448
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
501 @cachefor('conflicting') |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
502 def _computeconflictingset(repo): |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
503 """the set of rev trying to obsolete public revision""" |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
504 conflicting = set() |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
505 obsstore = repo.obsstore |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
506 newermap = {} |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
507 for ctx in repo.set('(not public()) - obsolete()'): |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
508 prec = obsstore.successors.get(ctx.node(), ()) |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
509 toprocess = set(prec) |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
510 while toprocess: |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
511 prec = toprocess.pop()[0] |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
512 if prec not in newermap: |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
513 newermap[prec] = newerversion(repo, prec) |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
514 newer = [n for n in newermap[prec] if n] # filter kill |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
515 if len(newer) > 1: |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
516 conflicting.add(ctx.rev()) |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
517 break |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
518 toprocess.update(obsstore.successors.get(prec, ())) |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
519 return conflicting |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
520 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
521 ### changectx method |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
522 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
523 @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
|
524 def latecomer(ctx): |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
525 """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
|
526 if ctx.node() is None: |
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
527 return False |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
528 return ctx.rev() in getobscache(ctx._repo, 'latecomer') |
307
9ac56d36d6ff
obsolete: add latecomer computation and display
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
306
diff
changeset
|
529 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
530 @eh.addattr(context.changectx, 'conflicting') |
354
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
531 def conflicting(ctx): |
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
532 """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
|
533 if ctx.node() is None: |
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
534 return False |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
535 return ctx.rev() in getobscache(ctx._repo, 'conflicting') |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
536 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
537 ### revset symbol |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
538 |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
539 @eh.revset('latecomer') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
540 def revsetlatecomer(repo, subset, x): |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
541 """``latecomer()`` |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
542 Changesets marked as successors of public changesets. |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
543 """ |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
544 args = revset.getargs(x, 0, 0, 'latecomer takes no arguments') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
545 lates = getobscache(repo, 'latecomer') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
546 return [r for r in subset if r in lates] |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
547 |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
548 @eh.revset('conflicting') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
549 def revsetconflicting(repo, subset, x): |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
550 """``conflicting()`` |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
551 Changesets marked as successors of a same changeset. |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
552 """ |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
553 args = revset.getargs(x, 0, 0, 'conflicting takes no arguments') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
554 conf = getobscache(repo, 'conflicting') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
555 return [r for r in subset if r in conf] |
354
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
556 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
557 |
448
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
558 ### Discovery wrapping |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
559 |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
560 @eh.wrapfunction(discovery, 'checkheads') |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
561 def wrapcheckheads(orig, repo, remote, outgoing, *args, **kwargs): |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
562 """wrap mercurial.discovery.checkheads |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
563 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
564 * prevent latecomer and unstable to be pushed |
448
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
565 """ |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
566 # do not push instability |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
567 for h in outgoing.missingheads: |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
568 # Checking heads is enough, obsolete descendants are either |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
569 # obsolete or unstable. |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
570 ctx = repo[h] |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
571 if ctx.latecomer(): |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
572 raise util.Abort(_("push includes a latecomer changeset: %s!") |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
573 % ctx) |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
574 if ctx.conflicting(): |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
575 raise util.Abort(_("push includes a conflicting changeset: %s!") |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
576 % ctx) |
96c896f0180b
obsolete: some more movement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
447
diff
changeset
|
577 return orig(repo, remote, outgoing, *args, **kwargs) |
354
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
578 |
473
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
579 ##################################################################### |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
580 ### Filter extinct changeset from common operation ### |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
581 ##################################################################### |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
582 |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
583 @eh.wrapfunction(merge, 'update') |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
584 def wrapmergeupdate(orig, repo, node, *args, **kwargs): |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
585 """ensure we don't automatically update on hidden changeset""" |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
586 if node is None: |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
587 # tip of current branch |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
588 branch = repo[None].branch() |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
589 node = repo.revs('last((.:: and branch(%s)) - hidden())', branch)[0] |
1f8f8dd75d18
obsolete: prevent bare hg update to select hidden changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
472
diff
changeset
|
590 return orig(repo, node, *args, **kwargs) |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
591 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
592 ##################################################################### |
445
52b5e14c63d5
obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
444
diff
changeset
|
593 ### Additional Utilities ### |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
594 ##################################################################### |
39 | 595 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
596 # This section contains a lot of small utility function and method |
112
eae9be0ee00e
adapt obsolete to phase.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
109
diff
changeset
|
597 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
598 # - Function to create markers |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
599 # - useful alias pstatus and pdiff (should probably go in evolve) |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
600 # - "troubles" method on changectx |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
601 # - function to travel throught the obsolescence graph |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
602 # - function to find useful changeset to stabilize |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
603 |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
604 ### Marker Create |
252
470232cea503
[obsolete] fix new api: use the new phase cache api
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
228
diff
changeset
|
605 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
606 def createmarkers(repo, relations, metadata=None, flag=0): |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
607 """Add obsolete markers between changeset in a repo |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
608 |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
609 <relations> must be an iterable of (<old>, (<new>, ...)) tuple. |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
610 `old` and `news` are changectx. |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
611 |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
612 Current user and date are used except if specified otherwise in the |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
613 metadata attribute. |
39 | 614 |
459
3477326461e3
obsolete: more typos and cleanup
Patrick Mezard <patrick@mezard.eu>
parents:
458
diff
changeset
|
615 /!\ assume the repo have been locked by the user /!\ |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
616 """ |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
617 # prepare metadata |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
618 if metadata is None: |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
619 metadata = {} |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
620 if 'date' not in metadata: |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
621 metadata['date'] = '%i %i' % util.makedate() |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
622 if 'user' not in metadata: |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
623 metadata['user'] = repo.ui.username() |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
624 # check future marker |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
625 tr = repo.transaction('add-obsolescence-marker') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
626 try: |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
627 for prec, sucs in relations: |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
628 if not prec.mutable(): |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
629 raise util.Abort("Cannot obsolete immutable changeset: %s" % prec) |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
630 nprec = prec.node() |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
631 nsucs = tuple(s.node() for s in sucs) |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
632 if nprec in nsucs: |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
633 raise util.Abort("Changeset %s cannot obsolete himself" % prec) |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
634 repo.obsstore.create(tr, nprec, nsucs, flag, metadata) |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
635 clearobscaches(repo) |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
636 tr.close() |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
637 finally: |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
638 tr.release() |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
639 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
640 |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
641 ### Useful alias |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
642 |
445
52b5e14c63d5
obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
444
diff
changeset
|
643 @eh.uisetup |
52b5e14c63d5
obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
444
diff
changeset
|
644 def _installalias(ui): |
52b5e14c63d5
obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
444
diff
changeset
|
645 if ui.config('alias', 'pstatus', None) is None: |
52b5e14c63d5
obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
444
diff
changeset
|
646 ui.setconfig('alias', 'pstatus', 'status --rev .^') |
52b5e14c63d5
obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
444
diff
changeset
|
647 if ui.config('alias', 'pdiff', None) is None: |
52b5e14c63d5
obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
444
diff
changeset
|
648 ui.setconfig('alias', 'pdiff', 'diff --rev .^') |
52b5e14c63d5
obsolete: enforce pdiff and pstatus alias in the extension
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
444
diff
changeset
|
649 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
650 # - "troubles" method on changectx |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
651 |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
652 @eh.addattr(context.changectx, 'troubles') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
653 def troubles(ctx): |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
654 """Return a tuple listing all the troubles that affect a changeset |
135
1a08daef8a53
obsolete: add revset for various error case
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
132
diff
changeset
|
655 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
656 Troubles may be "unstable", "latecomer" or "conflicting". |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
657 """ |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
658 troubles = [] |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
659 if ctx.unstable(): |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
660 troubles.append('unstable') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
661 if ctx.latecomer(): |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
662 troubles.append('latecomer') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
663 if ctx.conflicting(): |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
664 troubles.append('conflicting') |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
665 return tuple(troubles) |
143
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
666 |
467
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
667 ### Troubled revset symbol |
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
668 |
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
669 @eh.revset('troubled') |
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
670 def revsetlatecomer(repo, subset, x): |
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
671 """``troubled()`` |
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
672 Changesets with troubles. |
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
673 """ |
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
674 _ = revset.getargs(x, 0, 0, 'troubled takes no arguments') |
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
675 return list(repo.revs('%ld and (unstable() + latecomer() + conflicting())', |
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
676 subset)) |
869ddfb98c7e
obsolete: add a "troubled" revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
462
diff
changeset
|
677 |
451
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
678 |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
679 ### Obsolescence graph |
dc1bd3595075
more doc and cleanup
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
450
diff
changeset
|
680 |
452
3cf7ce72dbda
add cleanup todo
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
451
diff
changeset
|
681 # XXX SOME MAJOR CLEAN UP TO DO HERE XXX |
354
bd26eb9714fb
obsolete: Detect conflicting changeset!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
351
diff
changeset
|
682 |
305
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
683 def _precursors(repo, s): |
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
684 """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
|
685 cs = set() |
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
686 nm = repo.changelog.nodemap |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
687 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
|
688 for r in s: |
224 | 689 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
|
690 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
|
691 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
|
692 cs.add(pr) |
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
693 return cs |
0599fb01dc41
add an obsolete parent revset and related alias
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
135
diff
changeset
|
694 |
305
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
695 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
|
696 """transitive precursors of a subset""" |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
697 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
|
698 seen = set() |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
699 allsubjects = repo.obsstore.successors |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
700 while toproceed: |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
701 nc = toproceed.pop() |
224 | 702 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
|
703 np = mark[0] |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
704 if np not in seen: |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
705 seen.add(np) |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
706 toproceed.append(np) |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
707 nm = repo.changelog.nodemap |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
708 cs = set() |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
709 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
|
710 pr = nm.get(p) |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
711 if pr is not None: |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
712 cs.add(pr) |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
713 return cs |
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
714 |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
715 def _successors(repo, s): |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
716 """Successors of a changeset""" |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
717 cs = set() |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
718 nm = repo.changelog.nodemap |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
719 markerbyobj = repo.obsstore.precursors |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
720 for r in s: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
721 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
|
722 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
|
723 sr = nm.get(sub) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
724 if sr is not None: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
725 cs.add(sr) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
726 return cs |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
727 |
470
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
728 def _allsuccessors(repo, s, haltonflags=0): # XXX we need a better naming |
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
729 """transitive successors of a subset |
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
730 |
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
731 haltonflags allows to provide flags which prevent the evaluation of a |
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
732 marker. """ |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
733 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
|
734 seen = set() |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
735 allobjects = repo.obsstore.precursors |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
736 while toproceed: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
737 nc = toproceed.pop() |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
738 for mark in allobjects.get(nc, ()): |
470
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
739 if mark[2] & haltonflags: |
a2dfe82f27a0
obsolete: use flag to detect that a obsolescence marker fix a latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
467
diff
changeset
|
740 continue |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
741 for sub in mark[1]: |
460
19bba3c91246
obsolete: filter out nullid from possible successors
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
416
diff
changeset
|
742 if sub == nullid: |
19bba3c91246
obsolete: filter out nullid from possible successors
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
416
diff
changeset
|
743 continue # should not be here! |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
744 if sub not in seen: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
745 seen.add(sub) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
746 toproceed.append(sub) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
747 nm = repo.changelog.nodemap |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
748 cs = set() |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
749 for s in seen: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
750 sr = nm.get(s) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
751 if sr is not None: |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
752 cs.add(sr) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
753 return cs |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
754 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
755 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
756 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
757 def newerversion(repo, obs): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
758 """Return the newer version of an obsolete changeset""" |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
759 toproceed = set([(obs,)]) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
760 # XXX known optimization available |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
761 newer = set() |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
762 objectrels = repo.obsstore.precursors |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
763 while toproceed: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
764 current = toproceed.pop() |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
765 assert len(current) <= 1, 'splitting not handled yet. %r' % current |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
766 current = [n for n in current if n != nullid] |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
767 if current: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
768 n, = current |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
769 if n in objectrels: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
770 markers = objectrels[n] |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
771 for mark in markers: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
772 toproceed.add(tuple(mark[1])) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
773 else: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
774 newer.add(tuple(current)) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
775 else: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
776 newer.add(()) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
777 return sorted(newer) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
778 |
442
48d18ba05480
obsolete: extract high level marker creation in a dedicated util function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
441
diff
changeset
|
779 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
780 ##################################################################### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
781 ### Extending revset and template ### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
782 ##################################################################### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
783 |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
784 # this section add several useful revset symbol not yet in core. |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
785 # they are subject to changes |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
786 |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
787 ### hidden revset is not in core yet |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
788 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
789 @eh.revset('hidden') |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
790 def revsethidden(repo, subset, x): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
791 """``hidden()`` |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
792 Changeset is hidden. |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
793 """ |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
794 args = revset.getargs(x, 0, 0, 'hidden takes no argument') |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
795 return [r for r in subset if r in repo.hiddenrevs] |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
796 |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
797 ### XXX I'm not sure this revset is useful |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
798 @eh.revset('suspended') |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
799 def revsetsuspended(repo, subset, x): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
800 """``suspended()`` |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
801 Obsolete changesets with non-obsolete descendants. |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
802 """ |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
803 args = revset.getargs(x, 0, 0, 'suspended takes no arguments') |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
804 suspended = getobscache(repo, 'suspended') |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
805 return [r for r in subset if r in suspended] |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
806 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
807 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
808 @eh.revset('precursors') |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
809 def revsetprecursors(repo, subset, x): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
810 """``precursors(set)`` |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
811 Immediate precursors of changesets in set. |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
812 """ |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
813 s = revset.getset(repo, range(len(repo)), x) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
814 cs = _precursors(repo, s) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
815 return [r for r in subset if r in cs] |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
816 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
817 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
818 @eh.revset('allprecursors') |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
819 def revsetallprecursors(repo, subset, x): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
820 """``allprecursors(set)`` |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
821 Transitive precursors of changesets in set. |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
822 """ |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
823 s = revset.getset(repo, range(len(repo)), x) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
824 cs = _allprecursors(repo, s) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
825 return [r for r in subset if r in cs] |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
826 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
827 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
828 @eh.revset('successors') |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
829 def revsetsuccessors(repo, subset, x): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
830 """``successors(set)`` |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
831 Immediate successors of changesets in set. |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
832 """ |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
833 s = revset.getset(repo, range(len(repo)), x) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
834 cs = _successors(repo, s) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
835 return [r for r in subset if r in cs] |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
836 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
837 @eh.revset('allsuccessors') |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
838 def revsetallsuccessors(repo, subset, x): |
397
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
839 """``allsuccessors(set)`` |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
840 Transitive successors of changesets in set. |
0bd63f294a6f
obsolete: improve revset online help
Patrick Mezard <patrick@mezard.eu>
parents:
393
diff
changeset
|
841 """ |
306
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
842 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
|
843 cs = _allsuccessors(repo, s) |
8cfa3163dfaa
obsolete: add precursors and successors revset.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
305
diff
changeset
|
844 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
|
845 |
299
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
846 ### template keywords |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
847 # XXX it does not handle troubles well :-/ |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
848 |
431
bd05022c7856
obsolete: add and use templatekw decorator
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
430
diff
changeset
|
849 @eh.templatekw('obsolete') |
299
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
850 def obsoletekw(repo, ctx, templ, **args): |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
851 """:obsolete: String. The obsolescence level of the node, could be |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
852 ``stable``, ``unstable``, ``suspended`` or ``extinct``. |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
853 """ |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
854 rev = ctx.rev() |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
855 if ctx.obsolete(): |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
856 if ctx.extinct(): |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
857 return 'extinct' |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
858 else: |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
859 return 'suspended' |
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
860 elif ctx.unstable(): |
299
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
861 return 'unstable' |
eda6491ca269
obsolete: add 'obsolete' keyword
Patrick Mezard <patrick@mezard.eu>
parents:
298
diff
changeset
|
862 return 'stable' |
144
f387658d6d22
Add a bosancestors revset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
143
diff
changeset
|
863 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
864 ##################################################################### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
865 ### Various trouble warning ### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
866 ##################################################################### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
867 |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
868 # This section take care of issue warning to the user when troubles appear |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
869 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
870 @eh.wrapcommand("update") |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
871 @eh.wrapcommand("pull") |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
872 def wrapmayobsoletewc(origfn, ui, repo, *args, **opts): |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
873 """Warn that the working directory parent is an obsolete changeset""" |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
874 res = origfn(ui, repo, *args, **opts) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
875 if repo['.'].obsolete(): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
876 ui.warn(_('Working directory parent is obsolete\n')) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
877 return res |
71
19e1930587a0
[obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
70
diff
changeset
|
878 |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
879 # XXX this could wrap transaction code |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
880 # XXX (but this is a bit a layer violation) |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
881 @eh.wrapcommand("commit") |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
882 @eh.wrapcommand("push") |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
883 @eh.wrapcommand("pull") |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
884 @eh.wrapcommand("graft") |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
885 @eh.wrapcommand("phase") |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
886 @eh.wrapcommand("unbundle") |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
887 def warnobserrors(orig, ui, repo, *args, **kwargs): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
888 """display warning is the command resulted in more instable changeset""" |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
889 priorunstables = len(repo.revs('unstable()')) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
890 priorlatecomers = len(repo.revs('latecomer()')) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
891 priorconflictings = len(repo.revs('conflicting()')) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
892 try: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
893 return orig(ui, repo, *args, **kwargs) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
894 finally: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
895 newunstables = len(repo.revs('unstable()')) - priorunstables |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
896 newlatecomers = len(repo.revs('latecomer()')) - priorlatecomers |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
897 newconflictings = len(repo.revs('conflicting()')) - priorconflictings |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
898 if newunstables > 0: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
899 ui.warn(_('%i new unstables changesets\n') % newunstables) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
900 if newlatecomers > 0: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
901 ui.warn(_('%i new latecomers changesets\n') % newlatecomers) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
902 if newconflictings > 0: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
903 ui.warn(_('%i new conflictings changesets\n') % newconflictings) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
904 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
905 @eh.reposetup |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
906 def _repostabilizesetup(ui, repo): |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
907 """Add a hint for "hg stabilize" when troubles make push fails |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
908 """ |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
909 if not repo.local(): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
910 return |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
911 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
912 opush = repo.push |
71
19e1930587a0
[obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
70
diff
changeset
|
913 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
914 class stabilizerrepo(repo.__class__): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
915 def push(self, remote, *args, **opts): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
916 """wrapper around pull that pull obsolete relation""" |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
917 try: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
918 result = opush(remote, *args, **opts) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
919 except util.Abort, ex: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
920 hint = _("use 'hg stabilize' to get a stable history " |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
921 "or --force to ignore warnings") |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
922 if (len(ex.args) >= 1 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
923 and ex.args[0].startswith('push includes ') |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
924 and ex.hint is None): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
925 ex.hint = hint |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
926 raise |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
927 return result |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
928 repo.__class__ = stabilizerrepo |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
929 |
479
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
930 @eh.wrapcommand("summary") |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
931 def obssummary(orig, ui, repo, *args, **kwargs): |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
932 ret = orig(ui, repo, *args, **kwargs) |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
933 nbunstable = len(getobscache(repo, 'unstable')) |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
934 nblatecomer = len(getobscache(repo, 'latecomer')) |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
935 nbconflicting = len(getobscache(repo, 'unstable')) |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
936 if nbunstable: |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
937 ui.write('unstable: %i changesets\n' % nbunstable) |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
938 else: |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
939 ui.note('unstable: 0 changesets\n') |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
940 if nblatecomer: |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
941 ui.write('latecomer: %i changesets\n' % nblatecomer) |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
942 else: |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
943 ui.note('latecomer: 0 changesets\n') |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
944 if nbconflicting: |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
945 ui.write('conflicting: %i changesets\n' % nbconflicting) |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
946 else: |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
947 ui.note('conflicting: 0 changesets\n') |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
948 return ret |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
949 |
b63da0fb8ee5
obsolete: add obsolete data to summary.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
473
diff
changeset
|
950 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
951 ##################################################################### |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
952 ### Core Other extension compat ### |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
953 ##################################################################### |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
954 |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
955 # This section make official history rewritter create obsolete marker |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
956 |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
957 |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
958 ### commit --amend |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
959 # make commit --amend create obsolete marker |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
960 # |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
961 # The precursor is still strip from the repository. |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
962 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
963 @eh.wrapfunction(cmdutil, 'amend') |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
964 def wrapcmdutilamend(orig, ui, repo, commitfunc, old, *args, **kwargs): |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
965 oldnode = old.node() |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
966 new = orig(ui, repo, commitfunc, old, *args, **kwargs) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
967 if new != oldnode: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
968 lock = repo.lock() |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
969 try: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
970 tr = repo.transaction('post-amend-obst') |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
971 try: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
972 meta = { |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
973 'date': '%i %i' % util.makedate(), |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
974 'user': ui.username(), |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
975 } |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
976 repo.obsstore.create(tr, oldnode, [new], 0, meta) |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
977 tr.close() |
447
fa85e7205e0b
obsolete: move caches on obsstore
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
446
diff
changeset
|
978 clearobscaches(repo) |
437
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
979 finally: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
980 tr.release() |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
981 finally: |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
982 lock.release() |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
983 return new |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
984 |
48ac58354b7b
obsolete: sort all code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
436
diff
changeset
|
985 ### rebase |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
986 # |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
987 # - ignore obsolete changeset |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
988 # - create obsolete marker *instead of* striping |
150
f12fd2410a60
obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
148
diff
changeset
|
989 |
253
8ee6c5b98d73
[obsolete] fix new api: be more flexible on rebase's buildstate signature
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
252
diff
changeset
|
990 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
|
991 """wrapper for rebase 's buildstate that exclude obsolete changeset""" |
472
641e0cd43d6d
obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
471
diff
changeset
|
992 |
150
f12fd2410a60
obsolete: improve rebase compat
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
148
diff
changeset
|
993 rebaseset = repo.revs('%ld - extinct()', rebaseset) |
471
8be3973adf34
obsolete: warn when the whole rebase set was remove because extinct
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
470
diff
changeset
|
994 if not rebaseset: |
8be3973adf34
obsolete: warn when the whole rebase set was remove because extinct
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
470
diff
changeset
|
995 repo.ui.warn(_('whole rebase set is extinct and ignored.\n')) |
8be3973adf34
obsolete: warn when the whole rebase set was remove because extinct
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
470
diff
changeset
|
996 return {} |
472
641e0cd43d6d
obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
471
diff
changeset
|
997 root = min(rebaseset) |
641e0cd43d6d
obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
471
diff
changeset
|
998 if not repo._rebasekeep and not repo[root].mutable(): |
641e0cd43d6d
obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
471
diff
changeset
|
999 raise util.Abort(_("can't rebase immutable changeset %s") % repo[root], |
641e0cd43d6d
obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
471
diff
changeset
|
1000 hint=_('see hg help phases for details')) |
253
8ee6c5b98d73
[obsolete] fix new api: be more flexible on rebase's buildstate signature
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
252
diff
changeset
|
1001 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
|
1002 |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1003 def defineparents(orig, repo, rev, target, state, *args, **kwargs): |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1004 rebasestate = getattr(repo, '_rebasestate', None) |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1005 if rebasestate is not None: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1006 repo._rebasestate = dict(state) |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1007 repo._rebasetarget = target |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1008 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
|
1009 |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1010 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
|
1011 """wrapper for rebase 's concludenode that set obsolete relation""" |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1012 newrev = orig(repo, rev, p1, *args, **kwargs) |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1013 rebasestate = getattr(repo, '_rebasestate', None) |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1014 if rebasestate is not None: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1015 if newrev is not None: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1016 nrev = repo[newrev].rev() |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1017 else: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1018 nrev = p1 |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1019 repo._rebasestate[rev] = nrev |
71
19e1930587a0
[obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
70
diff
changeset
|
1020 return newrev |
19e1930587a0
[obsolete] Move extension compat code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
70
diff
changeset
|
1021 |
274
6622a24f3b0f
obsolete: fix rebase wrapping
Patrick Mezard <patrick@mezard.eu>
parents:
273
diff
changeset
|
1022 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
|
1023 |
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
1024 reallykeep = kwargs.get('keep', False) |
275
336210dada95
obsolete: make rebase abort with --keep
Patrick Mezard <patrick@mezard.eu>
parents:
274
diff
changeset
|
1025 kwargs = dict(kwargs) |
84
c4cc5f3bcf12
[obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
83
diff
changeset
|
1026 kwargs['keep'] = True |
472
641e0cd43d6d
obsolete: prevent rebasing of public changeset
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
471
diff
changeset
|
1027 repo._rebasekeep = reallykeep |
84
c4cc5f3bcf12
[obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
83
diff
changeset
|
1028 |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1029 # 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
|
1030 # replacements if any. Doing it in concludenode() prevents |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1031 # aborting the rebase, and is not called with all relevant |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1032 # revisions in --collapse case. Instead, we try to track the |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1033 # rebase state structure by sampling/updating it in |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1034 # defineparents() and concludenode(). The obsolete markers are |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1035 # added from this state after a successful call. |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1036 repo._rebasestate = {} |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1037 repo._rebasetarget = None |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1038 try: |
443
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1039 l = repo.lock() |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1040 try: |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1041 res = orig(ui, repo, *args, **kwargs) |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1042 if not reallykeep: |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1043 # Filter nullmerge or unrebased entries |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1044 repo._rebasestate = dict(p for p in repo._rebasestate.iteritems() |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1045 if p[1] >= 0) |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1046 if not res and not kwargs.get('abort') and repo._rebasestate: |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1047 # Rebased revisions are assumed to be descendants of |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1048 # targetrev. If a source revision is mapped to targetrev |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1049 # or to another rebased revision, it must have been |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1050 # removed. |
455
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1051 markers = [] |
443
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1052 if kwargs.get('collapse'): |
455
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1053 # collapse assume revision disapear because they are all |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1054 # in the created revision |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1055 newrevs = set(repo._rebasestate.values()) |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1056 newrevs.remove(repo._rebasetarget) |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1057 if newrevs: |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1058 # we create new revision. |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1059 # A single one by --collapse design |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1060 assert len(newrevs) == 1 |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1061 new = tuple(repo[n] for n in newrevs) |
443
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1062 else: |
455
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1063 # every body died. no new changeset created |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1064 new = (repo[repo._rebasetarget],) |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1065 for rev, newrev in sorted(repo._rebasestate.items()): |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1066 markers.append((repo[rev], new)) |
311
5eecfda0a5c7
obsolete: enable rebase --keep again
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
310
diff
changeset
|
1067 else: |
455
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1068 # no collapse assume revision disapear because they are |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1069 # contained in parent |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1070 for rev, newrev in sorted(repo._rebasestate.items()): |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1071 markers.append((repo[rev], (repo[newrev],))) |
f46a41006136
obsolete: simplify rebase wrapping code and change relation creation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
454
diff
changeset
|
1072 createmarkers(repo, markers) |
443
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1073 return res |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1074 finally: |
3f8c11865ed2
obsolete: remove usage of addcollapsedobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
442
diff
changeset
|
1075 l.release() |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1076 finally: |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1077 delattr(repo, '_rebasestate') |
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1078 delattr(repo, '_rebasetarget') |
84
c4cc5f3bcf12
[obsolete] rebase always keep changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
83
diff
changeset
|
1079 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
1080 @eh.extsetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
1081 def _rebasewrapping(ui): |
356
56d4c6207ef9
Move obserror warning into the obsolete extension.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
354
diff
changeset
|
1082 # warning about more obsolete |
42
eb6a06d7eae3
Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
41
diff
changeset
|
1083 try: |
eb6a06d7eae3
Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
41
diff
changeset
|
1084 rebase = extensions.find('rebase') |
eb6a06d7eae3
Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
41
diff
changeset
|
1085 if rebase: |
356
56d4c6207ef9
Move obserror warning into the obsolete extension.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
354
diff
changeset
|
1086 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
|
1087 extensions.wrapfunction(rebase, 'buildstate', buildstate) |
282
05ab164c6593
obsolete: handle rebase --collapse
Patrick Mezard <patrick@mezard.eu>
parents:
279
diff
changeset
|
1088 extensions.wrapfunction(rebase, 'defineparents', defineparents) |
42
eb6a06d7eae3
Make rebase set-obsolete relation
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
41
diff
changeset
|
1089 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
|
1090 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
|
1091 except KeyError: |
305
0b444d7c5c96
update revset vocabulary to use precursors, successors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
304
diff
changeset
|
1092 pass # rebase not found |
39 | 1093 |
44
b243c10a5fbe
Add pushkey support for pull and push
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
43
diff
changeset
|
1094 |
430
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
1095 ##################################################################### |
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
1096 ### Older format management ### |
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
1097 ##################################################################### |
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
|
1098 |
430
07db1d511faf
obsolete: move old format stuff at the end
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
429
diff
changeset
|
1099 # 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
|
1100 # handled by core |
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
|
1101 |
439
6cff54825233
obsolete: reorder import
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
438
diff
changeset
|
1102 import json |
32
c27491be4431
obsolet: basic support (hide changeset)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
1103 |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
1104 @eh.reposetup |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
1105 def _checkoldobsolete(ui, repo): |
459
3477326461e3
obsolete: more typos and cleanup
Patrick Mezard <patrick@mezard.eu>
parents:
458
diff
changeset
|
1106 """Detect that a repo still contains some old obsolete format |
273
87e4d1eec5e8
obsolete: add debugsuccessors command
Patrick Mezard <patrick@mezard.eu>
parents:
254
diff
changeset
|
1107 """ |
429
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
1108 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
|
1109 return |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
1110 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
|
1111 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
|
1112 break |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
1113 else: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
1114 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
|
1115 if not data: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
1116 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
|
1117 if data: |
079b231b8ea4
obsolete: introduce an extension helper and use it
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
428
diff
changeset
|
1118 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
|
1119 'run `hg debugconvertobsolete` once.') |
70
af4f7ef0a3c1
[obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
69
diff
changeset
|
1120 |
af4f7ef0a3c1
[obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
69
diff
changeset
|
1121 def _obsdeserialise(flike): |
74
c7dd26dec7fc
[obsolete] update docstring
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
73
diff
changeset
|
1122 """read a file like object serialised with _obsserialise |
c7dd26dec7fc
[obsolete] update docstring
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
73
diff
changeset
|
1123 |
454
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
1124 this desierialize into a {subject -> objects} mapping |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
1125 |
4e34a723115b
obsolete: more comment
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
453
diff
changeset
|
1126 this was the very first format ever.""" |
70
af4f7ef0a3c1
[obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
69
diff
changeset
|
1127 rels = {} |
af4f7ef0a3c1
[obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
69
diff
changeset
|
1128 for line in flike: |
af4f7ef0a3c1
[obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
69
diff
changeset
|
1129 subhex, objhex = line.split() |
80
5d029a358252
[obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
79
diff
changeset
|
1130 subnode = bin(subhex) |
5d029a358252
[obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
79
diff
changeset
|
1131 if subnode == nullid: |
5d029a358252
[obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
79
diff
changeset
|
1132 subnode = None |
5d029a358252
[obsolete] add kill support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
79
diff
changeset
|
1133 rels.setdefault( subnode, set()).add(bin(objhex)) |
70
af4f7ef0a3c1
[obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
69
diff
changeset
|
1134 return rels |
af4f7ef0a3c1
[obsolete] extract serialization logic.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
69
diff
changeset
|
1135 |
441
d702f0d26c6a
obsolete: remove debugsuccessors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
440
diff
changeset
|
1136 cmdtable = {} |
d702f0d26c6a
obsolete: remove debugsuccessors
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
440
diff
changeset
|
1137 command = cmdutil.command(cmdtable) |
276
f26e9bc5f7fc
obsolete: use new-style command registration
Patrick Mezard <patrick@mezard.eu>
parents:
275
diff
changeset
|
1138 @command('debugconvertobsolete', [], '') |
224 | 1139 def cmddebugconvertobsolete(ui, repo): |
278
fa0b9b8a83c0
obsolete: add or fix debug commands help
Patrick Mezard <patrick@mezard.eu>
parents:
277
diff
changeset
|
1140 """import markers from an .hg/obsolete-relations file""" |
224 | 1141 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
|
1142 err = 0 |
224 | 1143 l = repo.lock() |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
1144 some = False |
224 | 1145 try: |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1146 unlink = [] |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1147 tr = repo.transaction('convert-obsolete') |
224 | 1148 try: |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1149 repo._importoldobsolete = True |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1150 store = repo.obsstore |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1151 ### very first format |
224 | 1152 try: |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1153 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
|
1154 try: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1155 some = True |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1156 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
|
1157 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
|
1158 suc = bin(subhex) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1159 prec = bin(objhex) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1160 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
|
1161 meta = { |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1162 '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
|
1163 'user': ui.username(), |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1164 } |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1165 try: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1166 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
|
1167 cnt += 1 |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1168 except ValueError: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1169 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
|
1170 % (line)) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1171 err += 1 |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1172 finally: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1173 f.close() |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1174 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
|
1175 except IOError: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1176 pass |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1177 ### second (json) format |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1178 data = repo.sopener.tryread('obsoletemarkers') |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
1179 if data: |
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
1180 some = True |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1181 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
|
1182 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
|
1183 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
|
1184 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
|
1185 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
|
1186 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
|
1187 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
|
1188 try: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1189 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
|
1190 except LOOKUP_ERRORS: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1191 pass |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1192 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
|
1193 try: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1194 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
|
1195 except LOOKUP_ERRORS: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1196 pass |
224 | 1197 |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1198 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
|
1199 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
|
1200 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
|
1201 try: |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1202 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
|
1203 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
|
1204 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
|
1205 0, meta) |
341
7653f80fd7a4
obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
340
diff
changeset
|
1206 cnt += 1 |
7653f80fd7a4
obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
340
diff
changeset
|
1207 except ValueError: |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1208 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
|
1209 % (oldobject, oldsubjects)) |
341
7653f80fd7a4
obsolete: harden convertion from first format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
340
diff
changeset
|
1210 err += 1 |
361
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1211 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
|
1212 tr.close() |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1213 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
|
1214 util.unlink(path) |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1215 finally: |
ac7969043677
obsolete: adapt to core: marker are written in transaction now
Pierre-Yves.David@ens-lyon.org
parents:
360
diff
changeset
|
1216 tr.release() |
224 | 1217 finally: |
1218 del repo._importoldobsolete | |
1219 l.release() | |
334
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
1220 if not some: |
fb83210bce32
obsolete: move to official binary format
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
332
diff
changeset
|
1221 ui.warn('nothing to do\n') |
224 | 1222 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
|
1223 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
|
1224 ui.write_err('%i conversion failed. check you graph!\n' % err) |