Mercurial > hg
comparison contrib/phabricator.py @ 37996:0fa050bc68cb
phabricator: migrate [phabricator.auth] to [auth]
This resurrects the warning mechanism removed in 20a4543e9a2b. I'm not worried
about the copy/paste of the code for a brief transitional period.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 12 May 2018 00:34:01 -0400 |
parents | 20a4543e9a2b |
children | 71cf20d47f25 |
comparison
equal
deleted
inserted
replaced
37995:6f9ac3cb0987 | 37996:0fa050bc68cb |
---|---|
29 # communicate. If set, use the specified curl command. This could be useful | 29 # communicate. If set, use the specified curl command. This could be useful |
30 # if you need to specify advanced options that is not easily supported by | 30 # if you need to specify advanced options that is not easily supported by |
31 # the internal library. | 31 # the internal library. |
32 curlcmd = curl --connect-timeout 2 --retry 3 --silent | 32 curlcmd = curl --connect-timeout 2 --retry 3 --silent |
33 | 33 |
34 [phabricator.auth] | 34 [auth] |
35 example.url = https://phab.example.com/ | 35 example.url = https://phab.example.com/ |
36 # API token. Get it from https://$HOST/conduit/login/ | 36 # API token. Get it from https://$HOST/conduit/login/ |
37 example.token = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx | 37 example.phabtoken = cli-xxxxxxxxxxxxxxxxxxxxxxxxxxxx |
38 """ | 38 """ |
39 | 39 |
40 from __future__ import absolute_import | 40 from __future__ import absolute_import |
41 | 41 |
42 import itertools | 42 import itertools |
98 else: | 98 else: |
99 process(k, v) | 99 process(k, v) |
100 process('', params) | 100 process('', params) |
101 return util.urlreq.urlencode(flatparams) | 101 return util.urlreq.urlencode(flatparams) |
102 | 102 |
103 def readurltoken(repo): | 103 printed_token_warning = False |
104 """return conduit url, token and make sure they exist | 104 |
105 | 105 def readlegacytoken(repo, url): |
106 Currently read from [phabricator] config section. In the future, it might | 106 """Transitional support for old phabricator tokens. |
107 make sense to read from .arcconfig and .arcrc as well. | 107 |
108 """ | 108 Remove before the 4.7 release. |
109 url = repo.ui.config('phabricator', 'url') | 109 """ |
110 if not url: | |
111 raise error.Abort(_('config %s.%s is required') | |
112 % ('phabricator', 'url')) | |
113 | |
114 groups = {} | 110 groups = {} |
115 for key, val in repo.ui.configitems('phabricator.auth'): | 111 for key, val in repo.ui.configitems('phabricator.auth'): |
116 if '.' not in key: | 112 if '.' not in key: |
117 repo.ui.warn(_("ignoring invalid [phabricator.auth] key '%s'\n") | 113 repo.ui.warn(_("ignoring invalid [phabricator.auth] key '%s'\n") |
118 % key) | 114 % key) |
126 continue | 122 continue |
127 token = auth.get('token') | 123 token = auth.get('token') |
128 if token: | 124 if token: |
129 break | 125 break |
130 | 126 |
127 global printed_token_warning | |
128 | |
129 if token and not printed_token_warning: | |
130 printed_token_warning = True | |
131 repo.ui.warn(_('phabricator.auth.token is deprecated - please ' | |
132 'migrate to auth.phabtoken.\n')) | |
133 return token | |
134 | |
135 def readurltoken(repo): | |
136 """return conduit url, token and make sure they exist | |
137 | |
138 Currently read from [phabricator] config section. In the future, it might | |
139 make sense to read from .arcconfig and .arcrc as well. | |
140 """ | |
141 url = repo.ui.config('phabricator', 'url') | |
142 if not url: | |
143 raise error.Abort(_('config %s.%s is required') | |
144 % ('phabricator', 'url')) | |
145 | |
146 groups = {} | |
147 for key, val in repo.ui.configitems('auth'): | |
148 if '.' not in key: | |
149 repo.ui.warn(_("ignoring invalid [auth] key '%s'\n") | |
150 % key) | |
151 continue | |
152 group, setting = key.rsplit('.', 1) | |
153 groups.setdefault(group, {})[setting] = val | |
154 | |
155 token = None | |
156 for group, auth in groups.iteritems(): | |
157 if url != auth.get('url'): | |
158 continue | |
159 token = auth.get('phabtoken') | |
160 if token: | |
161 break | |
162 | |
131 if not token: | 163 if not token: |
132 raise error.Abort(_('Can\'t find conduit token associated to %s') | 164 token = readlegacytoken(repo, url) |
133 % (url,)) | 165 if not token: |
166 raise error.Abort(_('Can\'t find conduit token associated to %s') | |
167 % (url,)) | |
134 | 168 |
135 return url, token | 169 return url, token |
136 | 170 |
137 def callconduit(repo, name, params): | 171 def callconduit(repo, name, params): |
138 """call Conduit API, params is a dict. return json.loads result, or None""" | 172 """call Conduit API, params is a dict. return json.loads result, or None""" |