[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master c029ae8 17/22: diff-hl-dired: Always use dir-status-files
From: |
Dmitry Gutov |
Subject: |
[elpa] master c029ae8 17/22: diff-hl-dired: Always use dir-status-files |
Date: |
Fri, 02 Jan 2015 23:46:32 +0000 |
branch: master
commit c029ae88a41ef29b56c037746641fd7a54a78cc6
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
diff-hl-dired: Always use dir-status-files
...halving the number of process calls.
---
diff-hl-dired.el | 61 ++++++++++++++++++++++++-----------------------------
1 files changed, 28 insertions(+), 33 deletions(-)
diff --git a/diff-hl-dired.el b/diff-hl-dired.el
index 57ce8b8..c73aab5 100644
--- a/diff-hl-dired.el
+++ b/diff-hl-dired.el
@@ -26,6 +26,7 @@
;;; Code:
(require 'diff-hl)
+(require 'dired)
(defvar diff-hl-dired-process-buffer nil)
@@ -75,6 +76,9 @@
(let ((backend (ignore-errors (vc-responsible-backend default-directory)))
(def-dir default-directory)
(buffer (current-buffer))
+ (contents (cl-loop for file in (directory-files default-directory)
+ unless (member file '("." ".." ".hg"))
+ collect file))
dirs-alist files-alist)
(when backend
(diff-hl-dired-clear)
@@ -87,55 +91,46 @@
(setq default-directory (expand-file-name def-dir))
(erase-buffer)
(vc-call-backend
- backend 'dir-status def-dir
+ backend 'dir-status-files def-dir
+ (when diff-hl-dired-extra-indicators
+ contents)
+ nil
(lambda (entries &optional more-to-come)
(when (buffer-live-p buffer)
(with-current-buffer buffer
(dolist (entry entries)
(cl-destructuring-bind (file state &rest r) entry
+ ;; Work around http://debbugs.gnu.org/18605
+ (setq file (replace-regexp-in-string "\\` " "" file))
(let ((type (plist-get
'(edited change added insert removed delete
- unregistered unknown)
+ unregistered unknown ignored ignored)
state)))
(if (string-match "\\`\\([^/]+\\)/" file)
(let* ((dir (match-string 1 file))
(value (cdr (assoc dir dirs-alist))))
(unless (eq value type)
- (if (null value)
- (push (cons dir type) dirs-alist)
- (setcdr (assoc dir dirs-alist) 'change))))
+ (cond
+ ((eq type 'up-to-date))
+ ((null value)
+ (push (cons dir type) dirs-alist))
+ ((not (eq type 'ignored))
+ (setcdr (assoc dir dirs-alist) 'change)))))
(push (cons file type) files-alist)))))
(unless more-to-come
- (diff-hl-dired-highlight-items (append dirs-alist
- files-alist))
- (when diff-hl-dired-extra-indicators
- (diff-hl-dired-update-ignores backend def-dir))))))
+ (diff-hl-dired-highlight-items
+ (append dirs-alist files-alist))))))
)))))
-(defun diff-hl-dired-update-ignores (backend def-dir)
- (let ((buffer (current-buffer))
- entries-alist)
- (with-current-buffer diff-hl-dired-process-buffer
- (erase-buffer)
- (vc-call-backend
- backend 'dir-status-files def-dir
- (cl-loop for file in (directory-files def-dir)
- unless (member file '("." ".." ".hg"))
- collect file)
- nil
- (lambda (entries &optional more-to-come)
- (when (buffer-live-p buffer)
- (with-current-buffer buffer
- (dolist (entry entries)
- (cl-destructuring-bind (file state &rest r) entry
- ;; Work around http://debbugs.gnu.org/18605
- (setq file (replace-regexp-in-string "\\` " "" file))
- (when (eq state 'ignored)
- (push (cons (directory-file-name file)
- 'ignored) entries-alist))))
- (unless more-to-come
- (diff-hl-dired-highlight-items entries-alist)))))
- ))))
+(when (version< emacs-version "24.4.51.5")
+ ;; Work around http://debbugs.gnu.org/19386
+ (defadvice vc-git-dir-status-goto-stage (around
+ diff-hl-dired-skip-up-to-date
+ (stage files update-function)
+ activate)
+ (when (eq stage 'ls-files-up-to-date)
+ (setq stage 'diff-index))
+ ad-do-it))
(defun diff-hl-dired-highlight-items (alist)
"Highlight ALIST containing (FILE . TYPE) elements."
- [elpa] master f2546ca 09/22: diff-hl-changes: Handle diffs where only file mode changed, (continued)
- [elpa] master f2546ca 09/22: diff-hl-changes: Handle diffs where only file mode changed, Dmitry Gutov, 2015/01/02
- [elpa] master 58615cd 10/22: auto-revert-mode integration, Dmitry Gutov, 2015/01/02
- [elpa] master 8dd7d96 12/22: Don't error out when fringe is disabled, Dmitry Gutov, 2015/01/02
- [elpa] master ccaca25 11/22: Merge pull request #30 from sunesimonsen/master, Dmitry Gutov, 2015/01/02
- [elpa] master 9c5004e 13/22: diff-hl-dired-{unknown, ignored}: inherit from dired-ignored instead, Dmitry Gutov, 2015/01/02
- [elpa] master 32951f0 01/22: Add link to an issue, Dmitry Gutov, 2015/01/02
- [elpa] master 788f1fd 14/22: diff-hl-dired-update-ignores: Specifically exclude .hg from iteration, Dmitry Gutov, 2015/01/02
- [elpa] master 469e332 15/22: Add user option `diff-hl-dired-extra-indicators', Dmitry Gutov, 2015/01/02
- [elpa] master bfe57a1 16/22: Use "i" for ignored files, Dmitry Gutov, 2015/01/02
- [elpa] master b4d6dc3 18/22: Introduce diff-hl-dired-mode-unless-remote, Dmitry Gutov, 2015/01/02
- [elpa] master c029ae8 17/22: diff-hl-dired: Always use dir-status-files,
Dmitry Gutov <=
- [elpa] master c1351b0 19/22: Collect files only when diff-hl-dired-extra-indicators is non-nil, Dmitry Gutov, 2015/01/02
- [elpa] master cb467b4 20/22: diff-hl-dired-update: Support Emacs 25, Dmitry Gutov, 2015/01/02
- [elpa] master 6ea154f 21/22: Bump the version, Dmitry Gutov, 2015/01/02
- [elpa] master 8cec226 22/22: Merge commit '6ea154f73f8389abb03c804bb4a4d21c8893861b' from diff-hl, Dmitry Gutov, 2015/01/02