72 lines
2.8 KiB
Common Lisp
72 lines
2.8 KiB
Common Lisp
(defpackage gitano
|
|
(:use :cl))
|
|
(in-package :gitano)
|
|
|
|
(ql:quickload '("hunchentoot" "caveman2" "spinneret"
|
|
"djula" "easy-routes" "cl-git"))
|
|
|
|
|
|
(defvar *acceptor* (make-instance 'easy-routes:easy-routes-acceptor
|
|
:port 1337
|
|
:document-root #p"www/"))
|
|
(hunchentoot:start *acceptor*)
|
|
|
|
(easy-routes:defroute home ("/" :method :get) ()
|
|
(format nil "<ul>~{<li><a href=\"/~a\">~:*~a</a></li>~}</ul>" (get-projects)))
|
|
|
|
(easy-routes:defroute project ("/:project" :method :get) ()
|
|
(format nil "<ul>~{<li><a href=\"/~a\">~:*~a</a></li>~}</ul>" (get-master-logs project)))
|
|
|
|
(defun get-projects ()
|
|
(loop for dir in (uiop:subdirectories "/home/joe/Development/")
|
|
when (uiop:directory-exists-p (merge-pathnames dir ".git"))
|
|
collect dir into dirs
|
|
finally (return (mapcar (lambda (d) (first (last (pathname-directory d)))) dirs))))
|
|
|
|
(defun get-master-logs (proj-name)
|
|
(git:with-repository (repository (merge-pathnames "/home/joe/Development/" proj-name))
|
|
(loop
|
|
:with walker = (git:revision-walk
|
|
(git:get-object 'git:reference "refs/heads/master"
|
|
repository))
|
|
:for revision = (git:next-revision walker)
|
|
:until (null revision)
|
|
:collect (git:message revision))))
|
|
|
|
(defun get-diff (proj-name)
|
|
(git:with-repository (repository (merge-pathnames "/home/joe/Development/" proj-name))
|
|
(git:make-patch
|
|
(git:diff (git:get-object 'git:commit "5e43870b11166f972a1de6cc387f3c4bc381894c" repository)
|
|
(git:get-object 'git:commit "7ed1d2216cf051da937bb6fb05e911a293321876" repository)))))
|
|
|
|
(defparameter *repo* (git:open-repository
|
|
(merge-pathnames #p"Development/odin-6502/" (user-homedir-pathname))))
|
|
|
|
|
|
|
|
|
|
;; (git:open-repository "/home/joe/Development/cubetimer/")
|
|
;; (uiop:directory-exists-p (merge-pathnames "/home/joe/Development/tinyswords/" ".git"))
|
|
|
|
;; (let* ((proj-path (merge-pathnames #p"Development/tinyswords/" (user-homedir-pathname)))
|
|
;; (repo (git:open-repository proj-path)))
|
|
;; (git:resolve (git:get-object 'git:reference "HEAD" repo)))
|
|
|
|
;; (loop for item in (git:repository-status *repo*)
|
|
;; do (when (not (equalp (cadr item) :ignored))
|
|
;; (print item)))
|
|
|
|
;; (loop for item in (git:repository-status *repo*)
|
|
;; do (when (not (equalp (cadr item) :ignored))
|
|
;; (print item)))
|
|
|
|
;; (git:revision-walk (git:get-object 'git:reference "refs/heads/master"
|
|
;; (git:open-repository "/home/joe/Development/tinyswords/")))
|
|
|
|
;; (loop for entry in (git:entries (git:reflog (git:get-object 'git:reference "HEAD" *repo*)))
|
|
;; do (print (getf (git:committer entry) :email)))
|
|
|
|
|
|
;; (loop for tag in (git:with-repository (repo "/home/joe/Repositories/emacs/")
|
|
;; (git:list-objects 'git:tag repo)))
|