diff options
| author | Alex Kost <alezost@gmail.com> | 2018-07-12 11:33:59 +0300 |
|---|---|---|
| committer | Alex Kost <alezost@gmail.com> | 2018-07-16 21:37:19 +0300 |
| commit | 7fecae86eebb0f145be9505673234ead93df27fd (patch) | |
| tree | 54a1cc6764b2074403077c888734ba097ec52676 /build-farm-jobset.el | |
| download | emacs-build-farm-7fecae86eebb0f145be9505673234ead93df27fd.tar.gz | |
Initial commit
The code has been copied from Emacs-Guix package and renamed from
'guix-hydra-...' to 'build-farm-...'.
New files:
* build-farm.el
* build-farm-build.el
* build-farm-jobset.el
* build-farm-utils.el
* .gitignore
Diffstat (limited to 'build-farm-jobset.el')
| -rw-r--r-- | build-farm-jobset.el | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/build-farm-jobset.el b/build-farm-jobset.el new file mode 100644 index 0000000..e5ede38 --- /dev/null +++ b/build-farm-jobset.el @@ -0,0 +1,171 @@ +;;; build-farm-jobset.el --- Interface for jobsets -*- lexical-binding: t -*- + +;; Copyright © 2015–2018 Alex Kost <alezost@gmail.com> + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; This file provides an interface for displaying jobsets of a build +;; farm in 'list' and 'info' buffers. + +;;; Code: + +(require 'cl-lib) +(require 'bui) +(require 'build-farm) +(require 'build-farm-build) + +(build-farm-define-entry-type jobset + :search-types '((project . build-farm-jobset-api-url)) + :filters '(build-farm-jobset-filter-id) + :filter-names '((nrscheduled . scheduled) + (nrsucceeded . succeeded) + (nrfailed . failed) + (nrtotal . total))) + +(defun build-farm-jobset-get-display (search-type &rest args) + "Search for jobsets and show results. +See `build-farm-search-url' for the meaning of SEARCH-TYPE and ARGS." + (apply #'bui-list-get-display-entries + 'build-farm-jobset search-type args)) + + +;;; Defining URLs + +(defun build-farm-jobset-url (project jobset) + "Return URL of a PROJECT's JOBSET." + (build-farm-url "jobset/" project "/" jobset)) + +(defun build-farm-jobset-api-url (project) + "Return API URL for jobsets by PROJECT." + (build-farm-api-url "jobsets" + `(("project" . ,project)))) + + +;;; Filters for processing raw entries + +(defun build-farm-jobset-filter-id (entry) + "Add 'ID' parameter to 'jobset' ENTRY." + (cons `(id . ,(bui-entry-non-void-value entry 'name)) + entry)) + + +;;; Jobset 'info' + +(build-farm-define-interface jobset info + :mode-name "Farm-Jobset-Info" + :buffer-name "*Farm Jobset Info*" + :format '((name nil (simple bui-info-heading)) + nil + build-farm-jobset-info-insert-url + (project format build-farm-jobset-info-insert-project) + (scheduled format (format build-farm-jobset-info-scheduled)) + (succeeded format (format build-farm-jobset-info-succeeded)) + (failed format (format build-farm-jobset-info-failed)) + (total format (format build-farm-jobset-info-total)))) + +(defface build-farm-jobset-info-scheduled + '((t)) + "Face used for the number of scheduled builds." + :group 'build-farm-jobset-info-faces) + +(defface build-farm-jobset-info-succeeded + '((t :inherit build-farm-build-status-succeeded)) + "Face used for the number of succeeded builds." + :group 'build-farm-jobset-info-faces) + +(defface build-farm-jobset-info-failed + '((t :inherit build-farm-build-status-failed)) + "Face used for the number of failed builds." + :group 'build-farm-jobset-info-faces) + +(defface build-farm-jobset-info-total + '((t)) + "Face used for the total number of builds." + :group 'build-farm-jobset-info-faces) + +(defun build-farm-jobset-info-insert-project (project entry) + "Insert PROJECT button for the jobset ENTRY." + (let ((jobset (bui-entry-non-void-value entry 'name))) + (bui-insert-button + project 'build-farm-build-project + 'action (lambda (btn) + (let ((args (build-farm-build-latest-prompt-args + :project (button-get btn 'project) + :jobset (button-get btn 'jobset)))) + (apply #'build-farm-build-get-display + 'latest args))) + 'project project + 'jobset jobset))) + +(defun build-farm-jobset-info-insert-url (entry) + "Insert URL for the jobset ENTRY." + (bui-insert-button (build-farm-jobset-url + (bui-entry-non-void-value entry 'project) + (bui-entry-non-void-value entry 'name)) + 'bui-url) + (bui-newline)) + + +;;; Jobset 'list' + +(build-farm-define-interface jobset list + :describe-function 'build-farm-list-describe + :mode-name "Farm-Jobset-List" + :buffer-name "*Farm Jobsets*" + :format '((name nil 25 t) + (project nil 10 t) + (scheduled nil 12 t) + (succeeded nil 12 t) + (failed nil 9 t) + (total nil 10 t)) + :hint 'build-farm-jobset-list-hint) + +(let ((map build-farm-jobset-list-mode-map)) + (define-key map (kbd "B") 'build-farm-jobset-list-latest-builds)) + +(defvar build-farm-jobset-list-default-hint + '(("\\[build-farm-jobset-list-latest-builds]") + " show latest builds for the current jobset;\n")) + +(defun build-farm-jobset-list-hint () + "Return hint string for a jobset-list buffer." + (bui-format-hints + build-farm-jobset-list-default-hint + (bui-default-hint))) + +(defun build-farm-jobset-list-latest-builds (number &rest args) + "Display latest NUMBER of builds of the current jobset. +Interactively, prompt for NUMBER. With prefix argument, prompt +for all ARGS." + (interactive + (let ((entry (bui-list-current-entry))) + (build-farm-build-latest-prompt-args + :project (bui-entry-non-void-value entry 'project) + :jobset (bui-entry-non-void-value entry 'name)))) + (apply #'build-farm-latest-builds number args)) + + +;;; Interactive commands + +;;;###autoload +(defun build-farm-jobsets (project) + "Display jobsets of PROJECT." + (interactive (list (build-farm-read-project))) + (build-farm-jobset-get-display 'project project)) + +(provide 'build-farm-jobset) + +;;; build-farm-jobset.el ends here |
