Commit 2164750f authored by Lukas Fleischer's avatar Lukas Fleischer
Browse files

Do not use symrefs for manually created Git refs

When creating the refs for the package base branch and the HEAD ref
workaround, directly use commit IDs instead of symrefs. It looks like
Git cannot pack symrefs, so this is expected to improve space
efficiency. Also, since the refs are now only created (or updated) when
new objects are actually received, this fixes a problem with dangling
refs that were created when a user initialized a repository but did not
push anything.

Signed-off-by: Lukas Fleischer's avatarLukas Fleischer <>
parent bd9af5f8
......@@ -3,7 +3,6 @@
import configparser
import mysql.connector
import os
import pygit2
import re
import shlex
import sys
......@@ -78,21 +77,6 @@ def create_pkgbase(pkgbase, user):
def setup_repo(pkgbase):
if not re.match(repo_regex, pkgbase):
die('%s: invalid repository name: %s' % (action, pkgbase))
repo = pygit2.Repository(repo_path)
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 +
def check_permissions(pkgbase, user):
db = mysql.connector.connect(host=aur_db_host, user=aur_db_user,
passwd=aur_db_pass, db=aur_db_name,
......@@ -139,7 +123,6 @@ if action == 'git-upload-pack' or action == 'git-receive-pack':
if not pkgbase_exists(pkgbase):
create_pkgbase(pkgbase, user)
if action == 'git-receive-pack':
if not check_permissions(pkgbase, user):
......@@ -285,3 +285,13 @@ for pkgname in srcinfo.GetPackageNames():
save_srcinfo(srcinfo, db, cur, user)
# Create (or update) a branch with the name of the package base for better
# accessibility.
repo.create_reference('refs/heads/' + pkgbase, sha1_new, True)
# Work around a Git bug: The HEAD ref is not updated when using gitnamespaces.
# This can be removed once the bug fix is included in Git mainline. See
# for details.
repo.create_reference('refs/namespaces/' + pkgbase + '/HEAD', sha1_new, True)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment