From c8f9d56d5625b80407c3881f2039295a2496d9b3 Mon Sep 17 00:00:00 2001 From: Frank Duncan Date: Sat, 11 Dec 2021 10:04:56 -0600 Subject: [PATCH] Add project --show --- src/main/cli.lisp | 19 +++++++++++++++++++ src/main/package.lisp | 2 +- src/main/server.lisp | 15 +++++++++++++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/main/cli.lisp b/src/main/cli.lisp index 92fc311..3b4243e 100644 --- a/src/main/cli.lisp +++ b/src/main/cli.lisp @@ -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"))) @@ -53,6 +56,21 @@ (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) diff --git a/src/main/package.lisp b/src/main/package.lisp index 88c812d..2c8aca7 100644 --- a/src/main/package.lisp +++ b/src/main/package.lisp @@ -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)) diff --git a/src/main/server.lisp b/src/main/server.lisp index 7265a25..edae4a6 100644 --- a/src/main/server.lisp +++ b/src/main/server.lisp @@ -59,9 +59,20 @@ (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)))) -- 2.25.1