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
Matthieu Moy <matthieu.moy@imag.fr>
Date
Jul 31, 2007, 01:58 UTC
Message-ID
<vpqzm1dqqps.fsf@bauges.imag.fr>
In-Reply-To
<20070731011100.23561.27554.stgit@yoghurt>
Karl Hasselström <kha@treskal.com> writes:
Show 39 quoted lines
> 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))))
What you're looking for probably looks like that:
         (let ((ce (git-core-excludesfile)))
           (setq remaining-files (apply 'git-run-ls-files 
                                      `(,status ,remaining-files
                                        unknown "-o" ... ,@(when ce
                                                             (list ce))))))
(the magic is in the backquote and the ,@ in `(... ,@(...)))
(totally untested, probably bogus)
-- 
Matthieu
Previous: Karl HasselströmNext: Alexandre Julliard
Message 2 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.