Mercurial > evolve
annotate hgext3rd/evolve/hack/directaccess.py @ 2893:0938f3a09a1e
directaccess: fix with tree without order
1b28525e6698 removes order from tree, changing the indexes in gethashsymbols.
Fix that
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Thu, 31 Aug 2017 17:00:09 +0200 |
parents | 2b53a2a21bbb |
children |
rev | line source |
---|---|
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
1 """ This extension provides direct access |
1552
ebebff25b891
check-code: make directaccess.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1537
diff
changeset
|
2 It is the ability to refer and access hidden sha in commands provided that you |
1339
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 repoview |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
10 from mercurial import branchmap |
2464
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2032
diff
changeset
|
11 from mercurial import registrar |
1339
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 |
1489
2f8a4d496585
directaccess: don't try to partialmatch things that aren't hashes
Siddharth Agarwal <sid0@fb.com>
parents:
1372
diff
changeset
|
16 from mercurial import util |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
17 from mercurial.i18n import _ |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
18 |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
19 cmdtable = {} |
2464
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2032
diff
changeset
|
20 |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2032
diff
changeset
|
21 if util.safehasattr(registrar, 'command'): |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2032
diff
changeset
|
22 command = registrar.command(cmdtable) |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2032
diff
changeset
|
23 else: # compat with hg < 4.3 |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2032
diff
changeset
|
24 from mercurial import cmdutil |
2b53a2a21bbb
deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2032
diff
changeset
|
25 command = cmdutil.command(cmdtable) |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
26 |
1367
0c134ca37567
directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents:
1363
diff
changeset
|
27 # 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
|
28 # 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
|
29 directaccesslevel = [ |
1371
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
30 # Format: |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
31 # ('nowarning', 'evolve', 'prune'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
32 # 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
|
33 # |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
34 # ('error', None, 'serve'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
35 # 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
|
36 # |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
37 # 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
|
38 # 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
|
39 # |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
40 # The general guideline is: |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
41 # - 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
|
42 # - 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
|
43 # - 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
|
44 # |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
45 ('nowarning', None, 'annotate'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
46 ('nowarning', None, 'archive'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
47 ('nowarning', None, 'bisect'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
48 ('nowarning', None, 'bookmarks'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
49 ('nowarning', None, 'bundle'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
50 ('nowarning', None, 'cat'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
51 ('nowarning', None, 'diff'), |
1367
0c134ca37567
directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents:
1363
diff
changeset
|
52 ('nowarning', None, 'export'), |
1371
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
53 ('nowarning', None, 'identify'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
54 ('nowarning', None, 'incoming'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
55 ('nowarning', None, 'log'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
56 ('nowarning', None, 'manifest'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
57 ('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
|
58 ('error', None, 'push'), # destructive |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
59 ('nowarning', None, 'revert'), |
1368
c02cdb97ebfa
directaccess: disable directaccess for push and serve
Laurent Charignon <lcharignon@fb.com>
parents:
1367
diff
changeset
|
60 ('error', None, 'serve'), |
1371
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
61 ('nowarning', None, 'tags'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
62 ('nowarning', None, 'unbundle'), |
30d42079f4a2
directaccess: add some commands to the directaccess list
Laurent Charignon <lcharignon@fb.com>
parents:
1368
diff
changeset
|
63 ('nowarning', None, 'update'), |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
64 ] |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
65 |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
66 def reposetup(ui, repo): |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
67 repo._explicitaccess = set() |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
68 |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
69 def _computehidden(repo): |
1363
2eaa2943f9f3
directaccess: use cached filteredrevs
Laurent Charignon <lcharignon@fb.com>
parents:
1360
diff
changeset
|
70 hidden = repoview.filterrevs(repo, 'visible') |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
71 cl = repo.changelog |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
72 dynamic = hidden & repo._explicitaccess |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
73 if dynamic: |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
74 blocked = cl.ancestors(dynamic, inclusive=True) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
75 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
|
76 return hidden |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
77 |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
78 def setupdirectaccess(): |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
79 """ Add two new filtername that behave like visible to provide direct access |
1552
ebebff25b891
check-code: make directaccess.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1537
diff
changeset
|
80 and direct access with warning. Wraps the commands to setup direct access |
ebebff25b891
check-code: make directaccess.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1537
diff
changeset
|
81 """ |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
82 repoview.filtertable.update({'visible-directaccess-nowarn': _computehidden}) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
83 repoview.filtertable.update({'visible-directaccess-warn': _computehidden}) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
84 branchmap.subsettable['visible-directaccess-nowarn'] = 'visible' |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
85 branchmap.subsettable['visible-directaccess-warn'] = 'visible' |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
86 |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
87 for warn, ext, cmd in directaccesslevel: |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
88 try: |
1347
b00c2fe51ac8
directaccess: don't crash when evolve is not loaded
Laurent Charignon <lcharignon@fb.com>
parents:
1339
diff
changeset
|
89 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
|
90 wrapper = wrapwitherror if warn == 'error' else wrapwithoutwarning |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
91 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
|
92 except (error.UnknownCommand, KeyError): |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
93 pass |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
94 |
1367
0c134ca37567
directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents:
1363
diff
changeset
|
95 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
|
96 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
|
97 repo = repo.filtered('visible') |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
98 return orig(ui, repo, *args, **kwargs) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
99 |
1367
0c134ca37567
directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents:
1363
diff
changeset
|
100 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
|
101 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
|
102 repo = repo.filtered("visible-directaccess-nowarn") |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
103 return orig(ui, repo, *args, **kwargs) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
104 |
1360
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
105 def uisetup(ui): |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
106 """ 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
|
107 after the one of the extensions in the loadsafter list """ |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1807
diff
changeset
|
108 loadsafter = ui.configlist('directaccess', 'loadsafter') |
1360
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
109 order = list(extensions._order) |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
110 directaccesidx = order.index('directaccess') |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
111 |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
112 # 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
|
113 minidxdirectaccess = directaccesidx |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
114 |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
115 for ext in loadsafter: |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
116 try: |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
117 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
|
118 except ValueError: |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
119 pass # extension not loaded |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
120 |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
121 if minidxdirectaccess > directaccesidx: |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
122 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
|
123 order.remove('directaccess') |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
124 extensions._order = order |
5c13945b32fc
directaccess: add mechanism to load directaccess after some other extensions
Laurent Charignon <lcharignon@fb.com>
parents:
1347
diff
changeset
|
125 |
1367
0c134ca37567
directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents:
1363
diff
changeset
|
126 def _repository(orig, *args, **kwargs): |
0c134ca37567
directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents:
1363
diff
changeset
|
127 """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
|
128 repo = orig(*args, **kwargs) |
0c134ca37567
directaccess: change rule from opt-in to opt-out
Laurent Charignon <lcharignon@fb.com>
parents:
1363
diff
changeset
|
129 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
|
130 |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
131 def extsetup(ui): |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
132 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
|
133 extensions.wrapfunction(hg, 'repository', _repository) |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
134 setupdirectaccess() |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
135 |
1489
2f8a4d496585
directaccess: don't try to partialmatch things that aren't hashes
Siddharth Agarwal <sid0@fb.com>
parents:
1372
diff
changeset
|
136 hashre = util.re.compile('[0-9a-fA-F]{1,40}') |
2f8a4d496585
directaccess: don't try to partialmatch things that aren't hashes
Siddharth Agarwal <sid0@fb.com>
parents:
1372
diff
changeset
|
137 |
1492
f869033391b9
directaccesss: also look for symbol into list
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1489
diff
changeset
|
138 _listtuple = ('symbol', '_list') |
f869033391b9
directaccesss: also look for symbol into list
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1489
diff
changeset
|
139 |
1714
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
140 def _ishashsymbol(symbol, maxrev): |
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
141 # Returns true if symbol looks like a hash |
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
142 try: |
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
143 n = int(symbol) |
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
144 if n <= maxrev: |
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
145 # It's a rev number |
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
146 return False |
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
147 except ValueError: |
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
148 pass |
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
149 return hashre.match(symbol) |
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
150 |
1537
50e683d9835e
directaccess: fix case of shortened hash containing only digits
Laurent Charignon <lcharignon@fb.com>
parents:
1508
diff
changeset
|
151 def gethashsymbols(tree, maxrev): |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
152 # 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
|
153 # 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
|
154 if not tree: |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
155 return [] |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
156 |
1714
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
157 results = [] |
2893
0938f3a09a1e
directaccess: fix with tree without order
Boris Feld <boris.feld@octobus.net>
parents:
2464
diff
changeset
|
158 if len(tree) in (2, 3) and tree[0] == "symbol": |
1714
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
159 results.append(tree[1]) |
1492
f869033391b9
directaccesss: also look for symbol into list
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1489
diff
changeset
|
160 elif tree[0] == "func" and tree[1] == _listtuple: |
f869033391b9
directaccesss: also look for symbol into list
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1489
diff
changeset
|
161 # the optimiser will group sequence of hash request |
1714
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
162 results += tree[2][1].split('\0') |
2893
0938f3a09a1e
directaccess: fix with tree without order
Boris Feld <boris.feld@octobus.net>
parents:
2464
diff
changeset
|
163 elif len(tree) >= 2: |
1508
8dfb88ca0c08
directaccess: inspect trees of len() > 3
Durham Goode <durham@fb.com>
parents:
1492
diff
changeset
|
164 for subtree in tree[1:]: |
1537
50e683d9835e
directaccess: fix case of shortened hash containing only digits
Laurent Charignon <lcharignon@fb.com>
parents:
1508
diff
changeset
|
165 results += gethashsymbols(subtree, maxrev) |
1714
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
166 # return directly, we don't need to filter symbols again |
1508
8dfb88ca0c08
directaccess: inspect trees of len() > 3
Durham Goode <durham@fb.com>
parents:
1492
diff
changeset
|
167 return results |
1714
4565b046b850
directaccess: make sure gethashsymbols does not return rev numbers
Jun Wu <quark@fb.com>
parents:
1552
diff
changeset
|
168 return [s for s in results if _ishashsymbol(s, maxrev)] |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
169 |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
170 def _posttreebuilthook(orig, tree, repo): |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
171 # This is use to enabled direct hash access |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
172 # 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
|
173 # explicitaccess set |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
174 orig(tree, repo) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
175 filternm = "" |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
176 if repo is not None: |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
177 filternm = repo.filtername |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
178 if filternm is not None and filternm.startswith('visible-directaccess'): |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
179 prelength = len(repo._explicitaccess) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
180 accessbefore = set(repo._explicitaccess) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
181 cl = repo.unfiltered().changelog |
1537
50e683d9835e
directaccess: fix case of shortened hash containing only digits
Laurent Charignon <lcharignon@fb.com>
parents:
1508
diff
changeset
|
182 repo.symbols = gethashsymbols(tree, len(cl)) |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
183 for node in repo.symbols: |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
184 try: |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
185 node = cl._partialmatch(node) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
186 except error.LookupError: |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
187 node = None |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
188 if node is not None: |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
189 rev = cl.rev(node) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
190 if rev not in repo.changelog: |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
191 repo._explicitaccess.add(rev) |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
192 if prelength != len(repo._explicitaccess): |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
193 if repo.filtername != 'visible-directaccess-nowarn': |
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
194 unhiddencommits = repo._explicitaccess - accessbefore |
1552
ebebff25b891
check-code: make directaccess.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1537
diff
changeset
|
195 repo.ui.warn(_("Warning: accessing hidden changesets %s " |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1807
diff
changeset
|
196 "for write operation\n") % |
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1807
diff
changeset
|
197 (",".join([str(repo.unfiltered()[l]) |
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1807
diff
changeset
|
198 for l in unhiddencommits]))) |
1339
0e2eb196923a
inhibit: create direct access extension
Laurent Charignon <lcharignon@fb.com>
parents:
diff
changeset
|
199 repo.invalidatevolatilesets() |