summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi94
-rw-r--r--gnu/services/version-control.scm179
-rw-r--r--gnu/tests/version-control.scm114
3 files changed, 2 insertions, 385 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 94bb0ec4e1..e1046eb512 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -21028,100 +21028,6 @@ could instantiate a cgit service like this:
           (cgitrc "")))
 @end example
 
-@subsubheading Gitolite Service
-
-@cindex Gitolite service
-@cindex Git, hosting
-@uref{http://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
-repositories on a central server.
-
-Gitolite can handle multiple repositories and users, and supports flexible
-configuration of the permissions for the users on the repositories.
-
-The following example will configure Gitolite using the default @code{git}
-user, and the provided SSH public key.
-
-@example
-(service gitolite-service-type
-         (gitolite-configuration
-           (admin-pubkey (plain-file
-                           "yourname.pub"
-                           "ssh-rsa AAAA... guix@@example.com"))))
-@end example
-
-Gitolite is configured through a special admin repository which you can clone,
-for example, if you setup Gitolite on @code{example.com}, you would run the
-following command to clone the admin repository.
-
-@example
-git clone git@@example.com:gitolite-admin
-@end example
-
-When the Gitolite service is activated, the provided @code{admin-pubkey} will
-be inserted in to the @file{keydir} directory in the gitolite-admin
-repository.  If this results in a change in the repository, it will be
-committed using the message ``gitolite setup by GNU Guix''.
-
-@deftp {Data Type} gitolite-configuration
-Data type representing the configuration for @code{gitolite-service-type}.
-
-@table @asis
-@item @code{package} (default: @var{gitolite})
-Gitolite package to use.
-
-@item @code{user} (default: @var{git})
-User to use for Gitolite.  This will be user that you use when accessing
-Gitolite over SSH.
-
-@item @code{group} (default: @var{git})
-Group to use for Gitolite.
-
-@item @code{home-directory} (default: @var{"/var/lib/gitolite"})
-Directory in which to store the Gitolite configuration and repositories.
-
-@item @code{rc-file} (default: @var{(gitolite-rc-file)})
-A ``file-like'' object (@pxref{G-Expressions, file-like objects}),
-representing the configuration for Gitolite.
-
-@item @code{admin-pubkey} (default: @var{#f})
-A ``file-like'' object (@pxref{G-Expressions, file-like objects}) used to
-setup Gitolite.  This will be inserted in to the @file{keydir} directory
-within the gitolite-admin repository.
-
-To specify the SSH key as a string, use the @code{plain-file} function.
-
-@example
-(plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
-@end example
-
-@end table
-@end deftp
-
-@deftp {Data Type} gitolite-rc-file
-Data type representing the Gitolite RC file.
-
-@table @asis
-@item @code{umask} (default: @code{#o0077})
-This controls the permissions Gitolite sets on the repositories and their
-contents.
-
-A value like @code{#o0027} will give read access to the group used by Gitolite
-(by default: @code{git}). This is necessary when using Gitolite with software
-like cgit or gitweb.
-
-@item @code{git-config-keys} (default: @code{""})
-Gitolite allows you to set git config values using the "config" keyword. This
-setting allows control over the config keys to accept.
-
-@item @code{roles} (default: @code{'(("READERS" . 1) ("WRITERS" . ))})
-Set the role names allowed to be used by users running the perms command.
-
-@item @code{enable} (default: @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
-This setting controls the commands and features to enable within Gitolite.
-
-@end table
-@end deftp
-
 
 @node Game Services
 @subsubsection Game Services
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index cc8cd22021..58274c8bee 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -3,7 +3,6 @@
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@member.fsf.org>
 ;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,23 +40,7 @@
 
             git-http-configuration
             git-http-configuration?
-            git-http-nginx-location-configuration
-
-            <gitolite-configuration>
-            gitolite-configuration
-            gitolite-configuration-package
-            gitolite-configuration-user
-            gitolite-configuration-rc-file
-            gitolite-configuration-admin-pubkey
-
-            <gitolite-rc-file>
-            gitolite-rc-file
-            gitolite-rc-file-umask
-            gitolite-rc-file-git-config-keys
-            gitolite-rc-file-roles
-            gitolite-rc-file-enable
-
-            gitolite-service-type))
+            git-http-nginx-location-configuration))
 
 ;;; Commentary:
 ;;;
@@ -214,163 +197,3 @@ access to exported repositories under @file{/srv/git}."
             "")
         (list "fastcgi_param GIT_PROJECT_ROOT " git-root ";")
         "fastcgi_param PATH_INFO $1;"))))))
