+++ /dev/null
-;; Script to browse locally-hosted URLs
-
-(lambda (type-str repo branch path)
- (import (chicken string)
- (chicken process)
- (chicken io)
- (chicken pathname)
- srfi-13)
-
- (define git-base-url "git://GIT-SERVER-URL/")
- (define git-base-dir "/PATH/TO/GIT/REPOS/")
-
- (define (git . args)
- (with-current-working-directory
- (conc git-base-dir repo)
- (lambda ()
- (let-values (((in-port out-port id) (process "git" args)))
- (let ((result (read-lines in-port)))
- (close-input-port in-port)
- (close-output-port out-port)
- result)))))
-
- (define (serve-tree)
- (let ((entries (git "ls-tree" branch path))
- (references (git "show-ref" "--heads")))
- (append
- (list
- (conc "Git repository for " repo)
- ""
- (conc "(Clone from " git-base-url repo ".)")
- ""
- "Branches:")
- (map (lambda (ref)
- (let ((refname (caddr (string-split ref "/"))))
- (list
- 1
- (conc (if (equal? branch refname) "*" "")
- refname)
- (conc "git.scm:tree:" repo ":" refname ":" path))))
- references)
- (list ""
- "Files:")
- (map (lambda (entry)
- (let* ((l (string-split entry "\t"))
- (type (string->symbol (cadr (string-split (car l) " "))))
- (file (cadr l)))
- (list (if (eq? type 'tree) 1 0)
- file
- (conc "git.scm:" type ":" repo ":" branch ":"
- file
- (if (eq? type 'tree) "/" "")))))
- entries)
- (list
- "------"))))
-
- (define (serve-blob)
- (for-each
- (lambda (line)
- (print line "\r"))
- (git "cat-file" "blob" (conc branch ":" path)))
- (print ".\r"))
-
- (let ((type (string->symbol type-str)))
- (case type
- ((tree) (serve-tree))
- ((blob) (serve-blob))
- (else
- (error "Unsupported git object.")))))
-