changeset 82052:1776413f26d4

(vc-git-workfile-unchanged-p): Update comment.
author Dan Nicolaescu <dann@ics.uci.edu>
date Mon, 23 Jul 2007 15:02:16 +0000
parents 36d7d91a135f
children 3cc1f1f9df04
files lisp/ChangeLog lisp/vc-git.el
diffstat 2 files changed, 17 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Mon Jul 23 08:26:29 2007 +0000
+++ b/lisp/ChangeLog	Mon Jul 23 15:02:16 2007 +0000
@@ -1,3 +1,7 @@
+2007-07-23  Alexandre Julliard <julliard@winehq.org>
+
+	* vc-git.el (vc-git-workfile-unchanged-p): Update comment.
+
 2007-07-20  Kenichi Handa  <handa@m17n.org>
 
 	* international/utf-8.el (utf-8-post-read-conversion): Temporarily
--- a/lisp/vc-git.el	Mon Jul 23 08:26:29 2007 +0000
+++ b/lisp/vc-git.el	Mon Jul 23 15:02:16 2007 +0000
@@ -191,8 +191,20 @@
 (defun vc-git-checkout-model (file)
   'implicit)
 
-;; XXX Can't this just use the result of vc-git-state?
 (defun vc-git-workfile-unchanged-p (file)
+  ;; The reason this does not use the result of vc-git-state is that
+  ;; git-diff-index (used by vc-git-state) doesn't refresh the cached
+  ;; stat info, so if the file has been modified it will always show
+  ;; up as modified in vc-git-state, even if the change has been
+  ;; undone, until git-update-index --refresh is run.
+  
+  ;; OTOH the vc-git-workfile-unchanged-p implementation checks the
+  ;; actual content, so it will detect the case of a file reverted
+  ;; back to its original state.
+
+  ;; The ideal implementation would be to refresh the stat cache and
+  ;; then call vc-git-state, but at the moment there's no git command
+  ;; to refresh a single file, so this will have to be added first.
   (let ((sha1 (vc-git--run-command-string file "hash-object" "--"))
         (head (vc-git--run-command-string file "ls-tree" "-z" "HEAD" "--")))
     (and head