services: cgit: Add support for file-like objects.
* doc/guix.texi (Version Control Services): Update accordingly. * gnu/services/cgit.scm (serialize-field, serialize-string, serialize-boolean, serialize-integer, serialize-repository-cgit-configuration-list, serialize-nginx-server-configuration-list, serialize-repo-field, serialize-repo-boolean, serialize-repo-integer, serialize-module-link-path, serialize-repository-directory, serialize-mimetype-alist): Return strings or string-valued gexps and stop printing. (repository-cgit-configuration)[source-filter, about-filter, commit-filter, logo, owner-filter], (cgit-configuration)[auth-filter, commit-filter, css, email-filter, favicon, include, logo, owner-filter, mimetype-file, readme, source-filter]: Replace STRING with FILE-OBJECT. (file-object?, serialize-file-object, repo-file-object?, serialize-repo-file-object): New procedures. (cgit-activation): Use SERIALIZE-CONFIGURATION's return value with MIXED-TEXT-FILE instead of using its output with PLAIN-FILE.
This commit is contained in:
parent
36027f05e9
commit
ad05e96e14
|
@ -18542,6 +18542,9 @@ By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
|
|||
(service cgit-service-type)
|
||||
@end example
|
||||
|
||||
The @code{file-object} type designates either a file-like object
|
||||
(@pxref{G-Expressions, file-like objects}) or a string.
|
||||
|
||||
@c %start of fragment
|
||||
|
||||
Available @code{cgit-configuration} fields are:
|
||||
|
@ -18556,7 +18559,7 @@ NGINX configuration.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string about-filter
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object about-filter
|
||||
Specifies a command which will be invoked to format the content of about
|
||||
pages (both top-level and for each repository).
|
||||
|
||||
|
@ -18572,7 +18575,7 @@ Defaults to @samp{""}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string auth-filter
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object auth-filter
|
||||
Specifies a command that will be invoked for authenticating repository
|
||||
access.
|
||||
|
||||
|
@ -18681,7 +18684,7 @@ Defaults to @samp{()}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string commit-filter
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object commit-filter
|
||||
Command which will be invoked to format commit messages.
|
||||
|
||||
Defaults to @samp{""}.
|
||||
|
@ -18697,14 +18700,14 @@ Defaults to @samp{"git log"}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string css
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object css
|
||||
URL which specifies the css document to include in all cgit pages.
|
||||
|
||||
Defaults to @samp{"/share/cgit/cgit.css"}.
|
||||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string email-filter
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object email-filter
|
||||
Specifies a command which will be invoked to format names and email
|
||||
address of committers, authors, and taggers, as represented in various
|
||||
places throughout the cgit interface.
|
||||
|
@ -18828,7 +18831,7 @@ Defaults to @samp{#f}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string favicon
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object favicon
|
||||
URL used as link to a shortcut icon for cgit.
|
||||
|
||||
Defaults to @samp{"/favicon.ico"}.
|
||||
|
@ -18860,7 +18863,7 @@ Defaults to @samp{""}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string include
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object include
|
||||
Name of a configfile to include before the rest of the current config-
|
||||
file is parsed.
|
||||
|
||||
|
@ -18892,7 +18895,7 @@ Defaults to @samp{#f}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string logo
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object logo
|
||||
URL which specifies the source of an image which will be used as a logo
|
||||
on all cgit pages.
|
||||
|
||||
|
@ -18907,7 +18910,7 @@ Defaults to @samp{""}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string owner-filter
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object owner-filter
|
||||
Command which will be invoked to format the Owner column of the main
|
||||
page.
|
||||
|
||||
|
@ -18976,7 +18979,7 @@ Defaults to @samp{((gif "image/gif") (html "text/html") (jpg
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string mimetype-file
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object mimetype-file
|
||||
Specifies the file to use for automatic mimetype lookup.
|
||||
|
||||
Defaults to @samp{""}.
|
||||
|
@ -19014,7 +19017,7 @@ Defaults to @samp{#f}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string readme
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object readme
|
||||
Text which will be used as default value for @code{cgit-repo-readme}.
|
||||
|
||||
Defaults to @samp{""}.
|
||||
|
@ -19132,7 +19135,7 @@ Defaults to @samp{#f}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{cgit-configuration} parameter} string source-filter
|
||||
@deftypevr {@code{cgit-configuration} parameter} file-object source-filter
|
||||
Specifies a command which will be invoked to format plaintext blobs in
|
||||
the tree view.
|
||||
|
||||
|
@ -19194,7 +19197,7 @@ Defaults to @samp{()}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-string source-filter
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object source-filter
|
||||
Override the default @code{source-filter}.
|
||||
|
||||
Defaults to @samp{""}.
|
||||
|
@ -19208,7 +19211,7 @@ Defaults to @samp{""}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-string about-filter
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object about-filter
|
||||
Override the default @code{about-filter}.
|
||||
|
||||
Defaults to @samp{""}.
|
||||
|
@ -19230,7 +19233,7 @@ Defaults to @samp{()}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-filter
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object commit-filter
|
||||
Override the default @code{commit-filter}.
|
||||
|
||||
Defaults to @samp{""}.
|
||||
|
@ -19270,7 +19273,7 @@ Defaults to @samp{""}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-string email-filter
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object email-filter
|
||||
Override the default @code{email-filter}.
|
||||
|
||||
Defaults to @samp{""}.
|
||||
|
@ -19340,7 +19343,7 @@ Defaults to @samp{#f}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object logo
|
||||
URL which specifies the source of an image which will be used as a logo
|
||||
on this repo’s pages.
|
||||
|
||||
|
@ -19355,7 +19358,7 @@ Defaults to @samp{""}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner-filter
|
||||
@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object owner-filter
|
||||
Override the default @code{owner-filter}.
|
||||
|
||||
Defaults to @samp{""}.
|
||||
|
@ -19440,6 +19443,7 @@ Defaults to @samp{()}.
|
|||
|
||||
@end deftypevr
|
||||
|
||||
|
||||
@c %end of fragment
|
||||
|
||||
However, it could be that you just want to get a @code{cgitrc} up and
|
||||
|
|
|
@ -76,13 +76,12 @@
|
|||
(string-delete #\? (symbol->string field-name)))
|
||||
|
||||
(define (serialize-field field-name val)
|
||||
(format #t "~a=~a\n" (uglify-field-name field-name) val))
|
||||
#~(format #f "~a=~a\n" #$(uglify-field-name field-name) #$val))
|
||||
|
||||
(define (serialize-string field-name val)
|
||||
(if (string=? val "") "" (serialize-field field-name val)))
|
||||
|
||||
(define (serialize-boolean field-name val)
|
||||
(serialize-field field-name (if val 1 0)))
|
||||
(if (and (string? val) (string=? val ""))
|
||||
""
|
||||
(serialize-field field-name val)))
|
||||
|
||||
(define (serialize-list field-name val)
|
||||
(if (null? val) "" (serialize-field field-name (string-join val))))
|
||||
|
@ -96,7 +95,10 @@
|
|||
(exact-integer? val))
|
||||
|
||||
(define (serialize-integer field-name val)
|
||||
(serialize-field field-name val))
|
||||
(serialize-field field-name (number->string val)))
|
||||
|
||||
(define (serialize-boolean field-name val)
|
||||
(serialize-integer field-name (if val 1 0)))
|
||||
|
||||
(define (serialize-repository-cgit-configuration x)
|
||||
(serialize-configuration x repository-cgit-configuration-fields))
|
||||
|
@ -105,7 +107,13 @@
|
|||
(list? val))
|
||||
|
||||
(define (serialize-repository-cgit-configuration-list field-name val)
|
||||
(for-each serialize-repository-cgit-configuration val))
|
||||
#~(string-append
|
||||
#$@(map serialize-repository-cgit-configuration val)))
|
||||
|
||||
(define (file-object? val)
|
||||
(or (file-like? val) (string? val)))
|
||||
(define (serialize-file-object field-name val)
|
||||
(serialize-string field-name val))
|
||||
|
||||
|
||||
;;;
|
||||
|
@ -116,7 +124,7 @@
|
|||
(and (list? val) (and-map nginx-server-configuration? val)))
|
||||
|
||||
(define (serialize-nginx-server-configuration-list field-name val)
|
||||
#f)
|
||||
"")
|
||||
|
||||
|
||||
;;;
|
||||
|
@ -124,18 +132,18 @@
|
|||
;;;
|
||||
|
||||
(define (serialize-repo-field field-name val)
|
||||
(format #t "repo.~a=~a\n" (uglify-field-name field-name) val))
|
||||
#~(format #f "repo.~a=~a\n" #$(uglify-field-name field-name) #$val))
|
||||
|
||||
(define (serialize-repo-list field-name val)
|
||||
(if (null? val) "" (serialize-repo-field field-name (string-join val))))
|
||||
|
||||
(define repo-boolean? boolean?)
|
||||
|
||||
(define (serialize-repo-boolean field-name val)
|
||||
(serialize-repo-field field-name (if val 1 0)))
|
||||
|
||||
(define (serialize-repo-integer field-name val)
|
||||
(serialize-repo-field field-name val))
|
||||
(serialize-repo-field field-name (number->string val)))
|
||||
|
||||
(define (serialize-repo-boolean field-name val)
|
||||
(serialize-repo-integer field-name (if val 1 0)))
|
||||
|
||||
(define repo-list? list?)
|
||||
|
||||
|
@ -144,23 +152,26 @@
|
|||
(define (serialize-repo-string field-name val)
|
||||
(if (string=? val "") "" (serialize-repo-field field-name val)))
|
||||
|
||||
(define repo-file-object? file-object?)
|
||||
(define serialize-repo-file-object serialize-repo-string)
|
||||
|
||||
(define module-link-path? list?)
|
||||
|
||||
(define (serialize-module-link-path field-name val)
|
||||
(if (null? val) ""
|
||||
(match val
|
||||
((path text)
|
||||
(format #t "repo.module-link.~a=~a\n" path text)))))
|
||||
(format #f "repo.module-link.~a=~a\n" path text)))))
|
||||
|
||||
(define repository-directory? string?)
|
||||
|
||||
(define (serialize-repository-directory _ val)
|
||||
(if (string=? val "") "" (format #t "scan-path=~a\n" val)))
|
||||
(if (string=? val "") "" (format #f "scan-path=~a\n" val)))
|
||||
|
||||
(define mimetype-alist? list?)
|
||||
|
||||
(define (serialize-mimetype-alist field-name val)
|
||||
(format #t "# Mimetypes\n~a"
|
||||
(format #f "# Mimetypes\n~a"
|
||||
(string-join
|
||||
(map (match-lambda
|
||||
((extension mimetype)
|
||||
|
@ -174,13 +185,13 @@
|
|||
"A mask of snapshot formats for this repo that cgit generates links for,
|
||||
restricted by the global @code{snapshots} setting.")
|
||||
(source-filter
|
||||
(repo-string "")
|
||||
(repo-file-object "")
|
||||
"Override the default @code{source-filter}.")
|
||||
(url
|
||||
(repo-string "")
|
||||
"The relative URL used to access the repository.")
|
||||
(about-filter
|
||||
(repo-string "")
|
||||
(repo-file-object "")
|
||||
"Override the default @code{about-filter}.")
|
||||
(branch-sort
|
||||
(repo-string "")
|
||||
|
@ -190,7 +201,7 @@ ref list, and when set to @samp{name} enables ordering by branch name.")
|
|||
(repo-list '())
|
||||
"A list of URLs which can be used to clone repo.")
|
||||
(commit-filter
|
||||
(repo-string "")
|
||||
(repo-file-object "")
|
||||
"Override the default @code{commit-filter}.")
|
||||
(commit-sort
|
||||
(repo-string "")
|
||||
|
@ -209,7 +220,7 @@ is no suitable HEAD.")
|
|||
(repo-string "")
|
||||
"The value to show as repository homepage.")
|
||||
(email-filter
|
||||
(repo-string "")
|
||||
(repo-file-object "")
|
||||
"Override the default @code{email-filter}.")
|
||||
(enable-commit-graph?
|
||||
(repo-boolean #f)
|
||||
|
@ -243,14 +254,14 @@ repository index.")
|
|||
(repo-boolean #f)
|
||||
"Flag which, when set to @samp{#t}, ignores the repository.")
|
||||
(logo
|
||||
(repo-string "")
|
||||
(repo-file-object "")
|
||||
"URL which specifies the source of an image which will be used as a
|
||||
logo on this repo’s pages.")
|
||||
(logo-link
|
||||
(repo-string "")
|
||||
"URL loaded when clicking on the cgit logo image.")
|
||||
(owner-filter
|
||||
(repo-string "")
|
||||
(repo-file-object "")
|
||||
"Override the default @code{owner-filter}.")
|
||||
(module-link
|
||||
(repo-string "")
|
||||
|
@ -296,7 +307,7 @@ after this option will inherit the current section name.")
|
|||
(nginx-server-configuration-list (list %cgit-configuration-nginx))
|
||||
"NGINX configuration.")
|
||||
(about-filter
|
||||
(string "")
|
||||
(file-object "")
|
||||
"Specifies a command which will be invoked to format the content of about
|
||||
pages (both top-level and for each repository).")
|
||||
(agefile
|
||||
|
@ -304,7 +315,7 @@ pages (both top-level and for each repository).")
|
|||
"Specifies a path, relative to each repository path, which can be used to
|
||||
specify the date and time of the youngest commit in the repository.")
|
||||
(auth-filter
|
||||
(string "")
|
||||
(file-object "")
|
||||
"Specifies a command that will be invoked for authenticating repository
|
||||
access.")
|
||||
(branch-sort
|
||||
|
@ -357,7 +368,7 @@ generates valid clone URLs for the repository.")
|
|||
(list '())
|
||||
"List of @code{clone-url} templates.")
|
||||
(commit-filter
|
||||
(string "")
|
||||
(file-object "")
|
||||
"Command which will be invoked to format commit messages.")
|
||||
(commit-sort
|
||||
(string "git log")
|
||||
|
@ -365,10 +376,10 @@ generates valid clone URLs for the repository.")
|
|||
commit log, and when set to @samp{topo} enables strict topological
|
||||
ordering.")
|
||||
(css
|
||||
(string "/share/cgit/cgit.css")
|
||||
(file-object "/share/cgit/cgit.css")
|
||||
"URL which specifies the css document to include in all cgit pages.")
|
||||
(email-filter
|
||||
(string "")
|
||||
(file-object "")
|
||||
"Specifies a command which will be invoked to format names and email
|
||||
address of committers, authors, and taggers, as represented in various
|
||||
places throughout the cgit interface.")
|
||||
|
@ -432,7 +443,7 @@ links for plaintext blobs printed in the tree view.")
|
|||
"Flag which, when set to @samp{#f}, will allow cgit to use Git config to
|
||||
set any repo specific settings.")
|
||||
(favicon
|
||||
(string "/favicon.ico")
|
||||
(file-object "/favicon.ico")
|
||||
"URL used as link to a shortcut icon for cgit.")
|
||||
(footer
|
||||
(string "")
|
||||
|
@ -448,7 +459,7 @@ verbatim in the HTML HEAD section on all pages.")
|
|||
"The content of the file specified with this option will be included
|
||||
verbatim at the top of all pages.")
|
||||
(include
|
||||
(string "")
|
||||
(file-object "")
|
||||
"Name of a configfile to include before the rest of the current config-
|
||||
file is parsed.")
|
||||
(index-header
|
||||
|
@ -464,14 +475,14 @@ verbatim below the heading on the repository index page.")
|
|||
"Flag which, if set to @samp{#t}, makes cgit print commit and tag times
|
||||
in the servers timezone.")
|
||||
(logo
|
||||
(string "/share/cgit/cgit.png")
|
||||
(file-object "/share/cgit/cgit.png")
|
||||
"URL which specifies the source of an image which will be used as a logo
|
||||
on all cgit pages.")
|
||||
(logo-link
|
||||
(string "")
|
||||
"URL loaded when clicking on the cgit logo image.")
|
||||
(owner-filter
|
||||
(string "")
|
||||
(file-object "")
|
||||
"Command which will be invoked to format the Owner column of the main
|
||||
page.")
|
||||
(max-atom-items
|
||||
|
@ -508,7 +519,7 @@ on the repository index page.")
|
|||
(svg "image/svg+xml")))
|
||||
"Mimetype for the specified filename extension.")
|
||||
(mimetype-file
|
||||
(string "")
|
||||
(file-object "")
|
||||
"Specifies the file to use for automatic mimetype lookup.")
|
||||
(module-link
|
||||
(string "")
|
||||
|
@ -533,7 +544,7 @@ header on all pages.")
|
|||
;; "A list of subdirectories inside of @code{repository-directory},
|
||||
;; relative to it, that should loaded as Git repositories.")
|
||||
(readme
|
||||
(string "")
|
||||
(file-object "")
|
||||
"Text which will be used as default value for @code{cgit-repo-readme}.")
|
||||
(remove-suffix?
|
||||
(boolean #f)
|
||||
|
@ -591,7 +602,7 @@ many path elements from each repo path to use as a default section name.")
|
|||
"If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
|
||||
default.")
|
||||
(source-filter
|
||||
(string "")
|
||||
(file-object "")
|
||||
"Specifies a command which will be invoked to format plaintext blobs in the
|
||||
tree view.")
|
||||
(summary-branches
|
||||
|
@ -640,16 +651,14 @@ for cgit to allow access to that repository.")
|
|||
(config-str
|
||||
(if opaque-config?
|
||||
(opaque-cgit-configuration-cgitrc config)
|
||||
(with-output-to-string
|
||||
(lambda ()
|
||||
(serialize-configuration config
|
||||
cgit-configuration-fields))))))
|
||||
(serialize-configuration config cgit-configuration-fields))))
|
||||
#~(begin
|
||||
(use-modules (guix build utils))
|
||||
(mkdir-p #$(if opaque-config?
|
||||
(opaque-cgit-configuration-cache-root config)
|
||||
(cgit-configuration-cache-root config)))
|
||||
(copy-file #$(plain-file "cgitrc" config-str) "/etc/cgitrc"))))
|
||||
(copy-file #$(mixed-text-file "cgitrc" config-str)
|
||||
"/etc/cgitrc"))))
|
||||
|
||||
(define (cgit-configuration-nginx-config config)
|
||||
(if (opaque-cgit-configuration? config)
|
||||
|
|
Loading…
Reference in New Issue