              (append (git-get-env-strings env) (list "git") args))
     (apply #'call-process "git" nil buffer nil args)))
 
+(defun git-call-process-env-string (env &rest args)
+  "Wrapper for call-process that sets environment strings, and returns the process output as a string."
+  (with-temp-buffer
+    (and (eq 0 (apply #' git-call-process-env t env args))
+         (buffer-string))))
+
 (defun git-run-process-region (buffer start end program args)
   "Run a git process with a buffer region as input."
   (let ((output-buffer (current-buffer))


(defun git-get-string-sha1 (string)
  "Read a SHA1 from the specified string."
  (let ((pos (string-match "[0-9a-f]\\{40\\}" string)))
    (and pos (substring string pos (match-end 0)))))

(defun git-get-committer-name ()
  "Return the name to use as GIT_COMMITTER_NAME."

(defun git-rev-parse (rev)
  "Parse a revision name and return its SHA1."
  (git-get-string-sha1
   (git-call-process-env-string nil "rev-parse" rev)))

(defun git-symbolic-ref (ref)
  "Wrapper for the git-symbolic-ref command."
  (let ((str (git-call-process-env-string nil "symbolic-ref" ref)))
    (and str (car (split-string str "\n")))))

(defun git-update-ref (ref val &optional oldval)
  "Update a reference by calling git-update-ref."
