summary refs log tree commit diff
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))))