diff options
author | Dan Nicolaescu <dann@ics.uci.edu> | 2010-06-22 12:25:17 -0700 |
---|---|---|
committer | Dan Nicolaescu <dann@ics.uci.edu> | 2010-06-22 12:25:17 -0700 |
commit | 50d76a9f7dbc5302373243f2d7588bd5abd0d492 (patch) | |
tree | a13a72886574a3a73a4547dc596499bb5d3363ff | |
parent | 75468d7124fa2a9aeb8920ce7dc8954bbd062115 (diff) | |
download | emacs-50d76a9f7dbc5302373243f2d7588bd5abd0d492.tar.gz |
Fix vc-annotate for renamed files when using Git.
* lisp/vc-git.el (vc-git-find-revision): Deal with empty results from
ls-files. Doe not pass the object as a file name to cat-file, it
is not a file name.
(vc-git-annotate-command): Pass the file name using -- to avoid
ambiguity with the revision.
(vc-git-previous-revision): Pass a relative file name.
-rw-r--r-- | lisp/ChangeLog | 10 | ||||
-rw-r--r-- | lisp/vc-git.el | 22 |
2 files changed, 23 insertions, 9 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e6391ee7321..c14f7326cf6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2010-06-22 Dan Nicolaescu <dann@ics.uci.edu> + + Fix vc-annotate for renamed files when using Git. + * vc-git.el (vc-git-find-revision): Deal with empty results from + ls-files. Doe not pass the object as a file name to cat-file, it + is not a file name. + (vc-git-annotate-command): Pass the file name using -- to avoid + ambiguity with the revision. + (vc-git-previous-revision): Pass a relative file name. + 2010-06-22 Glenn Morris <rgm@gnu.org> * progmodes/js.el (js-mode-map): Use standard capitalization and diff --git a/lisp/vc-git.el b/lisp/vc-git.el index 058929632e9..24062a0f4f6 100644 --- a/lisp/vc-git.el +++ b/lisp/vc-git.el @@ -551,13 +551,18 @@ or an empty string if none." (let* (process-file-side-effects (coding-system-for-read 'binary) (coding-system-for-write 'binary) - (fullname (substring - (vc-git--run-command-string - file "ls-files" "-z" "--full-name" "--") - 0 -1))) + (fullname + (let ((fn (vc-git--run-command-string + file "ls-files" "-z" "--full-name" "--"))) + ;; ls-files does not return anything when looking for a + ;; revision of a file that has been renamed or removed. + (if (string= fn "") + (file-relative-name file (vc-git-root default-directory)) + (substring fn 0 -1))))) (vc-git-command buffer 0 - (concat (if rev rev "HEAD") ":" fullname) "cat-file" "blob"))) + nil + "cat-file" "blob" (concat (if rev rev "HEAD") ":" fullname)))) (defun vc-git-checkout (file &optional editable rev) (vc-git-command nil 0 file "checkout" (or rev "HEAD"))) @@ -689,7 +694,7 @@ or BRANCH^ (where \"^\" can be repeated)." (defun vc-git-annotate-command (file buf &optional rev) (let ((name (file-relative-name file))) - (vc-git-command buf 'async name "blame" "--date=iso" "-C" "-C" rev))) + (vc-git-command buf 'async nil "blame" "--date=iso" "-C" "-C" rev "--" name))) (declare-function vc-annotate-convert-time "vc-annotate" (time)) @@ -735,11 +740,10 @@ or BRANCH^ (where \"^\" can be repeated)." (defun vc-git-previous-revision (file rev) "Git-specific version of `vc-previous-revision'." (if file - (let* ((default-directory (file-name-directory (expand-file-name file))) - (file (file-name-nondirectory file)) + (let* ((fname (file-relative-name file)) (prev-rev (with-temp-buffer (and - (vc-git--out-ok "rev-list" "-2" rev "--" file) + (vc-git--out-ok "rev-list" "-2" rev "--" fname) (goto-char (point-max)) (bolp) (zerop (forward-line -1)) |