diff options
| author | Alex Kost <alezost@gmail.com> | 2018-09-06 00:19:32 +0300 |
|---|---|---|
| committer | Alex Kost <alezost@gmail.com> | 2018-09-06 21:58:17 +0300 |
| commit | e244dea35566a10253d61be430d3caf81b779af8 (patch) | |
| tree | eb6fbc00f8f99858baa203db467d3cecbd55ae40 /build-farm-build.el | |
| parent | 'build-farm-current-url' returns default URL as a fallback (diff) | |
| download | emacs-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.el | 72 |
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) |
