diff options
| author | Alex Kost <alezost@gmail.com> | 2018-08-18 22:45:41 +0300 |
|---|---|---|
| committer | Alex Kost <alezost@gmail.com> | 2018-08-26 00:06:26 +0300 |
| commit | 126374fd328e66299beee5875f7ea5437302f340 (patch) | |
| tree | 16df5bc6a1c57b4dfb44ccb8da6a93ecbf2107ed | |
| parent | url: Use nil for 'json-false' value (diff) | |
| download | emacs-build-farm-126374fd328e66299beee5875f7ea5437302f340.tar.gz | |
Rename 'jobset' interface to 'hydra-jobset'
Cuirass and Hydra jobsets are completely different, so there will be a
separate interface for Cuirass jobsets.
* build-farm.el: Update Emacs requirement to 24.4 because 'subr-x'
library is needed now.
(build-farm-info-insert-jobset): Rename to...
(build-farm-info-insert-hydra-jobset): ... this.
* build-farm-build.el (build-farm-build-info-insert-jobset): Adjust
accordingly.
* build-farm-project.el (build-farm-project-info-insert-jobset): Likewise.
* build-farm-url.el (build-farm-jobset-api-url): Rename to...
(build-farm-hydra-jobset-api-url): ... this.
* build-farm-jobset.el: Rename 'jobset' to 'hydra-jobset' everywhere.
| -rw-r--r-- | build-farm-build.el | 2 | ||||
| -rw-r--r-- | build-farm-jobset.el | 118 | ||||
| -rw-r--r-- | build-farm-project.el | 5 | ||||
| -rw-r--r-- | build-farm-url.el | 21 | ||||
| -rw-r--r-- | build-farm.el | 4 |
5 files changed, 82 insertions, 68 deletions
diff --git a/build-farm-build.el b/build-farm-build.el index 81bf4d4..927bcfd 100644 --- a/build-farm-build.el +++ b/build-farm-build.el @@ -341,7 +341,7 @@ It should be a '%s'-sequence.") (defun build-farm-build-info-insert-jobset (jobset entry) "Insert JOBSET for build ENTRY at point." - (build-farm-info-insert-jobset + (build-farm-info-insert-hydra-jobset (bui-entry-non-void-value entry 'project) jobset) (bui-insert-indent) (build-farm-build-info-insert-builds-button diff --git a/build-farm-jobset.el b/build-farm-jobset.el index 94ebae0..87cffdc 100644 --- a/build-farm-jobset.el +++ b/build-farm-jobset.el @@ -28,64 +28,75 @@ (require 'build-farm-build) (require 'build-farm-url) -(build-farm-define-entry-type jobset - :search-types '((project . build-farm-jobset-api-url)) - :filters '(build-farm-jobset-filter-id) + +;;; Common for Hydra and Cuirass + +(defun build-farm-jobset-info-insert-url (entry) + "Insert URL for the jobset ENTRY." + (bui-insert-button (build-farm-jobset-url + :root-url (build-farm-current-url) + :jobset-id (bui-entry-id entry)) + 'bui-url) + (bui-newline)) + + +;;; Hydra common + +(build-farm-define-entry-type hydra-jobset + :search-types '((project . build-farm-hydra-jobset-api-url)) + :filters '(build-farm-hydra-jobset-filter-id) :filter-names '((nrscheduled . scheduled) (nrsucceeded . succeeded) (nrfailed . failed) (nrtotal . total))) -(defun build-farm-jobset-id (project jobset) +(defun build-farm-hydra-jobset-id (project jobset) "Return jobset ID from PROJECT name and JOBSET name." (concat project "/" jobset)) - -;;; Filters for processing raw entries - -(defun build-farm-jobset-filter-id (entry) +(defun build-farm-hydra-jobset-filter-id (entry) "Add 'ID' parameter to 'jobset' ENTRY." - (cons `(id . ,(build-farm-jobset-id + (cons `(id . ,(build-farm-hydra-jobset-id (bui-entry-non-void-value entry 'project) (bui-entry-non-void-value entry 'name))) entry)) -;;; Jobset 'info' +;;; Hydra Jobset 'info' -(build-farm-define-interface jobset info - :mode-name "Farm-Jobset-Info" +(build-farm-define-interface hydra-jobset info + :mode-name "Hydra-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)))) + (project format build-farm-hydra-jobset-info-insert-project) + (scheduled format (format build-farm-hydra-jobset-info-scheduled)) + (succeeded format (format build-farm-hydra-jobset-info-succeeded)) + (failed format (format build-farm-hydra-jobset-info-failed)) + (total format (format build-farm-hydra-jobset-info-total)))) -(defface build-farm-jobset-info-scheduled +(defface build-farm-hydra-jobset-info-scheduled '((t)) "Face used for the number of scheduled builds." - :group 'build-farm-jobset-info-faces) + :group 'build-farm-hydra-jobset-info-faces) -(defface build-farm-jobset-info-succeeded +(defface build-farm-hydra-jobset-info-succeeded '((t :inherit build-farm-build-status-succeeded)) "Face used for the number of succeeded builds." - :group 'build-farm-jobset-info-faces) + :group 'build-farm-hydra-jobset-info-faces) -(defface build-farm-jobset-info-failed +(defface build-farm-hydra-jobset-info-failed '((t :inherit build-farm-build-status-failed)) "Face used for the number of failed builds." - :group 'build-farm-jobset-info-faces) + :group 'build-farm-hydra-jobset-info-faces) -(defface build-farm-jobset-info-total +(defface build-farm-hydra-jobset-info-total '((t)) "Face used for the total number of builds." - :group 'build-farm-jobset-info-faces) + :group 'build-farm-hydra-jobset-info-faces) -(defun build-farm-jobset-info-insert-project (project entry) +(defun build-farm-hydra-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-project) @@ -94,71 +105,63 @@ :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 - :root-url (build-farm-current-url) - :jobset-id (bui-entry-id entry)) - 'bui-url) - (bui-newline)) - -;;; Jobset 'list' +;;; Hydra Jobset 'list' -(build-farm-define-interface jobset list +(build-farm-define-interface hydra-jobset list :describe-function 'build-farm-list-describe - :mode-name "Farm-Jobset-List" + :mode-name "Hydra-Jobset-List" :buffer-name "*Farm Jobsets*" - :format '((name build-farm-jobset-list-get-name 25 t) + :format '((name build-farm-hydra-jobset-list-get-name 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) + :hint 'build-farm-hydra-jobset-list-hint) -(let ((map build-farm-jobset-list-mode-map)) - (define-key map (kbd "B") 'build-farm-jobset-list-latest-builds)) +(let ((map build-farm-hydra-jobset-list-mode-map)) + (define-key map (kbd "B") 'build-farm-hydra-jobset-list-latest-builds)) -(defface build-farm-jobset-list-status-scheduled +(defface build-farm-hydra-jobset-list-status-scheduled '((t)) "Face used for a jobset name if there are scheduled jobs." - :group 'build-farm-jobset-list-faces) + :group 'build-farm-hydra-jobset-list-faces) -(defface build-farm-jobset-list-status-succeeded +(defface build-farm-hydra-jobset-list-status-succeeded '((t :inherit build-farm-build-status-succeeded)) "Face used for a jobset name if there are no failed or scheduled jobs." - :group 'build-farm-jobset-list-faces) + :group 'build-farm-hydra-jobset-list-faces) -(defface build-farm-jobset-list-status-failed +(defface build-farm-hydra-jobset-list-status-failed '((t :inherit build-farm-build-status-failed)) "Face used for a jobset name if there are failed jobs." - :group 'build-farm-jobset-list-faces) + :group 'build-farm-hydra-jobset-list-faces) -(defvar build-farm-jobset-list-default-hint - '(("\\[build-farm-jobset-list-latest-builds]") +(defvar build-farm-hydra-jobset-list-default-hint + '(("\\[build-farm-hydra-jobset-list-latest-builds]") " show latest builds of the current jobset;\n")) -(defun build-farm-jobset-list-hint () +(defun build-farm-hydra-jobset-list-hint () "Return hint string for a jobset-list buffer." (bui-format-hints - build-farm-jobset-list-default-hint + build-farm-hydra-jobset-list-default-hint (bui-default-hint))) -(defun build-farm-jobset-list-get-name (name entry) +(defun build-farm-hydra-jobset-list-get-name (name entry) "Return NAME of the jobset ENTRY. Colorize it with an appropriate face if needed." (bui-get-string name (cond ((> (bui-entry-value entry 'failed) 0) - 'build-farm-jobset-list-status-failed) + 'build-farm-hydra-jobset-list-status-failed) ((> (bui-entry-value entry 'scheduled) 0) - 'build-farm-jobset-list-status-scheduled) + 'build-farm-hydra-jobset-list-status-scheduled) ((= (bui-entry-value entry 'total) (bui-entry-value entry 'succeeded)) - 'build-farm-jobset-list-status-succeeded)))) + 'build-farm-hydra-jobset-list-status-succeeded)))) -(defun build-farm-jobset-list-latest-builds (number &rest args) +(defun build-farm-hydra-jobset-list-latest-builds (number &rest args) "Display latest NUMBER of builds of the current jobset. Interactively, use `build-farm-number-of-builds' variable for NUMBER. With prefix argument, prompt for it and for the other @@ -178,7 +181,8 @@ ARGS." (defun build-farm-jobsets (project) "Display jobsets of PROJECT." (interactive (list (build-farm-read-project))) - (build-farm-get-display build-farm-url 'jobset 'project project)) + (build-farm-get-display build-farm-url 'hydra-jobset + 'project project)) ;; Info returned for multiple jobsets (from "api/jobsets") and for a ;; single jobset (from "jobset") are completely different! Compare: diff --git a/build-farm-project.el b/build-farm-project.el index 448aaf0..deb81fb 100644 --- a/build-farm-project.el +++ b/build-farm-project.el @@ -98,7 +98,7 @@ (defun build-farm-project-info-insert-jobset (project jobset) "Insert info about JOBSET of the PROJECT at point." - (build-farm-info-insert-jobset project jobset) + (build-farm-info-insert-hydra-jobset project jobset) (bui-insert-indent) (build-farm-build-info-insert-builds-button :project project @@ -158,7 +158,8 @@ Colorize it with an appropriate face if needed." "Display jobsets of the current project." (interactive) (build-farm-get-display (build-farm-current-url) - 'jobset 'project (bui-list-current-id))) + 'hydra-jobset + 'project (bui-list-current-id))) (defun build-farm-project-list-latest-builds (number &rest args) "Display latest NUMBER of builds of the current project. diff --git a/build-farm-url.el b/build-farm-url.el index 909be4c..b45ae81 100644 --- a/build-farm-url.el +++ b/build-farm-url.el @@ -26,6 +26,7 @@ (require 'url-expand) (require 'json) (require 'build-farm-utils) +(eval-when-compile (require 'subr-x)) (defvar build-farm-url-alist '(("https://hydra.nixos.org" . hydra) @@ -150,17 +151,25 @@ See function `build-farm-url' for the meaning of ROOT-URL." :root-url root-url)) (cl-defun build-farm-jobset-url (&key root-url project jobset jobset-id) - "Return URL of a PROJECT's JOBSET. -Above that, you should specify either a single JOBSET-ID + "Return URL of a build farm JOBSET. + +For Cuirass farm, you should not use PROJECT, so you can specify +either JOBSET or JOBSET-ID. + +For Hydra farm, you should specify either a single JOBSET-ID argument (it should have a form 'project/jobset') or PROJECT and JOBSET arguments. + See function `build-farm-url' for the meaning of ROOT-URL." (build-farm-url root-url "/jobset/" - (or jobset-id - (concat project "/" jobset)))) + (if project + (concat project "/" jobset) + ;; JOBSET-ID for Cuirass contains leading "/". + (or (string-trim-left jobset-id "/") + jobset)))) -(cl-defun build-farm-jobset-api-url (project &key root-url) - "Return API URL for jobsets by PROJECT. +(cl-defun build-farm-hydra-jobset-api-url (project &key root-url) + "Return API URL for Hydra jobsets by PROJECT. See function `build-farm-url' for the meaning of ROOT-URL." (build-farm-api-url "jobsets" diff --git a/build-farm.el b/build-farm.el index 8618622..8e74e8b 100644 --- a/build-farm.el +++ b/build-farm.el @@ -6,7 +6,7 @@ ;; Version: 0.1 ;; URL: https://gitlab.com/alezost-emacs/build-farm ;; Keywords: tools -;; Package-Requires: ((emacs "24.3") (bui "1.1.0") (magit-popup "2.1.0")) +;; Package-Requires: ((emacs "24.4") (bui "1.1.0") (magit-popup "2.1.0")) ;; 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 @@ -111,7 +111,7 @@ :supertype 'bui-url 'face 'build-farm-info-jobset) -(defun build-farm-info-insert-jobset (project jobset) +(defun build-farm-info-insert-hydra-jobset (project jobset) "Insert info about JOBSET of the PROJECT at point." (let ((url (build-farm-jobset-url :root-url (build-farm-current-url) |
