Comments
Patch
@@ -210,5 +210,37 @@
extensions.loadall(self.ui)
+A bad .arcconfig doesn't error out
+ $ echo 'garbage' > .arcconfig
+ $ hg config phabricator --debug
+ invalid JSON in $TESTTMP/repo/.arcconfig
+ read config from: */.hgrc (glob)
+ $TESTTMP/repo/.hg/hgrc:*: phabricator.url=https://phab.mercurial-scm.org/ (glob)
+ $TESTTMP/repo/.hg/hgrc:*: phabricator.callsign=HG (glob)
+
+The .arcconfig content overrides global config
+ $ cat >> $HGRCPATH << EOF
+ > [phabricator]
+ > url = global
+ > callsign = global
+ > EOF
+ $ cp $TESTDIR/../.arcconfig .
+ $ mv .hg/hgrc .hg/hgrc.bak
+ $ hg config phabricator --debug
+ read config from: */.hgrc (glob)
+ */.hgrc:*: phabricator.url=global (glob)
+ $TESTTMP/repo/.arcconfig: phabricator.callsign=HG
+
+But it doesn't override local config
+ $ cat >> .hg/hgrc << EOF
+ > [phabricator]
+ > url = local
+ > callsign = local
+ > EOF
+ $ hg config phabricator --debug
+ read config from: */.hgrc (glob)
+ $TESTTMP/repo/.hg/hgrc:*: phabricator.url=local (glob)
+ $TESTTMP/repo/.hg/hgrc:*: phabricator.callsign=local (glob)
+ $ mv .hg/hgrc.bak .hg/hgrc
$ cd ..
@@ -66,6 +66,7 @@
exthelper,
graphmod,
httpconnection as httpconnectionmod,
+ localrepo,
logcmdutil,
match,
mdiff,
@@ -101,6 +102,7 @@
command = eh.command
configtable = eh.configtable
templatekeyword = eh.templatekeyword
+uisetup = eh.finaluisetup
# developer config: phabricator.batchsize
eh.configitem(
@@ -152,6 +154,39 @@
]
+@eh.wrapfunction(localrepo, "loadhgrc")
+def _loadhgrc(orig, ui, wdirvfs, hgvfs, requirements):
+ """Load ``.arcconfig`` content into a ui instance on repository open.
+ """
+ result = False
+ arcconfig = {}
+
+ try:
+ # json.loads only accepts bytes from 3.6+
+ rawparams = encoding.unifromlocal(wdirvfs.read(b".arcconfig"))
+ # json.loads only returns unicode strings
+ arcconfig = pycompat.rapply(
+ lambda x: encoding.unitolocal(x)
+ if isinstance(x, pycompat.unicode)
+ else x,
+ pycompat.json_loads(rawparams),
+ )
+
+ result = True
+ except ValueError:
+ ui.warn(_(b"invalid JSON in %s\n") % wdirvfs.join(b".arcconfig"))
+ except IOError:
+ pass
+
+ if b"repository.callsign" in arcconfig:
+ ui.applyconfig(
+ {(b"phabricator", b"callsign"): arcconfig[b"repository.callsign"]},
+ source=wdirvfs.join(b".arcconfig"),
+ )
+
+ return orig(ui, wdirvfs, hgvfs, requirements) or result # Load .hg/hgrc
+
+
def vcrcommand(name, flags, spec, helpcategory=None, optionalrepo=False):
fullflags = flags + _VCR_FLAGS