List projects, list commits, wip list diff

This commit is contained in:
Joseph Ferano 2025-04-01 23:19:40 +08:00
commit 3dc33b875a
2 changed files with 78 additions and 0 deletions

67
main.lisp Normal file
View File

@ -0,0 +1,67 @@
(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)))

11
www/index.html Normal file
View File

@ -0,0 +1,11 @@
<html>
<head>
<title>Hello!</title>
</head>
<body>
<h1>Hello local server!</h1>
<p>
We just served our own files.
</p>
</body>
</html>