X-Git-Url: https://code.consxy.com/gitweb/gitweb.cgi?a=blobdiff_plain;f=src%2Fmain%2Fcli.lisp;h=b57a3d6f63137dadd23503ea8462c2c1288f85db;hb=d1ff8c89b492fc2ccb69f2d1146e1d471936f0ee;hp=92fc311ba239203cd040080199e1e4439ced547e;hpb=b2b606982b84a98e1f4b07e55cf5dc3ca1aa454e;p=candle diff --git a/src/main/cli.lisp b/src/main/cli.lisp index 92fc311..b57a3d6 100644 --- a/src/main/cli.lisp +++ b/src/main/cli.lisp @@ -11,6 +11,15 @@ (: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 :refresh :long "refresh" :takes-argument t :description + "Refresh project named by NAME." + :variable-name "NAME") + (:name :history :long "history" :takes-argument t :description + "Show history of project named by NAME." + :variable-name "NAME") (:name :delete :long "delete" :takes-argument t :description "Delete a project named by NAME." :variable-name "NAME"))) @@ -53,6 +62,39 @@ (communication:query `(candle:delete-project ,name)) (format t "Removed project ~A~%" name)) +(defun job-info->line (job-info) + (format nil "~A (~A) ~A" + (subseq (first job-info) 0 8) + (format nil "~{~A/~A/~A ~A:~A~}" + (utils:time-as-list (third job-info) :month :date :year :hr :min)) + (case (second job-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")))) + +(defun show-project (name) + (let* + ((branch-infos (communication:query `(candle:project-branch-information ,name))) + (width (apply #'max (mapcar #'length (mapcar #'car branch-infos))))) + (mapcar + (lambda (branch-info) + (format t (format nil "~~~A@A: ~~A~~%" width) + (first branch-info) + (job-info->line (second branch-info)))) + (sort branch-infos #'< :key (lambda (branch-info) (third (second branch-info))))))) + +(defun project-history (name) + (format t "~{~A~%~}" + (mapcar + #'job-info->line + (sort (communication:query `(candle:project-job-information ,name)) #'< :key #'third)))) + +(defun refresh-project (name) + (communication:query `(candle:refresh-project ,name)) + (format t "Refreshed project ~A~%" name)) + (defmethod execute-command ((command (eql :project)) args) (multiple-value-bind (options remaining-args error) (opera:process-arguments (project-options) args) (cond @@ -60,6 +102,9 @@ ((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 :refresh options) (refresh-project (opera:option-argument :refresh options))) + ((opera:option-present :history options) (project-history (opera:option-argument :history options))) ((opera:option-present :add options) (add-project (opera:option-argument :add options)))))) (defmethod execute-command ((command (eql :job)) args)