Re: Move packages from alioth to salsa
On Fri, May 18, 2018 at 03:59:41PM +0200, Geert Stappers wrote:
> On Fri, May 11, 2018 at 11:04:13AM +0200, Jörg Frings-Fürst wrote:
> >
> > please can someone move my packages from alioth to salsa.
> >
>
> Copying is done
>
> Next step is automating granting permission.
>
Done.
If it needs more TLC, say so.
Groeten
Geert Stappers
--
Leven en laten leven
#!/usr/bin/python
import argparse
import locale
import logging
import os.path
import sys
import time
import requests
if sys.version_info [0] < 3:
input = raw_input
# keep trailing slashes if changed
SALSA_BASE_URL='https://salsa.debian.org/'
SALSA_API=SALSA_BASE_URL + "api/v4/"
ENV_VAR='GITLAB_TOKEN'
def parse_args():
parser = argparse.ArgumentParser(description='add a GitLab user',
epilog="Your GitLab token should be "
"provided via the {} environment variable. You can create one here: "
"{}profile/personal_access_tokens.".format(ENV_VAR, SALSA_BASE_URL))
parser.add_argument('user',
help='gitlab user name')
parser.add_argument('project',
nargs= '+',
help=('gitlab project name [ project [ project [ ... ] ] ]'
+ '\n\t\te.g. debian/radvd')
)
default_level = 'WARNING'
parser.add_argument('-v', '--verbose',
dest='loglevel', action='store_const',
const='INFO', default=default_level,
help='enable verbose messages')
parser.add_argument('-d', '--debug',
dest='loglevel', action='store_const',
const='DEBUG', default=default_level,
help='enable debugging messages')
parser.add_argument('--loglevel',
default=default_level, type=str.upper,
help='expliticly set logging level')
parser.add_argument('--syslog',
const='INFO', nargs='?',
default=None, type=str.upper,
help='send logs to syslog')
parser.add_argument('--logfile', default=None,
help='write log to the given file (default: %(default)s)')
return parser.parse_args()
def setup_logging(args):
logger = logging.getLogger('')
# disable the base filter, each stream has its own filter
logger.setLevel('DEBUG')
if args.syslog:
sl = logging.handlers.SysLogHandler(address='/dev/log')
sl.setFormatter(logging.Formatter(prog+'[%(process)d]: %(message)s'))
# convert syslog argument to a numeric value
sl.setLevel(args.syslog.upper())
logger.addHandler(sl)
logger.debug('configured syslog level %s' % args.syslog)
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter('%(message)s'))
handler.setLevel(args.loglevel.upper())
logger.addHandler(handler)
if args.logfile:
handler = logging.FileHandler(args.logfile)
handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
logger.addHandler(handler)
def get_salsa_member_id(args):
headers = {'PRIVATE-TOKEN': os.environ[ENV_VAR]}
salsa_member_id = None
members = requests.get(SALSA_API + 'users?username=' + args.user, headers=headers)
members.raise_for_status()
for member in members.json():
if member['username'] == args.user:
salsa_member_id = member['id']
logging.debug('salsa_member_id: %d', salsa_member_id)
return salsa_member_id
def get_salsa_project_id(prj):
headers = {'PRIVATE-TOKEN': os.environ[ENV_VAR]}
salsa_project_id = None
projects = requests.get(SALSA_API + 'search?scope=projects&search='
+ str(prj.split('/')[-1]), headers=headers)
projects.raise_for_status()
for project in projects.json():
logging.debug('salsa_project_found: %s', project['path_with_namespace'])
if project['path_with_namespace'] == prj:
salsa_project_id = project['id']
logging.debug('salsa_project_id: %d', salsa_project_id)
return salsa_project_id
def add_member_to_project(member_id,project_id,project_name,level):
logging.info("add member to project %d", project_id)
payload = {'user_id': member_id,
'access_level': level}
headers = {'PRIVATE-TOKEN': os.environ[ENV_VAR]}
logging.debug('payload: %s', payload)
result = requests.post(SALSA_API
+ 'projects/' + str(project_id) + '/members',
data=payload, headers=headers)
logging.debug('result.content: %s', result.content)
try:
result.raise_for_status()
except requests.exceptions.HTTPError as e:
logging.error('request failed with %s: %s, project: %s', e,
result.json()['message'], project_name )
def main():
args = parse_args()
gl_level = 30 # wanted gitlab access level
setup_logging(args)
if ENV_VAR in os.environ:
salsa_member_id = get_salsa_member_id(args)
else:
logging.warning('Please provide gitlab API token via %s',
ENV_VAR)
sys.exit(1)
if salsa_member_id == None:
logging.warning('Could not find %s, so stopped', args.user)
sys.exit(1)
for p in args.project:
logging.debug('looping for project %s', p)
salsa_project_id = get_salsa_project_id(p)
if salsa_project_id == None:
logging.warning('Could not find %s, so skipped', p)
else:
add_member_to_project(salsa_member_id,salsa_project_id,p,gl_level)
if __name__ == '__main__':
main()
Reply to: