Add project listing
[candle] / src / main / server.lisp
index 07d6213876f5bb10f96b41c59d759279a3c8aaad..ef80743b6cd9ab45bb5de390f73892a539858845 100644 (file)
@@ -14,6 +14,8 @@
       (sleep (* 5 60))
       (lame-db:save-known-dbs data-dir))))
    :name "Save Thread")
+  (format t "Starting processor in ~(~A~) mode~%" *job-system*)
+  (start-processor-thread)
   (communication:start-listener port background)))
 
 (defun add-project (name src)
           (make-branch :name branch-name :project project))))
        (set-branch-in-git branch t)
        (set-branch-job branch job))))
-    (cl-ppcre:split "\\n" out)))))
+    (cl-ppcre:split "\\n" out))))
+ (awaken-processor-thread))
 
 (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 (find name *all-project* :test #'string= :key #'project-name)))
+  (when (not project) (error "Project does not exist"))
+  (mapcar #'job->job-information (find-job-by-project project))))
+
+(defun get-job-log (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-log job)))
+
+(defun list-projects ()
+ (mapcar
+  (lambda (project)
+   (list
+    (project-name project)
+    (project-src project)))
+  *all-project*))