Have 'last-change' accept a line number instead of a range
* lisp/emacs-lisp/package-vc.el (package-vc-release-rev): Use new signature. * lisp/vc/vc-git.el (vc-git-last-change): Update signature * lisp/vc/vc.el (vc-default-last-change): Update signature and use 'annotate-command'.
This commit is contained in:
parent
bb86ed20e1
commit
d33998ed3b
3 changed files with 21 additions and 22 deletions
|
@ -507,8 +507,8 @@ If no such revision can be found, return nil."
|
|||
(ignore-error vc-not-supported
|
||||
(vc-call-backend (vc-backend (buffer-file-name))
|
||||
'last-change
|
||||
(match-beginning 0)
|
||||
(match-end 0))))))))
|
||||
(buffer-file-name)
|
||||
(line-number-at-pos nil t))))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun package-vc-install (name-or-url &optional name rev backend)
|
||||
|
|
|
@ -1632,17 +1632,13 @@ This requires git 1.8.4 or later, for the \"-L\" option of \"git log\"."
|
|||
(expand-file-name fname (vc-git-root default-directory))))
|
||||
revision)))))
|
||||
|
||||
(defun vc-git-last-change (from to)
|
||||
(defun vc-git-last-change (file line)
|
||||
(vc-buffer-sync)
|
||||
(let ((file (file-relative-name
|
||||
(buffer-file-name)
|
||||
(vc-git-root (buffer-file-name))))
|
||||
(start (line-number-at-pos from t))
|
||||
(end (line-number-at-pos to t)))
|
||||
(let ((file (file-relative-name file (vc-git-root (buffer-file-name)))))
|
||||
(with-temp-buffer
|
||||
(when (vc-git--out-ok
|
||||
"blame" "--porcelain"
|
||||
(format "-L%d,%d" start end)
|
||||
(format "-L%d,+1" line)
|
||||
file)
|
||||
(goto-char (point-min))
|
||||
(save-match-data
|
||||
|
|
|
@ -449,10 +449,10 @@
|
|||
;;
|
||||
;; Return the common ancestor between REV1 and REV2 revisions.
|
||||
;;
|
||||
;; - last-change (from to)
|
||||
;; - last-change (file line)
|
||||
;;
|
||||
;; Return the most recent revision that made a change between FROM
|
||||
;; and TO.
|
||||
;; Return the most recent revision of FILE that made a change
|
||||
;; on LINE.
|
||||
|
||||
;; TAG/BRANCH SYSTEM
|
||||
;;
|
||||
|
@ -3590,17 +3590,20 @@ it indicates a specific revision to check out."
|
|||
(throw 'ok res)))))))
|
||||
|
||||
(declare-function log-view-current-tag "log-view" (&optional pos))
|
||||
(defun vc-default-last-change (_backend from to)
|
||||
(defun vc-default-last-change (_backend file line)
|
||||
"Default `last-change' implementation.
|
||||
FROM and TO are used as region markers"
|
||||
(save-window-excursion
|
||||
(let* ((buf (window-buffer (vc-region-history from to)))
|
||||
(proc (get-buffer-process buf)))
|
||||
(cl-assert (processp proc))
|
||||
(while (accept-process-output proc))
|
||||
(with-current-buffer buf
|
||||
(prog1 (log-view-current-tag)
|
||||
(kill-buffer))))))
|
||||
It returns the last revision that changed LINE number in FILE."
|
||||
(unless (file-exists-p file)
|
||||
(signal 'file-error "File doesn't exist"))
|
||||
(with-temp-buffer
|
||||
(vc-call-backend (vc-backend file) 'annotate-command
|
||||
file (current-buffer))
|
||||
(goto-char (point-min))
|
||||
(forward-line (1- line))
|
||||
(let ((rev (vc-call-backend
|
||||
(vc-backend file)
|
||||
'annotate-extract-revision-at-line)))
|
||||
(if (consp rev) (car rev) rev))))
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue