Add project deletion
[candle] / src / main / cli.lisp
index bbbf23cdffe28945754d57739af5d6257dad80ad..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.")
@@ -29,7 +32,8 @@
    (main-options)
    "Interacts with candle server.  The available commands are:
   project   List, show or add projects
-  job       List or show jobs")))
+  job       List or show jobs
+  run       Local command.  Run candle in the current working directory")))
 
 (defgeneric execute-command (command args))
 
     (let*
      ((name (subseq project-definition 0 pos))
       (src (subseq project-definition (1+ pos))))
+     (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)
@@ -78,7 +88,7 @@
    ((eql error :required-argument-missing) (format *error-output* "Missing argument for ~A.  See 'candle run --help'.~%" (car remaining-args)))
    (remaining-args (format *error-output* "Unknown option: ~A. See 'candle run --help'.~%" (car remaining-args)))
    ((opera:option-present :help options) (format t "~A" (opera:usage "candle run" (run-options))))
-   (t (candle:run)))))
+   ((not (candle:run)) (sb-ext:exit :code 1)))))
 
 (defun run ()
  (multiple-value-bind (options remaining-args error) (opera:process-arguments (main-options) (cdr sb-ext:*posix-argv*))