##// END OF EJS Templates
phabricator: specify API tokens per host, rather than per repo...
Tom Prince -
r36805:4397909f default
parent child Browse files
Show More
@@ -33,6 +33,11 Config::
33 # if you need to specify advanced options that is not easily supported by
33 # if you need to specify advanced options that is not easily supported by
34 # the internal library.
34 # the internal library.
35 curlcmd = curl --connect-timeout 2 --retry 3 --silent
35 curlcmd = curl --connect-timeout 2 --retry 3 --silent
36
37 [phabricator.auth]
38 example.url = https://phab.example.com/
39 # API token. Get it from https://$HOST/conduit/login/
40 example.token = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx
36 """
41 """
37
42
38 from __future__ import absolute_import
43 from __future__ import absolute_import
@@ -100,14 +105,33 def readurltoken(repo):
100 Currently read from [phabricator] config section. In the future, it might
105 Currently read from [phabricator] config section. In the future, it might
101 make sense to read from .arcconfig and .arcrc as well.
106 make sense to read from .arcconfig and .arcrc as well.
102 """
107 """
103 values = []
108 url = repo.ui.config('phabricator', 'url')
104 section = 'phabricator'
109 if not url:
105 for name in ['url', 'token']:
110 raise error.Abort(_('config %s.%s is required')
106 value = repo.ui.config(section, name)
111 % ('phabricator', 'url'))
107 if not value:
112
108 raise error.Abort(_('config %s.%s is required') % (section, name))
113 groups = {}
109 values.append(value)
114 for key, val in repo.ui.configitems('phabricator.auth'):
110 return values
115 if '.' not in key:
116 repo.ui.warn(_("ignoring invalid [phabricator.auth] key '%s'\n")
117 % key)
118 continue
119 group, setting = key.rsplit('.', 1)
120 groups.setdefault(group, {})[setting] = val
121
122 token = None
123 for group, auth in groups.iteritems():
124 if url != auth.get('url'):
125 continue
126 token = auth.get('token')
127 if token:
128 break
129
130 if not token:
131 raise error.Abort(_('Can\'t find conduit token associated to %s')
132 % (url,))
133
134 return url, token
111
135
112 def callconduit(repo, name, params):
136 def callconduit(repo, name, params):
113 """call Conduit API, params is a dict. return json.loads result, or None"""
137 """call Conduit API, params is a dict. return json.loads result, or None"""
General Comments 0
You need to be logged in to leave comments. Login now