From 15e0b8a5785c0cb5c73e56e3bc15ea5d75bbf472 Mon Sep 17 00:00:00 2001 From: Jonas Bernoulli Date: Tue, 31 Mar 2026 22:45:40 +0200 Subject: magit--gitignore-patterns: Respect DIRECTORY If non-nil, return paths relative to DIRECTORY, because the caller is going to insert the selected path into "DIRECTORY/.gitignore". --- lisp/magit-gitignore.el | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/lisp/magit-gitignore.el b/lisp/magit-gitignore.el index 44858f7..dc53383 100644 --- a/lisp/magit-gitignore.el +++ b/lisp/magit-gitignore.el @@ -121,23 +121,26 @@ Rules that are defined in that file affect all local repositories." choices nil 'any nil nil default))) (defun magit--gitignore-patterns (&optional directory) - (delete-dups - (mapcan - (lambda (file) - (cons (concat "/" file) - (and$ (file-name-extension file) - (list (concat "/" (file-name-directory file) "*." $) - (concat "*." $))))) - (sort (nconc - (magit-untracked-files nil directory) - ;; The untracked section of the status buffer lists - ;; directories containing only untracked files. - ;; Add those as candidates. - (seq-filter #'directory-name-p - (magit-list-files - "--other" "--exclude-standard" "--directory" - "--no-empty-directory" "--" directory))) - #'string-lessp)))) + (let* ((topdir (magit-toplevel)) + (default-directory (or directory topdir)) + (files (magit--untracked-files directory t)) + ;; Include directories that contain only untracked files. + (dirs (seq-filter (##equal (substring % -1) "/") + (magit--untracked-files directory))) + (globs nil) + (dirglobs nil)) + (when directory + (let ((beg (length (file-relative-name directory topdir)))) + (setq files (mapcar (##substring % beg) files)) + (setq dirs (mapcar (##substring % beg) dirs)))) + (dolist (file files) + (when-let ((ext (file-name-extension file))) + (cl-pushnew (concat "*." ext) globs :test #'equal) + (when-let ((dir (file-name-directory file))) + (cl-pushnew (concat dir "*." ext) dirglobs :test #'equal)))) + (sort (nconc globs + (mapcar (##concat "/" %) (nconc files dirs dirglobs))) + #'string<))) ;;; Skip Worktree Commands -- cgit v1.0