-
-
-;;;
-;;; Gitolite
-;;;
-
-(define-record-type* <gitolite-rc-file>
-  gitolite-rc-file make-gitolite-rc-file
-  gitolite-rc-file?
-  (umask           gitolite-rc-file-umask
-                   (default #o0077))
-  (git-config-keys gitolite-rc-file-git-config-keys
-                   (default ""))
-  (roles           gitolite-rc-file-roles
-                   (default '(("READERS" . 1)
-                              ("WRITERS" . 1))))
-  (enable          gitolite-rc-file-enable
-                   (default '("help"
-                              "desc"
-                              "info"
-                              "perms"
-                              "writable"
-                              "ssh-authkeys"
-                              "git-config"
-                              "daemon"
-                              "gitweb"))))
-
-(define-gexp-compiler (gitolite-rc-file-compiler
-                       (file <gitolite-rc-file>) system target)
-  (match file
-    (($ <gitolite-rc-file> umask git-config-keys roles enable)
-     (apply text-file* "gitolite.rc"
-      `("%RC = (\n"
-        "    UMASK => " ,(format #f "~4,'0o" umask) ",\n"
-        "    GIT_CONFIG_KEYS => '" ,git-config-keys "',\n"
-        "    ROLES => {\n"
-        ,@(map (match-lambda
-                 ((role . value)
-                  (simple-format #f "        ~A => ~A,\n" role value)))
-               roles)
-        "    },\n"
-        "\n"
-        "    ENABLE => [\n"
-        ,@(map (lambda (value)
-                 (simple-format #f "        '~A',\n" value))
-               enable)
-        "    ],\n"
-        ");\n"
-        "\n"
-        "1;\n")))))
-
-(define-record-type* <gitolite-configuration>
-  gitolite-configuration make-gitolite-configuration
-  gitolite-configuration?
-  (package        gitolite-configuration-package
-                  (default gitolite))
-  (user           gitolite-configuration-user
-                  (default "git"))
-  (group          gitolite-configuration-group
-                  (default "git"))
-  (home-directory gitolite-configuration-home-directory
-                  (default "/var/lib/gitolite"))
-  (rc-file        gitolite-configuration-rc-file
-                  (default (gitolite-rc-file)))
-  (admin-pubkey   gitolite-configuration-admin-pubkey))
-
-(define gitolite-accounts
-  (match-lambda
-    (($ <gitolite-configuration> package user group home-directory
-                                 rc-file admin-pubkey)
-     ;; User group and account to run Gitolite.
-     (list (user-group (name user) (system? #t))
-           (user-account
-            (name user)
-            (group group)
-            (system? #t)
-            (comment "Gitolite user")
-            (home-directory home-directory))))))
-
-(define gitolite-activation
-  (match-lambda
-    (($ <gitolite-configuration> package user group home
-                                 rc-file admin-pubkey)
-     #~(begin
-         (use-modules (ice-9 match)
-                      (guix build utils))
-
-         (let* ((user-info (getpwnam #$user))
-                (admin-pubkey #$admin-pubkey)
-                (pubkey-file (string-append
-                              #$home "/"
-                              (basename
-                               (strip-store-file-name admin-pubkey)))))
-
-           (simple-format #t "guix: gitolite: installing ~A\n" #$rc-file)
-           (copy-file #$rc-file #$(string-append home "/.gitolite.rc"))
-
-           ;; The key must be writable, so copy it from the store
-           (copy-file admin-pubkey pubkey-file)
-
-           (chmod pubkey-file #o500)
-           (chown pubkey-file
-                  (passwd:uid user-info)
-                  (passwd:gid user-info))
-
-           ;; Set the git configuration, to avoid gitolite trying to use
-           ;; the hostname command, as the network might not be up yet
-           (with-output-to-file #$(string-append home "/.gitconfig")
-             (lambda ()
-               (display "[user]
-        name = GNU Guix
-        email = guix@localhost
-")))
-           ;; Run Gitolite setup, as this updates the hooks and include the
-           ;; admin pubkey if specified. The admin pubkey is required for
-           ;; initial setup, and will replace the previous key if run after
-           ;; initial setup
-           (match (primitive-fork)
-             (0
-              ;; Exit with a non-zero status code if an exception is thrown.
-              (dynamic-wind
-                (const #t)
-                (lambda ()
-                  (setenv "HOME" (passwd:dir user-info))
-                  (setenv "USER" #$user)
-                  (setgid (passwd:gid user-info))
-                  (setuid (passwd:uid user-info))
-                  (primitive-exit
-                   (system* #$(file-append package "/bin/gitolite")
-                            "setup"
-                            "-m" "gitolite setup by GNU Guix"
-                            "-pk" pubkey-file)))
-                (lambda ()
-                  (primitive-exit 1))))
-             (pid (waitpid pid)))
-
-           (when (file-exists? pubkey-file)
-             (delete-file pubkey-file)))))))
-
-(define gitolite-service-type
-  (service-type
-   (name 'gitolite)
-   (extensions
-    (list (service-extension activation-service-type
-                             gitolite-activation)
-          (service-extension account-service-type
-                             gitolite-accounts)
-          (service-extension profile-service-type
-                             ;; The Gitolite package in Guix uses
-                             ;; gitolite-shell in the authorized_keys file, so
-                             ;; gitolite-shell needs to be on the PATH for
-                             ;; gitolite to work.
-                             (lambda (config)
-                               (list
-                                (gitolite-configuration-package config))))))
-   (description
-    "Setup @command{gitolite}, a Git hosting tool providing access over SSH..
-By default, the @code{git} user is used, but this is configurable.
-Additionally, Gitolite can integrate with with tools like gitweb or cgit to
-provide a web interface to view selected repositories.")))
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
index 4409b8a12b..3b935a1b48 100644
--- a/gnu/tests/version-control.scm
+++ b/gnu/tests/version-control.scm
@@ -2,7 +2,6 @@
 ;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,17 +27,14 @@
   #:use-module (gnu services)
   #:use-module (gnu services version-control)
   #:use-module (gnu services cgit)
-  #:use-module (gnu services ssh)
   #:use-module (gnu services web)
   #:use-module (gnu services networking)
   #:use-module (gnu packages version-control)
-  #:use-module (gnu packages ssh)
   #:use-module (guix gexp)
   #:use-module (guix store)
   #:use-module (guix modules)
   #:export (%test-cgit
-            %test-git-http
-            %test-gitolite))
+            %test-git-http))
 
 (define README-contents
   "Hello!  This is what goes inside the 'README' file.")
@@ -304,111 +300,3 @@ HTTP-PORT."
    (name "git-http")
    (description "Connect to a running Git HTTP server.")
    (value (run-git-http-test))))
-
-
-;;;
-;;; Gitolite.
-;;;
-
-(define %gitolite-test-admin-keypair
-  (computed-file
-   "gitolite-test-admin-keypair"
-   (with-imported-modules (source-module-closure
-                           '((guix build utils)))
-     #~(begin
-         (use-modules (ice-9 match) (srfi srfi-26)
-                      (guix build utils))
-
-         (mkdir #$output)
-         (invoke #$(file-append openssh "/bin/ssh-keygen")
-                 "-f" (string-append #$output "/test-admin")
-                 "-t" "rsa"
-                 "-q"
-                 "-N" "")))))
-
-(define %gitolite-os
-  (simple-operating-system
-   (dhcp-client-service)
-   (service openssh-service-type)
-   (service gitolite-service-type
-            (gitolite-configuration
-             (admin-pubkey
-              (file-append %gitolite-test-admin-keypair "/test-admin.pub"))))))
-
-(define (run-gitolite-test)
-  (define os
-    (marionette-operating-system
-     %gitolite-os
-     #:imported-modules '((gnu services herd)
-                          (guix combinators))))
-
-  (define vm
-    (virtual-machine
-     (operating-system os)
-     (port-forwardings `((2222 . 22)))))
-
-  (define test
-    (with-imported-modules '((gnu build marionette)
-                             (guix build utils))
-      #~(begin
-          (use-modules (srfi srfi-64)
-                       (rnrs io ports)
-                       (gnu build marionette)
-                       (guix build utils))
-
-          (define marionette
-            (make-marionette (list #$vm)))
-
-          (mkdir #$output)
-          (chdir #$output)
-
-          (test-begin "gitolite")
-
-          ;; Wait for sshd to be up and running.
-          (test-assert "service running"
-            (marionette-eval
-             '(begin
-                (use-modules (gnu services herd))
-                (start-service 'ssh-daemon))
-             marionette))
-
-          (display #$%gitolite-test-admin-keypair)
-
-          (setenv "GIT_SSH_VARIANT" "ssh")
-          (setenv "GIT_SSH_COMMAND"
-                  (string-join
-                   '(#$(file-append openssh "/bin/ssh")
-                     "-i" #$(file-append %gitolite-test-admin-keypair
-                                         "/test-admin")
-                     "-o" "UserKnownHostsFile=/dev/null"
-                     "-o" "StrictHostKeyChecking=no")))
-
-          (test-assert "cloning the admin repository"
-            (invoke #$(file-append git "/bin/git")
-                    "clone" "-v"
-                    "ssh://git@localhost:2222/gitolite-admin"
-                    "/tmp/clone"))
-
-          (test-assert "admin key exists"
-            (file-exists? "/tmp/clone/keydir/test-admin.pub"))
-
-          (with-directory-excursion "/tmp/clone"
-            (invoke #$(file-append git "/bin/git")
-                    "-c" "user.name=Guix" "-c" "user.email=guix"
-                    "commit"
-                    "-m" "Test commit"
-                    "--allow-empty")
-
-            (test-assert "pushing, and the associated hooks"
-              (invoke #$(file-append git "/bin/git") "push")))
-
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
-
-  (gexp->derivation "gitolite" test))
-
-(define %test-gitolite
-  (system-test
-   (name "gitolite")
-   (description "Clone the Gitolite admin repository.")
-   (value (run-gitolite-test))))