services: cgit: Add support for project-list.

* doc/guix.texi (Version Control Services): Update accordingly.
* gnu/services/cgit.scm (cgit-configuration)[project-list]: New field.
(serialize-project-list): New procedure that uses PLAIN-FILE to generate a
file from the string list given by the user as input.
(serialize-cgit-configuration): Make sure to serialize 'project-list' before
'repostory-directory'.
This commit is contained in:
Clément Lassieur 2018-03-20 21:15:05 +01:00
parent 80b76b9350
commit e5fe544eaa
No known key found for this signature in database
GPG key ID: 89F96D4808F359C7
2 changed files with 29 additions and 8 deletions

View file

@ -19017,6 +19017,15 @@ Defaults to @samp{#f}.
@end deftypevr @end deftypevr
@deftypevr {@code{cgit-configuration} parameter} list project-list
A list of subdirectories inside of @code{repository-directory}, relative
to it, that should loaded as Git repositories. An empty list means that
all subdirectories will be loaded.
Defaults to @samp{()}.
@end deftypevr
@deftypevr {@code{cgit-configuration} parameter} file-object readme @deftypevr {@code{cgit-configuration} parameter} file-object readme
Text which will be used as default value for @code{cgit-repo-readme}. Text which will be used as default value for @code{cgit-repo-readme}.

View file

@ -163,6 +163,12 @@ (define (serialize-module-link-path field-name val)
((path text) ((path text)
(format #f "repo.module-link.~a=~a\n" path text))))) (format #f "repo.module-link.~a=~a\n" path text)))))
(define (serialize-project-list _ val)
(if (null? val) ""
(serialize-field
'project-list
(plain-file "project-list" (string-join val "\n")))))
(define repository-directory? string?) (define repository-directory? string?)
(define (serialize-repository-directory _ val) (define (serialize-repository-directory _ val)
@ -536,13 +542,11 @@ (define-configuration cgit-configuration
(boolean #f) (boolean #f)
"Flag which, when set to @samp{#t}, will make cgit omit the standard "Flag which, when set to @samp{#t}, will make cgit omit the standard
header on all pages.") header on all pages.")
;; TODO: cgit expects a file name (project-list
;; that should be created from a list of strings provided by the user. (list '())
;; "A list of subdirectories inside of @code{repository-directory}, relative
;; (project-list to it, that should loaded as Git repositories. An empty list means that all
;; (string "") subdirectories will be loaded.")
;; "A list of subdirectories inside of @code{repository-directory},
;; relative to it, that should loaded as Git repositories.")
(readme (readme
(file-object "") (file-object "")
"Text which will be used as default value for @code{cgit-repo-readme}.") "Text which will be used as default value for @code{cgit-repo-readme}.")
@ -636,10 +640,18 @@ (define-configuration cgit-configuration
(define (serialize-cgit-configuration config) (define (serialize-cgit-configuration config)
(define (rest? field) (define (rest? field)
(not (memq (configuration-field-name field) (not (memq (configuration-field-name field)
'(repositories)))) '(project-list
repository-directory
repositories))))
#~(string-append #~(string-append
#$(let ((rest (filter rest? cgit-configuration-fields))) #$(let ((rest (filter rest? cgit-configuration-fields)))
(serialize-configuration config rest)) (serialize-configuration config rest))
#$(serialize-project-list
'project-list
(cgit-configuration-project-list config))
#$(serialize-repository-directory
'repository-directory
(cgit-configuration-repository-directory config))
#$(serialize-repository-cgit-configuration-list #$(serialize-repository-cgit-configuration-list
'repositories 'repositories
(cgit-configuration-repositories config)))) (cgit-configuration-repositories config))))