summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Isaac2022-04-14 16:22:23 +0530
committerArun Isaac2022-04-14 16:22:23 +0530
commit85811ab5e6dfbfbcd772eba8a2219061db4c3991 (patch)
treee8045206725e9538625b56ce0ea28138323ae915
parent19bd6994abf5f13a474fdbaba233dd073ee8284e (diff)
downloadtissue-85811ab5e6dfbfbcd772eba8a2219061db4c3991.tar.gz
tissue-85811ab5e6dfbfbcd772eba8a2219061db4c3991.tar.lz
tissue-85811ab5e6dfbfbcd772eba8a2219061db4c3991.zip
tissue: Add #:issue-files configuration parameter.
* tissue/tissue.scm: Import (tissue git). (<tissue-configuration>)[issue-files]: New field. (gemtext-files-in-directory): New function. (tissue-configuration): Add #:issue-files keyword argument. * tissue/issue.scm (%issue-files): New public parameter. (issues): Read issues only from files in %issue-files. * bin/tissue (main): Parameterize %issue-files.
-rwxr-xr-xbin/tissue3
-rw-r--r--tissue/issue.scm59
-rw-r--r--tissue/tissue.scm27
3 files changed, 55 insertions, 34 deletions
diff --git a/bin/tissue b/bin/tissue
index c341310..555f114 100755
--- a/bin/tissue
+++ b/bin/tissue
@@ -403,7 +403,8 @@ To get usage information for one of these sub-commands, run
(current-error-port))
(newline (current-error-port))
(exit #f)))
- (parameterize ((%aliases (tissue-configuration-aliases (load-config))))
+ (parameterize ((%issue-files (tissue-configuration-issue-files (load-config)))
+ (%aliases (tissue-configuration-aliases (load-config))))
(apply (match command
("news" tissue-news)
("list" tissue-list)
diff --git a/tissue/issue.scm b/tissue/issue.scm
index f7dcef9..72d3d9c 100644
--- a/tissue/issue.scm
+++ b/tissue/issue.scm
@@ -29,7 +29,8 @@
#:use-module (ice-9 regex)
#:use-module (tissue git)
#:use-module (tissue utils)
- #:export (%aliases
+ #:export (%issue-files
+ %aliases
issue
issue-file
issue-title
@@ -52,6 +53,9 @@
authors
issues))
+(define %issue-files
+ (make-parameter #f))
+
(define %aliases
(make-parameter #f))
@@ -268,34 +272,31 @@ in (tissue tissue). If no alias is found, NAME is returned as such."
;; editors tend to create hidden files while editing, and we want to
;; avoid them.
(sort (filter-map (lambda (file)
- (and (string-suffix? ".gmi" file)
- (not (string=? (basename file) "README.gmi"))
- (not (string-prefix? "." (basename file)))
- (let* ((file-details (file-details file))
- ;; Downcase keywords to make them
- ;; case-insensitive.
- (all-keywords (map string-downcase
- (hashtable-ref file-details 'keywords '()))))
- (issue file
- ;; Fallback to filename if title has no alphabetic
- ;; characters.
- (let ((title (hashtable-ref file-details 'title "")))
- (if (string-any char-set:letter title) title file))
- (hashtable-ref file-details 'creator #f)
- (hashtable-ref file-details 'created-date #f)
- (hashtable-ref file-details 'created-relative-date #f)
- (hashtable-ref file-details 'last-updater #f)
- (hashtable-ref file-details 'last-updated-date #f)
- (hashtable-ref file-details 'last-updated-relative-date #f)
- (hashtable-ref file-details 'assigned '())
- ;; "closed" is a special keyword to indicate
- ;; the open/closed status of an issue.
- (delete "closed" all-keywords)
- (not (member "closed" all-keywords))
- (hashtable-ref file-details 'tasks 0)
- (hashtable-ref file-details 'completed-tasks 0)
- (hashtable-ref file-details 'posts #f)))))
- (git-tracked-files))
+ (let* ((file-details (file-details file))
+ ;; Downcase keywords to make them
+ ;; case-insensitive.
+ (all-keywords (map string-downcase
+ (hashtable-ref file-details 'keywords '()))))
+ (issue file
+ ;; Fallback to filename if title has no alphabetic
+ ;; characters.
+ (let ((title (hashtable-ref file-details 'title "")))
+ (if (string-any char-set:letter title) title file))
+ (hashtable-ref file-details 'creator #f)
+ (hashtable-ref file-details 'created-date #f)
+ (hashtable-ref file-details 'created-relative-date #f)
+ (hashtable-ref file-details 'last-updater #f)
+ (hashtable-ref file-details 'last-updated-date #f)
+ (hashtable-ref file-details 'last-updated-relative-date #f)
+ (hashtable-ref file-details 'assigned '())
+ ;; "closed" is a special keyword to indicate
+ ;; the open/closed status of an issue.
+ (delete "closed" all-keywords)
+ (not (member "closed" all-keywords))
+ (hashtable-ref file-details 'tasks 0)
+ (hashtable-ref file-details 'completed-tasks 0)
+ (hashtable-ref file-details 'posts #f))))
+ (%issue-files))
(lambda (issue1 issue2)
(time<? (date->time-monotonic (issue-created-date issue1))
(date->time-monotonic (issue-created-date issue2))))))))
diff --git a/tissue/tissue.scm b/tissue/tissue.scm
index 4af4886..194587d 100644
--- a/tissue/tissue.scm
+++ b/tissue/tissue.scm
@@ -20,19 +20,23 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-71)
+ #:use-module (tissue git)
#:export (tissue-configuration
tissue-configuration?
tissue-configuration-project
tissue-configuration-aliases
+ tissue-configuration-issue-files
tissue-configuration-web-css
tissue-configuration-web-tags-path
- tissue-configuration-web-files))
+ tissue-configuration-web-files
+ gemtext-files-in-directory))
(define-record-type <tissue-configuration>
- (make-tissue-configuration project aliases web-css web-tags-path web-files)
+ (make-tissue-configuration project aliases issue-files web-css web-tags-path web-files)
tissue-configuration?
(project tissue-configuration-project)
(aliases tissue-configuration-aliases)
+ (issue-files tissue-configuration-issue-files)
(web-css tissue-configuration-web-css)
(web-tags-path tissue-configuration-web-tags-path)
(web-files delayed-tissue-configuration-web-files))
@@ -40,6 +44,17 @@
(define tissue-configuration-web-files
(compose force delayed-tissue-configuration-web-files))
+(define* (gemtext-files-in-directory #:optional directory)
+ "Return a list of all gemtext files in DIRECTORY tracked in the
+current git repository. If DIRECTORY is #f, return the list of all
+gemtext files tracked in the current git repository regardless of
+which directory they are in."
+ (filter (lambda (filename)
+ (and (or (not directory)
+ (string-prefix? directory filename))
+ (string-suffix? ".gmi" filename)))
+ (git-tracked-files)))
+
(define-syntax tissue-configuration
(lambda (x)
(syntax-case x ()
@@ -48,7 +63,9 @@
(eq? (syntax->datum arg)
#:web-files))
#'(args ...))))
- #`(apply (lambda* (#:key project (aliases '()) web-css (web-tags-path "/tags") (web-files '()))
+ #`(apply (lambda* (#:key project (aliases '())
+ (issue-files (gemtext-files-in-directory))
+ web-css (web-tags-path "/tags") (web-files '()))
"PROJECT is the name of the project. It is used in
the title of the generated web pages, among other places.
@@ -56,6 +73,8 @@ ALIASES is a list of aliases used to refer to authors in the
repository. Each element is in turn a list of aliases an author goes
by, the first of which is the canonical name of that author.
+ISSUE-FILES is a list of files that pertain to issues.
+
WEB-CSS is the path to a CSS stylesheet. It is relative to the
document root and must begin with a /. If it is #f, no stylesheet is
used in the generated web pages.
@@ -65,7 +84,7 @@ per-tag issue listings are put. It must begin with a /.
WEB-FILES is a list of <file> objects representing files to be written
to the web output."
- (make-tissue-configuration project aliases web-css web-tags-path web-files))
+ (make-tissue-configuration project aliases issue-files web-css web-tags-path web-files))
(list #,@(append before
(syntax-case after ()
((web-files-key web-files rest ...)