Add project --show
authorFrank Duncan <frank@kank.net>
Sat, 11 Dec 2021 16:04:56 +0000 (10:04 -0600)
committerFrank Duncan <frank@kank.net>
Sat, 11 Dec 2021 16:04:56 +0000 (10:04 -0600)
src/main/cli.lisp
src/main/package.lisp
src/main/server.lisp

index 92fc311ba239203cd040080199e1e4439ced547e..3b4243e11d3ccaa93ed8e3db8351ba1c15685a38 100644 (file)
@@ -11,6 +11,9 @@
    (:name :add :long "add" :takes-argument t :description
     "Add a project.  NAME is the name of the project, which must not include colons, while SRC is the location of the repository for cloning.  This location must be accessible by the machine running candle."
     :variable-name "NAME:SRC")
+   (:name :show :long "show" :takes-argument t :description
+    "Show branch information for a project named by NAME."
+    :variable-name "NAME")
    (:name :delete :long "delete" :takes-argument t :description
     "Delete a project named by NAME."
     :variable-name "NAME")))
  (communication:query `(candle:delete-project ,name))
  (format t "Removed project ~A~%" name))
 
+(defun show-project (name)
+ (mapcar
+  (lambda (branch-info)
+   (format t "~A: ~A at ~A~%"
+    (first branch-info)
+    (case (second branch-info)
+     (:succeeded (format nil "~c[1;32mPassed~c[0m" #\Esc #\Esc))
+     (:failed (format nil "~c[1;31mFailed~c[0m" #\Esc #\Esc))
+     (:queued "In queue")
+     (:no-candle-file "No candle file present")
+     (:in-progress "In progress"))
+    (format nil "~{~A/~A/~A ~A:~A~}"
+     (utils:time-as-list (third branch-info) :month :date :year :hr :min))))
+  (sort (communication:query `(candle:project-branch-information ,name)) #'< :key #'third)))
+
 (defmethod execute-command ((command (eql :project)) args)
  (multiple-value-bind (options remaining-args error) (opera:process-arguments (project-options) args)
   (cond
@@ -60,6 +78,7 @@
    ((eql error :required-argument-missing) (format *error-output* "Missing argument for ~A.  See 'candle project --help'.~%" (car remaining-args)))
    ((opera:option-present :help options) (format t "~A" (opera:usage "candle project" (project-options))))
    ((opera:option-present :delete options) (delete-project (opera:option-argument :delete options)))
+   ((opera:option-present :show options) (show-project (opera:option-argument :show options)))
    ((opera:option-present :add options) (add-project (opera:option-argument :add options))))))
 
 (defmethod execute-command ((command (eql :job)) args)
index 88c812d53e6d53bebbeb4c95d1f1aeb109b0242d..2c8aca7db045e99560c821f6d9bafc03b2be7a62 100644 (file)
@@ -1,4 +1,4 @@
 (defpackage #:candle (:use :cl)
- (:export #:server #:add-project #:delete-project #:run #:*candle-dir*))
+ (:export #:server #:add-project #:delete-project #:project-branch-information #:run #:*candle-dir*))
 
 (defpackage #:candle-cli (:use :cl) (:export :run))
index 7265a25cda03ad6b96c7d978d941acaa3a741d51..edae4a6b36e990c7d670c72e3f989b02d8b44133 100644 (file)
 (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 exists"))
   (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 project-branch-information (name)
+ (let
+  ((project (find name *all-project* :test #'string= :key #'project-name)))
+  (when (not project) (error "Project does not exists"))
+  (mapcar
+   (lambda (branch)
+    (list
+     (branch-name branch)
+     (job-status (branch-job branch))
+     (job-create-date (branch-job branch))))
+   (find-branch-by-project project))))