Mercurial > public > mercurial-scm > hg
comparison mercurial/hg.py @ 37717:0664be4f0c1f
hg: pass command intents to repo/peer creation (API)
The previous commit introduced a mechanism to declare command intents.
This commit changes the repository and peer instantiation mechanism
so the intents are passed down to each repository and peer type so
they can do with them whatever they please.
Currently, nobody does anything with any intent.
Differential Revision: https://phab.mercurial-scm.org/D3377
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 14 Apr 2018 09:57:44 -0700 |
parents | ce8828217369 |
children | 63e6f5ae84bc |
comparison
equal
deleted
inserted
replaced
37716:dfc51a482031 | 37717:0664be4f0c1f |
---|---|
155 return url.open(ui, path) | 155 return url.open(ui, path) |
156 | 156 |
157 # a list of (ui, repo) functions called for wire peer initialization | 157 # a list of (ui, repo) functions called for wire peer initialization |
158 wirepeersetupfuncs = [] | 158 wirepeersetupfuncs = [] |
159 | 159 |
160 def _peerorrepo(ui, path, create=False, presetupfuncs=None): | 160 def _peerorrepo(ui, path, create=False, presetupfuncs=None, |
161 intents=None): | |
161 """return a repository object for the specified path""" | 162 """return a repository object for the specified path""" |
162 obj = _peerlookup(path).instance(ui, path, create) | 163 obj = _peerlookup(path).instance(ui, path, create, intents=intents) |
163 ui = getattr(obj, "ui", ui) | 164 ui = getattr(obj, "ui", ui) |
164 for f in presetupfuncs or []: | 165 for f in presetupfuncs or []: |
165 f(ui, obj) | 166 f(ui, obj) |
166 for name, module in extensions.extensions(ui): | 167 for name, module in extensions.extensions(ui): |
167 hook = getattr(module, 'reposetup', None) | 168 hook = getattr(module, 'reposetup', None) |
170 if not obj.local(): | 171 if not obj.local(): |
171 for f in wirepeersetupfuncs: | 172 for f in wirepeersetupfuncs: |
172 f(ui, obj) | 173 f(ui, obj) |
173 return obj | 174 return obj |
174 | 175 |
175 def repository(ui, path='', create=False, presetupfuncs=None): | 176 def repository(ui, path='', create=False, presetupfuncs=None, intents=None): |
176 """return a repository object for the specified path""" | 177 """return a repository object for the specified path""" |
177 peer = _peerorrepo(ui, path, create, presetupfuncs=presetupfuncs) | 178 peer = _peerorrepo(ui, path, create, presetupfuncs=presetupfuncs, |
179 intents=intents) | |
178 repo = peer.local() | 180 repo = peer.local() |
179 if not repo: | 181 if not repo: |
180 raise error.Abort(_("repository '%s' is not local") % | 182 raise error.Abort(_("repository '%s' is not local") % |
181 (path or peer.url())) | 183 (path or peer.url())) |
182 return repo.filtered('visible') | 184 return repo.filtered('visible') |
183 | 185 |
184 def peer(uiorrepo, opts, path, create=False): | 186 def peer(uiorrepo, opts, path, create=False, intents=None): |
185 '''return a repository peer for the specified path''' | 187 '''return a repository peer for the specified path''' |
186 rui = remoteui(uiorrepo, opts) | 188 rui = remoteui(uiorrepo, opts) |
187 return _peerorrepo(rui, path, create).peer() | 189 return _peerorrepo(rui, path, create, intents=intents).peer() |
188 | 190 |
189 def defaultdest(source): | 191 def defaultdest(source): |
190 '''return default destination of clone if none is given | 192 '''return default destination of clone if none is given |
191 | 193 |
192 >>> defaultdest(b'foo') | 194 >>> defaultdest(b'foo') |