diff options
author | Alexandre Julliard <julliard@winehq.org> | 2009-03-13 20:04:11 +0000 |
---|---|---|
committer | Alexandre Julliard <julliard@winehq.org> | 2009-03-13 20:04:11 +0000 |
commit | 4537363ca5f2b030f14549ba25608d367ce7d2f1 (patch) | |
tree | 83b2c124ed0d4c63323517eeb3d3154cba5e13f1 /lisp/vc-git.el | |
parent | 75aeb229d2845da22444244cb489ec9695bfe725 (diff) | |
download | emacs-4537363ca5f2b030f14549ba25608d367ce7d2f1.tar.gz |
* vc-git.el (vc-git-previous-revision, vc-git-next-revision):
Fall back to original commit if vc-git-symbolic-commit fails to
find a symbolic name.
(vc-git-symbolic-commit): Don't limit search to tags. Treat
"undefined" as an error. (Bug #2110)
Diffstat (limited to 'lisp/vc-git.el')
-rw-r--r-- | lisp/vc-git.el | 66 |
1 files changed, 34 insertions, 32 deletions
diff --git a/lisp/vc-git.el b/lisp/vc-git.el index 64d598c271a..9155fba053f 100644 --- a/lisp/vc-git.el +++ b/lisp/vc-git.el @@ -576,19 +576,19 @@ 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))) - (vc-git-symbolic-commit - (with-temp-buffer - (and - (vc-git--out-ok "rev-list" "-2" rev "--" file) - (goto-char (point-max)) - (bolp) - (zerop (forward-line -1)) - (not (bobp)) - (buffer-substring-no-properties - (point) - (1- (point-max))))))) + (let* ((default-directory (file-name-directory (expand-file-name file))) + (file (file-name-nondirectory file)) + (prev-rev (with-temp-buffer + (and + (vc-git--out-ok "rev-list" "-2" rev "--" file) + (goto-char (point-max)) + (bolp) + (zerop (forward-line -1)) + (not (bobp)) + (buffer-substring-no-properties + (point) + (1- (point-max))))))) + (or (vc-git-symbolic-commit prev-rev) prev-rev)) (with-temp-buffer (and (vc-git--out-ok "rev-parse" (concat rev "^")) @@ -609,18 +609,19 @@ or BRANCH^ (where \"^\" can be repeated)." (bobp) (buffer-substring-no-properties (point) - (1- (point-max))))))) - (and current-rev - (vc-git-symbolic-commit - (with-temp-buffer - (and - (vc-git--out-ok "rev-list" "HEAD" "--" file) - (goto-char (point-min)) - (search-forward current-rev nil t) - (zerop (forward-line -1)) - (buffer-substring-no-properties - (point) - (progn (forward-line 1) (1- (point)))))))))) + (1- (point-max)))))) + (next-rev + (and current-rev + (with-temp-buffer + (and + (vc-git--out-ok "rev-list" "HEAD" "--" file) + (goto-char (point-min)) + (search-forward current-rev nil t) + (zerop (forward-line -1)) + (buffer-substring-no-properties + (point) + (progn (forward-line 1) (1- (point))))))))) + (or (vc-git-symbolic-commit next-rev) next-rev))) (defun vc-git-delete-file (file) (vc-git-command nil 0 file "rm" "-f" "--")) @@ -731,13 +732,14 @@ The difference to vc-do-command is that this function always invokes `git'." "Translate COMMIT string into symbolic form. Returns nil if not possible." (and commit - (with-temp-buffer - (and - (vc-git--out-ok "name-rev" "--name-only" "--tags" commit) - (goto-char (point-min)) - (= (forward-line 2) 1) - (bolp) - (buffer-substring-no-properties (point-min) (1- (point-max))))))) + (let ((name (with-temp-buffer + (and + (vc-git--out-ok "name-rev" "--name-only" commit) + (goto-char (point-min)) + (= (forward-line 2) 1) + (bolp) + (buffer-substring-no-properties (point-min) (1- (point-max))))))) + (and name (not (string= name "undefined")) name)))) (provide 'vc-git) |