diff options
| -rw-r--r-- | lisp/ChangeLog | 4 | ||||
| -rw-r--r-- | lisp/vc/vc-git.el | 19 |
2 files changed, 18 insertions, 5 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 799024ae422..a9cb5a519d0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2012-03-26 Ami Fischman <ami@fischman.org> | ||
| 2 | |||
| 3 | * vc/vc-git.el (vc-git-state): Avoid unnecessarily locking. | ||
| 4 | |||
| 1 | 2012-03-26 Glenn Morris <rgm@gnu.org> | 5 | 2012-03-26 Glenn Morris <rgm@gnu.org> |
| 2 | 6 | ||
| 3 | * files.el (save-buffers-kill-emacs): Doc fix. | 7 | * files.el (save-buffers-kill-emacs): Doc fix. |
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index 3ec32243796..bf7b7fb9e17 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el | |||
| @@ -217,12 +217,21 @@ matching the resulting Git log output, and KEYWORDS is a list of | |||
| 217 | ;; operation. | 217 | ;; operation. |
| 218 | (if (not (vc-git-registered file)) | 218 | (if (not (vc-git-registered file)) |
| 219 | 'unregistered | 219 | 'unregistered |
| 220 | (vc-git--call nil "add" "--refresh" "--" (file-relative-name file)) | ||
| 221 | (let ((diff (vc-git--run-command-string | 220 | (let ((diff (vc-git--run-command-string |
| 222 | file "diff-index" "-z" "HEAD" "--"))) | 221 | file "diff-index" "-p" "--raw" "-z" "HEAD" "--"))) |
| 223 | (if (and diff (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\} [0-9a-f]\\{40\\} \\([ADMUT]\\)\0[^\0]+\0" | 222 | (if (and diff |
| 224 | diff)) | 223 | (string-match ":[0-7]\\{6\\} [0-7]\\{6\\} [0-9a-f]\\{40\\} [0-9a-f]\\{40\\} \\([ADMUT]\\)\0[^\0]+\0\\(\\(?:.\\|\n\\)*\\)\\'" |
| 225 | (vc-git--state-code (match-string 1 diff)) | 224 | diff)) |
| 225 | (let ((diff-letter (match-string 1 diff)) | ||
| 226 | (diff-contents (match-string 2 diff))) | ||
| 227 | (if (not (string-match "\n." diff-contents)) | ||
| 228 | ;; Empty diff: file contents is the same as the HEAD | ||
| 229 | ;; revision, but timestamps are different (eg, file | ||
| 230 | ;; was "touch"ed). Update timestamp in index: | ||
| 231 | (prog1 'up-to-date | ||
| 232 | (vc-git--call nil "add" "--refresh" "--" | ||
| 233 | (file-relative-name file))) | ||
| 234 | (vc-git--state-code diff-letter))) | ||
| 226 | (if (vc-git--empty-db-p) 'added 'up-to-date))))) | 235 | (if (vc-git--empty-db-p) 'added 'up-to-date))))) |
| 227 | 236 | ||
| 228 | (defun vc-git-working-revision (file) | 237 | (defun vc-git-working-revision (file) |