branch: externals/diff-hl
commit 539b2f46e07fd77b7984120d4c25c6e0215e6bdf
Author: Dmitry Gutov <dmi...@gutov.dev>
Commit: Dmitry Gutov <dmi...@gutov.dev>

    Handle diff-hl-show-staged-changes=nil in the new feature
    
    Highlight staged changes as "reference" changes in this case.
---
 diff-hl.el | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/diff-hl.el b/diff-hl.el
index e4d78e17df..cac6cf8a2d 100644
--- a/diff-hl.el
+++ b/diff-hl.el
@@ -383,13 +383,21 @@ It can be a relative expression as well, such as 
\"HEAD^\" with Git, or
 
 (defun diff-hl-diff-against-reference (file backend buffer &optional new-rev)
   (if (and (eq backend 'Git)
-           (not diff-hl-reference-revision)
            (not new-rev)
            (not diff-hl-show-staged-changes))
-      (apply #'vc-git-command buffer 1
-             (list file)
-             "diff-files"
-             (cons "-p" (vc-switches 'git 'diff)))
+      (if diff-hl-reference-revision
+          (apply #'vc-git-command buffer 1
+                 (list file)
+                 "diff-index"
+                 (append
+                  (vc-switches 'git 'diff)
+                  (list "-p" "--cached"
+                        diff-hl-reference-revision
+                        "--")))
+        (apply #'vc-git-command buffer 1
+               (list file)
+               "diff-files"
+               (cons "-p" (vc-switches 'git 'diff))))
     (condition-case err
         (vc-call-backend backend 'diff (list file)
                          diff-hl-reference-revision
@@ -406,7 +414,12 @@ It can be a relative expression as well, such as \"HEAD^\" 
with Git, or
 
 (defun diff-hl-changes ()
   (let* ((file buffer-file-name)
-         (backend (vc-backend file)))
+         (backend (vc-backend file))
+         (hide-staged (and (eq backend 'Git) (not 
diff-hl-show-staged-changes)))
+         (diff-hl-reference-revision
+          (or diff-hl-reference-revision
+              (and hide-staged
+                   (diff-hl-tip-revision backend)))))
     (when backend
       (let ((state (vc-state file backend)))
         (cond
@@ -416,8 +429,8 @@ It can be a relative expression as well, such as \"HEAD^\" 
with Git, or
           (let* ((ref-changes
                   (and diff-hl-reference-revision
                        (diff-hl-changes-from-buffer
-                        (diff-hl-changes-buffer file backend
-                                                (diff-hl-tip-revision 
backend)))))
+                        (diff-hl-changes-buffer file backend (unless 
hide-staged
+                                                               
(diff-hl-tip-revision backend))))))
                  (diff-hl-reference-revision nil)
                  (work-changes (diff-hl-changes-from-buffer
                                 (diff-hl-changes-buffer file backend))))

Reply via email to