summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2022-07-13 13:27:30 +0530
committerArun Isaac2022-07-19 17:37:02 +0530
commite2fe50c591706a7902048aaef911ce433522a322 (patch)
tree4da5664ccc7a33667db51358d0fc299683cac7b2
parent6fa357a7f5793b29473a5fb1a2476eee38d676d3 (diff)
downloadtissue-e2fe50c591706a7902048aaef911ce433522a322.tar.gz
tissue-e2fe50c591706a7902048aaef911ce433522a322.tar.lz
tissue-e2fe50c591706a7902048aaef911ce433522a322.zip
document: Store serialized date as value in Xapian document.
* tissue/document.scm (document-recency-date): Declare public generic
function.
(document-term-generator): Store serialized date in slot 0 of Xapian
document.
* tissue/file-document.scm (document-recency-date): New generic
method.
* tissue/commit.scm (document-recency-date): New generic method.
-rw-r--r--tissue/commit.scm4
-rw-r--r--tissue/document.scm10
-rw-r--r--tissue/file-document.scm4
3 files changed, 17 insertions, 1 deletions
diff --git a/tissue/commit.scm b/tissue/commit.scm
index 2ff6553..30d07b7 100644
--- a/tissue/commit.scm
+++ b/tissue/commit.scm
@@ -42,6 +42,10 @@
   "Return the ID term for DOCUMENT."
   (string-append "Qcommit." (commit-hash commit)))
 
+(define-method (document-recency-date (commit <commit>))
+  "Return a date representing the recency of DOCUMENT"
+  (doc:commit-author-date commit))
+
 (define-method (document-term-generator (commit <commit>))
   "Return a term generator indexing COMMIT."
   (let ((term-generator (next-method)))
diff --git a/tissue/document.scm b/tissue/document.scm
index ef3ca21..ecdabc3 100644
--- a/tissue/document.scm
+++ b/tissue/document.scm
@@ -37,6 +37,7 @@
             document-type
             document-id-term
             document-text
+            document-recency-date
             document-term-generator
             document-snippet-source-text
             document-snippet
@@ -133,6 +134,7 @@ that operates on a copy of OBJECT. It does not mutate OBJECT."
 
 (define-generic document-id-term)
 (define-generic document-text)
+(define-generic document-recency-date)
 (define-generic print)
 (define-generic document->sxml)
 
@@ -151,7 +153,13 @@ and further text, increase-termpos! must be called before indexing."
           #:document (make-document
                       #:data (call-with-output-string
                                (cut write (object->scm document) <>))
-                      #:terms `((,(document-id-term document) . 0))))))
+                      #:terms `((,(document-id-term document) . 0))
+                      ;; This serialization of the recency date gets
+                      ;; the timezone ordering wrong. TODO: Replace it
+                      ;; with sortable-serialise once it is working in
+                      ;; guile-xapian.
+                      #:values `((0 . ,(date->iso-8601
+                                        (document-recency-date document))))))))
     (index-text! term-generator (document-type document) #:prefix "XT")
     (index-text! term-generator (document-title document) #:prefix "S")
     (index-text! term-generator (document-text document))
diff --git a/tissue/file-document.scm b/tissue/file-document.scm
index 112c7f2..1265660 100644
--- a/tissue/file-document.scm
+++ b/tissue/file-document.scm
@@ -64,6 +64,10 @@
   "Return the ID term for DOCUMENT."
   (string-append "Qfile." (file-document-path document)))
 
+(define-method (document-recency-date (document <file-document>))
+  "Return a date representing the recency of DOCUMENT."
+  (file-document-last-updated-date document))
+
 (define-method (document-text (document <file-document>))
   "Return the full text of DOCUMENT."
   (call-with-file-in-git (current-git-repository) (file-document-path document)