From: Dmitry Gutov Date: Wed, 9 Oct 2024 23:08:53 +0000 (+0300) Subject: Make revision completion in vc-diff and vc-root-diff more predictable X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bcf72db99a3e6b6b8e84065d06438ca633bff00a;p=emacs.git 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. (cherry picked from commit a295d7de9e8cae03fd4be6838d7eee59381791e4) --- diff --git a/etc/NEWS b/etc/NEWS index 2259dc8cbb5..0bbd02797aa 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -380,6 +380,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 --- diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 15636048307..295216befc1 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -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"))