                    buffer start end "git" args)))
     (error "Failed to run \"git %s\":\n%s" (mapconcat (lambda (x) x) args " ") (buffer-string)))
   (message "Running git %s...done" (car args)))
+
+(defun git-run-hook (hook env &rest args)
+  "Run a git hook and display its output if any."
+  (let ((dir default-directory)
+        (hook-name (expand-file-name (concat ".git/hooks/" hook))))
+    (or (not (file-executable-p hook-name))
+        (let (status (buffer (get-buffer-create "*Git Hook Output*")))
+          (with-current-buffer buffer
+            (erase-buffer)
+            (cd dir)
+            (setq status
+                  (if env
+                      (apply #'call-process "env" nil (list buffer t) nil
+                             (append (git-get-env-strings env) (list hook-name) args))
+                    (apply #'call-process hook-name nil (list buffer t) nil args))))
+          (display-message-or-buffer buffer)
+          (eq 0 status)))))
 
 (defun git-get-string-sha1 (string)
   "Read a SHA1 from the specified string."

  "Commit the marked file(s), asking for a commit message."
  (interactive)
  (unless git-status (error "Not in git-status buffer."))
  (let ((buffer (get-buffer-create "*git-commit*"))
        (coding-system (git-get-commits-coding-system))
        author-name author-email subject date)
    (when (eq 0 (buffer-size buffer))
      (when (file-readable-p ".dotest/info")
        (with-temp-buffer
          (insert-file-contents ".dotest/info")
          (goto-char (point-min))
          (when (re-search-forward "^Author: \\(.*\\)\nEmail: \\(.*\\)$" nil t)
            (setq author-name (match-string 1))
            (setq author-email (match-string 2)))
          (goto-char (point-min))
          (when (re-search-forward "^Subject: \\(.*\\)$" nil t)
            (setq subject (match-string 1)))
          (goto-char (point-min))
          (when (re-search-forward "^Date: \\(.*\\)$" nil t)
            (setq date (match-string 1)))))
      (git-setup-log-buffer buffer author-name author-email subject date))
    (log-edit #'git-do-commit nil #'git-log-edit-files buffer)
    (setq font-lock-keywords (font-lock-compile-keywords git-log-edit-font-lock-keywords))
    (setq buffer-file-coding-system coding-system)
    (re-search-forward (regexp-quote (concat git-log-msg-separator "\n")) nil t)))

(defun git-find-file ()
  "Visit the current file in its own buffer."

;;; git.el --- A user interface for git

;; Copyright (C) 2005, 2006, 2007 Alexandre Julliard <julliard@winehq.org>

;; Version: 1.0

