示例#1
0
def create_gerrit_project(project, project_list, gerrit):
    if project not in project_list:
        try:
            gerrit.createProject(project)
            return True
        except Exception:
            log.exception("Exception creating %s in Gerrit." % project)
            raise
    return False
示例#2
0
def create_gerrit_project(project, project_list, gerrit):
    if project not in project_list:
        try:
            gerrit.createProject(project)
            return True
        except Exception:
            log.exception(
                "Exception creating %s in Gerrit." % project)
            raise
    return False
示例#3
0
def main():

    PROJECTS_YAML = os.environ.get('PROJECTS_YAML',
                                   '/home/gerrit2/projects.yaml')
    configs = [config for config in yaml.load_all(open(PROJECTS_YAML))]
    defaults = configs[0][0]
    default_has_github = defaults.get('has-github', True)

    LOCAL_GIT_DIR = defaults.get('local-git-dir', '/var/lib/git')
    ACL_DIR = defaults.get('acl-dir')
    GERRIT_HOST = defaults.get('gerrit-host')
    GERRIT_USER = defaults.get('gerrit-user')
    GERRIT_KEY = defaults.get('gerrit-key')
    GERRIT_GITID = defaults.get('gerrit-committer')

    gerrit = gerritlib.gerrit.Gerrit('localhost',
                                     GERRIT_USER,
                                     29418,
                                     GERRIT_KEY)
    project_list = gerrit.listProjects()
    ssh_env = make_ssh_wrapper(GERRIT_USER, GERRIT_KEY)
    try:

        for section in configs[1]:
            project = section['project']
            options = section.get('options', dict())
            description = section.get('description', None)
            homepage = section.get('homepage', defaults.get('homepage', None))
            upstream = section.get('upstream', None)

            project_git = "%s.git" % project
            project_dir = os.path.join(LOCAL_GIT_DIR, project_git)

            if 'has-github' in options or default_has_github:
                create_github_project(defaults, options, project,
                                      description, homepage)

            remote_url = "ssh://localhost:29418/%s" % project
            if project not in project_list:
                tmpdir = tempfile.mkdtemp()
                try:
                    repo_path = os.path.join(tmpdir, 'repo')
                    if upstream:
                        run_command("git clone %(upstream)s %(repo_path)s" %
                                    dict(upstream=upstream,
                                         repo_path=repo_path))
                        git_command(repo_path,
                                    "fetch origin "
                                    "+refs/heads/*:refs/copy/heads/*",
                                    env=ssh_env)
                        push_string = "push %s +refs/copy/heads/*:refs/heads/*"
                    else:
                        run_command("git init %s" % repo_path)
                        with open(os.path.join(repo_path,
                                               ".gitreview"),
                                  'w') as gitreview:
                            gitreview.write("""[gerrit]
host=%s
port=29418
project=%s
""" % (GERRIT_HOST, project_git))
                        git_command(repo_path, "add .gitreview")
                        cmd = ("commit -a -m'Added .gitreview' --author='%s'"
                               % GERRIT_GITID)
                        git_command(repo_path, cmd)
                        push_string = "push --all %s"
                    gerrit.createProject(project)

                    if not os.path.exists(project_dir):
                        run_command("git --bare init %s" % project_dir)
                        run_command("chown -R gerrit2:gerrit2 %s"
                                    % project_dir)

                    git_command(repo_path,
                                push_string % remote_url,
                                env=ssh_env)
                    git_command(repo_path,
                                "push --tags %s" % remote_url, env=ssh_env)
                finally:
                    run_command("rm -fr %s" % tmpdir)

            try:
                acl_config = section.get('acl-config',
                                         '%s.config' % os.path.join(ACL_DIR,
                                                                    project))
            except AttributeError:
                acl_config = None

            if acl_config:
                if not os.path.isfile(acl_config):
                    write_acl_config(project,
                                     ACL_DIR,
                                     section.get('acl-base', None),
                                     section.get('acl-append', []),
                                     section.get('acl-parameters', {}))
                tmpdir = tempfile.mkdtemp()
                try:
                    repo_path = os.path.join(tmpdir, 'repo')
                    ret, _ = run_command_status("git init %s" % repo_path)
                    if ret != 0:
                        continue
                    if (fetch_config(project,
                                     remote_url,
                                     repo_path,
                                     ssh_env) and
                        copy_acl_config(project, repo_path,
                                        acl_config) and
                            create_groups_file(project, gerrit, repo_path)):
                        push_acl_config(project,
                                        remote_url,
                                        repo_path,
                                        GERRIT_GITID,
                                        ssh_env)
                finally:
                    run_command("rm -fr %s" % tmpdir)
    finally:
        os.unlink(ssh_env['GIT_SSH'])
