Subject: [bug#47658] [PATCH] etc/committer: Use git plumbing instead of porcelain

From: [email-masked]
Date: Thu, 8 Apr 2021 12:16:35 -0400

From: Morgan Smith <[email-masked]>

* etc/committer.scm.in
(diff-info): Use git diff-files instead of git diff
(old-sexp): Use git cat-file instead of git show
(main): Add newline to displayed message
---
 etc/committer.scm.in | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/etc/committer.scm.in b/etc/committer.scm.in
index 7991dc7430..1f19ccfd6d 100755
--- a/etc/committer.scm.in
+++ b/etc/committer.scm.in
@@ -89,7 +89,7 @@ LINE-NO in PORT."
 (define (diff-info)
   "Read the diff and return a list of <hunk> values."
   (let ((port (open-pipe* OPEN_READ
-                          "git" "diff"
+                          "git" "diff-files"
                           "--no-prefix"
                           ;; Only include one context line to avoid lumping in
                           ;; new definitions with changes to existing
@@ -153,8 +153,9 @@ LINE-NO in PORT."
 corresponding to the top-level definition containing the staged changes."
   ;; TODO: We can't seek with a pipe port...
   (let* ((port (open-pipe* OPEN_READ
-                           "git" "show" (string-append "HEAD:"
-                                                       (hunk-file-name hunk))))
+                           "git" "cat-file" "-p" (string-append
+                                                  "HEAD:"
+                                                  (hunk-file-name hunk))))
          (contents (get-string-all port)))
     (close-pipe port)
     (call-with-input-string contents
@@ -253,7 +254,7 @@ modifying."
 (define (main . args)
   (match (diff-info)
     (()
-     (display "Nothing to be done." (current-error-port)))
+     (display "Nothing to be done.\n" (current-error-port)))
     (hunks
      (let-values
          (((definitions changes)
-- 
2.31.1