diff options
| author | Dan Nicolaescu | 2010-06-22 12:25:17 -0700 |
|---|---|---|
| committer | Dan Nicolaescu | 2010-06-22 12:25:17 -0700 |
| commit | 50d76a9f7dbc5302373243f2d7588bd5abd0d492 (patch) | |
| tree | a13a72886574a3a73a4547dc596499bb5d3363ff | |
| parent | 75468d7124fa2a9aeb8920ce7dc8954bbd062115 (diff) | |
| download | emacs-50d76a9f7dbc5302373243f2d7588bd5abd0d492.tar.gz emacs-50d76a9f7dbc5302373243f2d7588bd5abd0d492.zip | |
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 @@ | |||
| 1 | 2010-06-22 Dan Nicolaescu <dann@ics.uci.edu> | ||
| 2 | |||
| 3 | Fix vc-annotate for renamed files when using Git. | ||
| 4 | * vc-git.el (vc-git-find-revision): Deal with empty results from | ||
| 5 | ls-files. Doe not pass the object as a file name to cat-file, it | ||
| 6 | is not a file name. | ||
| 7 | (vc-git-annotate-command): Pass the file name using -- to avoid | ||
| 8 | ambiguity with the revision. | ||
| 9 | (vc-git-previous-revision): Pass a relative file name. | ||
| 10 | |||
| 1 | 2010-06-22 Glenn Morris <rgm@gnu.org> | 11 | 2010-06-22 Glenn Morris <rgm@gnu.org> |
| 2 | 12 | ||
| 3 | * progmodes/js.el (js-mode-map): Use standard capitalization and | 13 | * 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." | |||
| 551 | (let* (process-file-side-effects | 551 | (let* (process-file-side-effects |
| 552 | (coding-system-for-read 'binary) | 552 | (coding-system-for-read 'binary) |
| 553 | (coding-system-for-write 'binary) | 553 | (coding-system-for-write 'binary) |
| 554 | (fullname (substring | 554 | (fullname |
| 555 | (vc-git--run-command-string | 555 | (let ((fn (vc-git--run-command-string |
| 556 | file "ls-files" "-z" "--full-name" "--") | 556 | file "ls-files" "-z" "--full-name" "--"))) |
| 557 | 0 -1))) | 557 | ;; ls-files does not return anything when looking for a |
| 558 | ;; revision of a file that has been renamed or removed. | ||
| 559 | (if (string= fn "") | ||
| 560 | (file-relative-name file (vc-git-root default-directory)) | ||
| 561 | (substring fn 0 -1))))) | ||
| 558 | (vc-git-command | 562 | (vc-git-command |
| 559 | buffer 0 | 563 | buffer 0 |
| 560 | (concat (if rev rev "HEAD") ":" fullname) "cat-file" "blob"))) | 564 | nil |
| 565 | "cat-file" "blob" (concat (if rev rev "HEAD") ":" fullname)))) | ||
| 561 | 566 | ||
| 562 | (defun vc-git-checkout (file &optional editable rev) | 567 | (defun vc-git-checkout (file &optional editable rev) |
| 563 | (vc-git-command nil 0 file "checkout" (or rev "HEAD"))) | 568 | (vc-git-command nil 0 file "checkout" (or rev "HEAD"))) |
| @@ -689,7 +694,7 @@ or BRANCH^ (where \"^\" can be repeated)." | |||
| 689 | 694 | ||
| 690 | (defun vc-git-annotate-command (file buf &optional rev) | 695 | (defun vc-git-annotate-command (file buf &optional rev) |
| 691 | (let ((name (file-relative-name file))) | 696 | (let ((name (file-relative-name file))) |
| 692 | (vc-git-command buf 'async name "blame" "--date=iso" "-C" "-C" rev))) | 697 | (vc-git-command buf 'async nil "blame" "--date=iso" "-C" "-C" rev "--" name))) |
| 693 | 698 | ||
| 694 | (declare-function vc-annotate-convert-time "vc-annotate" (time)) | 699 | (declare-function vc-annotate-convert-time "vc-annotate" (time)) |
| 695 | 700 | ||
| @@ -735,11 +740,10 @@ or BRANCH^ (where \"^\" can be repeated)." | |||
| 735 | (defun vc-git-previous-revision (file rev) | 740 | (defun vc-git-previous-revision (file rev) |
| 736 | "Git-specific version of `vc-previous-revision'." | 741 | "Git-specific version of `vc-previous-revision'." |
| 737 | (if file | 742 | (if file |
| 738 | (let* ((default-directory (file-name-directory (expand-file-name file))) | 743 | (let* ((fname (file-relative-name file)) |
| 739 | (file (file-name-nondirectory file)) | ||
| 740 | (prev-rev (with-temp-buffer | 744 | (prev-rev (with-temp-buffer |
| 741 | (and | 745 | (and |
| 742 | (vc-git--out-ok "rev-list" "-2" rev "--" file) | 746 | (vc-git--out-ok "rev-list" "-2" rev "--" fname) |
| 743 | (goto-char (point-max)) | 747 | (goto-char (point-max)) |
| 744 | (bolp) | 748 | (bolp) |
| 745 | (zerop (forward-line -1)) | 749 | (zerop (forward-line -1)) |