Mercurial > evolve
annotate hgext/inhibit.py @ 1806:9f42f819267b
evolve: move the extensions to 'hgext3rd'
We have the 'hgext3rd' as the official place for extension for some time now.
We start the big migration. This might break some people setup but this is a
necessary step to have evolve easily available through pip.
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Tue, 28 Feb 2017 15:09:03 +0100 |
parents | 7a2e0629bdee |
children |
rev | line source |
---|---|
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
1 """reduce the changesets evolution feature scope for early and noob friendly ui |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
2 |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
3 the full scale changeset evolution have some massive bleeding edge and it is |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
4 very easy for people not very intimate with the concept to end up in intricate |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
5 situation. in order to get some of the benefit sooner, this extension is |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
6 disabling some of the less polished aspect of evolution. it should gradually |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
7 get thinner and thinner as changeset evolution will get more polished. this |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
8 extension is only recommended for large scale organisations. individual user |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
9 should probably stick on using evolution in its current state, understand its |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
10 concept and provide feedback |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
11 |
1551
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
12 This extension provides the ability to "inhibit" obsolescence markers. obsolete |
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
13 revision can be cheaply brought back to life that way. |
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
14 However as the inhibitor are not fitting in an append only model, this is |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
15 incompatible with sharing mutable history. |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
16 """ |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
17 from mercurial import localrepo |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
18 from mercurial import obsolete |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
19 from mercurial import extensions |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
20 from mercurial import cmdutil |
1551
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
21 from mercurial import error |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
22 from mercurial import scmutil |
1233
63ee05dd557a
inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents:
1232
diff
changeset
|
23 from mercurial import commands |
1297
51ec3610968c
inhibit: fix devel warning
Laurent Charignon <lcharignon@fb.com>
parents:
1293
diff
changeset
|
24 from mercurial import lock as lockmod |
1560
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
25 from mercurial import bookmarks |
1490
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
26 from mercurial import util |
1241
3625d006e81b
inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents:
1240
diff
changeset
|
27 from mercurial.i18n import _ |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
28 |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
29 cmdtable = {} |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
30 command = cmdutil.command(cmdtable) |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
31 |
1490
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
32 def _inhibitenabled(repo): |
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
33 return util.safehasattr(repo, '_obsinhibit') |
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
34 |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
35 def reposetup(ui, repo): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
36 |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
37 class obsinhibitedrepo(repo.__class__): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
38 |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
39 @localrepo.storecache('obsinhibit') |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
40 def _obsinhibit(self): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
41 # XXX we should make sure it is invalidated by transaction failure |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
42 obsinhibit = set() |
1465
777e5c369d99
compat: use svfs instead of sopener
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1366
diff
changeset
|
43 raw = self.svfs.tryread('obsinhibit') |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
44 for i in xrange(0, len(raw), 20): |
1551
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
45 obsinhibit.add(raw[i:i + 20]) |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
46 return obsinhibit |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
47 |
1292
62229e7451f7
inhibit: wrap repo.commit to inhibit nodes
Durham Goode <durham@fb.com>
parents:
1247
diff
changeset
|
48 def commit(self, *args, **kwargs): |
62229e7451f7
inhibit: wrap repo.commit to inhibit nodes
Durham Goode <durham@fb.com>
parents:
1247
diff
changeset
|
49 newnode = super(obsinhibitedrepo, self).commit(*args, **kwargs) |
1346
9a1415f8b21b
inhbit: don't crash on commit with no changes
Laurent Charignon <lcharignon@fb.com>
parents:
1339
diff
changeset
|
50 if newnode is not None: |
9a1415f8b21b
inhbit: don't crash on commit with no changes
Laurent Charignon <lcharignon@fb.com>
parents:
1339
diff
changeset
|
51 _inhibitmarkers(repo, [newnode]) |
1292
62229e7451f7
inhibit: wrap repo.commit to inhibit nodes
Durham Goode <durham@fb.com>
parents:
1247
diff
changeset
|
52 return newnode |
62229e7451f7
inhibit: wrap repo.commit to inhibit nodes
Durham Goode <durham@fb.com>
parents:
1247
diff
changeset
|
53 |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
54 repo.__class__ = obsinhibitedrepo |
1233
63ee05dd557a
inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents:
1232
diff
changeset
|
55 |
63ee05dd557a
inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents:
1232
diff
changeset
|
56 def _update(orig, ui, repo, *args, **kwargs): |
63ee05dd557a
inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents:
1232
diff
changeset
|
57 """ |
63ee05dd557a
inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents:
1232
diff
changeset
|
58 When moving to a commit we want to inhibit any obsolete commit affecting |
63ee05dd557a
inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents:
1232
diff
changeset
|
59 the changeset we are updating to. In other words we don't want any visible |
63ee05dd557a
inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents:
1232
diff
changeset
|
60 commit to be obsolete. |
63ee05dd557a
inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents:
1232
diff
changeset
|
61 """ |
1303
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
62 wlock = None |
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
63 try: |
1551
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
64 # Evolve is running a hook on lock release to display a warning message |
1303
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
65 # if the workind dir's parent is obsolete. |
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
66 # We take the lock here to make sure that we inhibit the parent before |
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
67 # that hook get a chance to run. |
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
68 wlock = repo.wlock() |
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
69 res = orig(ui, repo, *args, **kwargs) |
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
70 newhead = repo['.'].node() |
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
71 _inhibitmarkers(repo, [newhead]) |
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
72 return res |
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
73 finally: |
508f9911b042
inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents:
1297
diff
changeset
|
74 lockmod.release(wlock) |
1233
63ee05dd557a
inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents:
1232
diff
changeset
|
75 |
1560
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
76 def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs): |
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
77 """ Add inhibition markers to every obsolete bookmarks """ |
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
78 repo = bkmstoreinst._repo |
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
79 bkmstorenodes = [repo[v].node() for v in bkmstoreinst.values()] |
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
80 _inhibitmarkers(repo, bkmstorenodes) |
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
81 return orig(bkmstoreinst, *args, **kwargs) |
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
82 |
1241
3625d006e81b
inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents:
1240
diff
changeset
|
83 def _bookmark(orig, ui, repo, *bookmarks, **opts): |
3625d006e81b
inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents:
1240
diff
changeset
|
84 """ Add a -D option to the bookmark command, map it to prune -B """ |
3625d006e81b
inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents:
1240
diff
changeset
|
85 haspruneopt = opts.get('prune', False) |
3625d006e81b
inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents:
1240
diff
changeset
|
86 if not haspruneopt: |
3625d006e81b
inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents:
1240
diff
changeset
|
87 return orig(ui, repo, *bookmarks, **opts) |
1538
ef5da2310398
inhibit: improve handling of error cases for bookmark -D
Laurent Charignon <lcharignon@fb.com>
parents:
1535
diff
changeset
|
88 elif opts.get('rename'): |
1551
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
89 raise error.Abort('Cannot use both -m and -D') |
1538
ef5da2310398
inhibit: improve handling of error cases for bookmark -D
Laurent Charignon <lcharignon@fb.com>
parents:
1535
diff
changeset
|
90 elif len(bookmarks) == 0: |
ef5da2310398
inhibit: improve handling of error cases for bookmark -D
Laurent Charignon <lcharignon@fb.com>
parents:
1535
diff
changeset
|
91 hint = _('make sure to put a space between -D and your bookmark name') |
1551
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
92 raise error.Abort(_('Error, please check your command'), hint=hint) |
1293
dc5528e04c06
inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents:
1292
diff
changeset
|
93 |
1241
3625d006e81b
inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents:
1240
diff
changeset
|
94 # Call prune -B |
3625d006e81b
inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents:
1240
diff
changeset
|
95 evolve = extensions.find('evolve') |
1293
dc5528e04c06
inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents:
1292
diff
changeset
|
96 optsdict = { |
dc5528e04c06
inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents:
1292
diff
changeset
|
97 'new': [], |
dc5528e04c06
inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents:
1292
diff
changeset
|
98 'succ': [], |
dc5528e04c06
inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents:
1292
diff
changeset
|
99 'rev': [], |
1590
ca5c8a827407
inhibit: make bookmark -D work with a list of bookmarks
Jeroen Vaelen <jeroen@fb.com>
parents:
1588
diff
changeset
|
100 'bookmark': bookmarks, |
1293
dc5528e04c06
inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents:
1292
diff
changeset
|
101 'keep': None, |
dc5528e04c06
inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents:
1292
diff
changeset
|
102 'biject': False, |
dc5528e04c06
inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents:
1292
diff
changeset
|
103 } |
1241
3625d006e81b
inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents:
1240
diff
changeset
|
104 evolve.cmdprune(ui, repo, **optsdict) |
3625d006e81b
inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents:
1240
diff
changeset
|
105 |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
106 # obsolescence inhibitor |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
107 ######################## |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
108 |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
109 def _schedulewrite(tr, obsinhibit): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
110 """Make sure on disk content will be updated on transaction commit""" |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
111 def writer(fp): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
112 """Serialize the inhibited list to disk. |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
113 """ |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
114 raw = ''.join(obsinhibit) |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
115 fp.write(raw) |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
116 tr.addfilegenerator('obsinhibit', ('obsinhibit',), writer) |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
117 tr.hookargs['obs_inbihited'] = '1' |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
118 |
1225
577f5340be6f
inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1224
diff
changeset
|
119 def _filterpublic(repo, nodes): |
577f5340be6f
inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1224
diff
changeset
|
120 """filter out inhibitor on public changeset |
577f5340be6f
inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1224
diff
changeset
|
121 |
577f5340be6f
inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1224
diff
changeset
|
122 Public changesets are already immune to obsolescence""" |
577f5340be6f
inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1224
diff
changeset
|
123 getrev = repo.changelog.nodemap.get |
577f5340be6f
inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1224
diff
changeset
|
124 getphase = repo._phasecache.phase |
1582
aa42a6ad9c5c
inhibit: fix _filterpublic
Laurent Charignon <lcharignon@fb.com>
parents:
1564
diff
changeset
|
125 return (n for n in nodes |
1338
77cbf9121e8a
inhibit: handle inhibit marker on stripped revision
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1334
diff
changeset
|
126 if getrev(n) is not None and getphase(repo, getrev(n))) |
1225
577f5340be6f
inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1224
diff
changeset
|
127 |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
128 def _inhibitmarkers(repo, nodes): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
129 """add marker inhibitor for all obsolete revision under <nodes> |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
130 |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
131 Content of <nodes> and all mutable ancestors are considered. Marker for |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
132 obsolete revision only are created. |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
133 """ |
1490
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
134 if not _inhibitenabled(repo): |
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
135 return |
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
136 |
1535
f6d10432499d
inhibit: use dirty revset trick to speedup the inhibit search space.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1534
diff
changeset
|
137 # we add (non public()) as a lower boundary to |
f6d10432499d
inhibit: use dirty revset trick to speedup the inhibit search space.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1534
diff
changeset
|
138 # - use the C code in 3.6 (no ancestors in C as this is written) |
f6d10432499d
inhibit: use dirty revset trick to speedup the inhibit search space.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1534
diff
changeset
|
139 # - restrict the search space. Otherwise, the ancestors can spend a lot of |
f6d10432499d
inhibit: use dirty revset trick to speedup the inhibit search space.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1534
diff
changeset
|
140 # time iterating if you have a check very low in the repo. We do not need |
f6d10432499d
inhibit: use dirty revset trick to speedup the inhibit search space.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1534
diff
changeset
|
141 # to iterate over tens of thousand of public revisions with higher |
f6d10432499d
inhibit: use dirty revset trick to speedup the inhibit search space.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1534
diff
changeset
|
142 # revision number |
f6d10432499d
inhibit: use dirty revset trick to speedup the inhibit search space.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1534
diff
changeset
|
143 # |
f6d10432499d
inhibit: use dirty revset trick to speedup the inhibit search space.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1534
diff
changeset
|
144 # In addition, the revset logic could be made significantly smarter here. |
f6d10432499d
inhibit: use dirty revset trick to speedup the inhibit search space.
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1534
diff
changeset
|
145 newinhibit = repo.revs('(not public())::%ln and obsolete()', nodes) |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
146 if newinhibit: |
1534
9a78ed4b9765
inhibit: use 'repo.revs' instead of 'repo.set'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1533
diff
changeset
|
147 node = repo.changelog.node |
1297
51ec3610968c
inhibit: fix devel warning
Laurent Charignon <lcharignon@fb.com>
parents:
1293
diff
changeset
|
148 lock = tr = None |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
149 try: |
1297
51ec3610968c
inhibit: fix devel warning
Laurent Charignon <lcharignon@fb.com>
parents:
1293
diff
changeset
|
150 lock = repo.lock() |
51ec3610968c
inhibit: fix devel warning
Laurent Charignon <lcharignon@fb.com>
parents:
1293
diff
changeset
|
151 tr = repo.transaction('obsinhibit') |
1534
9a78ed4b9765
inhibit: use 'repo.revs' instead of 'repo.set'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1533
diff
changeset
|
152 repo._obsinhibit.update(node(r) for r in newinhibit) |
1225
577f5340be6f
inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1224
diff
changeset
|
153 _schedulewrite(tr, _filterpublic(repo, repo._obsinhibit)) |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
154 repo.invalidatevolatilesets() |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
155 tr.close() |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
156 finally: |
1297
51ec3610968c
inhibit: fix devel warning
Laurent Charignon <lcharignon@fb.com>
parents:
1293
diff
changeset
|
157 lockmod.release(tr, lock) |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
158 |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
159 def _deinhibitmarkers(repo, nodes): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
160 """lift obsolescence inhibition on a set of nodes |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
161 |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
162 This will be triggered when inhibited nodes received new obsolescence |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
163 markers. Otherwise the new obsolescence markers would also be inhibited. |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
164 """ |
1490
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
165 if not _inhibitenabled(repo): |
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
166 return |
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
167 |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
168 deinhibited = repo._obsinhibit & set(nodes) |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
169 if deinhibited: |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
170 tr = repo.transaction('obsinhibit') |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
171 try: |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
172 repo._obsinhibit -= deinhibited |
1225
577f5340be6f
inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1224
diff
changeset
|
173 _schedulewrite(tr, _filterpublic(repo, repo._obsinhibit)) |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
174 repo.invalidatevolatilesets() |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
175 tr.close() |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
176 finally: |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
177 tr.release() |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
178 |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
179 def _createmarkers(orig, repo, relations, flag=0, date=None, metadata=None): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
180 """wrap markers create to make sure we de-inhibit target nodes""" |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
181 # wrapping transactio to unify the one in each function |
1472
a8a4c8b8550d
inhibit: add missing locking in wrapper for obsmarker creation
Laurent Charignon <lcharignon@fb.com>
parents:
1465
diff
changeset
|
182 lock = tr = None |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
183 try: |
1472
a8a4c8b8550d
inhibit: add missing locking in wrapper for obsmarker creation
Laurent Charignon <lcharignon@fb.com>
parents:
1465
diff
changeset
|
184 lock = repo.lock() |
a8a4c8b8550d
inhibit: add missing locking in wrapper for obsmarker creation
Laurent Charignon <lcharignon@fb.com>
parents:
1465
diff
changeset
|
185 tr = repo.transaction('add-obsolescence-marker') |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
186 orig(repo, relations, flag, date, metadata) |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
187 precs = (r[0].node() for r in relations) |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
188 _deinhibitmarkers(repo, precs) |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
189 tr.close() |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
190 finally: |
1472
a8a4c8b8550d
inhibit: add missing locking in wrapper for obsmarker creation
Laurent Charignon <lcharignon@fb.com>
parents:
1465
diff
changeset
|
191 lockmod.release(tr, lock) |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
192 |
1583
aaa65373a31b
inhibit: fix compatibility with changes in rebase
Laurent Charignon <lcharignon@fb.com>
parents:
1582
diff
changeset
|
193 def _filterobsoleterevswrap(orig, repo, rebasesetrevs, *args, **kwargs): |
1542
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
194 repo._notinhibited = rebasesetrevs |
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
195 try: |
1551
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
196 repo.invalidatevolatilesets() |
1583
aaa65373a31b
inhibit: fix compatibility with changes in rebase
Laurent Charignon <lcharignon@fb.com>
parents:
1582
diff
changeset
|
197 r = orig(repo, rebasesetrevs, *args, **kwargs) |
1542
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
198 finally: |
1551
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
199 del repo._notinhibited |
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
200 repo.invalidatevolatilesets() |
1542
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
201 return r |
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
202 |
1486
e8ebb2441e60
inhibit: do not search for visible obsolete changeset during stripping
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1472
diff
changeset
|
203 def transactioncallback(orig, repo, desc, *args, **kwargs): |
1240
e1347ce2f954
inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents:
1234
diff
changeset
|
204 """ Wrap localrepo.transaction to inhibit new obsolete changes """ |
e1347ce2f954
inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents:
1234
diff
changeset
|
205 def inhibitposttransaction(transaction): |
e1347ce2f954
inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents:
1234
diff
changeset
|
206 # At the end of the transaction we catch all the new visible and |
e1347ce2f954
inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents:
1234
diff
changeset
|
207 # obsolete commit to inhibit them |
1362
73e5b5280c1c
inhibit: improve performance of transaction wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1346
diff
changeset
|
208 visibleobsolete = repo.revs('obsolete() - hidden()') |
1321
8fa74845eb1f
inhibit: don't inhibit pinned commits during rebase
Durham Goode <durham@fb.com>
parents:
1303
diff
changeset
|
209 ignoreset = set(getattr(repo, '_rebaseset', [])) |
1588
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
210 ignoreset |= set(getattr(repo, '_obsoletenotrebased', [])) |
1321
8fa74845eb1f
inhibit: don't inhibit pinned commits during rebase
Durham Goode <durham@fb.com>
parents:
1303
diff
changeset
|
211 visibleobsolete = list(r for r in visibleobsolete if r not in ignoreset) |
1240
e1347ce2f954
inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents:
1234
diff
changeset
|
212 if visibleobsolete: |
e1347ce2f954
inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents:
1234
diff
changeset
|
213 _inhibitmarkers(repo, [repo[r].node() for r in visibleobsolete]) |
1486
e8ebb2441e60
inhibit: do not search for visible obsolete changeset during stripping
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1472
diff
changeset
|
214 transaction = orig(repo, desc, *args, **kwargs) |
1490
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
215 if desc != 'strip' and _inhibitenabled(repo): |
1551
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
216 transaction.addpostclose('inhibitposttransaction', |
40e496bc7b54
check-code: make inhibit.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1542
diff
changeset
|
217 inhibitposttransaction) |
1240
e1347ce2f954
inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents:
1234
diff
changeset
|
218 return transaction |
e1347ce2f954
inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents:
1234
diff
changeset
|
219 |
1588
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
220 |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
221 # We wrap these two functions to address the following scenario: |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
222 # - Assuming that we have markers between commits in the rebase set and |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
223 # destination and that these markers are inhibited |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
224 # - At the end of the rebase the nodes are still visible because rebase operate |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
225 # without inhibition and skip these nodes |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
226 # We keep track in repo._obsoletenotrebased of the obsolete commits skipped by |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
227 # the rebase and lift the inhibition in the end of the rebase. |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
228 |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
229 def _computeobsoletenotrebased(orig, repo, *args, **kwargs): |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
230 r = orig(repo, *args, **kwargs) |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
231 repo._obsoletenotrebased = r.keys() |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
232 return r |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
233 |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
234 def _clearrebased(orig, ui, repo, *args, **kwargs): |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
235 r = orig(ui, repo, *args, **kwargs) |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
236 tonode = repo.changelog.node |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
237 if util.safehasattr(repo, '_obsoletenotrebased'): |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
238 _deinhibitmarkers(repo, [tonode(k) for k in repo._obsoletenotrebased]) |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
239 return r |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
240 |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
241 |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
242 def extsetup(ui): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
243 # lets wrap the computation of the obsolete set |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
244 # We apply inhibition there |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
245 obsfunc = obsolete.cachefuncs['obsolete'] |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
246 def _computeobsoleteset(repo): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
247 """remove any inhibited nodes from the obsolete set |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
248 |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
249 This will trickle down to other part of mercurial (hidden, log, etc)""" |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
250 obs = obsfunc(repo) |
1490
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
251 if _inhibitenabled(repo): |
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
252 getrev = repo.changelog.nodemap.get |
1542
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
253 blacklist = getattr(repo, '_notinhibited', set()) |
1490
bc7eec65dfcf
inhibit: fix inhibit working with non-inhibit repos
Durham Goode <durham@fb.com>
parents:
1486
diff
changeset
|
254 for n in repo._obsinhibit: |
1542
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
255 if getrev(n) not in blacklist: |
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
256 obs.discard(getrev(n)) |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
257 return obs |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
258 try: |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
259 extensions.find('directaccess') |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
260 except KeyError: |
1474
8e6de39b724d
inhibit: don't abort when directaccess is not enabled
Laurent Charignon <lcharignon@fb.com>
parents:
1472
diff
changeset
|
261 errormsg = _('cannot use inhibit without the direct access extension\n') |
8e6de39b724d
inhibit: don't abort when directaccess is not enabled
Laurent Charignon <lcharignon@fb.com>
parents:
1472
diff
changeset
|
262 hint = _("(please enable it or inhibit won\'t work)\n") |
8e6de39b724d
inhibit: don't abort when directaccess is not enabled
Laurent Charignon <lcharignon@fb.com>
parents:
1472
diff
changeset
|
263 ui.warn(errormsg) |
8e6de39b724d
inhibit: don't abort when directaccess is not enabled
Laurent Charignon <lcharignon@fb.com>
parents:
1472
diff
changeset
|
264 ui.warn(hint) |
8e6de39b724d
inhibit: don't abort when directaccess is not enabled
Laurent Charignon <lcharignon@fb.com>
parents:
1472
diff
changeset
|
265 return |
1366
9c3ba42c582a
inhibit: move transaction wrapping outside of repo setup
Laurent Charignon <lcharignon@fb.com>
parents:
1362
diff
changeset
|
266 |
9c3ba42c582a
inhibit: move transaction wrapping outside of repo setup
Laurent Charignon <lcharignon@fb.com>
parents:
1362
diff
changeset
|
267 # Wrapping this to inhibit obsolete revs resulting from a transaction |
9c3ba42c582a
inhibit: move transaction wrapping outside of repo setup
Laurent Charignon <lcharignon@fb.com>
parents:
1362
diff
changeset
|
268 extensions.wrapfunction(localrepo.localrepository, |
9c3ba42c582a
inhibit: move transaction wrapping outside of repo setup
Laurent Charignon <lcharignon@fb.com>
parents:
1362
diff
changeset
|
269 'transaction', transactioncallback) |
9c3ba42c582a
inhibit: move transaction wrapping outside of repo setup
Laurent Charignon <lcharignon@fb.com>
parents:
1362
diff
changeset
|
270 |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
271 obsolete.cachefuncs['obsolete'] = _computeobsoleteset |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
272 # wrap create marker to make it able to lift the inhibition |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
273 extensions.wrapfunction(obsolete, 'createmarkers', _createmarkers) |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
274 # drop divergence computation since it is incompatible with "light revive" |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
275 obsolete.cachefuncs['divergent'] = lambda repo: set() |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
276 # drop bumped computation since it is incompatible with "light revive" |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
277 obsolete.cachefuncs['bumped'] = lambda repo: set() |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
278 # wrap update to make sure that no obsolete commit is visible after an |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
279 # update |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
280 extensions.wrapcommand(commands.table, 'update', _update) |
1542
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
281 try: |
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
282 rebase = extensions.find('rebase') |
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
283 if rebase: |
1583
aaa65373a31b
inhibit: fix compatibility with changes in rebase
Laurent Charignon <lcharignon@fb.com>
parents:
1582
diff
changeset
|
284 if util.safehasattr(rebase, '_filterobsoleterevs'): |
aaa65373a31b
inhibit: fix compatibility with changes in rebase
Laurent Charignon <lcharignon@fb.com>
parents:
1582
diff
changeset
|
285 extensions.wrapfunction(rebase, |
aaa65373a31b
inhibit: fix compatibility with changes in rebase
Laurent Charignon <lcharignon@fb.com>
parents:
1582
diff
changeset
|
286 '_filterobsoleterevs', |
aaa65373a31b
inhibit: fix compatibility with changes in rebase
Laurent Charignon <lcharignon@fb.com>
parents:
1582
diff
changeset
|
287 _filterobsoleterevswrap) |
1588
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
288 extensions.wrapfunction(rebase, 'clearrebased', _clearrebased) |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
289 if util.safehasattr(rebase, '_computeobsoletenotrebased'): |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
290 extensions.wrapfunction(rebase, |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
291 '_computeobsoletenotrebased', |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
292 _computeobsoletenotrebased) |
983f2e4dbe5d
inhibit: fix compat with rebaseskipobsolete
Laurent Charignon <lcharignon@fb.com>
parents:
1583
diff
changeset
|
293 |
1542
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
294 except KeyError: |
333e056b3034
inhibit: make rebase see obsolescence even for visible nodes
Laurent Charignon <lcharignon@fb.com>
parents:
1541
diff
changeset
|
295 pass |
1560
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
296 # There are two ways to save bookmark changes during a transation, we |
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
297 # wrap both to add inhibition markers. |
59d47a9f633d
inhibit: backout 23a34dce5131 remove unused bookmark operation wrapping
Laurent Charignon <lcharignon@fb.com>
parents:
1551
diff
changeset
|
298 extensions.wrapfunction(bookmarks.bmstore, 'recordchange', _bookmarkchanged) |
1711
7a2e0629bdee
inhibit: protect agains dropped 'bmstore.write'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1590
diff
changeset
|
299 if getattr(bookmarks.bmstore, 'write', None) is not None:# mercurial < 3.9 |
7a2e0629bdee
inhibit: protect agains dropped 'bmstore.write'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1590
diff
changeset
|
300 extensions.wrapfunction(bookmarks.bmstore, 'write', _bookmarkchanged) |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
301 # Add bookmark -D option |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
302 entry = extensions.wrapcommand(commands.table, 'bookmark', _bookmark) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
303 entry[1].append(('D','prune',None, |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
304 _('delete the bookmark and prune the commits underneath'))) |
1224
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
305 |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
306 @command('debugobsinhibit', [], '') |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
307 def cmddebugobsinhibit(ui, repo, *revs): |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
308 """inhibit obsolescence markers effect on a set of revs""" |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
309 nodes = (repo[r].node() for r in scmutil.revrange(repo, revs)) |
859a854cedc3
add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
310 _inhibitmarkers(repo, nodes) |