Git status wrapper.

This commit is contained in:
Dominik Pantůček 2023-04-16 21:24:17 +02:00
parent afeaa4f28b
commit fccdf37014
2 changed files with 19 additions and 4 deletions

View file

@ -356,7 +356,8 @@ SPECIFICATION-SOURCES=specification.scm period.import.scm
specification.o: specification.import.scm
specification.import.scm: $(SPECIFICATION-SOURCES)
UTIL-GIT-SOURCES=util-git.scm util-io.import.scm
UTIL-GIT-SOURCES=util-git.scm util-io.import.scm \
util-dict-list.import.scm
util-git.o: util-git.import.scm
util-git.import.scm: $(UTIL-GIT-SOURCES)

View file

@ -33,7 +33,8 @@
(import scheme
(chicken base)
util-io)
util-io
util-dict-list)
;; Valid git operating modes
(define git-modes
@ -71,13 +72,26 @@
(lambda args
(invoke-git repo args))))))
;; Known status types
(define git-status-types
'((" M" 'modified)
("??" 'untracked)))
;; Returns a dictionary of unknown, modified, deleted and added files
(define (git-status repo)
(let loop ((lines ((git repo) 'status '--porcelain))
(res (make-ldict)))
(if (null? lines)
res
(let* ((line (car lines))
(st (substring line 0 2))
(fname (substring line 4))
(status (or (assoc st git-status-types)
'unknown)))
(loop (cdr lines)
res))))
(ldict-set res
status
(cons fname
(ldict-ref res status '()))))))))
)