summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Isaac2022-03-18 16:14:45 +0530
committerArun Isaac2022-03-18 16:24:43 +0530
commitf7fe6f27ea67901ee51ec91c9fdd40fcd13e8d4b (patch)
tree5ecb5445c47479fd6dadb0e8e88fe863ba52f766
parent2fabe47a52ee71692648eb22218c696e1e213673 (diff)
downloadtissue-f7fe6f27ea67901ee51ec91c9fdd40fcd13e8d4b.tar.gz
tissue-f7fe6f27ea67901ee51ec91c9fdd40fcd13e8d4b.tar.lz
tissue-f7fe6f27ea67901ee51ec91c9fdd40fcd13e8d4b.zip
issue: Resolve authors and assignees using aliases.
* bin/tissue (main): Load config and parameterize %aliases. * tissue/issue.scm (%aliases): New public parameter. (resolve-alias): New function. (file-details): Resolve authors and assignees using aliases.
-rwxr-xr-xbin/tissue25
-rw-r--r--tissue/issue.scm25
2 files changed, 35 insertions, 15 deletions
diff --git a/bin/tissue b/bin/tissue
index 93612e3..3e249c9 100755
--- a/bin/tissue
+++ b/bin/tissue
@@ -402,18 +402,19 @@ To get usage information for one of these sub-commands, run
(current-error-port))
(newline (current-error-port))
(exit #f)))
- (apply (match command
- ("news" tissue-news)
- ("list" tissue-list)
- ("edit" tissue-edit)
- ("show" tissue-show)
- ("web" tissue-web)
- (invalid-command
- (format (current-error-port) "Invalid command `~a'~%~%"
- invalid-command)
- (print-usage)
- (exit #f)))
- args)))
+ (parameterize ((%aliases (tissue-configuration-aliases (load-config))))
+ (apply (match command
+ ("news" tissue-news)
+ ("list" tissue-list)
+ ("edit" tissue-edit)
+ ("show" tissue-show)
+ ("web" tissue-web)
+ (invalid-command
+ (format (current-error-port) "Invalid command `~a'~%~%"
+ invalid-command)
+ (print-usage)
+ (exit #f)))
+ args))))
;; tissue is an alias for `tissue list'
((_)
(tissue-list))))
diff --git a/tissue/issue.scm b/tissue/issue.scm
index 00fcbcf..8d1d11c 100644
--- a/tissue/issue.scm
+++ b/tissue/issue.scm
@@ -28,7 +28,8 @@
#:use-module (ice-9 match)
#:use-module (ice-9 regex)
#:use-module (tissue utils)
- #:export (issue
+ #:export (%aliases
+ issue
issue-file
issue-title
issue-creator
@@ -49,6 +50,9 @@
post-relative-date
issues))
+(define %aliases
+ (make-parameter #f))
+
(define-record-type <issue>
(issue file title creator created-date created-relative-date
last-updater last-updated-date last-updated-relative-date
@@ -128,6 +132,18 @@ return #f."
(time-monotonic->date
(make-time time-monotonic 0 timestamp)))
+(define (resolve-alias name aliases)
+ "Resolve NAME against ALIASES, a list of aliases. ALIASES should be
+in the form of the argument of the same name to `tissue-configuration'
+in (tissue tissue). If no alias is found, NAME is returned as such."
+ (cond
+ ((find (cut member name <>)
+ aliases)
+ => (match-lambda
+ ((canonical-name _ ...) canonical-name)
+ (() name)))
+ (else name)))
+
(define (file-details file)
"Return a hashtable of details extracted from gemini FILE."
(let ((result (make-eq-hashtable)))
@@ -162,7 +178,9 @@ return #f."
;; their keys.
(for-each (match-lambda
(((or 'assign 'assigned) . values)
- (hashtable-append! result 'assigned values))
+ (hashtable-append! result 'assigned
+ (map (cut resolve-alias <> (%aliases))
+ values)))
(((or 'keywords 'severity 'status 'priority 'tags 'type) . values)
(hashtable-append! result 'keywords values))
(_ #t))
@@ -205,7 +223,8 @@ return #f."
(tmap (match-lambda
((index . line)
(let* ((alist (call-with-input-string line read))
- (author (assq-ref alist 'author))
+ (author (resolve-alias (assq-ref alist 'author)
+ (%aliases)))
(date (assq-ref alist 'author-date))
(relative-date (assq-ref alist 'author-relative-date)))
(when (zero? index)