+(defun refresh-project (name)
+ (let*
+ ((project (find name *all-project* :test #'string= :key #'project-name))
+ (branches (find-branch-by-project project)))
+ (git project "fetch" "origin" "--prune")
+ (multiple-value-bind (success code out err) (git project "branch" "-r" "--format" "%(refname) %(objectname)" "--list" "origin/*")
+ (declare (ignore code err))
+ (when (not success) (error "Failed to get branches"))
+ (mapcar (lambda (branch) (set-branch-in-git branch nil)) branches)
+ (mapcar
+ (lambda (line)
+ (cl-ppcre:register-groups-bind (branch-name sha) ("refs/remotes/origin/(.*) (.*)" line)
+ (let*
+ ((job
+ (or
+ (find sha (find-job-by-project project) :test #'string= :key #'job-sha)
+ (make-job :status :queued :sha sha :project project :create-date (get-universal-time))))
+ (branch
+ (or
+ (find branch-name branches :test #'string= :key #'branch-name)
+ (make-branch :name branch-name :project project))))
+ (set-branch-in-git branch t)
+ (set-branch-job branch job))))
+ (cl-ppcre:split "\\n" out))))
+ (awaken-processor-thread))
+