Clone project when adding
[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 add-job (project-name sha)
36  (make-job :project (find project-name *all-project* :key #'project-name :test #'string=) :sha sha)
37  t)