]> git.eshelyaron.com Git - emacs.git/commitdiff
Make revision completion in vc-diff and vc-root-diff more predictable
authorDmitry Gutov <dmitry@gutov.dev>
Wed, 9 Oct 2024 23:08:53 +0000 (02:08 +0300)
committerEshel Yaron <me@eshelyaron.com>
Mon, 14 Oct 2024 17:37:41 +0000 (19:37 +0200)
* 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)

etc/NEWS
lisp/vc/vc.el

index 2259dc8cbb5a6177933ec5d94b015b6ce7b38ec6..0bbd02797aa7179e28c3516ee3da33bee4f9cb45 100644 (file)
--- 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
 
 ---
index 15636048307c674f99776c653b0223e48ce80369..295216befc13ee539937c868e304aae87fa706a1 100644 (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"))