示例#4
0
def main():

    PROJECTS_YAML = os.environ.get('PROJECTS_YAML',
                                   '/home/gerrit2/projects.yaml')
    configs = [config for config in yaml.load_all(open(PROJECTS_YAML))]
    defaults = configs[0][0]
    default_has_issues = defaults.get('has-issues', False)
    default_has_downloads = defaults.get('has-downloads', False)
    default_has_wiki = defaults.get('has-wiki', False)

    LOCAL_GIT_DIR = defaults.get('local-git-dir', '/var/lib/git')
    ACL_DIR = defaults.get('acl-dir')
    GERRIT_HOST = defaults.get('gerrit-host')
    GERRIT_USER = defaults.get('gerrit-user')
    GERRIT_KEY = defaults.get('gerrit-key')

    GITHUB_SECURE_CONFIG = defaults.get(
        'github-config',
        '/etc/github/github-projects.secure.config')

    secure_config = ConfigParser.ConfigParser()
    secure_config.read(GITHUB_SECURE_CONFIG)

    # Project creation doesn't work via oauth
    ghub = github.Github(secure_config.get("github", "username"),
                         secure_config.get("github", "password"))
    orgs = ghub.get_user().get_orgs()
    orgs_dict = dict(zip([o.login.lower() for o in orgs], orgs))

    gerrit = gerritlib.gerrit.Gerrit('localhost',
                                     GERRIT_USER,
                                     29418,
                                     GERRIT_KEY)
    project_list = gerrit.listProjects()
    ssh_env = make_ssh_wrapper(GERRIT_USER, GERRIT_KEY)
    try:

        for section in configs[1]:
            project = section['project']
            options = section.get('options', dict())
            description = section.get('description', None)
            homepage = section.get('homepage', defaults.get('homepage', None))
            upstream = section.get('upstream', None)

            project_git = "%s.git" % project
            project_dir = os.path.join(LOCAL_GIT_DIR, project_git)

            # Find the project's repo
            project_split = project.split('/', 1)
            if len(project_split) > 1:
                repo_name = project_split[1]
            else:
                repo_name = project
            has_issues = 'has-issues' in options or default_has_issues
            has_downloads = 'has-downloads' in options or default_has_downloads
            has_wiki = 'has-wiki' in options or default_has_wiki
            try:
                org = orgs_dict[project_split[0].lower()]
            except KeyError:
                # We do not have control of this github org ignore the project.
                continue
            try:
                repo = org.get_repo(repo_name)
            except github.GithubException:
                repo = org.create_repo(repo_name,
                                       homepage=homepage,
                                       has_issues=has_issues,
                                       has_downloads=has_downloads,
                                       has_wiki=has_wiki)
            if description:
                repo.edit(repo_name, description=description)
            if homepage:
                repo.edit(repo_name, homepage=homepage)

            repo.edit(repo_name, has_issues=has_issues,
                      has_downloads=has_downloads,
                      has_wiki=has_wiki)

            if 'gerrit' not in [team.name for team in repo.get_teams()]:
                teams = org.get_teams()
                teams_dict = dict(zip([t.name.lower() for t in teams], teams))
                teams_dict['gerrit'].add_to_repos(repo)

            remote_url = "ssh://*****:*****@lists.openstack.org>'"
                        git_command(repo_path, cmd)
                        push_string = "push --all %s"
                    gerrit.createProject(project)

                    if not os.path.exists(project_dir):
                        run_command("git --bare init %s" % project_dir)
                        run_command("chown -R gerrit2:gerrit2 %s"
                                    % project_dir)

                    git_command(repo_path,
                                push_string % remote_url,
                                env=ssh_env)
                    git_command(repo_path,
                                "push --tags %s" % remote_url, env=ssh_env)
                finally:
                    run_command("rm -fr %s" % tmpdir)

            try:
                acl_config = section.get('acl-config',
                                         '%s.config' % os.path.join(ACL_DIR,
                                                                    project))
            except AttributeError:
                acl_config = None

            if acl_config:
                if not os.path.isfile(acl_config):
                    write_acl_config(project,
                                     ACL_DIR,
                                     section.get('acl-base', None),
                                     section.get('acl-append', []),
                                     section.get('acl-parameters', {}))
                tmpdir = tempfile.mkdtemp()
                try:
                    repo_path = os.path.join(tmpdir, 'repo')
                    ret, _ = run_command_status("git init %s" % repo_path)
                    if ret != 0:
                        continue
                    if (fetch_config(project,
                                     remote_url,
                                     repo_path,
                                     ssh_env) and
                        copy_acl_config(project, repo_path,
                                        acl_config) and
                            create_groups_file(project, gerrit, repo_path)):
                        push_acl_config(project,
                                        remote_url,
                                        repo_path,
                                        ssh_env)
                finally:
                    run_command("rm -fr %s" % tmpdir)
    finally:
        os.unlink(ssh_env['GIT_SSH'])
