From 9158b8f4df607281cd38f0330e1ce658a19370b5 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Fri, 13 Jul 2018 20:39:34 +0100 Subject: gnu: Modify the gitolite package to support the Guix service. Previously the gitolite package worked, but there were problems using it for the service where you might have a minimal PATH. This commit patches the source and scripts where possible to use store paths, and also wraps the gitolite script to handle the harder dependencies. * gnu/packages/version-control.scm (gitolite)[arguments]: Add more patching to the patch-scripts phase, and add two new phases (patch-source and wrap-scripts). [inputs]: Add coreutils, findutils and inetutils. --- gnu/packages/version-control.scm | 53 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index 3db5796b4c..70fd40d87a 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -1026,12 +1026,48 @@ (define-public gitolite ((" perl -") (string-append " " perl " -"))) + (substitute* (find-files "src/triggers" ".*") + ((" sed ") + (string-append " " (which "sed") " "))) + + (substitute* + '("src/triggers/post-compile/update-gitweb-access-list" + "src/triggers/post-compile/ssh-authkeys-split" + "src/triggers/upstream") + ((" grep ") + (string-append " " (which "grep") " "))) + ;; Avoid references to the store in authorized_keys. ;; This works because gitolite-shell is in the PATH. (substitute* "src/triggers/post-compile/ssh-authkeys" (("\\$glshell \\$user") "gitolite-shell $user")) #t))) + (add-before 'install 'patch-source + (lambda* (#:key inputs #:allow-other-keys) + ;; Gitolite uses cat to test the readability of the + ;; pubkey + (substitute* "src/lib/Gitolite/Setup.pm" + (("\"cat ") + (string-append "\"" (which "cat") " ")) + (("\"ssh-keygen") + (string-append "\"" (which "ssh-keygen")))) + + (substitute* '("src/lib/Gitolite/Hooks/PostUpdate.pm" + "src/lib/Gitolite/Hooks/Update.pm") + (("/usr/bin/perl") + (string-append (assoc-ref inputs "perl") + "/bin/perl"))) + + (substitute* "src/lib/Gitolite/Common.pm" + (("\"ssh-keygen") + (string-append "\"" (which "ssh-keygen"))) + (("\"logger\"") + (string-append "\"" + (assoc-ref inputs "inetutils") + "/bin/logger\""))) + + #t)) (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let* ((output (assoc-ref outputs "out")) @@ -1045,9 +1081,24 @@ (define-public gitolite (symlink (string-append sharedir "/" script) (string-append bindir "/" script))) '("gitolite" "gitolite-shell")) + #t))) + (add-after 'install 'wrap-scripts + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (coreutils (assoc-ref inputs "coreutils")) + (findutils (assoc-ref inputs "findutils")) + (git (assoc-ref inputs "git"))) + (wrap-program (string-append out "/bin/gitolite") + `("PATH" ":" prefix + ,(map (lambda (dir) + (string-append dir "/bin")) + (list out coreutils findutils git)))) #t)))))) (inputs - `(("perl" ,perl))) + `(("perl" ,perl) + ("coreutils" ,coreutils) + ("findutils" ,findutils) + ("inetutils" ,inetutils))) ;; git and openssh are propagated because trying to patch the source via ;; regexp matching is too brittle and prone to false positives. (propagated-inputs -- cgit v1.2.3