Add basic pages
.gitignore unknown status 1
1 | + | *.go | |
2 | + | *.log | |
3 | + | configure | |
4 | + | config.status | |
5 | + | Makefile | |
6 | + | Makefile.in | |
7 | + | aclocal.m4 | |
8 | + | autom4te.cache | |
9 | + | install-sh | |
10 | + | missing | |
11 | + | pre-inst-env | |
12 | + | scripts/gitile |
Makefile.am unknown status 1
1 | + | # Copyright (C) 2020 Julien Lepiller <julien@lepiller.eu> | |
2 | + | # | |
3 | + | # This library is free software; you can redistribute it and/or | |
4 | + | # modify it under the terms of the GNU Lesser General Public | |
5 | + | # License as published by the Free Software Foundation; either | |
6 | + | # version 3 of the License, or (at your option) any later version. | |
7 | + | # | |
8 | + | # This library is distributed in the hope that it will be useful, | |
9 | + | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | + | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
11 | + | # Lesser General Public License for more details. | |
12 | + | # | |
13 | + | # You should have received a copy of the GNU Lesser General Public | |
14 | + | # License along with this library; if not, write to the Free Software | |
15 | + | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
16 | + | ||
17 | + | include guile.am | |
18 | + | ||
19 | + | SOURCES= \ | |
20 | + | gitile/config.scm \ | |
21 | + | gitile/handler.scm \ | |
22 | + | gitile/pages.scm \ | |
23 | + | gitile/repo.scm | |
24 | + | ||
25 | + | clean-go: | |
26 | + | find . -name '*.go' -delete |
bootstrap unknown status 1
1 | + | autoreconf -fiv |
configure.ac unknown status 1
1 | + | # -*- Autoconf -*- | |
2 | + | # Process this file with autoconf to produce a configure script. | |
3 | + | ||
4 | + | AC_PREREQ([2.69]) | |
5 | + | AC_INIT([social], [0.1], [julien@lepiller.eu]) | |
6 | + | AM_INIT_AUTOMAKE([-Wall -Werror foreign]) | |
7 | + | ||
8 | + | AC_CONFIG_MACRO_DIR([m4]) | |
9 | + | ||
10 | + | # Checks for programs. | |
11 | + | GUILE_SITE_DIR | |
12 | + | GUILE_PROGS | |
13 | + | ||
14 | + | # Checks for libraries. | |
15 | + | GUILE_MODULE_AVAILABLE([have_git], [(git)]) | |
16 | + | if test "x$have_git" != "xyes"; then | |
17 | + | AC_MSG_ERROR([The Guile bindings of libgit2 are missing; please install them.]) | |
18 | + | fi | |
19 | + | ||
20 | + | GUILE_MODULE_AVAILABLE([have_gnutls], [(gnutls)]) | |
21 | + | if test "x$have_gnutls" != "xyes"; then | |
22 | + | AC_MSG_ERROR([The Guile bindings of GnuTLS are missing; please install them.]) | |
23 | + | fi | |
24 | + | ||
25 | + | GUILE_MODULE_AVAILABLE([have_fibers], [(fibers web server)]) | |
26 | + | if test "x$have_fibers" != "xyes"; then | |
27 | + | AC_MSG_ERROR([The Guile Fibers library is missing; please install it.]) | |
28 | + | fi | |
29 | + | ||
30 | + | AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env]) | |
31 | + | AC_CONFIG_FILES([scripts/gitile], [chmod +x scripts/gitile]) | |
32 | + | AC_CONFIG_FILES(Makefile) | |
33 | + | ||
34 | + | AC_OUTPUT |
gitile/config.scm
19 | 19 | #:use-module (srfi srfi-9) | |
20 | 20 | #:export (make-config | |
21 | 21 | config? | |
22 | + | <config> | |
22 | 23 | config-port | |
23 | 24 | config-host | |
24 | 25 | config-database | |
25 | 26 | config-repositories)) | |
26 | 27 | ||
27 | - | (define-record-type config | |
28 | + | (define-record-type <config> | |
28 | 29 | (make-config port host database repositories) | |
29 | 30 | config? | |
30 | 31 | (port config-port) |
gitile/handler.scm
18 | 18 | (define-module (gitile handler) | |
19 | 19 | #:use-module (fibers web server) | |
20 | 20 | #:use-module (git) | |
21 | + | #:use-module (gitile config) | |
21 | 22 | #:use-module (gitile pages) | |
22 | 23 | #:use-module (ice-9 match) | |
24 | + | #:use-module (sxml simple) | |
23 | 25 | #:use-module (web request) | |
24 | 26 | #:use-module (web response) | |
25 | 27 | #:use-module (web uri) | |
… | |||
45 | 47 | (nav | |
46 | 48 | (ul | |
47 | 49 | (li (@ (class "first")) (a (@ (href "/")) "Projects")) | |
48 | - | (li (a (@ (href "/" project)) "Repository")) | |
49 | - | (li (a (@ (href "/" project "/tree/" ref)) "Files")) | |
50 | - | (li (a (@ (href "/" project "/ommits")) "Commits")) | |
51 | - | (li (a (@ (href "/" project "/tags")) "Tags"))))) | |
50 | + | (li (a (@ (href "/" ,project)) "Repository")) | |
51 | + | (li (a (@ (href "/" ,project "/tree/" ,ref)) "Files")) | |
52 | + | (li (a (@ (href "/" ,project "/commits")) "Commits")) | |
53 | + | (li (a (@ (href "/" ,project "/tags")) "Tags"))))) | |
52 | 54 | (div (@ (id "content")) | |
53 | 55 | ,@page) | |
54 | 56 | (footer (p (a (@ (href "https://lepiller.eu")) "Who am I?")))))) | |
… | |||
63 | 65 | ||
64 | 66 | (define (gitile-handler config) | |
65 | 67 | (define (get-repo name) | |
66 | - | (repository-open (string-append repositories "/" name ".git"))) | |
68 | + | (let ((repo (string-append (config-repositories config) | |
69 | + | "/" name ".git"))) | |
70 | + | (pk 'repo repo) | |
71 | + | (pk 'exists (file-exists? (string-append repo "/git-daemon-export-ok"))) | |
72 | + | (if (file-exists? (string-append repo "/git-daemon-export-ok")) | |
73 | + | (repository-open repo) | |
74 | + | #f))) | |
67 | 75 | ||
68 | 76 | (match config | |
69 | - | (($ config port host database repositories) | |
77 | + | (($ <config> port host database repositories) | |
70 | 78 | (lambda (request body) | |
71 | 79 | (pk 'request request) | |
72 | 80 | (pk 'body (if body (utf8->string body) body)) | |
73 | 81 | (match (request-path-components request) | |
74 | - | ((project-name) (show (project-index project-name))) | |
82 | + | ((project-name) | |
83 | + | (show (style (project-index project-name (get-repo project-name)) | |
84 | + | project-name "-"))) | |
75 | 85 | ((project-name "tree" ref path ...) | |
76 | - | (show (style (project-files (get-repo project-name) #:ref ref #:path path) | |
86 | + | (show (style (project-files project-name (get-repo project-name) | |
87 | + | #:ref ref #:path path) | |
77 | 88 | project-name ref))) | |
78 | 89 | ((project-name "raw" ref path ...) | |
79 | 90 | (show-raw (project-file-raw (get-repo project-name) path #:ref ref))) | |
80 | 91 | ((project-name "commits") | |
81 | - | (style (show not-yet-page) project-name "-")) | |
92 | + | (show (style (project-commits project-name (get-repo project-name) #f) | |
93 | + | project-name "-"))) | |
82 | 94 | ((project-name "commits" ref) | |
95 | + | (show (style (project-commits project-name (get-repo project-name) ref) | |
96 | + | project-name ref))) | |
97 | + | ((project-name "commit" ref) | |
83 | 98 | (show (style not-yet-page project-name ref))) | |
84 | 99 | ((project-name "tags") | |
85 | - | (show (style not-yet-page project-name "-")))))))) | |
100 | + | (show (style not-yet-page project-name "-"))) | |
101 | + | (_ (not-found request))))))) |
gitile/pages.scm
17 | 17 | ||
18 | 18 | (define-module (gitile pages) | |
19 | 19 | #:use-module (gitile repo) | |
20 | + | #:use-module (git) | |
21 | + | #:use-module (git types) | |
22 | + | #:use-module (ice-9 match) | |
23 | + | #:use-module (rnrs bytevectors) | |
24 | + | #:use-module (srfi srfi-19); date/time | |
25 | + | #:use-module (system foreign) | |
20 | 26 | #:export (not-yet-page | |
21 | 27 | project-file-raw | |
22 | - | project-files)) | |
28 | + | project-files | |
29 | + | project-index | |
30 | + | project-commits)) | |
23 | 31 | ||
24 | 32 | (define not-yet-page | |
25 | - | `(p "Not yet available, sorry :/")) | |
33 | + | `((p "Not yet available, sorry :/"))) | |
26 | 34 | ||
27 | - | (define* (project-file-raw repo path #:key (ref #f)) | |
28 | - | (get-file-content repo path #:ref ref)) | |
35 | + | (define* (project-file-raw repo path #:key (ref "-")) | |
36 | + | (let* ((ref (if (equal? ref "-") #f ref)) | |
37 | + | (path (if (list? path) | |
38 | + | (string-join | |
39 | + | (filter (lambda (p) (not (string-null? p))) path) | |
40 | + | "/") | |
41 | + | path))) | |
42 | + | (get-file-content repo path #:ref ref))) | |
29 | 43 | ||
30 | - | (define* (project-files repo #:key (ref #f) (path "")) | |
31 | - | (let ((files (get-files repo #:ref ref #:path path))) | |
44 | + | (define* (project-files repository-name repo #:key (ref "-") (path '())) | |
45 | + | (let* ((ref (if (equal? ref "-") #f ref)) | |
46 | + | (path (if (list? path) | |
47 | + | (string-join | |
48 | + | (filter (lambda (p) (not (string-null? p))) path) | |
49 | + | "/") | |
50 | + | path)) | |
51 | + | (dir-path (if (string-null? path) path (string-append path "/"))) | |
52 | + | (files (sort (get-files repo #:ref ref #:path dir-path) | |
53 | + | (lambda (f1 f2) | |
54 | + | (string<=? (file-name f1) (file-name f2)))))) | |
55 | + | (pk 'path dir-path) | |
56 | + | (pk 'files files) | |
32 | 57 | (if (and (string-null? path) (null? files)) | |
33 | 58 | `(p "Empty repository") | |
34 | 59 | (if (null? files) | |
35 | - | `((p "file content") | |
36 | - | (pre ,@(get-file-content repo path #:ref ref))) | |
37 | - | `((p "directory content") | |
38 | - | ,@(map | |
39 | - | (lambda (file) | |
40 | - | `(p ,file)) | |
41 | - | files)))))) | |
60 | + | `((p (@ (class "content")) "file content") | |
61 | + | (pre ,(pk (utf8->string (get-file-content repo path #:ref ref))))) | |
62 | + | `(,(last-commit-infobox repository-name repo ref) | |
63 | + | (table | |
64 | + | (thead | |
65 | + | (tr | |
66 | + | (td "name") | |
67 | + | (td "last commit") | |
68 | + | (td "date"))) | |
69 | + | (tbody | |
70 | + | ,@(map | |
71 | + | (match-lambda | |
72 | + | (($ <file> name type commit) | |
73 | + | (let ((name (if (= type 2) (string-append name "/") name))) | |
74 | + | `(tr (td (a (@ (href "/" ,repository-name | |
75 | + | "/tree/" ,(or ref "-") | |
76 | + | "/" ,path "/" ,name)) | |
77 | + | (img (@ (src "/images/file-type-" ,type ".png"))) | |
78 | + | ,name)) | |
79 | + | (td (a (@ (href "/" ,repository-name | |
80 | + | "/commit/" ,(oid->string | |
81 | + | (commit-id commit)))) | |
82 | + | ,(commit-message commit))) | |
83 | + | (td ,(commit->date-string commit)))))) | |
84 | + | files)))))))) | |
85 | + | ||
86 | + | (define get-config-string | |
87 | + | (let ((proc (libgit2->procedure int "git_config_get_string" '(* * *)))) | |
88 | + | (lambda (config name) | |
89 | + | (let ((out (make-double-pointer))) | |
90 | + | (proc out (config->pointer config) (string->pointer name)) | |
91 | + | (pointer->string out))))) | |
92 | + | ||
93 | + | (define (project-index repository-name repo) | |
94 | + | `((h1 ,repository-name) | |
95 | + | (p ,(get-config-string (repository-config repo) | |
96 | + | "gitweb.description")) | |
97 | + | ,(project-files repository-name repo))) | |
98 | + | ||
99 | + | (define (author-image author) | |
100 | + | "/images/unknown.png") | |
101 | + | ||
102 | + | (define (commit->date-string commit) | |
103 | + | (date->string | |
104 | + | (time-utc->date | |
105 | + | (make-time time-utc 0 (commit-time commit))))) | |
106 | + | ||
107 | + | (define (last-commit-infobox repository-name repo ref) | |
108 | + | (let* ((ref (if (equal? ref "-") #f ref)) | |
109 | + | (commit (last-commit repo ref))) | |
110 | + | (commit-infobox repository-name commit))) | |
111 | + | ||
112 | + | (define (commit-infobox repository-name commit) | |
113 | + | `(div (@ (class "commit-info")) | |
114 | + | (p (img (@ (src ,(author-image (commit-author commit)))))) | |
115 | + | (div (@ (class "commit")) | |
116 | + | (p (@ (class "message")) | |
117 | + | (a (@ (href "/" ,repository-name "/commit/" | |
118 | + | ,(oid->string (commit-id commit)))) | |
119 | + | ,(commit-message commit))) | |
120 | + | (p (span (@ (class "author")) | |
121 | + | ,(signature-name (commit-author commit))) | |
122 | + | (span (@ (class "date")) | |
123 | + | ,(commit->date-string commit)))) | |
124 | + | (div (@ (class "commit-id")) | |
125 | + | (p (@ (class "short-id")) | |
126 | + | ,(string-take (oid->string (commit-id commit)) 7)) | |
127 | + | (button (@ (data-clipboard-copy ,(oid->string (commit-id commit))) | |
128 | + | (class "copy")) | |
129 | + | (img (@ (src "/images/copy.png"))))))) | |
130 | + | ||
131 | + | (define (project-commits repository-name repo ref) | |
132 | + | (let* ((commits (get-commits repo ref)) | |
133 | + | (next (cdr commits)) | |
134 | + | (commits (car commits))) | |
135 | + | (pk 'commits commits) | |
136 | + | `(,(map (lambda (commit) | |
137 | + | (commit-infobox repository-name commit)) | |
138 | + | commits) | |
139 | + | ,(if next | |
140 | + | `(p (a (@ (href "/" ,repository-name "/commits/" | |
141 | + | ,(oid->string (commit-id next)))))) | |
142 | + | '())))) |
gitile/repo.scm
17 | 17 | ||
18 | 18 | (define-module (gitile repo) | |
19 | 19 | #:use-module (git) | |
20 | + | #:use-module (git types) | |
21 | + | #:use-module (srfi srfi-9) | |
22 | + | #:use-module (system foreign) | |
20 | 23 | #:export (get-branches | |
21 | 24 | get-tags | |
22 | - | get-files)) | |
25 | + | get-files | |
26 | + | get-file-content | |
27 | + | get-commits | |
28 | + | last-commit | |
29 | + | ||
30 | + | <file> | |
31 | + | make-file | |
32 | + | file? | |
33 | + | file-name | |
34 | + | file-type)) | |
35 | + | ||
36 | + | (define tree-entry-type | |
37 | + | (let ((proc (libgit2->procedure int "git_tree_entry_type" '(*)))) | |
38 | + | (lambda (entry) | |
39 | + | (proc (tree-entry->pointer entry))))) | |
23 | 40 | ||
24 | 41 | (define (get-branches repo) | |
25 | 42 | (map (lambda (ref) (cons (reference-shorthand ref) (reference-name ref))) | |
… | |||
42 | 59 | (false-if-exception (reference-name (repository-head repo)))))) | |
43 | 60 | (or (false-if-exception (string->oid ref-name)) | |
44 | 61 | (false-if-exception (reference-name->oid repo ref-name)) | |
45 | - | (reference-name->oid (search-reference repo ref-name))))) | |
62 | + | (reference-name->oid repo (search-reference repo ref-name))))) | |
63 | + | ||
64 | + | (define-record-type <file> | |
65 | + | (make-file name type commit) | |
66 | + | file? | |
67 | + | (name file-name) | |
68 | + | (type file-type) | |
69 | + | (commit file-commit)) | |
46 | 70 | ||
47 | 71 | (define* (get-files repo #:key (path "") (ref #f)) | |
48 | 72 | (let* ((oid (ref->oid repo ref)) | |
… | |||
53 | 77 | tree TREEWALK-PRE | |
54 | 78 | (lambda (root entry) | |
55 | 79 | (when (equal? root path) | |
56 | - | (set! result (cons (string-append root (tree-entry-name entry)) | |
57 | - | result))) | |
58 | - | 0))))) | |
80 | + | (set! result | |
81 | + | (cons (make-file (tree-entry-name entry) | |
82 | + | (tree-entry-type entry) | |
83 | + | (last-commit-for-file | |
84 | + | (string-append root (tree-entry-name entry)) | |
85 | + | commit)) | |
86 | + | result))) | |
87 | + | 0)) | |
88 | + | result))) | |
59 | 89 | ||
60 | - | (define (find-tree-item tree name) | |
61 | - | (let ((result #f)) | |
62 | - | (tree-walk | |
63 | - | tree TREEWALK-PRE | |
64 | - | (lambda (root entry) | |
65 | - | (let ((filepath (string-append root (tree-entry-name entry)))) | |
66 | - | (when (equal? name filepath) | |
67 | - | (set! result entry)) | |
68 | - | 0))) | |
69 | - | result)) | |
90 | + | (define (last-commit repo ref) | |
91 | + | (let ((oid (ref->oid repo ref))) | |
92 | + | (commit-lookup repo oid))) | |
70 | 93 | ||
71 | 94 | (define* (get-file-content repo path #:key (ref #f)) | |
72 | - | (let* ((oid (ref->oid ref)) | |
95 | + | (let* ((oid (ref->oid repo ref)) | |
73 | 96 | (commit (commit-lookup repo oid)) | |
74 | 97 | (tree (commit-tree commit)) | |
75 | - | (entry (find-tree-item tree path)) | |
76 | - | (entry-oid (entry-id entry)) | |
98 | + | (entry (pk 'tree-item (tree-entry-bypath tree (pk 'path path)))) | |
99 | + | (entry-oid (tree-entry-id entry)) | |
77 | 100 | (blob (blob-lookup repo entry-oid))) | |
78 | 101 | (blob-content blob))) | |
102 | + | ||
103 | + | (define (last-commit-for-file path commit) | |
104 | + | (let* ((initial-tree (commit-tree commit)) | |
105 | + | (initial-entry (false-if-exception (tree-entry-bypath initial-tree path)))) | |
106 | + | (let loop ((commit commit)) | |
107 | + | (let ((pcommit (false-if-exception (commit-parent commit)))) | |
108 | + | (if pcommit | |
109 | + | (let* ((ptree (commit-tree pcommit)) | |
110 | + | (pentry (false-if-exception (tree-entry-bypath ptree path)))) | |
111 | + | (if (or (and (not initial-entry) (not pentry)) | |
112 | + | (and initial-entry pentry | |
113 | + | (equal? (tree-entry-id initial-entry) | |
114 | + | (tree-entry-id pentry)))) | |
115 | + | (loop pcommit) | |
116 | + | commit)) | |
117 | + | commit))))) | |
118 | + | ||
119 | + | (define (get-commits repo ref) | |
120 | + | (let* ((oid (ref->oid repo ref)) | |
121 | + | (commit (commit-lookup repo oid))) | |
122 | + | (let loop ((result (list commit)) (commit commit)) | |
123 | + | (let ((pcommit (false-if-exception (commit-parent commit)))) | |
124 | + | (if (and pcommit (< (length result) 20)) | |
125 | + | (loop (cons pcommit result) pcommit) | |
126 | + | (cons (reverse result) pcommit)))))) |
guile.am unknown status 1
1 | + | moddir=$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION) | |
2 | + | godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache | |
3 | + | ||
4 | + | GOBJECTS = $(SOURCES:%.scm=%.go) | |
5 | + | ||
6 | + | nobase_mod_DATA = $(SOURCES) $(NOCOMP_SOURCES) | |
7 | + | nobase_go_DATA = $(GOBJECTS) | |
8 | + | ||
9 | + | # Make sure source files are installed first, so that the mtime of | |
10 | + | # installed compiled files is greater than that of installed source | |
11 | + | # files. See | |
12 | + | # <http://lists.gnu.org/archive/html/guile-devel/2010-07/msg00125.html> | |
13 | + | # for details. | |
14 | + | guile_install_go_files = install-nobase_goDATA | |
15 | + | $(guile_install_go_files): install-nobase_modDATA | |
16 | + | ||
17 | + | CLEANFILES = $(GOBJECTS) | |
18 | + | EXTRA_DIST = $(SOURCES) $(NOCOMP_SOURCES) | |
19 | + | GUILE_WARNINGS = -Wunbound-variable -Warity-mismatch -Wformat | |
20 | + | SUFFIXES = .scm .go | |
21 | + | .scm.go: | |
22 | + | $(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILD) compile $(GUILE_WARNINGS) -o "$@" "$<" |
guix.scm unknown status 1
1 | + | ;;;; Copyright (C) 2020 Julien Lepiller <julien@lepiller.eu> | |
2 | + | ;;;; | |
3 | + | ;;;; This library is free software; you can redistribute it and/or | |
4 | + | ;;;; modify it under the terms of the GNU Lesser General Public | |
5 | + | ;;;; License as published by the Free Software Foundation; either | |
6 | + | ;;;; version 3 of the License, or (at your option) any later version. | |
7 | + | ;;;; | |
8 | + | ;;;; This library is distributed in the hope that it will be useful, | |
9 | + | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | + | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
11 | + | ;;;; Lesser General Public License for more details. | |
12 | + | ;;;; | |
13 | + | ;;;; You should have received a copy of the GNU Lesser General Public | |
14 | + | ;;;; License along with this library; if not, write to the Free Software | |
15 | + | ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
16 | + | ;;;; | |
17 | + | ||
18 | + | (use-modules (guix packages) | |
19 | + | (guix licenses) | |
20 | + | (guix build-system gnu) | |
21 | + | (gnu packages autotools) | |
22 | + | (gnu packages guile) | |
23 | + | (gnu packages guile-xyz) | |
24 | + | (gnu packages pkg-config) | |
25 | + | (gnu packages tls)) | |
26 | + | ||
27 | + | (package | |
28 | + | (name "gitile") | |
29 | + | (version "0.1") | |
30 | + | (source #f) | |
31 | + | (build-system gnu-build-system) | |
32 | + | (inputs | |
33 | + | `(("guile-git" ,guile-git) | |
34 | + | ("gnutls" ,gnutls) | |
35 | + | ("guile-fibers" ,guile-fibers))) | |
36 | + | (native-inputs | |
37 | + | `(("autoconf" ,autoconf) | |
38 | + | ("automake" ,automake) | |
39 | + | ("libtool" ,libtool) | |
40 | + | ("pkg-config" ,pkg-config) | |
41 | + | ("guile" ,guile-3.0))) | |
42 | + | (home-page "https://git.lepiller.eu") | |
43 | + | (synopsis "") | |
44 | + | (description "") | |
45 | + | (license gpl3+)) |
pre-inst-env.in unknown status 1
1 | + | #!/bin/sh | |
2 | + | ||
3 | + | abs_top_srcdir="`cd "@abs_top_srcdir@" > /dev/null; pwd`" | |
4 | + | abs_top_builddir="`cd "@abs_top_builddir@" > /dev/null; pwd`" | |
5 | + | ||
6 | + | GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH" | |
7 | + | GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH" | |
8 | + | export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH | |
9 | + | ||
10 | + | PATH="$abs_top_builddir:$PATH" | |
11 | + | export PATH | |
12 | + | ||
13 | + | exec "$@" |
scripts/gitile.in unknown status 1
1 | + | #!@GUILE@ \ | |
2 | + | --no-auto-compile -e main -s | |
3 | + | !# | |
4 | + | ||
5 | + | ;;;; Copyright (C) 2020 Julien Lepiller <julien@lepiller.eu> | |
6 | + | ;;;; | |
7 | + | ;;;; This library is free software; you can redistribute it and/or | |
8 | + | ;;;; modify it under the terms of the GNU Lesser General Public | |
9 | + | ;;;; License as published by the Free Software Foundation; either | |
10 | + | ;;;; version 3 of the License, or (at your option) any later version. | |
11 | + | ;;;; | |
12 | + | ;;;; This library is distributed in the hope that it will be useful, | |
13 | + | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | + | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | + | ;;;; Lesser General Public License for more details. | |
16 | + | ;;;; | |
17 | + | ;;;; You should have received a copy of the GNU Lesser General Public | |
18 | + | ;;;; License along with this library; if not, write to the Free Software | |
19 | + | ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | + | ;;;; | |
21 | + | ||
22 | + | (use-modules (fibers web server)) | |
23 | + | (use-modules (ice-9 match)) | |
24 | + | (use-modules (gitile config) (gitile handler)) | |
25 | + | ||
26 | + | (define* (main #:optional (args (command-line))) | |
27 | + | (let ((config | |
28 | + | (match args | |
29 | + | ((_) (make-config 8080 "localhost" "/var/lib/gitile/gitile-db.sql" | |
30 | + | "/var/lib/gitolite/repositories")) | |
31 | + | ((_ "-c" file) | |
32 | + | (let ((content (call-with-input-file file read))) | |
33 | + | (match content | |
34 | + | (('config ('port port) ('host host) ('database database) | |
35 | + | ('repositories repositories)) | |
36 | + | (make-config port host database repositories))))) | |
37 | + | (_ (format #t "Usage: ~a [-c config-file]~%" (car args)))))) | |
38 | + | (run-server (gitile-handler config) | |
39 | + | #:port (config-port config)))) |