(in-package #:candle) (defun server (port &optional (background t)) (when (not *candle-dir*) (error "Need a candle dir")) (let ((data-dir (format nil "~Adata" *candle-dir*))) (ensure-directories-exist *candle-dir*) (ensure-directories-exist data-dir) (lame-db:load-known-dbs data-dir) (sb-thread:make-thread (lambda () (do () (nil) (progn (sleep (* 5 60)) (lame-db:save-known-dbs data-dir)))) :name "Save Thread") (communication:start-listener port background))) (defun add-project (name src) (when (not (cl-ppcre:scan "^[0-9A-Za-z-]*$" name)) (error "Name contains invalid characters")) (when (not (git nil "ls-remote" src)) (error "Project uri is not a valid git repository")) (when (find name *all-project* :test #'string= :key #'project-name) (error "Project name already taken")) (let ((project (make-project :name name :src src))) (ensure-directories-exist (project-dir project)) (git project "clone" src ".")) t) (defun add-job (project-name sha) (make-job :project (find project-name *all-project* :key #'project-name :test #'string=) :sha sha) t)