示例#5
0
def main():

    PROJECTS_YAML = os.environ.get('PROJECTS_YAML',
                                   '/home/gerrit2/projects.yaml')
    configs = [config for config in yaml.load_all(open(PROJECTS_YAML))]
    defaults = configs[0][0]
    default_has_github = defaults.get('has-github', True)

    LOCAL_GIT_DIR = defaults.get('local-git-dir', '/var/lib/git')
    ACL_DIR = defaults.get('acl-dir')
    GERRIT_HOST = defaults.get('gerrit-host')
    GERRIT_PORT = int(defaults.get('gerrit-port', '29418'))
    GERRIT_USER = defaults.get('gerrit-user')
    GERRIT_KEY = defaults.get('gerrit-key')
    GERRIT_GITID = defaults.get('gerrit-committer')
    GERRIT_SYSTEM_USER = defaults.get('gerrit-system-user', 'gerrit2')
    GERRIT_SYSTEM_GROUP = defaults.get('gerrit-system-group', 'gerrit2')

    gerrit = gerritlib.gerrit.Gerrit('localhost', GERRIT_USER, GERRIT_PORT,
                                     GERRIT_KEY)
    project_list = gerrit.listProjects()
    ssh_env = make_ssh_wrapper(GERRIT_USER, GERRIT_KEY)
    try:

        for section in configs[1]:
            project = section['project']
            options = section.get('options', dict())
            description = section.get('description', None)
            homepage = section.get('homepage', defaults.get('homepage', None))
            upstream = section.get('upstream', None)

            project_git = "%s.git" % project
            project_dir = os.path.join(LOCAL_GIT_DIR, project_git)

            if 'has-github' in options or default_has_github:
                create_github_project(defaults, options, project, description,
                                      homepage)

            remote_url = "ssh://localhost:%s/%s" % (GERRIT_PORT, project)
            if project not in project_list:
                tmpdir = tempfile.mkdtemp()
                try:
                    repo_path = os.path.join(tmpdir, 'repo')
                    if upstream:
                        run_command(
                            "git clone %(upstream)s %(repo_path)s" %
                            dict(upstream=upstream, repo_path=repo_path))
                        git_command(repo_path, "fetch origin "
                                    "+refs/heads/*:refs/copy/heads/*",
                                    env=ssh_env)
                        push_string = "push %s +refs/copy/heads/*:refs/heads/*"
                    else:
                        run_command("git init %s" % repo_path)
                        with open(os.path.join(repo_path, ".gitreview"),
                                  'w') as gitreview:
                            gitreview.write("""[gerrit]
host=%s
port=%s
project=%s
""" % (GERRIT_HOST, GERRIT_PORT, project_git))
                        git_command(repo_path, "add .gitreview")
                        cmd = ("commit -a -m'Added .gitreview' --author='%s'" %
                               GERRIT_GITID)
                        git_command(repo_path, cmd)
                        push_string = "push --all %s"
                    gerrit.createProject(project)

                    if not os.path.exists(project_dir):
                        run_command("git --bare init %s" % project_dir)
                        run_command("chown -R %s:%s %s" %
                                    (GERRIT_SYSTEM_USER, GERRIT_SYSTEM_GROUP,
                                     project_dir))

                    git_command(repo_path,
                                push_string % remote_url,
                                env=ssh_env)
                    git_command(repo_path,
                                "push --tags %s" % remote_url,
                                env=ssh_env)
                finally:
                    run_command("rm -fr %s" % tmpdir)

            try:
                acl_config = section.get(
                    'acl-config', '%s.config' % os.path.join(ACL_DIR, project))
            except AttributeError:
                acl_config = None

            if acl_config:
                if not os.path.isfile(acl_config):
                    write_acl_config(project, ACL_DIR,
                                     section.get('acl-base', None),
                                     section.get('acl-append', []),
                                     section.get('acl-parameters', {}))
                tmpdir = tempfile.mkdtemp()
                try:
                    repo_path = os.path.join(tmpdir, 'repo')
                    ret, _ = run_command_status("git init %s" % repo_path)
                    if ret != 0:
                        continue
                    if (fetch_config(project, remote_url, repo_path, ssh_env)
                            and copy_acl_config(project, repo_path, acl_config)
                            and create_groups_file(project, gerrit,
                                                   repo_path)):
                        push_acl_config(project, remote_url, repo_path,
                                        GERRIT_GITID, ssh_env)
                finally:
                    run_command("rm -fr %s" % tmpdir)
    finally:
        os.unlink(ssh_env['GIT_SSH'])
