(defun delete-project (name)
(let
((project (find name *all-project* :test #'string= :key #'project-name)))
- (when (not project) (error "Project does not exists"))
+ (when (not project) (error "Project does not exist"))
(sb-ext:delete-directory (project-dir project) :recursive t)
(mapcar #'nremove-job (find-job-by-project project))
(mapcar #'nremove-branch (find-branch-by-project project))
(nremove-project project)))
+(defun job->job-information (job)
+ (list (job-sha job) (job-status job) (job-create-date job)))
+
(defun project-branch-information (name)
(let
((project (find name *all-project* :test #'string= :key #'project-name)))
- (when (not project) (error "Project does not exists"))
+ (when (not project) (error "Project does not exist"))
(mapcar
(lambda (branch)
(list
(branch-name branch)
- (job-status (branch-job branch))
- (job-create-date (branch-job branch))
- (job-sha (branch-job branch))))
+ (job->job-information (branch-job branch))))
(remove-if-not #'branch-in-git (find-branch-by-project project)))))
+
+(defun project-job-information (name)
+ (let
+ ((project (when name (find name *all-project* :test #'string= :key #'project-name))))
+ (when (and name (not project)) (error "Project does not exist"))
+ (mapcar #'job->job-information
+ (if project
+ (find-job-by-project project)
+ *all-job*))))
+
+(defun find-job-by-project-and-sha (project-name sha)
+ (let*
+ ((project (find project-name *all-project* :test #'string= :key #'project-name))
+ (job
+ (when project
+ (find-if
+ (lambda (job-sha)
+ (and (<= (length sha) (length job-sha)) (string= sha (subseq job-sha 0 (length sha)))))
+ (find-job-by-project project)
+ :key #'job-sha))))
+ (when (not project) (error "Project does not exist"))
+ (when (not job) (error "Job does not exist"))
+ job))
+
+(defun get-job-log (project-name sha)
+ (job-log (find-job-by-project-and-sha project-name sha)))
+
+(defun retry-job (project-name sha)
+ (set-job-status (find-job-by-project-and-sha project-name sha) :queued)
+ (awaken-processor-thread))
+
+(defun list-projects ()
+ (mapcar
+ (lambda (project)
+ (list
+ (project-name project)
+ (project-src project)))
+ *all-project*))
+
+(defun failures (project-name)
+ (length
+ (remove-if-not
+ (lambda (branch) (eql :failed (job-status (branch-job branch))))
+ (if project-name
+ (find-branch-by-project
+ (find project-name *all-project* :test #'string= :key #'project-name))
+ *all-branch*))))