summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2021-09-19 12:03:40 +0530
committerBonfaceKilz2021-09-20 10:31:42 +0300
commitb7cbc9b95cc86439834fb4b1ca0a8ce8c141ddfd (patch)
tree7e6b5027f0b4fd4419cd58503785047fce56084f
parent972c58a10088dbac16809c09bc0e9192f1095eec (diff)
downloadgn-gemtext-b7cbc9b95cc86439834fb4b1ca0a8ce8c141ddfd.tar.gz
gnbug: Extract creator and created date.
* gnbug (<issue>): Add creator, created-date and created-relative-date
fields.
(issues): Initialize creator, created-date and created-relative-date
fields.
(creation-details): New function.
(main): Print creator and created-relative-date in issue listing.
-rwxr-xr-xgnbug38
1 files changed, 30 insertions, 8 deletions
diff --git a/gnbug b/gnbug
index ca0d09c..fd9d8d1 100755
--- a/gnbug
+++ b/gnbug
@@ -47,10 +47,13 @@ even if it exits non-locally. Return the value returned by PROC."
                     directory))
 
 (define-record-type <issue>
-  (issue file title assigned)
+  (issue file title creator created-date created-relative-date assigned)
   issue?
   (file issue-file)
   (title issue-title)
+  (creator issue-creator)
+  (created-date issue-created-date)
+  (created-relative-date issue-created-relative-date)
   (assigned issue-assigned))
 
 (define (issues)
@@ -59,12 +62,16 @@ even if it exits non-locally. Return the value returned by PROC."
   ;; editors tend to create hidden files while editing, and we want to
   ;; avoid them.
   (map (lambda (file)
-         (let ((file-details (file-details file)))
+         (let ((file-details (file-details file))
+               (creation-details (creation-details file)))
            (issue file
                   ;; Fallback to filename if title has no alphabetic
                   ;; characters.
                   (let ((title (hashtable-ref file-details 'title "")))
                     (if (string-any char-set:letter title) title file))
+                  (assq-ref creation-details 'creator)
+                  (assq-ref creation-details 'created-date)
+                  (assq-ref creation-details 'created-relative-date)
                   (hashtable-ref file-details 'assigned '()))))
        (find-files "."
                    (lambda (name _)
@@ -97,6 +104,19 @@ even if it exits non-locally. Return the value returned by PROC."
                         port)))
     result))
 
+(define (creation-details file)
+  "Return an association list of creation details about FILE extracted
+from the git repository."
+  (call-with-input-pipe
+   read
+   "git" "log" "--diff-filter=A"
+   (string-append "--format=format:("
+                  "(creator . \"%an\")"
+                  "(created-date . %at)"
+                  "(created-relative-date . \"%ar\")"
+                  ")")
+   "--" file))
+
 (define (git-updated-files transducer start-commit end-commit)
   "Use TRANSDUCER to transduce over the list of files updated between
 START-COMMIT and END-COMMIT."
@@ -191,12 +211,14 @@ terminal."
                                                        (member (assq-ref args 'assigned)
                                                                (issue-assigned issue)))))
                                         (tlog (lambda (_ issue)
-                                                (match (issue-assigned issue)
-                                                  (() (format #t "~a~%" (issue-title issue)))
-                                                  (assignees
-                                                   (format #t "~a ~a~%"
-                                                           (issue-title issue)
-                                                           (magenta (string-append "(assigned: "
+                                                (format #t "~a ~a ~a~a~%"
+                                                        (issue-created-relative-date issue)
+                                                        (cyan (issue-creator issue))
+                                                        (issue-title issue)
+                                                        (match (issue-assigned issue)
+                                                          (() "")
+                                                          (assignees
+                                                           (magenta (string-append " (assigned: "
                                                                                    (string-join assignees ", ")
                                                                                    ")"))))))))
                                rcount