summaryrefslogtreecommitdiff
path: root/build-farm-build.el
diff options
context:
space:
mode:
authorAlex Kost <alezost@gmail.com>2018-09-06 00:19:32 +0300
committerAlex Kost <alezost@gmail.com>2018-09-06 21:58:17 +0300
commite244dea35566a10253d61be430d3caf81b779af8 (patch)
treeeb6fbc00f8f99858baa203db467d3cecbd55ae40 /build-farm-build.el
parent'build-farm-current-url' returns default URL as a fallback (diff)
downloademacs-build-farm-e244dea35566a10253d61be430d3caf81b779af8.tar.gz
build: Generalize making "latest builds" buttons
* build-farm-build.el (build-farm-build-button-action): Add optional 'type' argument. (build-farm-define-build-button): New macro. Use it to generate buttons and actions for them for 'system' and 'job'. (build-farm-info-insert-builds-button): Remove. * build-farm-jobset.el (build-farm-cuirass-jobset-args-info-format): Use 'build-farm-system' button instead. * build-farm.el (build-farm-info-job): Inherit 'button' face.
Diffstat (limited to 'build-farm-build.el')
-rw-r--r--build-farm-build.el72
1 files changed, 44 insertions, 28 deletions
diff --git a/build-farm-build.el b/build-farm-build.el
index 950ffd7..55942d2 100644
--- a/build-farm-build.el
+++ b/build-farm-build.el
@@ -55,13 +55,6 @@ for the number of builds."
:type 'integer
:group 'build-farm-build)
-(define-button-type 'build-farm-system
- :supertype 'bui
- 'action #'build-farm-build-button-action
- 'help-echo (concat "Show latest builds for this system "
- "(with prefix, prompt for all parameters)")
- 'face 'build-farm-info-system)
-
(defun build-farm-set-number-of-builds (number)
"Set `build-farm-number-of-builds' to NUMBER."
(interactive (list (build-farm-build-read-number)))
@@ -127,24 +120,53 @@ If `current-prefix-arg' is specified, just return
:job job
:system system)))
-(defun build-farm-build-button-action (button)
- "Display latest builds according to BUTTON."
- (let ((args (build-farm-build-latest-prompt-args
- :project (button-get button 'project)
- :jobset (button-get button 'jobset)
- :job (button-get button 'job)
- :system (button-get button 'system))))
+(defun build-farm-build-button-action (button &optional type)
+ "Display latest builds according to BUTTON.
+Additional parameters are taken from BUTTON. If TYPE is
+specified, it should be one of the following symbols: `project',
+`jobset', `job' or `system'. This TYPE defines what parameter
+BUTTON label is used for."
+ (let* ((label (button-label button))
+ (args (build-farm-build-latest-prompt-args
+ :project (or (button-get button 'project)
+ (and (eq type 'project) label))
+ :jobset (or (button-get button 'jobset)
+ (and (eq type 'jobset) label))
+ :job (or (button-get button 'job)
+ (and (eq type 'job) label))
+ :system (or (button-get button 'system)
+ (and (eq type 'system) label)))))
(apply #'build-farm-get-display
(build-farm-current-url)
'build 'latest args)))
-(defun build-farm-build-button-system-action (button)
- "Display latest builds according to system BUTTON."
- (let ((args (build-farm-build-latest-prompt-args
- :system (button-label button))))
- (apply #'build-farm-get-display
- (build-farm-current-url)
- 'build 'latest args)))
+(defmacro build-farm-define-build-button (type)
+ "Define button and action function for it for TYPE.
+See `build-farm-build-button-action' for the meaning of TYPE.
+Button name is `build-farm-TYPE'.
+Function name is `build-farm-build-button-TYPE-action'."
+ (let* ((type-str (symbol-name type))
+ (btn-name (intern (concat "build-farm-" type-str)))
+ (fun-name (intern (concat "build-farm-build-button-"
+ type-str "-action")))
+ (face-name (intern (concat "build-farm-info-" type-str))))
+ `(progn
+ (defun ,fun-name (button)
+ "Display latest builds according to BUTTON."
+ (build-farm-build-button-action button ',type))
+
+ (define-button-type ',btn-name
+ :supertype 'bui
+ 'action #',fun-name
+ 'help-echo ,(concat "Show latest builds for this " type-str
+ " (with prefix, prompt for all parameters)")
+ 'face ',face-name))))
+
+;; 'project' and 'jobset' buttons for latest builds are not generated,
+;; because these buttons already exist: they are used to display the
+;; according Info interfaces.
+(build-farm-define-build-button job)
+(build-farm-define-build-button system)
(cl-defun build-farm-info-insert-builds-button
(&key project jobset job system)
@@ -175,12 +197,6 @@ If `current-prefix-arg' is specified, just return
'job job
'system system))
-(defun build-farm-info-insert-systems (systems)
- "Insert SYSTEMS at point."
- (bui-info-insert-value-format
- systems 'build-farm-system
- 'action #'build-farm-build-button-system-action))
-
(declare-function guix-build-log-mode "guix-build-log" t)
(defun build-farm-build-view-log (id &optional root-url)
@@ -398,7 +414,7 @@ It should be a '%s'-sequence.")
(defun build-farm-build-info-insert-job (job entry)
"Insert JOB for build ENTRY at point."
- (bui-format-insert job 'build-farm-info-job)
+ (insert job)
(bui-insert-indent)
(build-farm-info-insert-builds-button
:project (bui-entry-non-void-value entry 'project)