Add project deletion
authorFrank Duncan <frank@kank.net>
Fri, 10 Dec 2021 20:45:36 +0000 (14:45 -0600)
committerFrank Duncan <frank@kank.net>
Fri, 10 Dec 2021 20:45:36 +0000 (14:45 -0600)
README.md
src/main/cli.lisp
src/main/package.lisp
src/main/server.lisp

index ad2a1cd3b239a3b52621b3508fc54fe38d563ff0..cb78e454e615d5e476e0624f5d16998d9f8fb3d1 100644 (file)
--- a/README.md
+++ b/README.md
@@ -28,6 +28,7 @@ Only one can be running at a time.
 
 * Run bin/candle-server on a server somewhere, so that the candle client can connect to it
 * Add projects via `bin/candle project --add`, see `--help` for more information
+* Remove projects via `bin/candle project --delete`, see `--help` for more information
 * Run `bin/candle project --show <name>` to show status of project
   * Includes what branches are failing
 * Run `bin/candle project --list` to show list all projects, and status
index fc3f7fc9ece28ef0f0f6f9ec77b95252c1b91a6b..44ae31770b3daca12c3502945f8703734b2bd370 100644 (file)
@@ -9,8 +9,11 @@
 (defun project-options ()
  '((:name :help :short "h" :long "help" :description "Print this usage.")
    (: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>")))
+    "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 :delete :long "delete" :takes-argument t :description
+    "Delete a project named by NAME."
+    :variable-name "NAME")))
 
 (defun job-options ()
  '((:name :help :short "h" :long "help" :description "Print this usage.")
      (communication:query `(candle:add-project ,name ,src))
      (format t "Added project ~A at src definition ~A~%" name src))))))
 
+(defun delete-project (name)
+ (communication:query `(candle:delete-project ,name))
+ (format t "Removed project ~A~%" name))
+
 (defmethod execute-command ((command (eql :project)) args)
  (multiple-value-bind (options remaining-args error) (opera:process-arguments (project-options) args)
   (cond
    ((eql error :unknown-option) (format *error-output* "Unknown option: ~A.  See 'candle project --help'.~%" (car remaining-args)))
    ((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 :add options) (add-project (opera:option-argument :add options))))))
 
 (defun add-job (project-name sha)
index cf9cf1ed135bfa39e22f8b9614f71c19f7d1a006..a7b55f8348cf4bffce811321c587922353a081a9 100644 (file)
@@ -1,4 +1,4 @@
 (defpackage #:candle (:use :cl)
- (:export #:server #:add-project #:add-job #:run #:*candle-dir*))
+ (:export #:server #:add-project #:delete-project #:add-job #:run #:*candle-dir*))
 
 (defpackage #:candle-cli (:use :cl) (:export :run))
index 4a0866e54f6132f2e653010b0c65cb20199c9ca9..f8e97e35629c2ccfcccabb3c43da97f753ce65df 100644 (file)
   (git project "clone" src "."))
  t)
 
+(defun delete-project (name)
+ (let
+  ((project (find name *all-project* :test #'string= :key #'project-name)))
+  (when (not project)
+   (error "Project does not exists"))
+  (sb-ext:delete-directory (project-dir project) :recursive t)
+  (nremove-project project)))
+
 (defun add-job (project-name sha)
  (make-job :project (find project-name *all-project* :key #'project-name :test #'string=) :sha sha)
  t)