diff options
author | Lukas Fleischer <lfleischer@archlinux.org> | 2015-06-02 14:42:01 +0200 |
---|---|---|
committer | Lukas Fleischer <lfleischer@archlinux.org> | 2015-06-02 15:12:00 +0200 |
commit | 6fe87925089ef16eb8f378d105c4707895dd6e29 (patch) | |
tree | 33140c4a459af8b8b654a4fe298f31a9cf78df42 | |
parent | 124ad009975eb9dfed8141f24fccf12fdc720346 (diff) | |
download | aur-6fe87925089ef16eb8f378d105c4707895dd6e29.tar.gz aur-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>
-rwxr-xr-x | git-interface/git-serve.py | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/git-interface/git-serve.py b/git-interface/git-serve.py index eebb087c..fce766a8 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" + |