[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

04/05: emacs: Add "Build Log" button to Package Info.

From: Alex Kost
Subject: 04/05: emacs: Add "Build Log" button to Package Info.
Date: Tue, 31 May 2016 20:52:07 +0000 (UTC)

alezost pushed a commit to branch master
in repository guix.

commit b097dd72c4ffab9622300db9950c5a0b1b1579f7
Author: Alex Kost <address@hidden>
Date:   Fri May 27 10:43:25 2016 +0300

    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-info-insert-build-log-button): New procedures.
    (guix-package-info-button-functions): Add
 emacs/guix-main.scm      |   10 ++++++++++
 emacs/guix-ui-package.el |   25 ++++++++++++++++++++++++-
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index 8914933..cbf7cdc 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -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
diff --git a/emacs/guix-ui-package.el b/emacs/guix-ui-package.el
index 4eb7083..4280246 100644
--- a/emacs/guix-ui-package.el
+++ b/emacs/guix-ui-package.el
@@ -111,6 +111,19 @@ is found and `guix-package-list-single' is nil."
       (list (if (= 0 package-id) package-id-str package-id)
+(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 
    (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').

reply via email to

[Prev in Thread] Current Thread [Next in Thread]