/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/plugins/propose/cmds.py

  • Committer: Breezy landing bot
  • Author(s): Jelmer Vernooij
  • Date: 2020-06-01 19:47:17 UTC
  • mfrom: (7506.1.1 merge-3.1)
  • Revision ID: breezy.the.bot@gmail.com-20200601194717-8mco90rhp2v1dbgj
Merge lp:brz/3.1.

Merged from https://code.launchpad.net/~jelmer/brz/merge-3.1/+merge/384927

Show diffs side-by-side

added added

removed removed

Lines of Context:
235
235
            self.outf.write(gettext('Merge proposal: %s\n') % mp.url)
236
236
 
237
237
 
238
 
class cmd_github_login(Command):
239
 
    __doc__ = """Log into GitHub.
240
 
 
241
 
    When communicating with GitHub, some commands need to authenticate to
242
 
    GitHub.
243
 
    """
244
 
 
245
 
    takes_args = ['username?']
246
 
 
247
 
    def run(self, username=None):
248
 
        from github import Github, GithubException
249
 
        from breezy.config import AuthenticationConfig
250
 
        authconfig = AuthenticationConfig()
251
 
        if username is None:
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()
257
 
        try:
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', [])
263
 
            if errs:
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)
273
 
 
274
 
 
275
 
class cmd_gitlab_login(Command):
276
 
    __doc__ = """Log into a GitLab instance.
277
 
 
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
280
 
    web UI.
281
 
 
282
 
    :Examples:
283
 
 
284
 
      Log into GNOME's GitLab (prompts for a token):
285
 
 
286
 
         brz gitlab-login https://gitlab.gnome.org/
287
 
 
288
 
      Log into Debian's salsa, using a token created earlier:
289
 
 
290
 
         brz gitlab-login https://salsa.debian.org if4Theis6Eich7aef0zo
291
 
    """
292
 
 
293
 
    takes_args = ['url', 'private_token?']
294
 
 
295
 
    takes_options = [
296
 
        Option('name', help='Name for GitLab site in configuration.',
297
 
               type=str),
298
 
        Option('no-check',
299
 
               "Don't check that the token is valid."),
300
 
        ]
301
 
 
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
305
 
        if name is None:
306
 
            try:
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')
315
 
        if not no_check:
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)
320
 
 
321
 
 
322
238
class cmd_my_merge_proposals(Command):
323
239
    __doc__ = """List all merge proposals owned by the logged-in user.
324
240