Get the OpenStack repo list
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import github
import argparse
import codecs
import logging
DESCRIPTION=u'''
获取 openstack 和 openstack-dev 下所有仓库的列表,输出格式为:
组织名 仓库名 仓库地址
username 和 password 不是必须的。但是不填写时,会受到 Github Rate Limit[0].
有认证的访问限制是每小时5000次。没有认证的访问限制是每小时60次。
[0] https://developer.github.com/v3/#rate-limiting
'''
def main():
parser = argparse.ArgumentParser(
description=DESCRIPTION,
formatter_class=argparse.RawDescriptionHelpFormatter
)
parser.add_argument('-u', '--username',
help='Usename to connect github')
parser.add_argument('-p', '--password',
help='Password to connect github')
parser.add_argument('-o', '--output',
help='Outout file. Default is stdout')
parser.add_argument('-O', '--organization',
default='openstack,openstack-dev',
help='Organization to crawl repos from github')
parser.add_argument('-d', '--debug',
action='store_true',
help='Show debug message')
parser.add_argument('-v', '--verbose',
action='store_true',
help='Show verbse message')
conf = parser.parse_args()
log_level = logging.WARNING
if conf.verbose:
log_level = logging.INFO
if conf.debug:
log_level = logging.DEBUG
logging.basicConfig(level=log_level)
log = logging.getLogger()
gh = github.Github(conf.username, conf.password)
repos = []
for org in conf.organization.strip().split(','):
organization = gh.get_organization(org)
for repo in organization.get_repos():
log.info('Get: %s %s %s', org, repo.name, repo.clone_url)
repos.append((organization, repo))
if conf.output:
with codecs.open(conf.output, 'w', 'utf8') as output:
for org, repo in repos:
output.write('{} {} {}\n'.format(org.login,
repo.name,
repo.clone_url))
else:
for org, repo in repos:
print('{} {} {}'.format(org.login,
repo.name,
repo.clone_url))
if __name__ == "__main__":
main()
#!/bin/bash
GIT_BASE='https://github.com'
if [ -e devstack ]; then
cd devstack
git pull --quiet
else
git clone --depth 1 --quiet https://github.com/openstack-dev/devstack.git
cd devstack
fi
source stackrc
set -o posix
for repo in $(set | grep -v GITREPO | grep REPO | grep 'openstack');
do
name=$(echo $repo|awk -F "=" '{print substr(tolower($1),0,length($1)-5)}')
url=$(echo $repo|awk -F "=" '{print $2}')
GITREPO[$name]=$url
done
for name in ${!GITREPO[@]}
do
echo ${GITREPO[$name]}
done