(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 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)