The goal of this series is to make hg debugcallconduit work outside of a hg
repo.
This patch, removes requirement of repo object from readurltoken as we only need
ui there. It also updates the callers to pass in ui instead of repo.
hg-reviewers |
The goal of this series is to make hg debugcallconduit work outside of a hg
repo.
This patch, removes requirement of repo object from readurltoken as we only need
ui there. It also updates the callers to pass in ui instead of repo.
Lint Skipped |
Unit Tests Skipped |
Path | Packages | |||
---|---|---|---|---|
M | hgext/phabricator.py (12 lines) |
Commit | Parents | Author | Summary | Date |
---|---|---|---|---|
6cdbb1d19a57 | 5b217451a2c2 | Pulkit Goyal | Jun 8 2019, 11:32 AM |
for k, v in items(obj): | for k, v in items(obj): | ||||
if prefix: | if prefix: | ||||
process(b'%s[%s]' % (prefix, k), v) | process(b'%s[%s]' % (prefix, k), v) | ||||
else: | else: | ||||
process(k, v) | process(k, v) | ||||
process(b'', params) | process(b'', params) | ||||
return util.urlreq.urlencode(flatparams) | return util.urlreq.urlencode(flatparams) | ||||
def readurltoken(repo): | def readurltoken(ui): | ||||
"""return conduit url, token and make sure they exist | """return conduit url, token and make sure they exist | ||||
Currently read from [auth] config section. In the future, it might | Currently read from [auth] config section. In the future, it might | ||||
make sense to read from .arcconfig and .arcrc as well. | make sense to read from .arcconfig and .arcrc as well. | ||||
""" | """ | ||||
url = repo.ui.config(b'phabricator', b'url') | url = ui.config(b'phabricator', b'url') | ||||
if not url: | if not url: | ||||
raise error.Abort(_(b'config %s.%s is required') | raise error.Abort(_(b'config %s.%s is required') | ||||
% (b'phabricator', b'url')) | % (b'phabricator', b'url')) | ||||
res = httpconnectionmod.readauthforuri(repo.ui, url, util.url(url).user) | res = httpconnectionmod.readauthforuri(ui, url, util.url(url).user) | ||||
token = None | token = None | ||||
if res: | if res: | ||||
group, auth = res | group, auth = res | ||||
repo.ui.debug(b"using auth.%s.* for authentication\n" % group) | ui.debug(b"using auth.%s.* for authentication\n" % group) | ||||
token = auth.get(b'phabtoken') | token = auth.get(b'phabtoken') | ||||
if not token: | if not token: | ||||
raise error.Abort(_(b'Can\'t find conduit token associated to %s') | raise error.Abort(_(b'Can\'t find conduit token associated to %s') | ||||
% (url,)) | % (url,)) | ||||
return url, token | return url, token | ||||
def callconduit(repo, name, params): | def callconduit(repo, name, params): | ||||
"""call Conduit API, params is a dict. return json.loads result, or None""" | """call Conduit API, params is a dict. return json.loads result, or None""" | ||||
host, token = readurltoken(repo) | host, token = readurltoken(repo.ui) | ||||
url, authinfo = util.url(b'/'.join([host, b'api', name])).authinfo() | url, authinfo = util.url(b'/'.join([host, b'api', name])).authinfo() | ||||
repo.ui.debug(b'Conduit Call: %s %s\n' % (url, pycompat.byterepr(params))) | repo.ui.debug(b'Conduit Call: %s %s\n' % (url, pycompat.byterepr(params))) | ||||
params = params.copy() | params = params.copy() | ||||
params[b'api.token'] = token | params[b'api.token'] = token | ||||
data = urlencodenested(params) | data = urlencodenested(params) | ||||
curlcmd = repo.ui.config(b'phabricator', b'curlcmd') | curlcmd = repo.ui.config(b'phabricator', b'curlcmd') | ||||
if curlcmd: | if curlcmd: | ||||
sin, sout = procutil.popen2(b'%s -d @- %s' | sin, sout = procutil.popen2(b'%s -d @- %s' | ||||
# Map from "hg:meta" keys to header understood by "hg import". The order is | # Map from "hg:meta" keys to header understood by "hg import". The order is | ||||
# consistent with "hg export" output. | # consistent with "hg export" output. | ||||
_metanamemap = util.sortdict([(b'user', b'User'), (b'date', b'Date'), | _metanamemap = util.sortdict([(b'user', b'User'), (b'date', b'Date'), | ||||
(b'branch', b'Branch'), (b'node', b'Node ID'), | (b'branch', b'Branch'), (b'node', b'Node ID'), | ||||
(b'parent', b'Parent ')]) | (b'parent', b'Parent ')]) | ||||
def _confirmbeforesend(repo, revs, oldmap): | def _confirmbeforesend(repo, revs, oldmap): | ||||
url, token = readurltoken(repo) | url, token = readurltoken(repo.ui) | ||||
ui = repo.ui | ui = repo.ui | ||||
for rev in revs: | for rev in revs: | ||||
ctx = repo[rev] | ctx = repo[rev] | ||||
desc = ctx.description().splitlines()[0] | desc = ctx.description().splitlines()[0] | ||||
oldnode, olddiff, drevid = oldmap.get(ctx.node(), (None, None, None)) | oldnode, olddiff, drevid = oldmap.get(ctx.node(), (None, None, None)) | ||||
if drevid: | if drevid: | ||||
drevdesc = ui.label(b'D%s' % drevid, b'phabricator.drev') | drevdesc = ui.label(b'D%s' % drevid, b'phabricator.drev') | ||||
else: | else: |