~ruther/guix-local

b097dd72c4ffab9622300db9950c5a0b1b1579f7 — Alex Kost 9 years ago e98316e
emacs: Add "Build Log" button to Package Info.

* emacs/guix-main.scm (package-build-log-file): New procedure.
* emacs/guix-ui-package.el (guix-package-build-log-file)
(guix-package-find-build-log)
(guix-package-info-insert-build-log-button): New procedures.
(guix-package-info-button-functions): Add
'guix-package-info-insert-build-log-button'.
2 files changed, 34 insertions(+), 1 deletions(-)

M emacs/guix-main.scm
M emacs/guix-ui-package.el
M emacs/guix-main.scm => emacs/guix-main.scm +10 -0
@@ 1000,6 1000,16 @@ GENERATIONS is a list of generation numbers."
        (format #t "The source store path: ~a~%"
                (package-source-derivation->store-path derivation))))))

(define (package-build-log-file package-id)
  "Return the build log file of a package PACKAGE-ID.
Return #f if the build log is not found."
  (and-let* ((package (package-by-id package-id)))
    (with-store store
      (let* ((derivation (package-derivation store package))
             (file       (derivation-file-name derivation)))
        (or (log-file store file)
            ((@@ (guix scripts build) log-url) store file))))))


;;; Executing guix commands


M emacs/guix-ui-package.el => emacs/guix-ui-package.el +24 -1
@@ 111,6 111,19 @@ is found and `guix-package-list-single' is nil."
      (list (if (= 0 package-id) package-id-str package-id)
            output))))

(defun guix-package-build-log-file (id)
  "Return build log file name of a package defined by ID."
  (guix-eval-read
   (guix-make-guile-expression 'package-build-log-file id)))

(defun guix-package-find-build-log (id)
  "Show build log of a package defined by ID."
  (require 'guix-build-log)
  (let ((file (guix-package-build-log-file id)))
    (if file
        (guix-build-log-find-file file)
      (message "Couldn't find the package build log."))))


;;; Processing package actions



@@ 333,7 346,8 @@ prompt depending on `guix-operation-confirm' variable)."
  :group 'guix-package-info)

(defcustom guix-package-info-button-functions
  '(guix-package-info-insert-build-button)
  '(guix-package-info-insert-build-button
    guix-package-info-insert-build-log-button)
  "List of functions used to insert package buttons in Info buffer.
Each function is called with 2 arguments: package ID and full name."
  :type '(repeat function)


@@ 598,6 612,15 @@ PACKAGE-ID is an ID of the package which store path to show."
   (format "Build the current package")
   'id id))

(defun guix-package-info-insert-build-log-button (id _name)
  "Insert button to show build log of a package defined by ID."
  (guix-info-insert-action-button
   "Build Log"
   (lambda (btn)
     (guix-package-find-build-log (button-get btn 'id)))
   "View build log of the current package"
   'id id))

(defun guix-package-info-show-source (entry-id package-id)
  "Show file name of a package source in the current info buffer.
Find the file if needed (see `guix-package-info-auto-find-source').