From f05dafb2b8da4c7361879df66972cd1504c38706 Mon Sep 17 00:00:00 2001 From: Alex Kost Date: Wed, 22 Aug 2018 10:32:39 +0300 Subject: Read project/jobset according to farm type (Hydra or Cuirass) * build-farm.el (build-farm-check-project-support): New procedure. (build-farm-read-project, build-farm-read-jobset): Use keyword arguments. * build-farm-build.el (build-farm-build-latest-prompt-args): Prompt for project only for Hydra farm. * build-farm-popup.el (build-farm-popup-read-jobset): Likewise. (build-farm-popup-read-project): New procedure. * build-farm-project.el (build-farm-projects, build-farm-project): Check if current farm type is Hydra. --- build-farm-build.el | 16 ++++++++++++---- build-farm-popup.el | 22 +++++++++++++--------- build-farm-project.el | 2 ++ build-farm.el | 40 ++++++++++++++++++++++++++-------------- 4 files changed, 53 insertions(+), 27 deletions(-) diff --git a/build-farm-build.el b/build-farm-build.el index 1c449c1..95f462f 100644 --- a/build-farm-build.el +++ b/build-farm-build.el @@ -78,11 +78,19 @@ If `current-prefix-arg' is specified, just return job system) "Prompt for and return a list of 'latest builds' arguments." (let* ((number (build-farm-build-read-number-maybe)) - (project (if current-prefix-arg - (build-farm-read-project nil project) - project)) + (url (build-farm-current-url)) + (url-type (build-farm-url-type url)) + (project (unless (eq 'cuirass url-type) + (if current-prefix-arg + (build-farm-read-project + :url url + :initial-input project) + project))) (jobset (if current-prefix-arg - (build-farm-read-jobset project nil jobset) + (build-farm-read-jobset + :url url + :project project + :initial-input jobset) jobset)) (job-or-name (if current-prefix-arg (build-farm-read-job nil job) diff --git a/build-farm-popup.el b/build-farm-popup.el index 5cd8309..61dd933 100644 --- a/build-farm-popup.el +++ b/build-farm-popup.el @@ -53,11 +53,8 @@ (?n "number" build-farm-set-number-of-builds build-farm-popup-format-number-of-builds)) - :options '(;; "Options for latest and queued builds" - ;; (?n "Number of builds" "number=" - ;; magit-popup-read-number) - "Options for latest builds" - (?p "project" "project=" build-farm-read-project) + :options '("Options for latest builds" + (?p "project" "project=" build-farm-popup-read-project) (?j "jobset" "jobset=" build-farm-popup-read-jobset) (?J "job" "job=") (?s "system" "system=" build-farm-read-system)) @@ -65,14 +62,21 @@ (?q "queued" build-farm-popup-queued-builds) (?i "build by ID" build-farm-build))) +(defun build-farm-popup-read-project (&optional prompt initial-input) + "Read project from minibuffer. +See `completing-read' for PROMPT and INITIAL-INPUT." + (build-farm-read-project :prompt prompt + :initial-input initial-input)) + (defun build-farm-popup-read-jobset (&optional prompt initial-input) "Read jobset for the current project from minibuffer. See `completing-read' for PROMPT and INITIAL-INPUT." (build-farm-read-jobset - (plist-get (build-farm-popup-parse-build-args - (magit-popup-get-args)) - :project) - prompt initial-input)) + :prompt prompt + :initial-input initial-input + :project (plist-get (build-farm-popup-parse-build-args + (magit-popup-get-args)) + :project))) (defun build-farm-popup-variable-value (var-name) "Return string formatted for popup buffer. diff --git a/build-farm-project.el b/build-farm-project.el index 840b864..e1ca32e 100644 --- a/build-farm-project.el +++ b/build-farm-project.el @@ -180,12 +180,14 @@ ARGS." (defun build-farm-projects () "Display build farm projects." (interactive) + (build-farm-check-project-support) (build-farm-get-display build-farm-url 'project 'all)) ;;;###autoload (defun build-farm-project (project) "Display build farm PROJECT." (interactive (list (build-farm-read-project))) + (build-farm-check-project-support) (bui-get-display-entries 'build-farm-project 'info (list build-farm-url 'id project))) diff --git a/build-farm.el b/build-farm.el index 8e74e8b..41a75cc 100644 --- a/build-farm.el +++ b/build-farm.el @@ -187,6 +187,12 @@ If URL is nil, use variable `build-farm-url'." "Return build farm type of the current buffer." (build-farm-url-type (build-farm-current-url))) +(defun build-farm-check-project-support (&optional url) + "Raise an error if URL build farm does not support projects." + (when (eq 'cuirass (build-farm-url-type (or url build-farm-url))) + (error "Cuirass does not have a notion of 'project'. +Please use 'jobsets' instead"))) + (defun build-farm-get-entries (root-url entry-type search-type &rest args) "Receive ENTRY-TYPE entries from cache or build farm. @@ -281,18 +287,14 @@ SEARCH-TYPE and ARGS." (mapcar #'bui-entry-id (build-farm-get-project-entries-once url))) -(defun build-farm-jobset-names (project &optional url) +(cl-defun build-farm-jobset-names (&key url project) "Return jobsets for PROJECT from URL build farm." - (bui-entry-non-void-value - (bui-entry-by-id (build-farm-get-project-entries-once url) - project) - 'jobsets)) - -(build-farm-define-readers - :require-match nil - :completions-getter build-farm-project-names - :single-reader build-farm-read-project - :single-prompt "Project: ") + (if (eq 'cuirass (build-farm-url-type url)) + '() ; TODO get from cache + (bui-entry-non-void-value + (bui-entry-by-id (build-farm-get-project-entries-once url) + project) + 'jobsets))) (build-farm-define-readers :require-match nil @@ -305,12 +307,22 @@ SEARCH-TYPE and ARGS." :single-reader build-farm-read-system :single-prompt "System: ") -(defun build-farm-read-jobset (project &optional prompt initial-input) - "Read jobset for PROJECT from minibuffer. +(cl-defun build-farm-read-project (&key url prompt initial-input) + "Read project name for Hydra URL from minibuffer. +See `completing-read' for PROMPT and INITIAL-INPUT." + (build-farm-check-project-support url) + (build-farm-completing-read + (or prompt "Project: ") + (build-farm-project-names url) + nil nil initial-input nil nil)) + +(cl-defun build-farm-read-jobset (&key url project prompt initial-input) + "Read jobset for PROJECT from URL build farm from minibuffer. See `completing-read' for PROMPT and INITIAL-INPUT." (build-farm-completing-read (or prompt "Jobset: ") - (build-farm-jobset-names project) + (build-farm-jobset-names :url url + :project project) nil nil initial-input)) -- cgit v1.2.3