Example #1
0
def perform_migrate_issues(args):
    redmine = RedmineClient(args.redmine_key)
    gitlab = GitlabClient(args.gitlab_key)

    redmine_project = RedmineProject(args.redmine_project_url, redmine)
    gitlab_project = GitlabProject(args.gitlab_project_url, gitlab)

    gitlab_instance = gitlab_project.get_instance()

    gitlab_users_index = gitlab_instance.get_users_index()
    redmine_users_index = redmine_project.get_users_index(args.closed)

    check(check_users,
          'Required users presence',
          redmine_project=redmine_project,
          gitlab_project=gitlab_project,
          closed=args.closed)

    # Get issues

    issues = redmine_project.get_all_issues(args.closed)
    log.info('#{} peticiones a migrar'.format(len(issues)))
    milestones_index = gitlab_project.get_milestones_index()
    issues_data = (convert_issue(i, redmine_users_index, gitlab_users_index,
                                 milestones_index) for i in issues)

    for data, meta in issues_data:
        if args.check:
            milestone_id = data.get('milestone_id', None)
            if milestone_id:
                try:
                    gitlab_project.get_milestone_by_id(milestone_id)
                except ValueError:
                    raise CommandError(
                        "issue \"{}\" points to unknown milestone_id \"{}\". "
                        "Check that you already migrated roadmaps".format(
                            data['title'], milestone_id))

            log.info('Would create issue "{}" and {} notes.'.format(
                data['title'], len(meta['notes'])))
        else:
            redmine_project.close_issue(data)
            created = gitlab_project.create_issue(data, meta)
            log.info('#{iid} {title}'.format(**created))
            time.sleep(1)