[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-27 dd57564: Move more logic to vc-ignore from vc-default-ignore
From: |
Dmitry Gutov |
Subject: |
emacs-27 dd57564: Move more logic to vc-ignore from vc-default-ignore |
Date: |
Sat, 22 Feb 2020 18:51:52 -0500 (EST) |
branch: emacs-27
commit dd5756436c580cc0d00ee875d6645861daf5a867
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
Move more logic to vc-ignore from vc-default-ignore
* lisp/vc/vc-dir.el (vc-dir-ignore):
Pass relative file names to vc-ignore.
* lisp/vc/vc.el (vc-ignore): Move the responsibility of
constructing the ignore pattern (right now, most often a relative
file name) using a file name received from the user, here.
(vc-default-ignore): ...from here (bug#37189, see discussion).
Also clarify the docstring.
---
lisp/vc/vc-dir.el | 4 +++-
lisp/vc/vc.el | 57 +++++++++++++++++++++++++++++--------------------------
2 files changed, 33 insertions(+), 28 deletions(-)
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index 033cb27..e5c5e16 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -879,7 +879,9 @@ If a prefix argument is given, ignore all marked files."
(vc-ignore (vc-dir-fileinfo->name filearg))
t))
vc-ewoc)
- (vc-ignore (vc-dir-current-file))))
+ (vc-ignore
+ (file-relative-name (vc-dir-current-file))
+ default-directory)))
(defun vc-dir-current-file ()
(let ((node (ewoc-locate vc-ewoc)))
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index ec252b7..53491dd 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -480,8 +480,8 @@
;;
;; - ignore (file &optional directory)
;;
-;; Ignore FILE under the VCS of DIRECTORY (default is `default-directory').
-;; FILE is a file wildcard.
+;; Ignore FILE under DIRECTORY (default is 'default-directory').
+;; FILE is a file wildcard relative to DIRECTORY.
;; When called interactively and with a prefix argument, remove FILE
;; from ignored files.
;; When called from Lisp code, if DIRECTORY is non-nil, the
@@ -1406,40 +1406,43 @@ When called interactively, prompt for a FILE to ignore,
unless a
prefix argument is given, in which case prompt for a file FILE to
remove from the list of ignored files."
(interactive
- (list
- (if (not current-prefix-arg)
- (read-file-name "File to ignore: ")
- (completing-read
- "File to remove: "
- (vc-call-backend
- (or (vc-responsible-backend default-directory)
- (error "Unknown backend"))
- 'ignore-completion-table default-directory)))
- nil current-prefix-arg))
+ (let* ((backend (vc-responsible-backend default-directory))
+ (rel-dir
+ (condition-case nil
+ (file-name-directory
+ (vc-call-backend backend 'find-ignore-file
+ default-directory))
+ (vc-not-supported
+ default-directory)))
+ (file (read-file-name "File to ignore: ")))
+ (when (and (file-name-absolute-p file)
+ (file-in-directory-p file rel-dir))
+ (setq file (file-relative-name file rel-dir)))
+ (list file
+ rel-dir
+ current-prefix-arg)))
(let* ((directory (or directory default-directory))
(backend (or (vc-responsible-backend default-directory)
(error "Unknown backend"))))
(vc-call-backend backend 'ignore file directory remove)))
(defun vc-default-ignore (backend file &optional directory remove)
- "Ignore FILE under the VCS of DIRECTORY (default is `default-directory').
-FILE is a wildcard specification, either relative to
-DIRECTORY or absolute.
+ "Ignore FILE under DIRECTORY (default is `default-directory').
+FILE is a wildcard specification relative to DIRECTORY.
+
When called from Lisp code, if DIRECTORY is non-nil, the
-repository to use will be deduced by DIRECTORY; if REMOVE is
-non-nil, remove FILE from ignored files.
-Argument BACKEND is the backend you are using."
+repository to use will be deduced by DIRECTORY.
+
+If REMOVE is non-nil, remove FILE from ignored files instead.
+
+Argument BACKEND is the backend to use."
(let ((ignore
- (vc-call-backend backend 'find-ignore-file (or directory
default-directory)))
- file-path root-dir pattern)
- (setq file-path (expand-file-name file directory))
- (setq root-dir (file-name-directory ignore))
- (when (not (string= (substring file-path 0 (length root-dir)) root-dir))
- (error "Ignore spec %s is not below project root %s" file-path root-dir))
- (setq pattern (substring file-path (length root-dir)))
+ (vc-call-backend backend
+ 'find-ignore-file
+ (or directory default-directory))))
(if remove
- (vc--remove-regexp (concat "^" (regexp-quote pattern ) "\\(\n\\|$\\)")
ignore)
- (vc--add-line pattern ignore))))
+ (vc--remove-regexp (concat "^" (regexp-quote file) "\\(\n\\|$\\)")
ignore)
+ (vc--add-line file ignore))))
(defun vc-default-ignore-completion-table (backend file)
"Return the list of ignored files under BACKEND."
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-27 dd57564: Move more logic to vc-ignore from vc-default-ignore,
Dmitry Gutov <=