summaryrefslogtreecommitdiff
path: root/tissue/issue.scm
diff options
context:
space:
mode:
authorArun Isaac2022-06-26 23:39:09 +0530
committerArun Isaac2022-06-27 00:19:51 +0530
commit76991c195740d2edee0a1887b4850e438d8e83d2 (patch)
treed4672cf94f4d03b4aadc765e5bf6f4010c99ff83 /tissue/issue.scm
parentef47614b81052f2a2758ad26c194a44a8ce441c6 (diff)
downloadtissue-76991c195740d2edee0a1887b4850e438d8e83d2.tar.gz
tissue-76991c195740d2edee0a1887b4850e438d8e83d2.tar.lz
tissue-76991c195740d2edee0a1887b4850e438d8e83d2.zip
issue: Replace issues thunk with read-gemtext-issue reader.
* tissue/issue.scm (%issue-files): Delete parameter. (issues): Delete function. (read-gemtext-issue): New public function. (file-modification-table-for-current-repository): New function. * bin/tissue (main): Do not parameterize %issue-files.
Diffstat (limited to 'tissue/issue.scm')
-rw-r--r--tissue/issue.scm85
1 files changed, 38 insertions, 47 deletions
diff --git a/tissue/issue.scm b/tissue/issue.scm
index c68be9a..cbf4551 100644
--- a/tissue/issue.scm
+++ b/tissue/issue.scm
@@ -31,8 +31,7 @@
#:use-module (xapian xapian)
#:use-module (tissue git)
#:use-module (tissue utils)
- #:export (%issue-files
- %aliases
+ #:export (%aliases
issue
issue?
issue-file
@@ -56,11 +55,9 @@
post->alist
alist->post
issues
+ read-gemtext-issue
index-issue))
-(define %issue-files
- (make-parameter #f))
-
(define %aliases
(make-parameter #f))
@@ -276,49 +273,43 @@ in (tissue tissue). If no alias is found, NAME is returned as such."
port))))
result))
-(define issues
+(define file-modification-table-for-current-repository
(memoize-thunk
- (lambda ()
- "Return a list of all issues, sorted oldest first."
- ;; Get all gemini files except README.gmi and hidden files. Text
- ;; editors tend to create hidden files while editing, and we want to
- ;; avoid them.
- (let ((file-modification-table (file-modification-table (current-git-repository))))
- (sort (filter-map (lambda (file)
- (let* ((file-details (file-details file))
- ;; Downcase keywords to make them
- ;; case-insensitive.
- (all-keywords (map string-downcase
- (hashtable-ref file-details 'keywords '())))
- (commits (hashtable-ref file-modification-table file #f))
- (commit-authors (map (lambda (commit)
- (resolve-alias (signature-name (commit-author commit))
- (%aliases)))
- commits)))
- (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))
- (first commit-authors)
- (commit-date (first commits))
- (last commit-authors)
- (commit-date (last commits))
- (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)
- (map (lambda (commit author)
- (post author (commit-date commit)))
- commits
- commit-authors))))
- (%issue-files))
- (lambda (issue1 issue2)
- (time<? (date->time-monotonic (issue-created-date issue1))
- (date->time-monotonic (issue-created-date issue2)))))))))
+ (cut file-modification-table (current-git-repository))))
+
+(define (read-gemtext-issue file)
+ "Read issue from gemtext FILE. Return an <issue> object."
+ (let* ((file-details (file-details file))
+ ;; Downcase keywords to make them
+ ;; case-insensitive.
+ (all-keywords (map string-downcase
+ (hashtable-ref file-details 'keywords '())))
+ (commits (hashtable-ref (file-modification-table-for-current-repository)
+ file #f))
+ (commit-authors (map (lambda (commit)
+ (resolve-alias (signature-name (commit-author commit))
+ (%aliases)))
+ commits)))
+ (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))
+ (first commit-authors)
+ (commit-date (first commits))
+ (last commit-authors)
+ (commit-date (last commits))
+ (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)
+ (map (lambda (commit author)
+ (post author (commit-date commit)))
+ commits
+ commit-authors))))
(define (index-person term-generator name prefix)
"Index all aliases of person of canonical NAME using TERM-GENERATOR