From b097dd72c4ffab9622300db9950c5a0b1b1579f7 Mon Sep 17 00:00:00 2001 From: Alex Kost Date: Fri, 27 May 2016 10:43:25 +0300 Subject: [PATCH] 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'. --- 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 8914933b4b..cbf7cdc474 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 4eb70831dd..4280246bb8 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) 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').