#lang racket/base (require "git-provider.rkt" racket/string ) (provide cmd-git-status cmd-git-add ) (define (cmd-git-status args) (let ((output (run-git '(status -s)))) (let-values (((result out) (git-out 'status output))) (if result (map (λ (line) (let* ((state (string->symbol (string-trim (substring line 0 2)))) (file (string-trim (substring line 3)))) (cond ([eq? state '??] (list 'new file)) ([eq? state 'M] (list 'modified file)) ([eq? state 'A] (list 'added file)) ([eq? state 'D] (list 'deleted file)) ([eq? state 'AM] (list 'modified-added file)) ([eq? state 'AD] (list 'deleted-added file)) (else (git-error 'status "Unexpected state" state)) ) )) out) (git-error 'status "Error" out) ) ) ) ) (define (cmd-git-add args) (let ((output (run-git (cons 'add args)))) (let-values (((result out) (git-out 'add output))) (if result (begin (git-displ out) result) (git-error 'add "Error" out)))))