Added git-grep and git-diff

This commit is contained in:
2026-08-12 22:28:27 +02:00
parent e4e37d2214
commit aebd420c3c
5 changed files with 179 additions and 40 deletions
+29 -23
View File
@@ -12,19 +12,20 @@
(define (has-git-arg? args opt)
(if (list? args)
(if (null? args)
#f
(if (symbol? opt)
(if (or (eq? (car args) opt)
(and (string? (car args))
(string=? (car args) (symbol->string opt))))
#t
(has-git-arg? (cdr args) opt))
(error 'has-git-arg? "opt must be of type symbol?")))
(error 'has-git-arg? "args must be a list of arguments")
)
)
(let ((cmp (cond ((symbol? opt) (λ (x) (eq? x opt)))
((string? opt) (λ (x) (string=? (format "~a" x) opt)))
((regexp? opt) (λ (x) (regexp-match opt (format "~a" x))))
(else (error "opt must be a string, symbol or regular expression")))))
(letrec ((f (λ (args)
(if (null? args)
#f
(let ((m (cmp (car args))))
(if m
m
(f (cdr args))))))))
(if (list? args)
(f args)
(error 'has-git-arg? "args must be a list of arguments")))))
(define (check-git-args cmd args flags)
(for-each
@@ -49,26 +50,31 @@
args)
(define (std-process-git-result cmd exit-code result output out)
(git-displ out)
(if result
(if (= exit-code 0)
#t
#f)
(git-error cmd "Error" out)))
(define (std-process-git-result cmd exit-code result output out info)
(if (= exit-code 0)
(if result
(begin
(git-displ out)
#t)
(git-error cmd "Error" out))
(git-error cmd (format "Exitcode <> 0: ~a" exit-code) out)
)
)
(define-syntax def-git-cmd-proxy
(syntax-rules ()
((_ f cmd)
(def-proxy-cmd f cmd (λ args t) standard-result))
(def-proxy-cmd f cmd (λ (args info) args) standard-result))
((_ f cmd pre-code)
(def-proxy-cmd f cmd pre-code standard-result))
((_ f cmd pre-code process-result)
(define (f args)
(let ((nargs (pre-code args)))
(let* ((info (make-hash))
(nargs (pre-code args info)))
(let-values (((exit-code output) (run-git (cons cmd nargs))))
(let-values (((result out) (git-out cmd output)))
(process-result cmd exit-code result output out))))))
(process-result cmd exit-code result output out info))))))
)
)