1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-27 16:51:06 -07:00

Make revision completion in vc-diff and vc-root-diff more predictable

* lisp/vc/vc.el (vc-root-version-diff):
Don't try calling 'vc-deduce-fileset', instead construct a fileset
suitable for the root directory right away.  This way the revision
completion for the root diff doesn't depend on the current buffer,
or the file at point (bug#73232).
(vc-diff-build-argument-list-internal): No special case when
invoked on a directory, or when the current file is not "dirty".
Make REV1-DEFAULT a string value.

* etc/NEWS: Mention the change.
This commit is contained in:
Dmitry Gutov 2024-10-10 02:08:53 +03:00
parent 9ed82c26a3
commit a295d7de9e
2 changed files with 17 additions and 17 deletions

View file

@ -436,6 +436,12 @@ overlap.
*** 'diff-apply-hunk' now supports creating and deleting files.
---
*** 'vc-version-diff' and 'vc-root-revsion-diff' changed default for REV1.
They suggest the previous revision as the default for REV1, not the last
one as before. This makes them different from 'vc-diff' and
'vc-root-diff' when those are called without a prefix argument.
** php-ts-mode
---

View file

@ -2074,20 +2074,15 @@ INITIAL-INPUT are passed on to `vc-read-revision' directly."
;; filesets, but not yet.
((/= (length files) 1)
nil)
;; if it's a directory, don't supply any revision default
((file-directory-p first)
nil)
;; if the file is not up-to-date, use working revision as older revision
((not (vc-up-to-date-p first))
(setq rev1-default (vc-working-revision first)))
;; if the file is not locked, use last revision and current source as defaults
;; if the file is not locked, use previous revision and current source as defaults
(t
(setq rev1-default (ignore-errors ;If `previous-revision' doesn't work.
(vc-call-backend backend 'previous-revision first
(vc-working-revision first))))
(when (string= rev1-default "") (setq rev1-default nil))))
(push (ignore-errors ;If `previous-revision' doesn't work.
(vc-call-backend backend 'previous-revision first
(vc-working-revision first backend)))
rev1-default)
(when (member (car rev1-default) '("" nil)) (setq rev1-default nil))))
;; construct argument list
(let* ((rev1-prompt (format-prompt "Older revision" rev1-default))
(let* ((rev1-prompt (format-prompt "Older revision" (car rev1-default)))
(rev2-prompt (format-prompt "Newer revision"
;; (or rev2-default
"current source"))
@ -2101,8 +2096,8 @@ INITIAL-INPUT are passed on to `vc-read-revision' directly."
(defun vc-version-diff (_files rev1 rev2)
"Report diffs between revisions REV1 and REV2 in the repository history.
This compares two revisions of the current fileset.
If REV1 is nil, it defaults to the current revision, i.e. revision
of the last commit.
If REV1 is nil, it defaults to the previous revision, i.e. revision
before the last commit.
If REV2 is nil, it defaults to the work tree, i.e. the current
state of each file in the fileset."
(interactive (vc-diff-build-argument-list-internal))
@ -2119,9 +2114,8 @@ state of each file in the fileset."
"Report diffs between REV1 and REV2 revisions of the whole tree."
(interactive
(vc-diff-build-argument-list-internal
(or (ignore-errors (vc-deduce-fileset t))
(let ((backend (or (vc-deduce-backend) (vc-responsible-backend default-directory))))
(list backend (list (vc-call-backend backend 'root default-directory)))))))
(let ((backend (or (vc-deduce-backend) (vc-responsible-backend default-directory))))
(list backend (list (vc-call-backend backend 'root default-directory))))))
;; This is a mix of `vc-root-diff' and `vc-version-diff'
(when (and (not rev1) rev2)
(error "Not a valid revision range"))