# HG changeset patch # User Dan Nicolaescu # Date 1185202936 0 # Node ID 1776413f26d4790267ff13f8fb5328003ac06a8a # Parent 36d7d91a135f2b7f3472a8537c0a33fcfff2d00e (vc-git-workfile-unchanged-p): Update comment. diff -r 36d7d91a135f -r 1776413f26d4 lisp/ChangeLog --- 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 + + * vc-git.el (vc-git-workfile-unchanged-p): Update comment. + 2007-07-20 Kenichi Handa * international/utf-8.el (utf-8-post-read-conversion): Temporarily diff -r 36d7d91a135f -r 1776413f26d4 lisp/vc-git.el --- 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