Show More
@@ -28,10 +28,3 b' format.' | |||
|
28 | 28 | |
|
29 | 29 | narrowrepo.setnarrowpats() or narrowspec.save() need to make sure |
|
30 | 30 | they're holding the wlock. |
|
31 | ||
|
32 | Implement a simple version of the expandnarrow wireproto command for | |
|
33 | core. Having configurable shorthands for narrowspecs has been useful | |
|
34 | at Google (and sparse has a similar feature from Facebook), so it | |
|
35 | probably makes sense to implement the feature in core. (Google's | |
|
36 | handler is entirely custom to Google, with a custom format related to | |
|
37 | bazel's build language, so it's not in the narrowhg distribution.) |
@@ -62,25 +62,6 b' def setup():' | |||
|
62 | 62 | |
|
63 | 63 | extensions.wrapcommand(commands.table, 'archive', archivenarrowcmd) |
|
64 | 64 | |
|
65 | def expandpull(pullop, includepats, excludepats): | |
|
66 | if not narrowspec.needsexpansion(includepats): | |
|
67 | return includepats, excludepats | |
|
68 | ||
|
69 | heads = pullop.heads or pullop.rheads | |
|
70 | includepats, excludepats = pullop.remote.expandnarrow( | |
|
71 | includepats, excludepats, heads) | |
|
72 | pullop.repo.ui.debug('Expanded narrowspec to inc=%s, exc=%s\n' % ( | |
|
73 | includepats, excludepats)) | |
|
74 | ||
|
75 | includepats = set(includepats) | |
|
76 | excludepats = set(excludepats) | |
|
77 | ||
|
78 | # Nefarious remote could supply unsafe patterns. Validate them. | |
|
79 | narrowspec.validatepatterns(includepats) | |
|
80 | narrowspec.validatepatterns(excludepats) | |
|
81 | ||
|
82 | return includepats, excludepats | |
|
83 | ||
|
84 | 65 | def clonenarrowcmd(orig, ui, repo, *args, **opts): |
|
85 | 66 | """Wraps clone command, so 'hg clone' first wraps localrepo.clone().""" |
|
86 | 67 | opts = pycompat.byteskwargs(opts) |
@@ -116,10 +97,6 b' def clonenarrowcmd(orig, ui, repo, *args' | |||
|
116 | 97 | includepats = narrowspec.parsepatterns(opts['include']) |
|
117 | 98 | excludepats = narrowspec.parsepatterns(opts['exclude']) |
|
118 | 99 | |
|
119 | # If necessary, ask the server to expand the narrowspec. | |
|
120 | includepats, excludepats = expandpull( | |
|
121 | pullop, includepats, excludepats) | |
|
122 | ||
|
123 | 100 | if not includepats and excludepats: |
|
124 | 101 | # If nothing was included, we assume the user meant to include |
|
125 | 102 | # everything, except what they asked to exclude. |
@@ -292,10 +269,6 b' def _narrow(ui, repo, remote, commoninc,' | |||
|
292 | 269 | def _widen(ui, repo, remote, commoninc, newincludes, newexcludes): |
|
293 | 270 | newmatch = narrowspec.match(repo.root, newincludes, newexcludes) |
|
294 | 271 | |
|
295 | # TODO(martinvonz): Get expansion working with widening/narrowing. | |
|
296 | if narrowspec.needsexpansion(newincludes): | |
|
297 | raise error.Abort('Expansion not yet supported on pull') | |
|
298 | ||
|
299 | 272 | def pullbundle2extraprepare_widen(orig, pullop, kwargs): |
|
300 | 273 | orig(pullop, kwargs) |
|
301 | 274 | # The old{in,ex}cludepats have already been set by orig() |
@@ -402,9 +375,6 b' def trackedcmd(ui, repo, remotepath=None' | |||
|
402 | 375 | opts['addinclude'].extend(includepats) |
|
403 | 376 | opts['addexclude'].extend(excludepats) |
|
404 | 377 | |
|
405 | if narrowspec.needsexpansion(opts['addinclude'] + opts['addexclude']): | |
|
406 | raise error.Abort('Expansion not yet supported on widen/narrow') | |
|
407 | ||
|
408 | 378 | addedincludes = narrowspec.parsepatterns(opts['addinclude']) |
|
409 | 379 | removedincludes = narrowspec.parsepatterns(opts['removeinclude']) |
|
410 | 380 | addedexcludes = narrowspec.parsepatterns(opts['addexclude']) |
@@ -7,13 +7,9 b'' | |||
|
7 | 7 | |
|
8 | 8 | from __future__ import absolute_import |
|
9 | 9 | |
|
10 | from mercurial.i18n import _ | |
|
11 | 10 | from mercurial import ( |
|
12 | error, | |
|
13 | 11 | extensions, |
|
14 | 12 | hg, |
|
15 | narrowspec, | |
|
16 | node, | |
|
17 | 13 | wireprotov1server, |
|
18 | 14 | ) |
|
19 | 15 | |
@@ -21,27 +17,6 b" NARROWCAP = 'exp-narrow-1'" | |||
|
21 | 17 | ELLIPSESCAP = 'exp-ellipses-1' |
|
22 | 18 | |
|
23 | 19 | def uisetup(): |
|
24 | def peersetup(ui, peer): | |
|
25 | # We must set up the expansion before reposetup below, since it's used | |
|
26 | # at clone time before we have a repo. | |
|
27 | class expandingpeer(peer.__class__): | |
|
28 | def expandnarrow(self, narrow_include, narrow_exclude, nodes): | |
|
29 | ui.status(_("expanding narrowspec\n")) | |
|
30 | if not self.capable('exp-expandnarrow'): | |
|
31 | raise error.Abort( | |
|
32 | 'peer does not support expanding narrowspecs') | |
|
33 | ||
|
34 | hex_nodes = (node.hex(n) for n in nodes) | |
|
35 | new_narrowspec = self._call( | |
|
36 | 'expandnarrow', | |
|
37 | includepats=','.join(narrow_include), | |
|
38 | excludepats=','.join(narrow_exclude), | |
|
39 | nodes=','.join(hex_nodes)) | |
|
40 | ||
|
41 | return narrowspec.parseserverpatterns(new_narrowspec) | |
|
42 | peer.__class__ = expandingpeer | |
|
43 | hg.wirepeersetupfuncs.append(peersetup) | |
|
44 | ||
|
45 | 20 | extensions.wrapfunction(wireprotov1server, '_capabilities', addnarrowcap) |
|
46 | 21 | |
|
47 | 22 | def addnarrowcap(orig, repo, proto): |
@@ -146,9 +146,6 b' def match(root, include=None, exclude=No' | |||
|
146 | 146 | return matchmod.match(root, '', [], include=include or [], |
|
147 | 147 | exclude=exclude or []) |
|
148 | 148 | |
|
149 | def needsexpansion(includes): | |
|
150 | return [i for i in includes if i.startswith('include:')] | |
|
151 | ||
|
152 | 149 | def load(repo): |
|
153 | 150 | try: |
|
154 | 151 | spec = repo.svfs.read(FILENAME) |
General Comments 0
You need to be logged in to leave comments.
Login now