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

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

From
Karl Hasselström <kha@treskal.com>
Date
Jul 31, 2007, 01:13 UTC
Message-ID
<20070731011100.23561.27554.stgit@yoghurt>

If there is a core.excludesfile option specified, let the emacs git mode take exclude patterns from that file, since that's what the docs say, and what everyone else is already doing.

Signed-off-by: Karl Hasselström <kha@treskal.com>
---

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!

 contrib/emacs/git.el |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/contrib/emacs/git.el b/contrib/emacs/git.el
index 53dd703..357e6d2 100644
--- a/contrib/emacs/git.el
+++ b/contrib/emacs/git.el
@@ -589,6 +589,13 @@ 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-core-excludesfile ()
+  "The file core.excludesfile, or nil if it isn't specified."
+  (let ((fn (git-config "core.excludesfile")))
+    (if (and fn (file-readable-p fn))
+        fn
+      nil)))
+
 (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."))
@@ -600,9 +607,15 @@ Return the list of files that haven't been handled."
     (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))))
+      (let ((ce (git-core-excludesfile)))
+        (if ce
+            (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)
+                                                    (concat "--exclude-from=" ce)))
+          (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))))))
     ; mark remaining files with the default state (or remove them if nil)
     (when remaining-files
       (if default-state
Next: Matthieu Moy
Message 1 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.