From b7cbc9b95cc86439834fb4b1ca0a8ce8c141ddfd Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Sun, 19 Sep 2021 12:03:40 +0530 Subject: gnbug: Extract creator and created date. * gnbug (): 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. --- gnbug | 38 ++++++++++++++++++++++++++++++-------- 1 file 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 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 -- cgit v1.2.3