annotate hgext/directaccess.py @ 1414:4198e2fad6ba

evolve: add an help topic about evolution The text is probably bad, but this have been laying around for quite sometime (with Mercurial core in mind) lets move forward and add this to evolve.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Sat, 20 Jun 2015 02:04:37 -0700
parents 7023a01b9007
children 2f8a4d496585
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
1 """ This extension provides direct access
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
2 It is the ability to refer and access hidden sha in commands provided that you
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
3 know their value.
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
4 For example hg log -r xxx where xxx is a commit has should work whether xxx is
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
5 hidden or not as we assume that the user knows what he is doing when referring
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
6 to xxx.
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
7 """
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
8 from mercurial import extensions
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
9 from mercurial import cmdutil
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
10 from mercurial import repoview
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
11 from mercurial import branchmap
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
12 from mercurial import revset
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
13 from mercurial import error
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
14 from mercurial import commands
1367
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
15 from mercurial import hg
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
16 from mercurial.i18n import _
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
17
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
18 cmdtable = {}
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
19 command = cmdutil.command(cmdtable)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
20
1367
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
21 # By default, all the commands have directaccess with warnings
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
22 # List of commands that have no directaccess and directaccess with no warning
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
23 directaccesslevel = [
1371
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
24 # Format:
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
25 # ('nowarning', 'evolve', 'prune'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
26 # means: no directaccess warning, for the command in evolve named prune
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
27 #
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
28 # ('error', None, 'serve'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
29 # means: no directaccess for the command in core named serve
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
30 #
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
31 # The list is ordered alphabetically by command names, starting with all
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
32 # the commands in core then all the commands in the extensions
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
33 #
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
34 # The general guideline is:
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
35 # - remove directaccess warnings for read only commands
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
36 # - no direct access for commands with consequences outside of the repo
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
37 # - leave directaccess warnings for all the other commands
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
38 #
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
39 ('nowarning', None, 'annotate'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
40 ('nowarning', None, 'archive'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
41 ('nowarning', None, 'bisect'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
42 ('nowarning', None, 'bookmarks'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
43 ('nowarning', None, 'bundle'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
44 ('nowarning', None, 'cat'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
45 ('nowarning', None, 'diff'),
1367
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
46 ('nowarning', None, 'export'),
1371
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
47 ('nowarning', None, 'identify'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
48 ('nowarning', None, 'incoming'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
49 ('nowarning', None, 'log'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
50 ('nowarning', None, 'manifest'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
51 ('error', None, 'outgoing'), # confusing if push errors and not outgoing
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
52 ('error', None, 'push'), # destructive
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
53 ('nowarning', None, 'revert'),
1368
c02cdb97ebfa directaccess: disable directaccess for push and serve
Laurent Charignon <lcharignon@fb.com>
parents: 1367
diff changeset
54 ('error', None, 'serve'),
1371
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
55 ('nowarning', None, 'tags'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
56 ('nowarning', None, 'unbundle'),
30d42079f4a2 directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents: 1368
diff changeset
57 ('nowarning', None, 'update'),
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
58 ]
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
59
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
60 def reposetup(ui, repo):
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
61 repo._explicitaccess = set()
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
62
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
63 def _computehidden(repo):
1363
2eaa2943f9f3 directaccess: use cached filteredrevs
Laurent Charignon <lcharignon@fb.com>
parents: 1360
diff changeset
64 hidden = repoview.filterrevs(repo, 'visible')
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
65 cl = repo.changelog
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
66 dynamic = hidden & repo._explicitaccess
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
67 if dynamic:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
68 blocked = cl.ancestors(dynamic, inclusive=True)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
69 hidden = frozenset(r for r in hidden if r not in blocked)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
70 return hidden
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
71
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
72 def setupdirectaccess():
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
73 """ Add two new filtername that behave like visible to provide direct access
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
74 and direct access with warning. Wraps the commands to setup direct access """
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
75 repoview.filtertable.update({'visible-directaccess-nowarn': _computehidden})
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
76 repoview.filtertable.update({'visible-directaccess-warn': _computehidden})
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
77 branchmap.subsettable['visible-directaccess-nowarn'] = 'visible'
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
78 branchmap.subsettable['visible-directaccess-warn'] = 'visible'
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
79
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
80 for warn, ext, cmd in directaccesslevel:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
81 try:
1347
b00c2fe51ac8 directaccess: don't crash when evolve is not loaded
Laurent Charignon <lcharignon@fb.com>
parents: 1339
diff changeset
82 cmdtable = extensions.find(ext).cmdtable if ext else commands.table
1367
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
83 wrapper = wrapwitherror if warn == 'error' else wrapwithoutwarning
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
84 extensions.wrapcommand(cmdtable, cmd, wrapper)
1347
b00c2fe51ac8 directaccess: don't crash when evolve is not loaded
Laurent Charignon <lcharignon@fb.com>
parents: 1339
diff changeset
85 except (error.UnknownCommand, KeyError):
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
86 pass
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
87
1367
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
88 def wrapwitherror(orig, ui, repo, *args, **kwargs):
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
89 if repo and repo.filtername == 'visible-directaccess-warn':
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
90 repo = repo.filtered('visible')
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
91 return orig(ui, repo, *args, **kwargs)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
92
1367
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
93 def wrapwithoutwarning(orig, ui, repo, *args, **kwargs):
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
94 if repo and repo.filtername == 'visible-directaccess-warn':
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
95 repo = repo.filtered("visible-directaccess-nowarn")
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
96 return orig(ui, repo, *args, **kwargs)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
97
1360
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
98 def uisetup(ui):
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
99 """ Change ordering of extensions to ensure that directaccess extsetup comes
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
100 after the one of the extensions in the loadsafter list """
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
101 loadsafter = ui.configlist('directaccess','loadsafter')
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
102 order = list(extensions._order)
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
103 directaccesidx = order.index('directaccess')
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
104
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
105 # The min idx for directaccess to load after all the extensions in loadafter
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
106 minidxdirectaccess = directaccesidx
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
107
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
108 for ext in loadsafter:
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
109 try:
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
110 minidxdirectaccess = max(minidxdirectaccess, order.index(ext))
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
111 except ValueError:
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
112 pass # extension not loaded
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
113
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
114 if minidxdirectaccess > directaccesidx:
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
115 order.insert(minidxdirectaccess + 1, 'directaccess')
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
116 order.remove('directaccess')
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
117 extensions._order = order
5c13945b32fc directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents: 1347
diff changeset
118
1367
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
119 def _repository(orig, *args, **kwargs):
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
120 """Make visible-directaccess-warn the default filter for new repos"""
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
121 repo = orig(*args, **kwargs)
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
122 return repo.filtered("visible-directaccess-warn")
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
123
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
124 def extsetup(ui):
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
125 extensions.wrapfunction(revset, 'posttreebuilthook', _posttreebuilthook)
1367
0c134ca37567 directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents: 1363
diff changeset
126 extensions.wrapfunction(hg, 'repository', _repository)
1339
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
127 setupdirectaccess()
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
128
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
129 def gethashsymbols(tree):
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
130 # Returns the list of symbols of the tree that look like hashes
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
131 # for example for the revset 3::abe3ff it will return ('abe3ff')
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
132 if not tree:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
133 return []
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
134
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
135 if len(tree) == 2 and tree[0] == "symbol":
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
136 try:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
137 int(tree[1])
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
138 return []
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
139 except ValueError as e:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
140 return [tree[1]]
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
141 elif len(tree) == 3:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
142 return gethashsymbols(tree[1]) + gethashsymbols(tree[2])
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
143 else:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
144 return []
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
145
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
146 def _posttreebuilthook(orig, tree, repo):
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
147 # This is use to enabled direct hash access
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
148 # We extract the symbols that look like hashes and add them to the
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
149 # explicitaccess set
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
150 orig(tree, repo)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
151 filternm = ""
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
152 if repo is not None:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
153 filternm = repo.filtername
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
154 if filternm is not None and filternm.startswith('visible-directaccess'):
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
155 prelength = len(repo._explicitaccess)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
156 accessbefore = set(repo._explicitaccess)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
157 repo.symbols = gethashsymbols(tree)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
158 cl = repo.unfiltered().changelog
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
159 for node in repo.symbols:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
160 try:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
161 node = cl._partialmatch(node)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
162 except error.LookupError:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
163 node = None
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
164 if node is not None:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
165 rev = cl.rev(node)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
166 if rev not in repo.changelog:
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
167 repo._explicitaccess.add(rev)
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
168 if prelength != len(repo._explicitaccess):
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
169 if repo.filtername != 'visible-directaccess-nowarn':
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
170 unhiddencommits = repo._explicitaccess - accessbefore
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
171 repo.ui.warn( _("Warning: accessing hidden changesets %s "
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
172 "for write operation\n") %
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
173 (",".join([str(repo.unfiltered()[l])
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
174 for l in unhiddencommits])))
0e2eb196923a inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff changeset
175 repo.invalidatevolatilesets()