From 06fc96403ae2ac1f187f59e304fdd7368de2e28c Mon Sep 17 00:00:00 2001 From: Sam Gleske <sag47@drexel.edu> Date: Tue, 10 Sep 2013 22:57:27 -0400 Subject: [PATCH] Working create project if doesn't exist in gitlab --- add_mirror.sh | 4 +-- config.sh | 1 + lib/create_gitlab_project.py | 56 ++++++++++++++++++++++++------------ 3 files changed, 40 insertions(+), 21 deletions(-) diff --git a/add_mirror.sh b/add_mirror.sh index 8c0dbe3..ed58fda 100755 --- a/add_mirror.sh +++ b/add_mirror.sh @@ -4,5 +4,5 @@ . "$(dirname $0)/config.sh" cd $(dirname $0) -export token_secret gitlab_url gitlab_namespace -python lib/create_gitlab_project.py test2 +export token_secret gitlab_url gitlab_namespace gitlab_user +python lib/create_gitlab_project.py test3 diff --git a/config.sh b/config.sh index 7240cd5..9d47271 100644 --- a/config.sh +++ b/config.sh @@ -6,3 +6,4 @@ token_secret="$(head -n1 /home/gitmirror/private_token)" #This group will contain all code mirrors gitlab_namespace="Mirrors" gitlab_url="https://comet.irt.drexel.edu" +gitlab_user="gitmirror" diff --git a/lib/create_gitlab_project.py b/lib/create_gitlab_project.py index 2435de5..d600c1e 100755 --- a/lib/create_gitlab_project.py +++ b/lib/create_gitlab_project.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -from sys import argv,exit +from sys import argv,exit,stderr import os import gitlab @@ -9,6 +9,7 @@ try: token_secret=os.environ['token_secret'] gitlab_url=os.environ['gitlab_url'] gitlab_namespace=os.environ['gitlab_namespace'] + gitlab_user=os.environ['gitlab_user'] except KeyError: print "Environment config missing. Do not run this script standalone." exit(1) @@ -18,25 +19,42 @@ except IndexError: git=gitlab.Gitlab(gitlab_url,token_secret) -#Locate the group -found_group=False -for group in git.getGroups(): - if group['name'] == gitlab_namespace: - found_group=group - break -else: - if not found_group: - print "Project namespace (user or group) not found or user does not have permission of existing group." - exit(1) +def findgroup(gname): + #Locate the group + found_group=False + for group in git.getGroups(): + if group['name'] == gname: + return group + else: + if not found_group: + print >> stderr, "Project namespace (user or group) not found or user does not have permission of existing group." + exit(1) + +def findproject(gname,pname): + for project in git.getProjects(): + if project['namespace']['name'] == gname and project['name'] == pname: + return project + else: + return False + +def createproject(pname): + description="Public mirror of %s." % project_name + new_project=git.createProject(pname,description=description,issues_enabled=False,wall_enabled=False,merge_requests_enabled=False,wiki_enabled=False,snippets_enabled=False) + new_project=findproject(gitlab_user,pname) + new_project=git.moveProject(found_group['id'],new_project['id']) + if findproject(gitlab_namespace,pname): + return findproject(gitlab_namespace,pname) + else: + return False + +found_group=findgroup(gitlab_namespace) +found_project=findproject(gitlab_namespace,project_name) -#Locate existing repository, if it doesn't exist then create it in gitlab -found_project=False -for project in git.getProjects(): - if project['namespace']['name'] == gitlab_namespace and project['name'] == project_name: - found_project=project - break if not found_project: - print "not found" - pass + found_project=createproject(project_name) + if not found_project: + #print >> stderr, "There was a problem creating %s/%s. Did you give %s user Admin rights in gitlab?" % {gitlab_namespace,project_name,gitlab_user} + print >> stderr, "There was a problem creating {group}/{project}. Did you give {user} user Admin rights in gitlab?".format(group=gitlab_namespace,project=project_name,user=gitlab_user) + exit(1) print found_project['http_url_to_repo'] -- GitLab