summaryrefslogtreecommitdiff
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
parent124ad009975eb9dfed8141f24fccf12fdc720346 (diff)
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>
-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" +