branch: elpa/magit
commit 15e0b8a5785c0cb5c73e56e3bc15ea5d75bbf472
Author: Jonas Bernoulli <[email protected]>
Commit: Jonas Bernoulli <[email protected]>
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 44858f71af..dc53383751 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