8d34aa2328c719f2c23df506cff789387057028b
[candle] / src / main / server.lisp
1 (in-package #:candle)
2
3 (defun server (port &optional (background t))
4  (when (not *candle-dir*) (error "Need a candle dir"))
5  (let
6   ((data-dir (format nil "~Adata" *candle-dir*)))
7   (ensure-directories-exist *candle-dir*)
8   (ensure-directories-exist data-dir)
9   (lame-db:load-known-dbs data-dir)
10   (sb-thread:make-thread
11    (lambda ()
12     (do () (nil)
13      (progn
14       (sleep (* 5 60))
15       (lame-db:save-known-dbs data-dir))))
16    :name "Save Thread")
17   (communication:start-listener port background)))
18
19 (defun add-project (name src)
20  (when
21   (not (cl-ppcre:scan "^[0-9A-Za-z-]*$" name))
22   (error "Name contains invalid characters"))
23  (when
24   (not (git nil "ls-remote" src))
25   (error "Project uri is not a valid git repository"))
26  (when
27   (find name *all-project* :test #'string= :key #'project-name)
28   (error "Project name already taken"))
29  (let
30   ((project (make-project :name name :src src)))
31   (ensure-directories-exist (project-dir project))
32   (git project "clone" src "."))
33  t)
34
35 (defun delete-project (name)
36  (let
37   ((project (find name *all-project* :test #'string= :key #'project-name)))
38   (when (not project)
39    (error "Project does not exists"))
40   (sb-ext:delete-directory (project-dir project) :recursive t)
41   (nremove-project project)))