{"thread":{"id":"10070","subject":"[PATCH 3/4] git.el: Update a file status in the git buffer upon save.","startedAt":"2007-09-29T09:59:07Z","lastAt":"2007-09-29T09:59:07Z","messageCount":1,"participants":["Alexandre Julliard"],"isPatch":true,"patchVersion":1,"patchTotal":4},"messages":[{"id":"54324","messageId":"873awxpzbo.fsf@wine.dyndns.org","threadId":"10070","inReplyTo":null,"subject":"[PATCH 3/4] git.el: Update a file status in the git buffer upon save.","fromName":"Alexandre Julliard","fromEmail":"julliard@winehq.org","sentAt":"2007-09-29T09:59:07Z","receivedAt":"2007-09-29T09:59:07Z","isPatch":true,"sender":{"key":"julliard@winehq.org","avatar":null},"body":"Signed-off-by: Alexandre Julliard <julliard@winehq.org>\n---\n contrib/emacs/git.el |   18 ++++++++++++++++--\n 1 files changed, 16 insertions(+), 2 deletions(-)\n\ndiff --git a/contrib/emacs/git.el b/contrib/emacs/git.el\nindex ec2e699..c2a1c3d 100644\n--- a/contrib/emacs/git.el\n+++ b/contrib/emacs/git.el\n@@ -36,7 +36,6 @@\n ;; TODO\n ;;  - portability to XEmacs\n ;;  - better handling of subprocess errors\n-;;  - hook into file save (after-save-hook)\n ;;  - diff against other branch\n ;;  - renaming files from the status buffer\n ;;  - creating tags\n@@ -1352,9 +1351,24 @@ Commands:\n         (cd dir)\n         (git-status-mode)\n         (git-refresh-status)\n-        (goto-char (point-min)))\n+        (goto-char (point-min))\n+        (add-hook 'after-save-hook 'git-update-saved-file))\n     (message \"%s is not a git working tree.\" dir)))\n \n+(defun git-update-saved-file ()\n+  \"Update the corresponding git-status buffer when a file is saved.\n+Meant to be used in `after-save-hook'.\"\n+  (let* ((file (expand-file-name buffer-file-name))\n+         (dir (condition-case nil (git-get-top-dir (file-name-directory file))))\n+         (buffer (and dir (git-find-status-buffer dir))))\n+    (when buffer\n+      (with-current-buffer buffer\n+        (let ((filename (file-relative-name file dir)))\n+          ; skip files located inside the .git directory\n+          (unless (string-match \"^\\\\.git/\" filename)\n+            (git-call-process-env nil nil \"add\" \"--refresh\" \"--\" filename)\n+            (git-update-status-files (list filename) 'uptodate)))))))\n+\n (defun git-help ()\n   \"Display help for Git mode.\"\n   (interactive)\n-- \n1.5.3.2.121.gf7223\n\n-- \nAlexandre Julliard\njulliard@winehq.org\n"}]}