]> git.eshelyaron.com Git - emacs.git/commitdiff
Abbreviate the VC revision in vc-annotate's buffer name
authorJim Porter <jporterbugs@gmail.com>
Thu, 14 Dec 2023 19:31:27 +0000 (11:31 -0800)
committerJim Porter <jporterbugs@gmail.com>
Wed, 27 Dec 2023 22:22:18 +0000 (14:22 -0800)
* lisp/vc/vc-hooks.el (vc-use-short-revision): New variable.
(vc-short-revision): New function.

* lisp/vc/vc-annotate.el (vc-annotate-use-short-revision): New
option...
(vc-annotate): ... use it.

* lisp/vc/vc-git.el (vc-git--rev-parse): Consult
'vc-use-short-revision'.

* etc/NEWS: Announce this change (bug#67062).

etc/NEWS
lisp/vc/vc-annotate.el
lisp/vc/vc-git.el
lisp/vc/vc-hooks.el

index f82564946b704c1997d582c24ea655924e2071e5..c002ec33d45d9a4bd4913af7ff75ebc3305fe6f8 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -497,6 +497,12 @@ switch is used, commands to see the diff of the old revision ('d'),
 check out an old file version ('f') or annotate it right away ('a'),
 also work on revisions which precede renames.
 
+---
+*** 'vc-annotate' now abbreviates the Git revision in the buffer name.
+When using the Git backend, 'vc-annotate' will use an abbreviated
+revision identifier in its buffer name.  To restore the previous
+behavior, set 'vc-annotate-use-short-revision' to nil.
+
 *** New option 'vc-git-file-name-changes-switches'.
 It allows tweaking the thresholds for rename and copy detection.
 
index de6c3adbbdb2a3d8c53c5ff718395ec477b589e5..cfca7cbfac0b5db2d5d9d90663eb6d84cf7bf702 100644 (file)
@@ -162,6 +162,11 @@ List of factors, used to expand/compress the time scale.  See `vc-annotate'."
   :type '(repeat number)
   :group 'vc)
 
+(defcustom vc-annotate-use-short-revision t
+  "If non-nil, \\[vc-annotate] will use short revisions in its buffer name."
+  :type 'boolean
+  :group 'vc)
+
 (defvar-keymap vc-annotate-mode-map
   :doc "Local keymap used for VC-Annotate mode."
   "a"   #'vc-annotate-revision-previous-to-line
@@ -397,7 +402,10 @@ should be applied to the background or to the foreground."
    (save-current-buffer
      (vc-ensure-vc-buffer)
      (list buffer-file-name
-          (let ((def (vc-working-revision buffer-file-name)))
+          (let ((def (funcall (if vc-annotate-use-short-revision
+                                   #'vc-short-revision
+                                 #'vc-working-revision)
+                               buffer-file-name)))
             (if (null current-prefix-arg) def
               (vc-read-revision
                (format-prompt "Annotate from revision" def)
index 24469f04f7ca56bdb0e1f44d4caa371596f7b46c..bd74e2a6a44b0d890a63663eba02757a8a1aa237 100644 (file)
@@ -1857,8 +1857,11 @@ This requires git 1.8.4 or later, for the \"-L\" option of \"git log\"."
 (defun vc-git--rev-parse (rev)
   (with-temp-buffer
     (and
-     (vc-git--out-ok "rev-parse" rev)
-     (buffer-substring-no-properties (point-min) (+ (point-min) 40)))))
+     (apply #'vc-git--out-ok "rev-parse"
+            (append (when vc-use-short-revision '("--short"))
+                    (list rev)))
+     (goto-char (point-min))
+     (buffer-substring-no-properties (point) (pos-eol)))))
 
 (defun vc-git-next-revision (file rev)
   "Git-specific version of `vc-next-revision'."
index 8451128286b3d5fe38d9a656d5d6d27d4aab174d..e84cdffe2dd8590ee916fa4a63c6315987ddb61b 100644 (file)
@@ -506,6 +506,18 @@ If FILE is not registered, this function always returns nil."
                            (vc-call-backend
                             backend 'working-revision file))))))
 
+(defvar vc-use-short-revision nil
+  "If non-nil, VC backend functions should return short revisions if possible.
+This is set to t when calling `vc-short-revision', which will
+then call the \\=`working-revision' backend function.")
+
+(defun vc-short-revision (file &optional backend)
+  "Return the repository version for FILE in a shortened form.
+If FILE is not registered, this function always returns nil."
+  (let ((vc-use-short-revision t))
+    (vc-call-backend (or backend (vc-backend file))
+                     'working-revision file)))
+
 (defun vc-default-registered (backend file)
   "Check if FILE is registered in BACKEND using vc-BACKEND-master-templates."
   (let ((sym (vc-make-backend-sym backend 'master-templates)))