all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
blob 8fa22a1d3cd7ad891ec4b63f7533fb9ed98b6274 6859 bytes (raw)
name: gnu/services/version-control.scm 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
 
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu services version-control)
  #:use-module (gnu services)
  #:use-module (gnu services base)
  #:use-module (gnu services shepherd)
  #:use-module (gnu system shadow)
  #:use-module (gnu packages version-control)
  #:use-module (gnu packages admin)
  #:use-module (guix records)
  #:use-module (guix gexp)
  #:use-module (srfi srfi-1)
  #:use-module (ice-9 match)
  #:export (git-service
            git-service-type
            git-configuration
            git-configuration?
            git-configuration-git
            git-configuration-port
            git-configuration-base-directory
            git-configuration-pid-file
            git-configuration-max-connections
            git-configuration-user-directory
            git-configuration-directory))

;;; Commentary:
;;;
;;; Version Control related services.
;;;
;;; Code:

\f
;;;
;;; git
;;;

(define-record-type* <git-configuration> git-configuration
  make-git-configuration
  git-configuration?
  (git              git-configuration-git  ;package
                    (default git))
  (pid-file?        git-configuration-pid-file) ;string
  (base-directory   git-configuration-base-directory) ;string
  (user-directory?  git-configuration-user-directory) ;string
  (directory?       git-configuration-directory) ;string
  (max-connections  git-configuration-max-connections) ;number
  (port             git-configuration-port)) ;number

(define (git-shepherd-service config)
  "Return a <shepherd-service> for git with CONFIG."
  (define git (git-configuration-git config))

  (define git-command
    #~(list
       (string-append #$git "/bin/git") "daemon" "--syslog" "--user=git"
       "--group=git" "--no-informative-errors" "--reuseaddr"
       ;; A directory to add to the whitelist of allowed directories. Unless
       ;; --strict-paths is specified this will also include subdirectories of
       ;; each named directory.
       ;; --directory
       ;; TODO: Add the option to add multiple occurences of --directory
       (if (git-configuration-directory? config)
           (string-append "--directory=" #$(git-configuration-directory config))
           "")
       ;; --interpolated-path=<pathtemplate>
       ;; To support virtual hosting, an interpolated path template can be used to
       ;; dynamically construct alternate paths. The template supports %H for the target
       ;; hostname as supplied by the client but converted to all lowercase,
       ;; %CH for the canonical hostname, %IP for the server’s IP address,
       ;; %P for the port number, and %D for the absolute path of the named repository.
       ;; After interpolation, the path is validated against the directory whitelist.

       ;; --listen=<host_or_ipaddr>
       ;; Listen on a specific IP address or hostname. IP addresses can be either an IPv4
       ;; address or an IPv6 address if supported. If IPv6 is not supported, then
       ;; --listen=hostname is also not supported and --listen must be given an IPv4 address.
       ;; Can be given more than once. Incompatible with --inetd option.

       ;; Maximum number of concurrent clients, defaults to 32. Set it to zero for no limit.
       (string-append "--max-connections=" #$(number->string
                                              (git-configuration-max-connections config)))

       ;; --user-path, --user-path=<path>
       ;; Allow ~user notation to be used in requests. When specified with no parameter,
       ;; requests to git://host/~alice/foo is taken as a request to access foo repository
       ;; in the home directory of user alice. If --user-path=path is specified, the same
       ;; request is taken as a request to access path/foo repository in the home
       ;; directory of user alice.
       (if (git-configuration-user-directory? config)
           "--user-path" "")

       ;; Save the process id in file.
       (if (git-configuration-pid-file? config)
           (string-append "--pid-file=" #$(git-configuration-pid-file config))
           "")
       (string-append "--port=" #$(number->string (git-configuration-port config)))
       (string-append "--base-path=" #$(git-configuration-base-directory config))))

  (define requires '(networking syslogd))

  (list (shepherd-service
         (documentation "Git daemon server for git repositories")
         (requirement requires)
         (provision '(git))
         (start #~(make-forkexec-constructor #$git-command))
         (stop #~(make-kill-destructor)))))

(define %git-accounts
  ;; User account and groups for git-daemon.
  (list (user-group
         (name "git")
         (system? #t))
        (user-account
         (name "git")
         (system? #t)
         (group "git")
         (comment "Shepherd created user for the git-daemon service")
         ;; (home-directory "/var/empty")
         (home-directory "/var/git")
         ;;(shell #~(string-append #$shadow "/sbin/nologin")))))
         (shell #~(string-append #$shadow "/bin/git-shell")))))

(define (git-activation config)
  "Return the activation GEXP for CONFIG."
  #~(begin
      (use-modules (guix build utils))
      (let ((user (getpwnam "git")))
        (mkdir-p (dirname #$(git-configuration-pid-file config)))
        (mkdir-p (dirname #$(git-configuration-base-directory config)))
        (chown (dirname #$(git-configuration-base-directory config))
               (passwd:uid user) (passwd:gid user)))))

(define git-service-type
  (service-type (name 'git)
   (extensions
    (list (service-extension shepherd-root-service-type
                             git-shepherd-service)
          (service-extension activation-service-type
                             git-activation)))))

(define* (git-service #:key (config (git-configuration)))
  "Return a service that runs @url{https://git-scm.org,git} as a daemon.
The daemon will listen on the port specified in @var{port}.
In addition, @var{base-path} specifies the path which will repositories
which can be exported by adding 'git-daemon-export-ok' files to them."
  (service git-service-type config))

debug log:

solving 8fa22a1 ...
found 8fa22a1 in https://yhetil.org/guix/20161119214906.13804-2-ng0@we.make.ritual.n0.is/

applying [1/1] https://yhetil.org/guix/20161119214906.13804-2-ng0@we.make.ritual.n0.is/
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
new file mode 100644
index 0000000..8fa22a1

Checking patch gnu/services/version-control.scm...
Applied patch gnu/services/version-control.scm cleanly.

index at:
100644 8fa22a1d3cd7ad891ec4b63f7533fb9ed98b6274	gnu/services/version-control.scm

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.