235
235
self.outf.write(gettext('Merge proposal: %s\n') % mp.url)
238
class cmd_github_login(Command):
239
__doc__ = """Log into GitHub.
241
When communicating with GitHub, some commands need to authenticate to
245
takes_args = ['username?']
247
def run(self, username=None):
248
from github import Github, GithubException
249
from breezy.config import AuthenticationConfig
250
authconfig = AuthenticationConfig()
252
username = authconfig.get_user(
253
'https', 'github.com', prompt=u'GitHub username', ask=True)
254
password = authconfig.get_password('https', 'github.com', username)
255
client = Github(username, password)
256
user = client.get_user()
258
authorization = user.create_authorization(
259
scopes=['user', 'repo', 'delete_repo'], note='Breezy',
260
note_url='https://github.com/breezy-team/breezy')
261
except GithubException as e:
262
errs = e.data.get('errors', [])
264
err_code = errs[0].get('code')
265
if err_code == u'already_exists':
266
raise errors.BzrCommandError('token already exists')
267
raise errors.BzrCommandError(e.data['message'])
268
# TODO(jelmer): This should really use something in
269
# AuthenticationConfig
270
from .github import store_github_token
271
store_github_token(scheme='https', host='github.com',
272
token=authorization.token)
275
class cmd_gitlab_login(Command):
276
__doc__ = """Log into a GitLab instance.
278
This command takes a GitLab instance URL (e.g. https://gitlab.com)
279
as well as an optional private token. Private tokens can be created via the
284
Log into GNOME's GitLab (prompts for a token):
286
brz gitlab-login https://gitlab.gnome.org/
288
Log into Debian's salsa, using a token created earlier:
290
brz gitlab-login https://salsa.debian.org if4Theis6Eich7aef0zo
293
takes_args = ['url', 'private_token?']
296
Option('name', help='Name for GitLab site in configuration.',
299
"Don't check that the token is valid."),
302
def run(self, url, private_token=None, name=None, no_check=False):
303
from breezy import ui
304
from .gitlabs import store_gitlab_token
307
name = urlutils.parse_url(url)[3].split('.')[-2]
308
except (ValueError, IndexError):
309
raise errors.BzrCommandError(
310
'please specify a site name with --name')
311
if private_token is None:
312
note("Please visit %s to obtain a private token.",
313
urlutils.join(url, "profile/personal_access_tokens"))
314
private_token = ui.ui_factory.get_password(u'Private token')
316
from breezy.transport import get_transport
317
from .gitlabs import GitLab
318
GitLab(get_transport(url), private_token=private_token)
319
store_gitlab_token(name=name, url=url, private_token=private_token)
322
238
class cmd_my_merge_proposals(Command):
323
239
__doc__ = """List all merge proposals owned by the logged-in user.