[aur-dev] [PATCH] Use custom templates for Git repositories

Lukas Fleischer archlinux at cryptocrack.de
Mon Jan 12 16:49:46 UTC 2015


Do not waste disk space by copying dozens of unneeded sample hooks. Use
a custom template directory that only includes the git-update hook.

Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>
---
 INSTALL                                  | 12 ++++++++----
 conf/config.proto                        |  1 +
 scripts/git-integration/gen-templates.py | 29 +++++++++++++++++++++++++++++
 scripts/git-integration/git-serve.py     |  5 ++---
 scripts/git-integration/init-repos.py    |  5 ++---
 5 files changed, 42 insertions(+), 10 deletions(-)
 create mode 100755 scripts/git-integration/gen-templates.py

diff --git a/INSTALL b/INSTALL
index 2368db1..7b90ffd 100644
--- a/INSTALL
+++ b/INSTALL
@@ -19,7 +19,11 @@ Setup on Arch Linux
 
    $ mysql -uaur -p AUR </srv/http/aur/schema/aur-schema.sql
 
-5) Clone the OpenSSH project, apply the AUR sshd patch and run `make`:
+5) Generate templates for new Git repositories:
+
+   $ /srv/http/aur/scripts/git-integration/gen-templates.py
+
+6) Clone the OpenSSH project, apply the AUR sshd patch and run `make`:
 
    $ cd /srv/http/aur/
    $ git clone git://anongit.mindrot.org/openssh.git
@@ -30,7 +34,7 @@ Setup on Arch Linux
    $ ./configure
    $ make
 
-6) Create and edit the sshd configuration:
+7) Create and edit the sshd configuration:
 
    $ cd /srv/http/aur/
    $ umask 077
@@ -38,12 +42,12 @@ Setup on Arch Linux
    $ ssh-keygen -f .ssh/ssh_host_rsa_key -N '' -t rsa
    $ cp scripts/git-integration/sshd_config .ssh/
 
-7) Create a new user and change ownership of the .ssh directory:
+8) Create a new user and change ownership of the .ssh directory:
 
    # useradd -U -d /srv/http/aur -c 'AUR user' aur
    # chown aur:aur /srv/http/aur/.ssh/
 
-8) Add, enable and start systemd unit files for the new sshd:
+9) Add, enable and start systemd unit files for the new sshd:
 
    # cp /srv/http/aur/conf/aur-sshd.socket /etc/systemd/system/
    # cp /srv/http/aur/conf/aur-sshd at .service /etc/systemd/system/
diff --git a/conf/config.proto b/conf/config.proto
index a3b1640..ac79bd6 100644
--- a/conf/config.proto
+++ b/conf/config.proto
@@ -35,6 +35,7 @@ ssh-options = no-port-forwarding,no-X11-forwarding,no-pty
 [serve]
 repo-base = /srv/http/aur/repos/
 repo-regex = [a-z0-9][a-z0-9.+_-]*$
+template-path =  /srv/http/aur/scripts/git-integration/templates/
 git-update-hook = /srv/http/aur/scripts/git-integration/git-update.py
 git-shell-cmd = /usr/bin/git-shell
 ssh-cmdline = ssh -p 2222 aur at aur.archlinux.org
diff --git a/scripts/git-integration/gen-templates.py b/scripts/git-integration/gen-templates.py
new file mode 100755
index 0000000..e451b53
--- /dev/null
+++ b/scripts/git-integration/gen-templates.py
@@ -0,0 +1,29 @@
+#!/usr/bin/python3
+
+import configparser
+import os
+import shutil
+import sys
+
+config = configparser.RawConfigParser()
+config.read(os.path.dirname(os.path.realpath(__file__)) + "/../../conf/config")
+
+template_path = config.get('serve', 'template-path')
+git_update_hook = config.get('serve', 'git-update-hook')
+
+def die(msg):
+    sys.stderr.write("%s\n" % (msg))
+    exit(1)
+
+if os.path.exists(template_path):
+    shutil.rmtree(template_path)
+
+os.mkdir(template_path)
+os.chdir(template_path)
+os.mkdir("branches")
+os.mkdir("hooks")
+os.mkdir("info")
+os.symlink(git_update_hook, template_path + 'hooks/update')
+
+with open("description", 'w') as f:
+    f.write("Unnamed repository; push to update the description.\n")
diff --git a/scripts/git-integration/git-serve.py b/scripts/git-integration/git-serve.py
index 6f4d4f9..de9cb59 100755
--- a/scripts/git-integration/git-serve.py
+++ b/scripts/git-integration/git-serve.py
@@ -19,9 +19,9 @@ aur_db_socket = config.get('database', 'socket')
 
 repo_base_path = config.get('serve', 'repo-base')
 repo_regex = config.get('serve', 'repo-regex')
-git_update_hook = config.get('serve', 'git-update-hook')
 git_shell_cmd = config.get('serve', 'git-shell-cmd')
 ssh_cmdline = config.get('serve', 'ssh-cmdline')
+template_path = config.get('serve', 'template-path')
 
 def repo_path_validate(path):
     if not path.startswith(repo_base_path):
@@ -87,8 +87,7 @@ def setup_repo(repo, user):
     db.close()
 
     repo_path = repo_base_path + '/' + repo + '.git/'
-    pygit2.init_repository(repo_path, True)
-    os.symlink(git_update_hook, repo_path + 'hooks/update')
+    pygit2.init_repository(repo_path, True, 48, template_path=template_path)
 
 def check_permissions(pkgbase, user):
     db = mysql.connector.connect(host=aur_db_host, user=aur_db_user,
diff --git a/scripts/git-integration/init-repos.py b/scripts/git-integration/init-repos.py
index 62c51b1..5c4fcfe 100755
--- a/scripts/git-integration/init-repos.py
+++ b/scripts/git-integration/init-repos.py
@@ -19,7 +19,7 @@ aur_db_socket = config.get('database', 'socket')
 
 repo_base_path = config.get('serve', 'repo-base')
 repo_regex = config.get('serve', 'repo-regex')
-git_update_hook = config.get('serve', 'git-update-hook')
+template_path = config.get('serve', 'template-path')
 
 def die(msg):
     sys.stderr.write("%s\n" % (msg))
@@ -45,7 +45,6 @@ for repo in repos:
     print("[%s/%d] %s" % (str(i).rjust(len(str(n))), n, repo))
 
     repo_path = repo_base_path + '/' + repo + '.git/'
-    pygit2.init_repository(repo_path, True)
-    os.symlink(git_update_hook, repo_path + 'hooks/update')
+    pygit2.init_repository(repo_path, True, 48, template_path=template_path)
 
     i += 1
-- 
2.2.1


More information about the aur-dev mailing list