示例#6
0
def main():

    PROJECTS_YAML = os.environ.get('PROJECTS_YAML',
                                   '/home/gerrit2/projects.yaml')
    configs = [config for config in yaml.load_all(open(PROJECTS_YAML))]
    defaults = configs[0][0]
    default_has_issues = defaults.get('has-issues', False)
    default_has_downloads = defaults.get('has-downloads', False)
    default_has_wiki = defaults.get('has-wiki', False)

    LOCAL_GIT_DIR = defaults.get('local-git-dir', '/var/lib/git')
    GERRIT_HOST = defaults.get('gerrit-host')
    GERRIT_USER = defaults.get('gerrit-user')
    GERRIT_KEY = defaults.get('gerrit-key')

    GITHUB_SECURE_CONFIG = defaults.get(
        'github-config',
        '/etc/github/github-projects.secure.config')

    secure_config = ConfigParser.ConfigParser()
    secure_config.read(GITHUB_SECURE_CONFIG)

    # Project creation doesn't work via oauth
    ghub = github.Github(secure_config.get("github", "username"),
                         secure_config.get("github", "password"))
    orgs = ghub.get_user().get_orgs()
    orgs_dict = dict(zip([o.login.lower() for o in orgs], orgs))

    gerrit = gerritlib.gerrit.Gerrit('localhost',
                                     GERRIT_USER,
                                     29418,
                                     GERRIT_KEY)
    project_list = gerrit.listProjects()
    ssh_env = make_ssh_wrapper(GERRIT_USER, GERRIT_KEY)
    try:

        for section in configs[1]:
            project = section['project']
            options = section.get('options', dict())
            description = section.get('description', None)
            homepage = section.get('homepage', defaults.get('homepage', None))
            upstream = section.get('upstream', None)

            project_git = "%s.git" % project
            project_dir = os.path.join(LOCAL_GIT_DIR, project_git)

            # Find the project's repo
            project_split = project.split('/', 1)
            if len(project_split) > 1:
                repo_name = project_split[1]
            else:
                repo_name = project
            has_issues = 'has-issues' in options or default_has_issues
            has_downloads = 'has-downloads' in options or default_has_downloads
            has_wiki = 'has-wiki' in options or default_has_wiki
            try:
                org = orgs_dict[project_split[0].lower()]
            except KeyError:
                # We do not have control of this github org ignore the project.
                continue
            try:
                repo = org.get_repo(repo_name)
            except github.GithubException:
                repo = org.create_repo(repo_name,
                                       homepage=homepage,
                                       has_issues=has_issues,
                                       has_downloads=has_downloads,
                                       has_wiki=has_wiki)
            if description:
                repo.edit(repo_name, description=description)
            if homepage:
                repo.edit(repo_name, homepage=homepage)

            repo.edit(repo_name, has_issues=has_issues,
                      has_downloads=has_downloads,
                      has_wiki=has_wiki)

            if 'gerrit' not in [team.name for team in repo.get_teams()]:
                teams = org.get_teams()
                teams_dict = dict(zip([t.name.lower() for t in teams], teams))
                teams_dict['gerrit'].add_to_repos(repo)

            remote_url = "ssh://*****:*****@lists.openstack.org>'"
                        git_command(repo_path, cmd)
                    gerrit.createProject(project)

                    if not os.path.exists(project_dir):
                        run_command("git --bare init %s" % project_dir)
                        run_command("chown -R gerrit2:gerrit2 %s"
                                    % project_dir)

                    git_command(repo_path,
                                "push --all %s" % remote_url,
                                env=ssh_env)
                    git_command(repo_path,
                                "push --tags %s" % remote_url, env=ssh_env)
                finally:
                    run_command("rm -fr %s" % tmpdir)

            if 'acl_config' in section:
                tmpdir = tempfile.mkdtemp()
                try:
                    repo_path = os.path.join(tmpdir, 'repo')
                    ret, _ = run_command_status("git init %s" % repo_path)
                    if ret != 0:
                        continue
                    if (fetch_config(project,
                                     remote_url,
                                     repo_path,
                                     ssh_env) and
                        copy_acl_config(project, repo_path,
                                        section['acl_config']) and
                            create_groups_file(project, gerrit, repo_path)):
                        push_acl_config(project,
                                        remote_url,
                                        repo_path,
                                        ssh_env)
                finally:
                    run_command("rm -fr %s" % tmpdir)
    finally:
        os.unlink(ssh_env['GIT_SSH'])