summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Isaac2022-07-13 00:33:23 +0530
committerArun Isaac2022-07-13 01:40:08 +0530
commit887b608122b660ab5df3f89784af5511497b4872 (patch)
treefb88b523f9244d7b8a6aa347b261d1bc412098aa
parent3d0dcdd2358b7373506b7928ef32761a80b3fbf9 (diff)
downloadtissue-887b608122b660ab5df3f89784af5511497b4872.tar.gz
tissue-887b608122b660ab5df3f89784af5511497b4872.tar.lz
tissue-887b608122b660ab5df3f89784af5511497b4872.zip
issue: Move <issue> posts slot into <file-document>.
We move the posts slot of <issue> into the <file-document> parent class as a commits slot. We also no longer store the creator, created-date, last-updater, last-updated-date of <issue> in slots. Rather, we compute them on-demand from the commits slot. * tissue/file-document.scm: Import (rnrs hashtables), (srfi srfi-1), (srfi srfi-26), (git), (tissue commit) and (tissue person). (<file-document>)[commits]: New slot. (file-document-creator, file-document-created-date, file-document-last-updater, file-document-last-updated-date): New public functions. (read-gemtext-document): Initialize commits slot. * tissue/issue.scm (file-modification-table-for-current-repository): Move to (tissue file-document). (<issue>)[creator, created-date, last-updater, last-updated-date, posts]: Delete slots. (<post>): Delete class. (document-term-generator, print, print-issue-to-gemtext, document->sxml): Use file-document-creator, file-document-created-date, file-document-last-updater, file-document-last-updated-date and file-document-commits instead of issue-creator, issue-created-date, issue-last-updater, issue-last-updated-date and issue-posts. (read-gemtext-issue): Use read-gemtext-document. Do not initialize creator, created-date, last-updater and last-updated-date slots.
-rw-r--r--tissue/file-document.scm40
-rw-r--r--tissue/issue.scm80
2 files changed, 60 insertions, 60 deletions
diff --git a/tissue/file-document.scm b/tissue/file-document.scm
index 621e9bb..112c7f2 100644
--- a/tissue/file-document.scm
+++ b/tissue/file-document.scm
@@ -17,20 +17,45 @@
;;; along with tissue. If not, see <https://www.gnu.org/licenses/>.
(define-module (tissue file-document)
+ #:use-module (rnrs hashtables)
#:use-module (rnrs io ports)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
#:use-module (srfi srfi-171)
+ #:use-module (git)
#:use-module (oop goops)
#:use-module (term ansi-color)
+ #:use-module (tissue commit)
#:use-module (tissue document)
#:use-module (tissue git)
+ #:use-module (tissue person)
#:use-module (tissue utils)
#:use-module (xapian xapian)
#:export (<file-document>
file-document-path
+ file-document-commits
+ file-document-creator
+ file-document-created-date
+ file-document-last-updater
+ file-document-last-updated-date
read-gemtext-document))
(define-class <file-document> (<document>)
- (path #:accessor file-document-path #:init-keyword #:path))
+ (path #:accessor file-document-path #:init-keyword #:path)
+ ;; List of <commit> objects, oldest first.
+ (commits #:accessor file-document-commits #:init-keyword #:commits))
+
+(define file-document-creator
+ (compose doc:commit-author first file-document-commits))
+
+(define file-document-created-date
+ (compose doc:commit-author-date first file-document-commits))
+
+(define file-document-last-updater
+ (compose doc:commit-author last file-document-commits))
+
+(define file-document-last-updated-date
+ (compose doc:commit-author-date last file-document-commits))
(define-method (document-type (document <file-document>))
(next-method))
@@ -81,6 +106,10 @@ a list of search results."
,@snippet))
(list)))))
+(define file-modification-table-for-current-repository
+ (memoize-thunk
+ (cut file-modification-table (current-git-repository))))
+
(define (read-gemtext-document file)
"Read gemtext document from FILE. Return a <file-document> object."
(make <file-document>
@@ -96,4 +125,11 @@ a list of search results."
port)))
;; Fallback to filename if document has no title.
file)
- #:path file))
+ #:path file
+ #:commits (map (lambda (commit)
+ (make <commit>
+ #:author (resolve-alias (signature-name (commit-author commit))
+ (%aliases))
+ #:author-date (commit-author-date commit)))
+ (hashtable-ref (file-modification-table-for-current-repository)
+ file #f))))
diff --git a/tissue/issue.scm b/tissue/issue.scm
index ac7ae5c..3fb21cc 100644
--- a/tissue/issue.scm
+++ b/tissue/issue.scm
@@ -36,19 +36,11 @@
#:use-module (tissue person)
#:use-module (tissue utils)
#:export (<issue>
- issue-creator
- issue-created-date
- issue-last-updater
- issue-last-updated-date
issue-assigned
issue-keywords
issue-open?
issue-tasks
issue-completed-tasks
- issue-posts
- <post>
- post-author
- post-date
issue->alist
alist->issue
post->alist
@@ -60,27 +52,17 @@
index-issue))
(define-class <issue> (<file-document>)
- (creator #:accessor issue-creator #:init-keyword #:creator)
- (created-date #:accessor issue-created-date #:init-keyword #:created-date)
- (last-updater #:accessor issue-last-updater #:init-keyword #:last-updater)
- (last-updated-date #:accessor issue-last-updated-date #:init-keyword #:last-updated-date)
(assigned #:accessor issue-assigned #:init-keyword #:assigned)
(keywords #:accessor issue-keywords #:init-keyword #:keywords)
(open? #:accessor issue-open? #:init-keyword #:open?)
(tasks #:accessor issue-tasks #:init-keyword #:tasks)
- (completed-tasks #:accessor issue-completed-tasks #:init-keyword #:completed-tasks)
- ;; List of <post> objects, oldest first.
- (posts #:accessor issue-posts #:init-keyword #:posts))
-
-(define-class <post> ()
- (author #:accessor post-author #:init-keyword #:author)
- (date #:accessor post-date #:init-keyword #:date))
+ (completed-tasks #:accessor issue-completed-tasks #:init-keyword #:completed-tasks))
(define-method (document-term-generator (issue <issue>))
"Return a term generator indexing ISSUE."
(let ((term-generator (next-method)))
- (index-person! term-generator (issue-creator issue) "A")
- (index-person! term-generator (issue-last-updater issue) "XA")
+ (index-person! term-generator (file-document-creator issue) "A")
+ (index-person! term-generator (file-document-last-updater issue) "XA")
(for-each (cut index-person! term-generator <> "XI")
(issue-assigned issue))
(for-each (cut index-text! term-generator <> #:prefix "K")
@@ -92,7 +74,7 @@
(define-method (print (issue <issue>) mset port)
"Print ISSUE, an <issue> object, in search results."
- (let ((number-of-posts (length (issue-posts issue))))
+ (let ((number-of-posts (length (file-document-commits issue))))
(display (colorize-string (document-title issue) 'MAGENTA 'UNDERLINE)
port)
(unless (null? (issue-keywords issue))
@@ -124,17 +106,17 @@
(newline port)
(display (string-append
"opened "
- (colorize-string (human-date-string (issue-created-date issue)) 'CYAN)
+ (colorize-string (human-date-string (file-document-created-date issue)) 'CYAN)
" by "
- (colorize-string (issue-creator issue) 'CYAN))
+ (colorize-string (file-document-creator issue) 'CYAN))
port)
(when (> number-of-posts 1)
(display (string-append (colorize-string "," 'CYAN)
" last updated "
- (colorize-string (human-date-string (issue-last-updated-date issue))
+ (colorize-string (human-date-string (file-document-last-updated-date issue))
'CYAN)
" by "
- (colorize-string (issue-last-updater issue)
+ (colorize-string (file-document-last-updater issue)
'CYAN))
port))
(unless (zero? (issue-tasks issue))
@@ -153,7 +135,7 @@
(define (print-issue-to-gemtext issue)
"Print ISSUE to gemtext."
- (let ((number-of-posts (length (issue-posts issue))))
+ (let ((number-of-posts (length (file-document-commits issue))))
(format #t "# ~a" (document-title issue))
(unless (null? (issue-keywords issue))
(format #t " [~a]"
@@ -167,12 +149,12 @@
(format #t " [~a posts]" number-of-posts))
(newline)
(format #t "opened ~a by ~a"
- (human-date-string (issue-created-date issue))
- (issue-creator issue))
+ (human-date-string (file-document-created-date issue))
+ (file-document-creator issue))
(when (> number-of-posts 1)
(format #t ", last updated ~a by ~a"
- (human-date-string (issue-last-updated-date issue))
- (issue-last-updater issue)))
+ (human-date-string (file-document-last-updated-date issue))
+ (file-document-last-updater issue)))
(unless (zero? (issue-tasks issue))
(format #t "; ~a/~a tasks done"
(issue-completed-tasks issue)
@@ -234,13 +216,13 @@ object representing a list of search results."
(div (@ (class "search-result-metadata"))
,(string-append
(format #f "opened ~a by ~a"
- (human-date-string (issue-created-date issue))
- (issue-creator issue))
- (if (> (length (issue-posts issue))
+ (human-date-string (file-document-created-date issue))
+ (file-document-creator issue))
+ (if (> (length (file-document-commits issue))
1)
(format #f ", last updated ~a by ~a"
- (human-date-string (issue-last-updated-date issue))
- (issue-last-updater issue))
+ (human-date-string (file-document-last-updated-date issue))
+ (file-document-last-updater issue))
"")
(if (zero? (issue-tasks issue))
""
@@ -359,33 +341,20 @@ gemtext file."
port)
result))
-(define file-modification-table-for-current-repository
- (memoize-thunk
- (cut file-modification-table (current-git-repository))))
-
(define (read-gemtext-issue file)
"Read issue from gemtext FILE. Return an <issue> object."
- (let* ((file-details (call-with-file-in-git (current-git-repository) file
+ (let* ((file-document (read-gemtext-document file))
+ (file-details (call-with-file-in-git (current-git-repository) file
file-details))
;; 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)))
+ (hashtable-ref file-details 'keywords '()))))
(make <issue>
#:path file
;; Fallback to filename if title has no alphabetic characters.
#:title (let ((title (hashtable-ref file-details 'title "")))
(if (string-any char-set:letter title) title file))
- #:creator (first commit-authors)
- #:created-date (commit-author-date (first commits))
- #:last-updater (last commit-authors)
- #:last-updated-date (commit-author-date (last commits))
#:assigned (hashtable-ref file-details 'assigned '())
;; "closed" is a special keyword to indicate the open/closed
;; status of an issue.
@@ -393,9 +362,4 @@ gemtext file."
#:open? (not (member "closed" all-keywords))
#:tasks (hashtable-ref file-details 'tasks 0)
#:completed-tasks (hashtable-ref file-details 'completed-tasks 0)
- #:posts (map (lambda (commit author)
- (make <post>
- #:author author
- #:date (commit-author-date commit)))
- commits
- commit-authors))))
+ #:commits (file-document-commits file-document))))