From bf450bcba73aca7398aa7574627746d3e30b4022 Mon Sep 17 00:00:00 2001 From: Frank Duncan Date: Fri, 10 Dec 2021 14:45:36 -0600 Subject: [PATCH] Add project deletion --- README.md | 1 + src/main/cli.lisp | 12 ++++++++++-- src/main/package.lisp | 2 +- src/main/server.lisp | 8 ++++++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ad2a1cd..cb78e45 100644 --- 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 ` to show status of project * Includes what branches are failing * Run `bin/candle project --list` to show list all projects, and status diff --git a/src/main/cli.lisp b/src/main/cli.lisp index fc3f7fc..44ae317 100644 --- a/src/main/cli.lisp +++ b/src/main/cli.lisp @@ -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. is the name of the project, which must not include colons, while is the location of the repository for cloning. This location must be accessible by the machine running candle." - :variable-name ":"))) + "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.") @@ -49,12 +52,17 @@ (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) diff --git a/src/main/package.lisp b/src/main/package.lisp index cf9cf1e..a7b55f8 100644 --- a/src/main/package.lisp +++ b/src/main/package.lisp @@ -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)) diff --git a/src/main/server.lisp b/src/main/server.lisp index 4a0866e..f8e97e3 100644 --- a/src/main/server.lisp +++ b/src/main/server.lisp @@ -32,6 +32,14 @@ (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) -- 2.25.1