unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Wolfgang Scherer <Wolfgang.Scherer@gmx.de>
To: 37217@debbugs.gnu.org
Subject: bug#37217: [PATCH] vc-default-ignore implementation is incorrect
Date: Thu, 29 Aug 2019 02:53:20 +0200	[thread overview]
Message-ID: <4b41d328-04ef-8fc3-9b89-6362e83c37a6@gmx.de> (raw)

[-- Attachment #1: Type: text/plain, Size: 245 bytes --]

Only the basename of FILE is written to the ignore file. This is
wrong for all filenames relative to project root with one ore
more parent directories.

The remove option is also implemented incorrectly.

The attached patch fixes these errors.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fixes-vc-default-ignore.patch --]
[-- Type: text/x-patch; name="0001-Fixes-vc-default-ignore.patch", Size: 2037 bytes --]

From 7ca81822189035db9a117b66ed8365b4eb2ab88b Mon Sep 17 00:00:00 2001
From: Wolfgang Scherer <wolfgang.scherer@gmx.de>
Date: Thu, 29 Aug 2019 02:51:03 +0200
Subject: [PATCH] Fixes vc-default-ignore

* lisp/vc/vc.el: (vc-default-ignore) Treat FILE parameter as relative
to DIRECTORY parameter.  Construct a file-path relative to directory
of ignore file.  When removing, use properly anchored regexp.  Remove
entire line, not just the match.
---
 lisp/vc/vc.el | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 4cac153..2b1f163 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -1417,17 +1417,22 @@ remove from the list of ignored files."

 (defun vc-default-ignore (backend file &optional directory remove)
   "Ignore FILE under the VCS of DIRECTORY (default is `default-directory').
-FILE is a file wildcard, relative to the root directory of DIRECTORY.
+FILE is a wildcard specification, either relative to
+DIRECTORY or absolute.
 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."
   (let ((ignore
 	 (vc-call-backend backend 'find-ignore-file (or directory default-directory)))
-	(pattern (file-relative-name
-		  (expand-file-name file) (file-name-directory file))))
+	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)))
     (if remove
-	(vc--remove-regexp pattern ignore)
+	(vc--remove-regexp (concat "^" (regexp-quote pattern ) "\n?") ignore)
       (vc--add-line pattern ignore))))

 (defun vc-default-ignore-completion-table (backend file)
--
2.7.4


             reply	other threads:[~2019-08-29  0:53 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-29  0:53 Wolfgang Scherer [this message]
     [not found] ` <handler.37217.B.15670400118803.ack@debbugs.gnu.org>
2019-08-29 15:44   ` bug#37217: Acknowledgement ([PATCH] vc-default-ignore implementation is incorrect) Wolfgang Scherer
2019-09-15 13:06 ` bug#37217: [PATCH] vc-default-ignore implementation is incorrect Lars Ingebrigtsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4b41d328-04ef-8fc3-9b89-6362e83c37a6@gmx.de \
    --to=wolfgang.scherer@gmx.de \
    --cc=37217@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).