summaryrefslogtreecommitdiffstats
path: root/git-interface
diff options
context:
space:
mode:
authorLukas Fleischer <lfleischer@archlinux.org>2015-06-02 14:42:01 +0200
committerLukas Fleischer <lfleischer@archlinux.org>2015-06-02 15:12:00 +0200
commit6fe87925089ef16eb8f378d105c4707895dd6e29 (patch)
tree33140c4a459af8b8b654a4fe298f31a9cf78df42 /git-interface
parent124ad009975eb9dfed8141f24fccf12fdc720346 (diff)
downloadaurweb-6fe87925089ef16eb8f378d105c4707895dd6e29.tar.xz
Setup Git repositories even if package base exists
Sometimes, we need to initialize the Git repository even if the package base already exists (e.g. when using a non-empty package database with empty repositories during the AUR 4.0.0 migration period). Make sure that the package branch and the namespaced HEAD ref is always created. Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
Diffstat (limited to 'git-interface')
-rwxr-xr-xgit-interface/git-serve.py24
1 files changed, 17 insertions, 7 deletions
diff --git a/git-interface/git-serve.py b/git-interface/git-serve.py
index eebb087..fce766a 100755
--- a/git-interface/git-serve.py
+++ b/git-interface/git-serve.py
@@ -52,7 +52,7 @@ def list_repos(user):
print((' ' if row[1] else '*') + row[0])
db.close()
-def setup_repo(pkgbase, user):
+def create_pkgbase(pkgbase, user):
if not re.match(repo_regex, pkgbase):
die('%s: invalid repository name: %s' % (action, pkgbase))
if pkgbase_exists(pkgbase):
@@ -79,11 +79,20 @@ def setup_repo(pkgbase, user):
db.commit()
db.close()
+def setup_repo(pkgbase):
+ if not re.match(repo_regex, pkgbase):
+ die('%s: invalid repository name: %s' % (action, pkgbase))
+
repo = pygit2.Repository(repo_path)
- repo.create_reference('refs/heads/' + pkgbase,
- 'refs/namespaces/' + pkgbase + '/refs/heads/master')
- repo.create_reference('refs/namespaces/' + pkgbase + '/HEAD',
- 'refs/namespaces/' + pkgbase + '/refs/heads/master')
+ refs = repo.listall_references()
+
+ if not 'refs/heads/' + pkgbase in refs:
+ repo.create_reference('refs/heads/' + pkgbase, 'refs/namespaces/' +
+ pkgbase + '/refs/heads/master')
+ if not 'refs/namespaces/' + pkgbase + '/HEAD' in refs:
+ repo.create_reference('refs/namespaces/' + pkgbase + '/HEAD',
+ 'refs/namespaces/' + pkgbase +
+ '/refs/heads/master')
def check_permissions(pkgbase, user):
db = mysql.connector.connect(host=aur_db_host, user=aur_db_user,
@@ -130,7 +139,8 @@ if action == 'git-upload-pack' or action == 'git-receive-pack':
die('%s: invalid repository name: %s' % (action, repo))
if not pkgbase_exists(pkgbase):
- setup_repo(pkgbase, user)
+ create_pkgbase(pkgbase, user)
+ setup_repo(pkgbase);
if action == 'git-receive-pack':
if not check_permissions(pkgbase, user):
@@ -150,7 +160,7 @@ elif action == 'setup-repo':
die_with_help("%s: missing repository name" % (action))
if len(cmdargv) > 2:
die_with_help("%s: too many arguments" % (action))
- setup_repo(cmdargv[1], user)
+ create_pkgbase(cmdargv[1], user)
elif action == 'help':
die("Commands:\n" +
" help Show this help message and exit.\n" +