[PATCH 3 of 6] hg: replace repository(remoteui) with peer()
Peter Arrenbrecht
peter.arrenbrecht at gmail.com
Wed Jun 8 11:45:30 CDT 2011
# HG changeset patch
# User Peter Arrenbrecht <peter.arrenbrecht at gmail.com>
# Date 1307550324 -7200
hg: replace repository(remoteui) with peer()
diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py
--- a/hgext/convert/hg.py
+++ b/hgext/convert/hg.py
@@ -112,7 +112,7 @@
self.after()
for pbranch, heads in missings.iteritems():
pbranchpath = os.path.join(self.path, pbranch)
- prepo = hg.repository(self.ui, pbranchpath)
+ prepo = hg.peer(self.ui, {}, pbranchpath)
self.ui.note(_('pulling from %s into %s\n') % (pbranch, branch))
self.repo.pull(prepo, [prepo.lookup(h) for h in heads])
self.before()
diff --git a/hgext/fetch.py b/hgext/fetch.py
--- a/hgext/fetch.py
+++ b/hgext/fetch.py
@@ -63,8 +63,7 @@
raise util.Abort(_('multiple heads in this branch '
'(use "hg heads ." and "hg merge" to merge)'))
- other = hg.repository(hg.remoteui(repo, opts),
- ui.expandpath(source))
+ other = hg.peer(repo, opts, ui.expandpath(source))
ui.status(_('pulling from %s\n') %
util.hidepassword(ui.expandpath(source)))
revs = None
diff --git a/hgext/mq.py b/hgext/mq.py
--- a/hgext/mq.py
+++ b/hgext/mq.py
@@ -2060,13 +2060,13 @@
return url + '/.hg/patches'
if dest is None:
dest = hg.defaultdest(source)
- sr = hg.repository(hg.remoteui(ui, opts), ui.expandpath(source))
+ sr = hg.peer(ui, opts, ui.expandpath(source))
if opts.get('patches'):
patchespath = ui.expandpath(opts.get('patches'))
else:
patchespath = patchdir(sr)
try:
- hg.repository(ui, patchespath)
+ hg.peer(ui, {}, patchespath)
except error.RepoError:
raise util.Abort(_('versioned patch repository not found'
' (see init --mq)'))
diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py
--- a/hgext/patchbomb.py
+++ b/hgext/patchbomb.py
@@ -276,7 +276,7 @@
dest = ui.expandpath(dest or 'default-push', dest or 'default')
dest, branches = hg.parseurl(dest)
revs, checkout = hg.addbranchrevs(repo, repo, branches, revs)
- other = hg.repository(hg.remoteui(repo, opts), dest)
+ other = hg.peer(repo, opts, dest)
ui.status(_('comparing with %s\n') % util.hidepassword(dest))
common, _anyinc, _heads = discovery.findcommonincoming(repo, other)
nodes = revs and map(repo.lookup, revs) or revs
diff --git a/hgext/relink.py b/hgext/relink.py
--- a/hgext/relink.py
+++ b/hgext/relink.py
@@ -38,11 +38,8 @@
"""
if not hasattr(util, 'samefile') or not hasattr(util, 'samedevice'):
raise util.Abort(_('hardlinks are not supported on this system'))
- src = hg.repository(hg.remoteui(repo, opts),
- ui.expandpath(origin or 'default-relink',
- origin or 'default'))
- if not src.local():
- raise util.Abort(_('must specify local origin repository'))
+ src = hg.repository(ui, ui.expandpath(origin or 'default-relink',
+ origin or 'default'))
ui.status(_('relinking %s to %s\n') % (src.store.path, repo.store.path))
if repo.root == src.root:
ui.status(_('there is nothing to relink\n'))
diff --git a/hgext/transplant.py b/hgext/transplant.py
--- a/hgext/transplant.py
+++ b/hgext/transplant.py
@@ -561,7 +561,7 @@
sourcerepo = opts.get('source')
if sourcerepo:
- source = hg.repository(ui, ui.expandpath(sourcerepo))
+ source = hg.peer(ui, opts, ui.expandpath(sourcerepo))
branches = map(source.lookup, opts.get('branch', ()))
source, csets, cleanupfn = bundlerepo.getremotechanges(ui, repo, source,
onlyheads=branches, force=True)
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -10,7 +10,7 @@
from i18n import _, gettext
import os, re, sys, difflib, time, tempfile, errno
import hg, scmutil, util, revlog, extensions, copies, error, bookmarks
-import patch, help, url, encoding, templatekw, discovery
+import patch, help, url, encoding, templatekw, discovery, localrepo
import archival, changegroup, cmdutil, sshserver, hbisect, hgweb, hgweb.server
import merge as mergemod
import minirst, revset, fileset
@@ -891,7 +891,7 @@
else:
dest = ui.expandpath(dest or 'default-push', dest or 'default')
dest, branches = hg.parseurl(dest, opts.get('branch'))
- other = hg.repository(hg.remoteui(repo, opts), dest)
+ other = hg.peer(repo, opts, dest)
revs, checkout = hg.addbranchrevs(repo, other, branches, revs)
heads = revs and map(repo.lookup, revs) or revs
common, outheads = discovery.findcommonoutgoing(repo, other,
@@ -1542,7 +1542,7 @@
def debugdiscovery(ui, repo, remoteurl="default", **opts):
"""runs the changeset discovery protocol in isolation"""
remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl), opts.get('branch'))
- remote = hg.repository(hg.remoteui(repo, opts), remoteurl)
+ remote = hg.peer(repo, opts, remoteurl)
ui.status(_('comparing with %s\n') % util.hidepassword(remoteurl))
# make sure tests are repeatable
@@ -1625,7 +1625,7 @@
Every ID must be a full-length hex node id string. Saves the bundle to the
given file.
"""
- repo = hg.repository(ui, repopath)
+ repo = hg.peer(ui, opts, repopath)
if not repo.capable('getbundle'):
raise util.Abort("getbundle() not supported by target repository")
args = {}
@@ -1800,14 +1800,14 @@
Every ID must be a full-length hex node id string. Returns a list of 0s and 1s
indicating unknown/known.
"""
- repo = hg.repository(ui, repopath)
+ repo = hg.peer(ui, opts, repopath)
if not repo.capable('known'):
raise util.Abort("known() not supported by target repository")
flags = repo.known([bin(s) for s in ids])
ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags])))
@command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]'))
-def debugpushkey(ui, repopath, namespace, *keyinfo):
+def debugpushkey(ui, repopath, namespace, *keyinfo, **opts):
'''access the pushkey key/value protocol
With two args, list the keys in the given namespace.
@@ -1816,7 +1816,7 @@
Reports success or failure.
'''
- target = hg.repository(ui, repopath)
+ target = hg.peer(ui, opts, repopath)
if keyinfo:
key, old, new = keyinfo
r = target.pushkey(namespace, key, old, new)
@@ -2113,7 +2113,7 @@
] + remoteopts,
_('REPO [OPTIONS]... [ONE [TWO]]'))
def debugwireargs(ui, repopath, *vals, **opts):
- repo = hg.repository(hg.remoteui(ui, opts), repopath)
+ repo = hg.peer(ui, opts, repopath)
for opt in remoteopts:
del opts[opt[1]]
args = {}
@@ -2910,7 +2910,7 @@
if source:
source, branches = hg.parseurl(ui.expandpath(source))
- repo = hg.repository(ui, source)
+ repo = hg.peer(ui, {}, source)
revs, checkout = hg.addbranchrevs(repo, repo, branches, None)
if not repo.local():
@@ -3195,7 +3195,7 @@
if opts.get('bookmarks'):
source, branches = hg.parseurl(ui.expandpath(source),
opts.get('branch'))
- other = hg.repository(hg.remoteui(repo, opts), source)
+ other = hg.peer(repo, opts, source)
if 'bookmarks' not in other.listkeys('namespaces'):
ui.warn(_("remote doesn't support bookmarks\n"))
return 0
@@ -3223,7 +3223,7 @@
Returns 0 on success.
"""
- hg.repository(hg.remoteui(ui, opts), ui.expandpath(dest), create=True)
+ hg.peer(ui, opts, ui.expandpath(dest), create=True)
@command('locate',
[('r', 'rev', '', _('search the repository as it is in REV'), _('REV')),
@@ -3557,7 +3557,7 @@
if opts.get('bookmarks'):
dest = ui.expandpath(dest or 'default-push', dest or 'default')
dest, branches = hg.parseurl(dest, opts.get('branch'))
- other = hg.repository(hg.remoteui(repo, opts), dest)
+ other = hg.peer(repo, opts, dest)
if 'bookmarks' not in other.listkeys('namespaces'):
ui.warn(_("remote doesn't support bookmarks\n"))
return 0
@@ -3709,7 +3709,7 @@
Returns 0 on success, 1 if an update had unresolved files.
"""
source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
- other = hg.repository(hg.remoteui(repo, opts), source)
+ other = hg.peer(repo, opts, source)
ui.status(_('pulling from %s\n') % util.hidepassword(source))
revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev'))
@@ -3806,7 +3806,7 @@
dest, branches = hg.parseurl(dest, opts.get('branch'))
ui.status(_('pushing to %s\n') % util.hidepassword(dest))
revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
- other = hg.repository(hg.remoteui(repo, opts), dest)
+ other = hg.peer(repo, opts, dest)
if revs:
revs = [repo.lookup(rev) for rev in revs]
@@ -4756,7 +4756,7 @@
if opts.get('remote'):
t = []
source, branches = hg.parseurl(ui.expandpath('default'))
- other = hg.repository(hg.remoteui(repo, {}), source)
+ other = hg.peer(repo, {}, source)
revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev'))
ui.debug('comparing with %s\n' % util.hidepassword(source))
repo.ui.pushbuffer()
@@ -4769,7 +4769,7 @@
dest, branches = hg.parseurl(ui.expandpath('default-push', 'default'))
revs, checkout = hg.addbranchrevs(repo, repo, branches, None)
if source != dest:
- other = hg.repository(hg.remoteui(repo, {}), dest)
+ other = hg.peer(repo, {}, dest)
commoninc = None
ui.debug('comparing with %s\n' % util.hidepassword(dest))
repo.ui.pushbuffer()
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -601,8 +601,6 @@
try:
repo = hg.repository(ui, path=path)
ui = repo.ui
- if not repo.local():
- raise util.Abort(_("repository '%s' is not local") % path)
ui.setconfig("bundle", "mainreporoot", repo.root)
except error.RequirementError:
raise
diff --git a/mercurial/hg.py b/mercurial/hg.py
--- a/mercurial/hg.py
+++ b/mercurial/hg.py
@@ -88,14 +88,54 @@
return False
return repo.local()
-def repository(ui, path='', create=False):
- """return a repository object for the specified path"""
- repo = _lookup(path).instance(ui, path, create)
- ui = getattr(repo, "ui", ui)
+def _peerui(src, opts):
+ 'build a peer ui from ui or repo and opts'
+ if hasattr(src, 'baseui'): # looks like a repository
+ dst = src.baseui.copy() # drop repo-specific config
+ src = src.ui # copy target options from repo
+ else: # assume it's a global ui object
+ dst = src.copy() # keep all global options
+
+ # copy ssh-specific options
+ for o in 'ssh', 'remotecmd':
+ v = opts.get(o) or src.config('ui', o)
+ if v:
+ dst.setconfig("ui", o, v)
+
+ # copy bundle-specific options
+ r = src.config('bundle', 'mainreporoot')
+ if r:
+ dst.setconfig('bundle', 'mainreporoot', r)
+
+ # copy selected local settings to the remote ui
+ for sect in ('auth', 'hostfingerprints', 'http_proxy'):
+ for key, val in src.configitems(sect):
+ dst.setconfig(sect, key, val)
+ v = src.config('web', 'cacerts')
+ if v:
+ dst.setconfig('web', 'cacerts', util.expandpath(v))
+
+ return dst
+
+def _repoorpeer(ui, url, create=False):
+ """return a repository or peer for the specified url"""
+ obj = _lookup(url).instance(ui, url, create)
+ ui = getattr(obj, "ui", ui)
for name, module in extensions.extensions():
hook = getattr(module, 'reposetup', None)
if hook:
- hook(ui, repo)
+ hook(ui, obj)
+ return obj
+
+def peer(ui, opts, url, create=False):
+ """return a repository peer for the specified url"""
+ return _repoorpeer(_peerui(ui, opts), url, create)
+
+def repository(ui, path='', create=False):
+ """return a repository object for the specified path"""
+ repo = _repoorpeer(ui, path, create)
+ if not repo.local():
+ raise util.Abort(_("repository '%s' is not local") % (path or repo.url()))
return repo
def defaultdest(source):
@@ -175,7 +215,7 @@
Create a copy of an existing repository in a new directory. The
source and destination are URLs, as passed to the repository
- function. Returns a pair of repository objects, the source and
+ function. Returns a pair of repository peers, the source and
newly created destination.
The location of the source is added to the new repository's
@@ -209,7 +249,7 @@
if isinstance(source, str):
origsource = ui.expandpath(source)
source, branch = parseurl(origsource, branch)
- srcrepo = repository(remoteui(ui, opts), source)
+ srcrepo = peer(ui, opts, source)
else:
srcrepo = source
branch = (None, branch or [])
@@ -303,12 +343,12 @@
# we need to re-init the repo after manually copying the data
# into it
- destrepo = repository(remoteui(ui, opts), dest)
+ destrepo = peer(ui, opts, dest)
srcrepo.hook('outgoing', source='clone',
node=node.hex(node.nullid))
else:
try:
- destrepo = repository(remoteui(ui, opts), dest, create=True)
+ destrepo = peer(ui, opts, dest, create=True)
except OSError, inst:
if inst.errno == errno.EEXIST:
dircleanup.close()
@@ -423,7 +463,7 @@
and is supposed to contain only code that can't be unified.
"""
source, branches = parseurl(ui.expandpath(source), opts.get('branch'))
- other = repository(remoteui(repo, opts), source)
+ other = peer(repo, opts, source)
ui.status(_('comparing with %s\n') % util.hidepassword(source))
revs, checkout = addbranchrevs(repo, other, branches, opts.get('rev'))
@@ -481,7 +521,7 @@
if revs:
revs = [repo.lookup(rev) for rev in revs]
- other = repository(remoteui(repo, opts), dest)
+ other = peer(repo, opts, dest)
common, outheads = discovery.findcommonoutgoing(repo, other, revs,
force=opts.get('force'))
o = repo.changelog.findmissing(common, outheads)
@@ -528,32 +568,3 @@
def verify(repo):
"""verify the consistency of a repository"""
return verifymod.verify(repo)
-
-def remoteui(src, opts):
- 'build a remote ui from ui or repo and opts'
- if hasattr(src, 'baseui'): # looks like a repository
- dst = src.baseui.copy() # drop repo-specific config
- src = src.ui # copy target options from repo
- else: # assume it's a global ui object
- dst = src.copy() # keep all global options
-
- # copy ssh-specific options
- for o in 'ssh', 'remotecmd':
- v = opts.get(o) or src.config('ui', o)
- if v:
- dst.setconfig("ui", o, v)
-
- # copy bundle-specific options
- r = src.config('bundle', 'mainreporoot')
- if r:
- dst.setconfig('bundle', 'mainreporoot', r)
-
- # copy selected local settings to the remote ui
- for sect in ('auth', 'hostfingerprints', 'http_proxy'):
- for key, val in src.configitems(sect):
- dst.setconfig(sect, key, val)
- v = src.config('web', 'cacerts')
- if v:
- dst.setconfig('web', 'cacerts', util.expandpath(v))
-
- return dst
diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -599,7 +599,7 @@
revs, checkout = hg.addbranchrevs(repo, repo, branches, [])
if revs:
revs = [repo.lookup(rev) for rev in revs]
- other = hg.repository(hg.remoteui(repo, {}), dest)
+ other = hg.peer(repo, {}, dest)
repo.ui.pushbuffer()
common, outheads = discovery.findcommonoutgoing(repo, other, onlyheads=revs)
repo.ui.popbuffer()
diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py
--- a/mercurial/subrepo.py
+++ b/mercurial/subrepo.py
@@ -437,7 +437,7 @@
if revision not in self._repo:
self._repo._subsource = source
srcurl = _abssource(self._repo)
- other = hg.repository(self._repo.ui, srcurl)
+ other = hg.peer(self._repo.ui, {}, srcurl)
if len(self._repo) == 0:
self._repo.ui.status(_('cloning subrepo %s from %s\n')
% (subrelpath(self), srcurl))
@@ -495,7 +495,7 @@
dsturl = _abssource(self._repo, True)
self._repo.ui.status(_('pushing subrepo %s to %s\n') %
(subrelpath(self), dsturl))
- other = hg.repository(self._repo.ui, dsturl)
+ other = hg.peer(self._repo.ui, {}, dsturl)
return self._repo.push(other, force)
def outgoing(self, ui, dest, opts):
More information about the Mercurial-devel
mailing list