summaryrefslogtreecommitdiff
path: root/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'api.py')
-rwxr-xr-xapi.py23
1 files changed, 19 insertions, 4 deletions
diff --git a/api.py b/api.py
index c3da440..234ebc7 100755
--- a/api.py
+++ b/api.py
@@ -198,6 +198,7 @@ class VCSWorker(API):
MAX_CLONE_TIME = 1
MAX_REMOVE_TIME = 60
+ MAX_CREATE_REPO_TIME = 5
MAX_PUSH_TIME = 60
GITLAB_DOMAIN = 'wmf-gitlab3.vm.liw.fi'
GITLAB_PROJECT = 'liw'
@@ -230,11 +231,13 @@ class VCSWorker(API):
ok = self._remove(
self._token, self.GITLAB_DOMAIN, self.GITLAB_PROJECT, name)
if ok:
- ok = self._push(
- dirname, self.GITLAB_DOMAIN, self.GITLAB_PROJECT, ref,
- name)
+ ok = self._create_repo(self._token, self.GITLAB_DOMAIN, name)
if ok:
- return 'Repository copied successfully\n'
+ ok = self._push(
+ dirname, self.GITLAB_DOMAIN, self.GITLAB_PROJECT, ref,
+ name)
+ if ok:
+ return 'Repository copied successfully\n'
logging.error('Something went wrong when copying repository')
return bottle.HTTPError(418)
@@ -252,6 +255,18 @@ class VCSWorker(API):
argv = ['curl', '-HPRIVATE-TOKEN: %s' % token, '-X', 'DELETE', url]
return runcmd('.', argv, self.MAX_REMOVE_TIME)
+ def _create_repo(self, token, gitlab_domain, name):
+ logging.info('Creating repository %s', name)
+ url = 'https://%s/api/v4/projects' % gitlab_domain
+ argv = [
+ 'curl',
+ url,
+ '-sv', '-X' 'POST',
+ '-d', 'name=%s' % name,
+ '-HPRIVATE-TOKEN: %s' % token,
+ ]
+ return runcmd('.', argv, self.MAX_CREATE_REPO_TIME)
+
def _push(self, dirname, gitlab_domain, gitlab_project, ref, name):
logging.info('Pushing %s to %s as %s', dirname, gitlab_domain, name)
url = 'ssh://git@%s/%s/%s.git' % (gitlab_domain, gitlab_project, name)