git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [RFH PATCH] Teach the emacs git mode about core.excludesfile

From
AJAlexandre Julliard <julliard@winehq.org>
Date
Jul 31, 2007, 10:36 UTC
Message-ID
<87abtcvozz.fsf@wine.dyndns.org>
In-Reply-To
<20070731011100.23561.27554.stgit@yoghurt>
Karl Hasselström <kha@treskal.com> writes:
> This is a Request For Help. The patch works, but is clearly the work
> of someone who is not very fluent in elisp. Just look at all that
> duplicated code I've introduced!
I would do it this way:
From: Alexandre Julliard <julliard@winehq.org>
Date: Tue, 31 Jul 2007 12:19:05 +0200
Subject: [PATCH] git.el: Take into account the core.excludesfile config option.

Also don't require .git/info/exclude to exist in order to list unknown files.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
---
 contrib/emacs/git.el |   20 +++++++++++++++-----
 1 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/contrib/emacs/git.el b/contrib/emacs/git.el
index 53dd703..9bcd7c4 100644
--- a/contrib/emacs/git.el
+++ b/contrib/emacs/git.el
@@ -589,6 +589,16 @@ Return the list of files that haven't been handled."
           (when node (push (ewoc-data node) unmerged-files))))
       (git-set-files-state unmerged-files 'unmerged))))
 
+(defun git-get-exclude-files ()
+  "Get the list of exclude files to pass to git-ls-files."
+  (let (files
+        (config (git-config "core.excludesfile")))
+    (when (file-readable-p ".git/info/exclude")
+      (push ".git/info/exclude" files))
+    (when (and config (file-readable-p config))
+      (push config files))
+    files))
+
 (defun git-update-status-files (files &optional default-state)
   "Update the status of FILES from the index."
   (unless git-status (error "Not in git-status buffer."))
@@ -598,11 +608,11 @@ Return the list of files that haven't been handled."
               (git-run-ls-files status files 'added "-c")
             (git-run-diff-index status files))))
     (git-run-ls-unmerged status files)
-    (when (and (or (not files) remaining-files)
-               (file-readable-p ".git/info/exclude"))
-      (setq remaining-files (git-run-ls-files status remaining-files
-                                              'unknown "-o" "--exclude-from=.git/info/exclude"
-                                              (concat "--exclude-per-directory=" git-per-dir-ignore-file))))
+    (when (or (not files) remaining-files)
+      (let ((exclude-files (git-get-exclude-files)))
+        (setq remaining-files (apply #'git-run-ls-files status remaining-files 'unknown "-o"
+                                     (concat "--exclude-per-directory=" git-per-dir-ignore-file)
+                                     (mapcar (lambda (f) (concat "--exclude-from=" f)) exclude-files)))))
     ; mark remaining files with the default state (or remove them if nil)
     (when remaining-files
       (if default-state
-- 
1.5.3.rc3.92.g70c7b

-- 
Alexandre Julliard
julliard@winehq.org
Previous: Matthieu MoyNext: Karl Hasselström
Message 3 of 4 in “Teach the emacs git mode about core.excludesfile”
  1. Teach the emacs git mode about core.excludesfileKarl Hasselström, Jul 31, 2007
  2. Matthieu MoyJul 31, 2007
  3. Alexandre JulliardJul 31, 2007
  4. Karl HasselströmJul 31, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.