| #! /usr/bin/env python |
| # Copyright (c) 2013 Hewlett-Packard Development Company, L.P. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations |
| # under the License. |
| # |
| # create_cgitrepos.py reads the project config file called projects.yaml |
| # and generates a cgitrepos configuration file which is then copied to |
| # the cgit server. |
| # |
| # It also creates the necessary top-level directories for each project |
| # organization (openstack, stackforge, etc) |
| |
| import os |
| import subprocess |
| import yaml |
| |
| |
| PROJECTS_YAML = os.environ.get('PROJECTS_YAML', |
| '/home/cgit/projects.yaml') |
| CGIT_REPOS = os.environ.get('CGIT_REPOS', |
| '/etc/cgitrepos') |
| REPO_PATH = os.environ.get('REPO_PATH', |
| '/var/lib/git') |
| CGIT_USER = os.environ.get('CGIT_USER', 'cgit') |
| CGIT_GROUP = os.environ.get('CGIT_GROUP', 'cgit') |
| |
| |
| def main(): |
| (defaults, config) = tuple(yaml.safe_load_all(open(PROJECTS_YAML))) |
| gitorgs = {} |
| names = set() |
| for entry in config: |
| (org, name) = entry['project'].split('/') |
| description = entry.get('description', name) |
| assert name not in names |
| names.add(name) |
| gitorgs.setdefault(org, []).append((name, description)) |
| for org in gitorgs: |
| if not os.path.isdir('%s/%s' % (REPO_PATH, org)): |
| os.makedirs('%s/%s' % (REPO_PATH, org)) |
| with open(CGIT_REPOS, 'w') as cgit_file: |
| cgit_file.write('# Autogenerated by create_cgitrepos.py\n') |
| for org in sorted(gitorgs): |
| cgit_file.write('\n') |
| cgit_file.write('section=%s\n' % (org)) |
| org_dir = os.path.join(REPO_PATH, org) |
| projects = gitorgs[org] |
| projects.sort() |
| for (name, description) in projects: |
| project_repo = "%s.git" % os.path.join(org_dir, name) |
| cgit_file.write('\n') |
| cgit_file.write('repo.url=%s/%s\n' % (org, name)) |
| cgit_file.write('repo.path=%s/\n' % (project_repo)) |
| cgit_file.write('repo.desc=%s\n' % (description)) |
| if not os.path.exists(project_repo): |
| subprocess.call(['git', 'init', '--bare', project_repo]) |
| subprocess.call(['chown', '-R', '%s:%s' |
| % (CGIT_USER, CGIT_GROUP), project_repo]) |
| |
| |
| if __name__ == "__main__": |
| main() |