diff --git a/hgext/phabricator.py b/hgext/phabricator.py --- a/hgext/phabricator.py +++ b/hgext/phabricator.py @@ -41,6 +41,9 @@ # API token. Get it from https://$HOST/conduit/login/ example.phabtoken = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx + +phabricator.url and callsign will fallback to values from repo's .arcconfig if +available. """ from __future__ import absolute_import @@ -165,16 +168,18 @@ ] -@eh.wrapfunction(localrepo, "loadhgrc") -def _loadhgrc(orig, ui, wdirvfs, hgvfs, requirements): +def reposetup(ui, repo): """Load ``.arcconfig`` content into a ui instance on repository open. """ - result = False + # Only check for .arcconfig on a localrepo. + if not hasattr(repo, 'wvfs'): + return + arcconfig = {} try: # json.loads only accepts bytes from 3.6+ - rawparams = encoding.unifromlocal(wdirvfs.read(b".arcconfig")) + rawparams = encoding.unifromlocal(repo.wvfs.read(b'.arcconfig')) # json.loads only returns unicode strings arcconfig = pycompat.rapply( lambda x: encoding.unitolocal(x) @@ -182,25 +187,19 @@ else x, pycompat.json_loads(rawparams), ) - - result = True except ValueError: - ui.warn(_(b"invalid JSON in %s\n") % wdirvfs.join(b".arcconfig")) + ui.warn(_(b"invalid JSON in %s\n") % repo.wvfs.join('.arcconfig')) except IOError: pass cfg = util.sortdict() + source = repo.wvfs.join(b".arcconfig") if b"repository.callsign" in arcconfig: - cfg[(b"phabricator", b"callsign")] = arcconfig[b"repository.callsign"] + ui.setconfig(b"phabricator", b"callsign", arcconfig[b"repository.callsign"], source=source) if b"phabricator.uri" in arcconfig: - cfg[(b"phabricator", b"url")] = arcconfig[b"phabricator.uri"] - - if cfg: - ui.applyconfig(cfg, source=wdirvfs.join(b".arcconfig")) - - return orig(ui, wdirvfs, hgvfs, requirements) or result # Load .hg/hgrc + ui.setconfig(b"phabricator", b"url", arcconfig[b"phabricator.uri"], source=source) def vcrcommand(name, flags, spec, helpcategory=None, optionalrepo=False): @@ -328,13 +327,18 @@ def readurltoken(ui): """return conduit url, token and make sure they exist - Currently read from [auth] config section. In the future, it might - make sense to read from .arcconfig and .arcrc as well. + Read token from [auth] config section. Read url from [phabricator] config + section or repo's .arcconfig. In the future, it might make sense to read + tokens from ~/.arcrc as well. """ url = ui.config(b'phabricator', b'url') if not url: raise error.Abort( - _(b'config %s.%s is required') % (b'phabricator', b'url') + _( + b'unable to read phabricator uri from from config %s.%s or %s ' + b'file in repo' + ) + % (b'phabricator', b'url', b'.arcconfig') ) res = httpconnectionmod.readauthforuri(ui, url, util.url(url).user)