summaryrefslogtreecommitdiff
path: root/tissue/file-document.scm
diff options
context:
space:
mode:
authorArun Isaac2022-07-13 00:33:23 +0530
committerArun Isaac2022-07-13 01:40:08 +0530
commit887b608122b660ab5df3f89784af5511497b4872 (patch)
treefb88b523f9244d7b8a6aa347b261d1bc412098aa /tissue/file-document.scm
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.
Diffstat (limited to 'tissue/file-document.scm')
-rw-r--r--tissue/file-document.scm40
1 files changed, 38 insertions, 2 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))))