annotate hgext/inhibit.py @ 1332:1ed337c7f061

inhibit: config to enable only direct access Inhibit provides several features to hide instability and direct access. We want to use direct access in evolve without hiding the instability. This patch adds a config flag to enable only direct access in inhibit, when this config flag is not set or set to false we enable all the features of inhibit that don't concern direct access.
author Laurent Charignon <lcharignon@fb.com>
date Thu, 30 Apr 2015 17:37:11 -0700
parents 8fa74845eb1f
children b8f880d4171d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
1 """Reduce the changesets evolution feature scope for early and noob friendly UI
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
2
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
3 The full scale changeset evolution have some massive bleeding edge and it is
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
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
5 situation. In order to get some of the benefit sooner, this extension is
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
6 disabling some of the less polished aspect of evolution. It should gradually
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
7 get thinner and thinner as changeset evolution will get more polished. This
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
8 extension is only recommended for large scale organisations. Individual user
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
9 should probably stick on using Evolution in its current state, understand its
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
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
12 The first feature provided by this extension is the ability to "inhibit"
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
13 obsolescence markers. Obsolete revision can be cheaply brought back to life
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
14 that way. However as the inhibitor are not fitting in an append only model,
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
15 this is incompatible with sharing mutable history.
1232
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
16
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
17 The second feature is called direct access. It is the ability to refer and
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
18 access hidden sha in commands provided that you know their value.
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
19 For example hg log -r XXX where XXX is a commit has should work whether XXX is
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
20 hidden or not as we assume that the user knows what he is doing when referring
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
21 to XXX.
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
22 """
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
23 from mercurial import localrepo
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
24 from mercurial import obsolete
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
25 from mercurial import extensions
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
26 from mercurial import cmdutil
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
27 from mercurial import scmutil
1232
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
28 from mercurial import repoview
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
29 from mercurial import revset
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
30 from mercurial import error
1233
63ee05dd557a inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents: 1232
diff changeset
31 from mercurial import commands
1297
51ec3610968c inhibit: fix devel warning
Laurent Charignon <lcharignon@fb.com>
parents: 1293
diff changeset
32 from mercurial import lock as lockmod
1234
c15d4677f2ba inhibit: ensure that no obsolete changesets are visible after a bookmark change
Laurent Charignon <lcharignon@fb.com>
parents: 1233
diff changeset
33 from mercurial import bookmarks
1303
508f9911b042 inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents: 1297
diff changeset
34 from mercurial import lock as lockmod
1241
3625d006e81b inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents: 1240
diff changeset
35 from mercurial.i18n import _
1224
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 cmdtable = {}
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
38 command = cmdutil.command(cmdtable)
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
39
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
40 def reposetup(ui, repo):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
41
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
42 class obsinhibitedrepo(repo.__class__):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
43
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
44 @localrepo.storecache('obsinhibit')
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
45 def _obsinhibit(self):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
46 # 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
47 obsinhibit = set()
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
48 raw = self.sopener.tryread('obsinhibit')
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
49 for i in xrange(0, len(raw), 20):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
50 obsinhibit.add(raw[i:i+20])
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
51 return obsinhibit
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
52
1292
62229e7451f7 inhibit: wrap repo.commit to inhibit nodes
Durham Goode <durham@fb.com>
parents: 1247
diff changeset
53 def commit(self, *args, **kwargs):
62229e7451f7 inhibit: wrap repo.commit to inhibit nodes
Durham Goode <durham@fb.com>
parents: 1247
diff changeset
54 newnode = super(obsinhibitedrepo, self).commit(*args, **kwargs)
62229e7451f7 inhibit: wrap repo.commit to inhibit nodes
Durham Goode <durham@fb.com>
parents: 1247
diff changeset
55 _inhibitmarkers(repo, [newnode])
62229e7451f7 inhibit: wrap repo.commit to inhibit nodes
Durham Goode <durham@fb.com>
parents: 1247
diff changeset
56 return newnode
62229e7451f7 inhibit: wrap repo.commit to inhibit nodes
Durham Goode <durham@fb.com>
parents: 1247
diff changeset
57
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
58 repo.__class__ = obsinhibitedrepo
1232
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
59 repo._explicitaccess = set()
1332
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
60 if not ui.configbool('inhibit', 'onlydirectaccess', False):
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
61 # Wrapping this to inhibit obsolete revs resulting from a transaction
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
62 extensions.wrapfunction(localrepo.localrepository,
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
63 'transaction', transactioncallback)
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
64
1233
63ee05dd557a inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents: 1232
diff changeset
65
63ee05dd557a inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents: 1232
diff changeset
66 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
67 """
63ee05dd557a inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents: 1232
diff changeset
68 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
69 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
70 commit to be obsolete.
63ee05dd557a inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents: 1232
diff changeset
71 """
1303
508f9911b042 inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents: 1297
diff changeset
72 wlock = None
508f9911b042 inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents: 1297
diff changeset
73 try:
508f9911b042 inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents: 1297
diff changeset
74 # Evolve is running a hook on lock release to display a warning message
508f9911b042 inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents: 1297
diff changeset
75 # 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
76 # 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
77 # 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
78 wlock = repo.wlock()
508f9911b042 inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents: 1297
diff changeset
79 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
80 newhead = repo['.'].node()
508f9911b042 inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents: 1297
diff changeset
81 _inhibitmarkers(repo, [newhead])
508f9911b042 inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents: 1297
diff changeset
82 return res
508f9911b042 inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents: 1297
diff changeset
83 finally:
508f9911b042 inhibit: updating to a obsolete commit prints warning message
Laurent Charignon <lcharignon@fb.com>
parents: 1297
diff changeset
84 lockmod.release(wlock)
1233
63ee05dd557a inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents: 1232
diff changeset
85
1234
c15d4677f2ba inhibit: ensure that no obsolete changesets are visible after a bookmark change
Laurent Charignon <lcharignon@fb.com>
parents: 1233
diff changeset
86 def _bookmarkchanged(orig, bkmstoreinst, *args, **kwargs):
c15d4677f2ba inhibit: ensure that no obsolete changesets are visible after a bookmark change
Laurent Charignon <lcharignon@fb.com>
parents: 1233
diff changeset
87 """ Add inhibition markers to every obsolete bookmarks """
c15d4677f2ba inhibit: ensure that no obsolete changesets are visible after a bookmark change
Laurent Charignon <lcharignon@fb.com>
parents: 1233
diff changeset
88 repo = bkmstoreinst._repo
c15d4677f2ba inhibit: ensure that no obsolete changesets are visible after a bookmark change
Laurent Charignon <lcharignon@fb.com>
parents: 1233
diff changeset
89 bkmstorenodes = [repo[v].node() for v in bkmstoreinst.values()]
c15d4677f2ba inhibit: ensure that no obsolete changesets are visible after a bookmark change
Laurent Charignon <lcharignon@fb.com>
parents: 1233
diff changeset
90 _inhibitmarkers(repo, bkmstorenodes)
c15d4677f2ba inhibit: ensure that no obsolete changesets are visible after a bookmark change
Laurent Charignon <lcharignon@fb.com>
parents: 1233
diff changeset
91 return orig(bkmstoreinst, *args, **kwargs)
1233
63ee05dd557a inhibit: ensure no visible changesets are obsolete after an update
Laurent Charignon <lcharignon@fb.com>
parents: 1232
diff changeset
92
1241
3625d006e81b inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents: 1240
diff changeset
93 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
94 """ 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
95 haspruneopt = opts.get('prune', False)
3625d006e81b inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents: 1240
diff changeset
96 if not haspruneopt:
3625d006e81b inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents: 1240
diff changeset
97 return orig(ui, repo, *bookmarks, **opts)
1293
dc5528e04c06 inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents: 1292
diff changeset
98
1241
3625d006e81b inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents: 1240
diff changeset
99 # Call prune -B
3625d006e81b inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents: 1240
diff changeset
100 evolve = extensions.find('evolve')
1293
dc5528e04c06 inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents: 1292
diff changeset
101 optsdict = {
dc5528e04c06 inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents: 1292
diff changeset
102 'new': [],
dc5528e04c06 inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents: 1292
diff changeset
103 'succ': [],
dc5528e04c06 inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents: 1292
diff changeset
104 'rev': [],
dc5528e04c06 inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents: 1292
diff changeset
105 'bookmark': bookmarks[0],
dc5528e04c06 inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents: 1292
diff changeset
106 'keep': None,
dc5528e04c06 inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents: 1292
diff changeset
107 'biject': False,
dc5528e04c06 inhibit: remove book -D dependency on cmdprune
Durham Goode <durham@fb.com>
parents: 1292
diff changeset
108 }
1241
3625d006e81b inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents: 1240
diff changeset
109 evolve.cmdprune(ui, repo, **optsdict)
3625d006e81b inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents: 1240
diff changeset
110
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
111 # obsolescence inhibitor
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
112 ########################
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 def _schedulewrite(tr, obsinhibit):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
115 """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
116 def writer(fp):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
117 """Serialize the inhibited list to disk.
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
118 """
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
119 raw = ''.join(obsinhibit)
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
120 fp.write(raw)
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
121 tr.addfilegenerator('obsinhibit', ('obsinhibit',), writer)
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
122 tr.hookargs['obs_inbihited'] = '1'
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
123
1225
577f5340be6f inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1224
diff changeset
124 def _filterpublic(repo, nodes):
577f5340be6f inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1224
diff changeset
125 """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
126
577f5340be6f inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1224
diff changeset
127 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
128 getrev = repo.changelog.nodemap.get
577f5340be6f inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1224
diff changeset
129 getphase = repo._phasecache.phase
577f5340be6f inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1224
diff changeset
130 return (n for n in repo._obsinhibit if getphase(repo, getrev(n)))
577f5340be6f inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1224
diff changeset
131
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
132 def _inhibitmarkers(repo, nodes):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
133 """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
134
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
135 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
136 obsolete revision only are created.
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
137 """
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
138 newinhibit = repo.set('::%ln and obsolete()', nodes)
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
139 if newinhibit:
1297
51ec3610968c inhibit: fix devel warning
Laurent Charignon <lcharignon@fb.com>
parents: 1293
diff changeset
140 lock = tr = None
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
141 try:
1297
51ec3610968c inhibit: fix devel warning
Laurent Charignon <lcharignon@fb.com>
parents: 1293
diff changeset
142 lock = repo.lock()
51ec3610968c inhibit: fix devel warning
Laurent Charignon <lcharignon@fb.com>
parents: 1293
diff changeset
143 tr = repo.transaction('obsinhibit')
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
144 repo._obsinhibit.update(c.node() for c in newinhibit)
1225
577f5340be6f inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1224
diff changeset
145 _schedulewrite(tr, _filterpublic(repo, repo._obsinhibit))
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
146 repo.invalidatevolatilesets()
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
147 tr.close()
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
148 finally:
1297
51ec3610968c inhibit: fix devel warning
Laurent Charignon <lcharignon@fb.com>
parents: 1293
diff changeset
149 lockmod.release(tr, lock)
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
150
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
151 def _deinhibitmarkers(repo, nodes):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
152 """lift obsolescence inhibition on a set of nodes
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
153
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
154 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
155 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
156 """
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
157 deinhibited = repo._obsinhibit & set(nodes)
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
158 if deinhibited:
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
159 tr = repo.transaction('obsinhibit')
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
160 try:
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
161 repo._obsinhibit -= deinhibited
1225
577f5340be6f inhibit: Add some inhibition clearing mechanism
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1224
diff changeset
162 _schedulewrite(tr, _filterpublic(repo, repo._obsinhibit))
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
163 repo.invalidatevolatilesets()
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
164 tr.close()
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
165 finally:
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
166 tr.release()
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
167
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
168 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
169 """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
170 # wrapping transactio to unify the one in each function
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
171 tr = repo.transaction('add-obsolescence-marker')
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
172 try:
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
173 orig(repo, relations, flag, date, metadata)
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
174 precs = (r[0].node() for r in relations)
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
175 _deinhibitmarkers(repo, precs)
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
176 tr.close()
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
177 finally:
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
178 tr.release()
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
179
1240
e1347ce2f954 inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents: 1234
diff changeset
180
e1347ce2f954 inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents: 1234
diff changeset
181 def transactioncallback(orig, repo, *args, **kwargs):
e1347ce2f954 inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents: 1234
diff changeset
182 """ 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
183 def inhibitposttransaction(transaction):
e1347ce2f954 inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents: 1234
diff changeset
184 # 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
185 # obsolete commit to inhibit them
e1347ce2f954 inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents: 1234
diff changeset
186 visibleobsolete = repo.revs('(not hidden()) and obsolete()')
1321
8fa74845eb1f inhibit: don't inhibit pinned commits during rebase
Durham Goode <durham@fb.com>
parents: 1303
diff changeset
187 ignoreset = set(getattr(repo, '_rebaseset', []))
8fa74845eb1f inhibit: don't inhibit pinned commits during rebase
Durham Goode <durham@fb.com>
parents: 1303
diff changeset
188 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
189 if visibleobsolete:
e1347ce2f954 inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents: 1234
diff changeset
190 _inhibitmarkers(repo, [repo[r].node() for r in visibleobsolete])
e1347ce2f954 inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents: 1234
diff changeset
191 transaction = orig(repo, *args, **kwargs)
e1347ce2f954 inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents: 1234
diff changeset
192 transaction.addpostclose('inhibitposttransaction', inhibitposttransaction)
e1347ce2f954 inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents: 1234
diff changeset
193 return transaction
e1347ce2f954 inhibit: don't leave any obsolete commit visible after closing transaction
Laurent Charignon <lcharignon@fb.com>
parents: 1234
diff changeset
194
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
195 def extsetup(ui):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
196 # lets wrap the computation of the obsolete set
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
197 # We apply inhibition there
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
198 obsfunc = obsolete.cachefuncs['obsolete']
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
199 def _computeobsoleteset(repo):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
200 """remove any inhibited nodes from the obsolete set
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
201
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
202 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
203 obs = obsfunc(repo)
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
204 getrev = repo.changelog.nodemap.get
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
205 for n in repo._obsinhibit:
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
206 obs.discard(getrev(n))
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
207 return obs
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
208 obsolete.cachefuncs['obsolete'] = _computeobsoleteset
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
209 # 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
210 extensions.wrapfunction(obsolete, 'createmarkers', _createmarkers)
1232
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
211 extensions.wrapfunction(repoview, '_getdynamicblockers', _accessvisible)
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
212 extensions.wrapfunction(revset, 'posttreebuilthook', _posttreebuilthook)
1332
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
213 if not ui.configbool('inhibit', 'onlydirectaccess', False):
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
214 # drop divergence computation since it is incompatible with "light revive"
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
215 obsolete.cachefuncs['divergent'] = lambda repo: set()
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
216 # drop bumped computation since it is incompatible with "light revive"
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
217 obsolete.cachefuncs['bumped'] = lambda repo: set()
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
218 # wrap update to make sure that no obsolete commit is visible after an
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
219 # update
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
220 extensions.wrapcommand(commands.table, 'update', _update)
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
221 # There are two ways to save bookmark changes during a transation, we
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
222 # wrap both to add inhibition markers.
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
223 extensions.wrapfunction(bookmarks.bmstore, 'recordchange', _bookmarkchanged)
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
224 extensions.wrapfunction(bookmarks.bmstore, 'write', _bookmarkchanged)
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
225 # Add bookmark -D option
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
226 entry = extensions.wrapcommand(commands.table, 'bookmark', _bookmark)
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
227 entry[1].append(('D','prune',None,
1ed337c7f061 inhibit: config to enable only direct access
Laurent Charignon <lcharignon@fb.com>
parents: 1321
diff changeset
228 _('delete the bookmark and prune the commits underneath')))
1241
3625d006e81b inhibit: Add -D option to the bookmark command
Laurent Charignon <lcharignon@fb.com>
parents: 1240
diff changeset
229
1234
c15d4677f2ba inhibit: ensure that no obsolete changesets are visible after a bookmark change
Laurent Charignon <lcharignon@fb.com>
parents: 1233
diff changeset
230
1232
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
231
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
232 def gethashsymbols(tree):
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
233 # Returns the list of symbols of the tree that look like hashes
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
234 # for example for the revset 3::abe3ff it will return ('abe3ff')
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
235 if not tree:
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
236 return []
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
237
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
238 if len(tree) == 2 and tree[0] == "symbol":
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
239 try:
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
240 int(tree[1])
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
241 return []
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
242 except ValueError as e:
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
243 return [tree[1]]
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
244 elif len(tree) == 3:
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
245 return gethashsymbols(tree[1]) + gethashsymbols(tree[2])
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
246 else:
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
247 return []
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
248
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
249 def _posttreebuilthook(orig, tree, repo):
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
250 # This is use to enabled direct hash access
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
251 # We extract the symbols that look like hashes and add them to the
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
252 # explicitaccess set
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
253 orig(tree, repo)
1247
f96dad835054 inhibit: explicitly test for None
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1241
diff changeset
254 if repo is not None and repo.filtername == 'visible':
1232
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
255 prelength = len(repo._explicitaccess)
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
256 repo.symbols = gethashsymbols(tree)
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
257 cl = repo.unfiltered().changelog
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
258 for node in repo.symbols:
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
259 try:
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
260 node = cl._partialmatch(node)
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
261 except error.LookupError:
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
262 node = None
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
263 if node is not None:
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
264 rev = cl.rev(node)
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
265 if rev not in repo.changelog:
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
266 repo._explicitaccess.add(rev)
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
267 if prelength != len(repo._explicitaccess):
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
268 repo.invalidatevolatilesets()
1224
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
269
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
270 @command('debugobsinhibit', [], '')
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
271 def cmddebugobsinhibit(ui, repo, *revs):
859a854cedc3 add a 'inhibit' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
272 """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
273 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
274 _inhibitmarkers(repo, nodes)
1232
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
275
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
276 # ensure revision accessed by hash are visible
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
277 ###############################################
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
278
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
279 def _accessvisible(orig, repo):
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
280 """ensure accessed revs stay visible"""
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
281 blockers = orig(repo)
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
282 blockers.update(getattr(repo, '_explicitaccess', ()))
37c00aeb4762 inhibit: enable direct access from parsing the revset tree
Laurent Charignon <lcharignon@fb.com>
parents: 1225
diff changeset
283 return blockers