[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/srht d911ecddcc 7/7: srht-git: srht-git-log: New comman
From: |
ELPA Syncer |
Subject: |
[elpa] externals/srht d911ecddcc 7/7: srht-git: srht-git-log: New command. |
Date: |
Thu, 16 Nov 2023 09:58:40 -0500 (EST) |
branch: externals/srht
commit d911ecddccf70497863ab3604d65eb9b2e29347d
Author: Aleksandr Vityazev <avityazev@posteo.org>
Commit: Aleksandr Vityazev <avityazev@posteo.org>
srht-git: srht-git-log: New command.
* lisp/srht (srht-plist-get, srht--vtable, srht--view-log):
New functions.
* lisp/srht-git (srht-git-log): New command; (srht-git-repository-log):
New function.
---
lisp/srht-git.el | 47 ++++++++++++++++++++++-----
lisp/srht.el | 97 ++++++++++++++++++++++++++++++++++++++++----------------
2 files changed, 109 insertions(+), 35 deletions(-)
diff --git a/lisp/srht-git.el b/lisp/srht-git.el
index 7b3071451a..7ddc93285d 100644
--- a/lisp/srht-git.el
+++ b/lisp/srht-git.el
@@ -74,12 +74,11 @@ Or CALLBACK may be `sync' to make a synchronous request."
(srht-git-repositories-next nil)))
(cursor "") (ac nil))
(if cursor
- (pcase-let (((map (:data
- (map (:me
- (map (:repositories
- (map (:cursor pointer)
- (:results results))))))))
- (srht-git-request instance query)))
+ (let* ((resp (srht-git-request instance query))
+ (results (srht-plist-get resp
+ :data :me :repositories :results))
+ (pointer (srht-plist-get resp
+ :data :me :repositories :cursor)))
(loop (srht-gql-query (srht-git-repositories-next pointer))
pointer (append results ac)))
ac)))
@@ -187,7 +186,7 @@ INITIAL-INPUT, HISTORY (see `read-from-minibuffer')."
(transient-define-suffix srht-git-repo-create0 ()
"Create the NAME repository on an instance with the instance name INSTANCE.
Set VISIBILITY and DESCRIPTION."
- (interactive)
+ (interactive nil nil)
(let ((instance (srht-git--transient-value "instance="))
(name (let ((val (srht-git--transient-value "name=")))
(if (or (null val) (string-empty-p val))
@@ -288,6 +287,36 @@ Set VISIBILITY, NEW-NAME and DESCRIPTION."
(srht-git--message instance
"Sourcehut %s git repository deleted!" repo-name))))))
+(defun srht-git-repository-log (instance repo-name &optional cursor)
+ "Sourcehut INSTANCE repository REPO-NAME log.
+If you pass value of CURSOR into repositories(cursor:\"...\") in a
+subsequent request, you'll get the next page."
+ (let* ((log `(:type log
+ :arguments (:cursor ,cursor)
+ :fields (cursor
+ (:type results
+ :fields (shortId
+ message
+ (:type author
+ :fields (name email)))))))
+ (repository `(:type repository
+ :arguments (:name ,repo-name)
+ :fields (id name ,log)
+ )))
+ (srht-git-request instance
+ (srht-gql-query
+ `(:query me
+ :fields (,repository))))))
+
+;;;###autoload
+(defun srht-git-log (instance repo-name)
+ "Display log of Sourcehut INSTANCE git repositories REPO-NAME."
+ (interactive nil nil)
+ (if-let ((resp (srht-git-repository-log instance repo-name))
+ (log (srht-plist-get resp :data :me :repository :log :results)))
+ (srht--view-log log)
+ (user-error "No log")))
+
;;;###autoload
(defun srht-git-repos-list (instance)
"Display a list of Sourcehut INSTANCE git repositories."
@@ -300,7 +329,9 @@ Set VISIBILITY, NEW-NAME and DESCRIPTION."
(srht-git-repo-delete ,instance (plist-get obj :name)))
"u" (lambda (obj)
(srht-git-repo-update ,instance (plist-get obj :name)))
- "c" (lambda (_obj) (srht-git-repo-create)))))
+ "c" (lambda (_obj) (srht-git-repo-create))
+ "l" (lambda (obj)
+ (srht-git-log ,instance (plist-get obj :name))))))
;;;;;;;;;;;;;;;;;;;LEGACY API;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/lisp/srht.el b/lisp/srht.el
index 864e8cfcd6..540de1c815 100644
--- a/lisp/srht.el
+++ b/lisp/srht.el
@@ -273,11 +273,19 @@ PROMPT is a string to prompt with; normally it ends in a
colon and a space."
PROMPT, INITIAL-INPUT see `completing-read' doc."
(completing-read prompt '("private" "public" "unlisted") nil t
initial-input))
+(defun srht-plist-get (plist &rest kw-list)
+ "Extract a value for last keyword in KW-LIST from a property list.
+PLIST nested property list."
+ (declare (indent 1))
+ (seq-reduce (lambda (acc kw)
+ (setq acc (plist-get acc kw)))
+ kw-list plist))
+
(defun srht-results-get (instance plist)
"Extract the value for the :results property.
For the existing PLIST for the INSTANCE instance name."
(declare (indent 1))
- (plist-get (plist-get plist (intern instance)) :results))
+ (srht-plist-get plist (intern instance) :results))
(defmacro srht-put (plist instance val)
"Change value in PLIST of INSTANCE to VAL if is not nil."
@@ -323,40 +331,75 @@ Return string in format DAY.MONTH.YEAR."
(lambda (&rest _args)
(error "Require define-keymap"))))
-(defun srht--view (instance repositories &optional actions)
- "Display a list of Sourcehut INSTANCE REPOSITORIES.
-ACTIONS are simple commands that will be called with the
-object under point."
- (declare (indent 2))
- (let ((buffer (get-buffer-create "*Sourcehut repositories*")))
- (with-current-buffer buffer
+(cl-defun srht--vtable (&key buffer
+ columns
+ objects
+ getter
+ separator-width
+ actions)
+ ""
+ (let ((buff (get-buffer-create buffer)))
+ (with-current-buffer buff
(let ((inhibit-read-only t))
(srht--make-vtable
- :columns '("Name"
- (:name "Visibility"
- :formatter (lambda (val) (when val (downcase val))))
- (:name "Created"
- :formatter srht--format-date
- :width 10)
- (:name "Updated"
- :formatter srht--format-date
- :width 10))
- :objects (plist-get repositories (intern instance))
- :getter (lambda (object column vtable)
- (pcase (srht--vtable-colum vtable column)
- ("Name" (plist-get object :name))
- ("Visibility" (plist-get object :visibility))
- ("Created" (plist-get object :created))
- ("Updated" (plist-get object :updated))))
- :separator-width 5
- :actions actions
+ :columns columns
+ :objects objects
+ :getter getter
+ :separator-width separator-width
:keymap (srht--define-keymap
"q" #'kill-current-buffer
"n" #'next-line
- "p" #'previous-line)))
+ "p" #'previous-line)
+ :actions actions))
(read-only-mode)
(hl-line-mode))
(switch-to-buffer buffer)))
+(defun srht--view (instance repositories &optional actions)
+ "Display a list of Sourcehut INSTANCE REPOSITORIES.
+ACTIONS are simple commands that will be called with the
+object under point."
+ (declare (indent 2))
+ (srht--vtable
+ :buffer "*Sourcehut repositories*"
+ :columns '("Name"
+ (:name "Visibility"
+ :formatter (lambda (val) (when val (downcase val))))
+ (:name "Created"
+ :formatter srht--format-date
+ :width 10)
+ (:name "Updated"
+ :formatter srht--format-date
+ :width 10))
+ :objects (plist-get repositories (intern instance))
+ :getter (lambda (object column vtable)
+ (pcase (srht--vtable-colum vtable column)
+ ("Name" (plist-get object :name))
+ ("Visibility" (plist-get object :visibility))
+ ("Created" (plist-get object :created))
+ ("Updated" (plist-get object :updated))))
+ :separator-width 5
+ :actions actions))
+
+(defun srht--view-log (log &optional actions)
+ ""
+ (srht--vtable
+ :buffer "*Sourcehut log*"
+ :columns '("ShortId"
+ (:name "Message"
+ :width 40)
+ (:name "Author name")
+ (:name "Author email"))
+ :objects log
+ :getter (lambda (object column vtable)
+ (pcase (srht--vtable-colum vtable column)
+ ("ShortId" (plist-get object :shortId))
+ ("Message" (replace-regexp-in-string
+ "\n" "" (plist-get object :message)))
+ ("Author name" (srht-plist-get object :author :name))
+ ("Author email" (srht-plist-get object :author :email))))
+ :separator-width 1
+ :actions actions))
+
(provide 'srht)
;;; srht.el ends here
- [elpa] externals/srht updated (f641152cd6 -> d911ecddcc), ELPA Syncer, 2023/11/16
- [elpa] externals/srht 23bb1bae06 5/7: srht-git: srht-git--read-url: New function., ELPA Syncer, 2023/11/16
- [elpa] externals/srht d911ecddcc 7/7: srht-git: srht-git-log: New command.,
ELPA Syncer <=
- [elpa] externals/srht 962bd24636 1/7: srht-git: srht-git-request: New function., ELPA Syncer, 2023/11/16
- [elpa] externals/srht c17c1d74c2 4/7: srht-git: srht-git-repo-create0: Fix., ELPA Syncer, 2023/11/16
- [elpa] externals/srht 59a24466da 3/7: srht-git: srht-git-gql-base-query: Add filter., ELPA Syncer, 2023/11/16
- [elpa] externals/srht 90d8a5b7f2 6/7: srht-git: srht-git-gql-base-query, srht-git--gql-next-query: Remove., ELPA Syncer, 2023/11/16
- [elpa] externals/srht abc651e27a 2/7: srht-git: srht-git-repos-list: Add actions., ELPA Syncer, 2023/11/16