summaryrefslogtreecommitdiff
path: root/build-farm.el
diff options
context:
space:
mode:
authorAlex Kost <alezost@gmail.com>2018-08-22 12:48:30 +0300
committerAlex Kost <alezost@gmail.com>2018-08-26 00:06:26 +0300
commit886bcce6f1cf8376d8ab099bb5ccaf38fbe64c6d (patch)
tree4b91782f9d66a9cb4640dfe5f0905635721641be /build-farm.el
parentREADME: Mention differences between Cuirass and Hydra (diff)
downloademacs-build-farm-886bcce6f1cf8376d8ab099bb5ccaf38fbe64c6d.tar.gz
Cache cuirass jobsets
* build-farm.el (build-farm-get-entries): Adjust to handle Hydra projects and Cuirass jobsets similarly. (build-farm-get-project-entries-once): Rename to... (build-farm-get-root-entries-once): ... this. (build-farm-project-names, build-farm-jobset-names): Adjust accordingly.
Diffstat (limited to '')
-rw-r--r--build-farm.el64
1 files changed, 41 insertions, 23 deletions
diff --git a/build-farm.el b/build-farm.el
index 41a75cc..2c94779 100644
--- a/build-farm.el
+++ b/build-farm.el
@@ -199,19 +199,34 @@ Please use 'jobsets' instead")))
See `build-farm-search-url' for the meaning of ROOT-URL,
SEARCH-TYPE and ARGS."
(unless (eq search-type 'fake)
- (if (eq entry-type 'project)
- (if (memq search-type '(id name))
- (bui-entries-by-ids
- (build-farm-get-entries root-url 'project 'all)
- args)
- (or (build-farm-cache-get root-url 'projects)
- (let ((entries (apply #'build-farm-get-entries-1
- root-url entry-type search-type args)))
- (build-farm-cache-set root-url 'projects entries)
- (build-farm-cache-set root-url 'projects-received t)
- entries)))
+ (cond
+ ((memq entry-type '(project cuirass-jobset))
+ (cl-case search-type
+ ((id)
+ (bui-entries-by-ids
+ (build-farm-get-entries root-url entry-type 'all)
+ args))
+ ((name)
+ (delq nil
+ (mapcar (lambda (name)
+ (bui-entry-by-param
+ (build-farm-get-entries root-url entry-type 'all)
+ 'name name))
+ args)))
+ ((all)
+ ;; 'roots' mean: projects for Hydra; jobsets for Cuirass.
+ (or (build-farm-cache-get root-url 'roots)
+ (progn
+ ;; Set 'roots-received' before the actual receiving
+ ;; because there may be an error during this receiving.
+ (build-farm-cache-set root-url 'roots-received t)
+ (let ((entries (apply #'build-farm-get-entries-1
+ root-url entry-type search-type args)))
+ (build-farm-cache-set root-url 'roots entries)
+ entries))))))
+ (t
(apply #'build-farm-get-entries-1
- root-url entry-type search-type args))))
+ root-url entry-type search-type args)))))
(defun build-farm-get-entries-1 (root-url entry-type search-type
&rest args)
@@ -232,20 +247,21 @@ SEARCH-TYPE and ARGS."
(build-farm-filters entry-type))))
entries))
-(defun build-farm-get-project-entries-once (&optional url)
- "Return project entries for URL build farm.
+(defun build-farm-get-root-entries-once (root-type &optional url)
+ "Return ROOT-TYPE entries for URL build farm.
+ROOT-TYPE should be `project' or `cuirass-jobset' symbol.
If projects have already been received, return them from
`build-farm-cache'. If URL is nil, use variable
`build-farm-url'."
(or url (setq url build-farm-url))
- (if (build-farm-cache-get url 'projects-received)
- (build-farm-cache-get url 'projects)
- ;; Cuirass does not support API for projects, so we will
- ;; have an error from `build-farm-receive-data'.
+ (unless (build-farm-cache-get url 'roots-received)
+ ;; If there is some error in `build-farm-receive-data', we don't
+ ;; want to fail, because this procedure is used for minibuffer
+ ;; readers.
(with-demoted-errors "Error: %S"
(require 'build-farm-project)
- (build-farm-cache-set url 'projects-received t)
- (build-farm-get-entries url 'project 'all))))
+ (build-farm-get-entries url root-type 'all)))
+ (build-farm-cache-get url 'roots))
(defun build-farm-get-display (root-url entry-type search-type
&rest args)
@@ -285,14 +301,16 @@ SEARCH-TYPE and ARGS."
(defun build-farm-project-names (&optional url)
"Return projects for URL build farm."
(mapcar #'bui-entry-id
- (build-farm-get-project-entries-once url)))
+ (build-farm-get-root-entries-once 'project url)))
(cl-defun build-farm-jobset-names (&key url project)
"Return jobsets for PROJECT from URL build farm."
(if (eq 'cuirass (build-farm-url-type url))
- '() ; TODO get from cache
+ (mapcar (lambda (entry)
+ (bui-entry-non-void-value entry 'name))
+ (build-farm-get-root-entries-once 'cuirass-jobset url))
(bui-entry-non-void-value
- (bui-entry-by-id (build-farm-get-project-entries-once url)
+ (bui-entry-by-id (build-farm-get-root-entries-once 'project url)
project)
'jobsets)))