summaryrefslogtreecommitdiff
path: root/tests/attr/ignore.c
Commit message (Collapse)AuthorAgeFilesLines
* ignore: handle escaped trailing whitespacePatrick Steinhardt2019-06-061-0/+46
| | | | | | | | | | The gitignore's pattern format specifies that "Trailing spaces are ignored unless they are quoted with backslash ("\")". We do not honor this currently and will treat a pattern "foo\ " as if it was "foo\" only and a pattern "foo\ \ " as "foo\ \". Fix our code to handle those special cases and add tests to avoid regressions.
* ignore: treat paths with trailing "/" as directoriesPatrick Steinhardt2019-04-051-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | The function `git_ignore_path_is_ignored` is there to test the ignore status of paths that need not necessarily exist inside of a repository. This has the implication that for a given path, we cannot always decide whether it references a directory or a file, and we need to distinguish those cases because ignore rules may treat those differently. E.g. given the following gitignore file: * !/**/ we'd only want to unignore directories, while keeping files ignored. But still, calling `git_ignore_path_is_ignored("dir/")` will say that this directory is ignored because it treats "dir/" as a file path. As said, the `is_ignored` function cannot always decide whether the given path is a file or directory, and thus it may produce wrong results in some cases. While this is unfixable in the general case, we can do better when we are being passed a path name with a trailing path separator (e.g. "dir/") and always treat them as directories.
* ignore: move tests from status to attr ignore suiteSteven King Jr2019-03-201-0/+25
|
* attr_file: fix handling of directory patterns with trailing spacesPatrick Steinhardt2018-04-121-0/+16
| | | | | | | | | | | | | | | | When comparing whether a path matches a directory rule, we pass the both the path and directory name to `fnmatch` with `GIT_ATTR_FNMATCH_DIRECTORY` being set. `fnmatch` expects the pattern to contain no trailing directory '/', which is why we try to always strip patterns of trailing slashes. We do not handle that case correctly though when the pattern itself has trailing spaces, causing the match to fail. Fix the issue by stripping trailing spaces and tabs for a rule previous to checking whether the pattern is a directory pattern with a trailing '/'. This replaces the whitespace-stripping in our ignore file parsing code, which was stripping whitespaces too late. Add a test to catch future breakage.
* Ignore trailing whitespace in .gitignore files (as git itself does)David Turner2017-10-291-0/+10
|
* ignore: honor case insensitivity for negative ignoresPatrick Steinhardt2017-08-251-0/+34
| | | | | | | | | | | | | | | | When computing negative ignores, we throw away any rule which does not undo a previous rule to optimize. But on case insensitive file systems, we need to keep in mind that a negative ignore can also undo a previous rule with different case, which we did not yet honor while determining whether a rule undoes a previous one. So in the following example, we fail to unignore the "/Case" directory: /case !/Case Make both paths checking whether a plain- or wildcard-based rule undo a previous rule aware of case-insensitivity. This fixes the described issue.
* ignore: keep negative rules containing wildcardsPatrick Steinhardt2017-08-251-0/+9
| | | | | | | | | | | | | | | | | | | | | | Ignore rules allow for reverting a previously ignored rule by prefixing it with an exclamation mark. As such, a negative rule can only override previously ignored files. While computing all ignore patterns, we try to use this fact to optimize away some negative rules which do not override any previous patterns, as they won't change the outcome anyway. In some cases, though, this optimization causes us to get the actual ignores wrong for some files. This may happen whenever the pattern contains a wildcard, as we are unable to reason about whether a pattern overrides a previous pattern in a sane way. This happens for example in the case where a gitignore file contains "*.c" and "!src/*.c", where we wouldn't un-ignore files inside of the "src/" subdirectory. In this case, the first solution coming to mind may be to just strip the "src/" prefix and simply compare the basenames. While that would work here, it would stop working as soon as the basename pattern itself is different, like for example with "*x.c" and "!src/*.c. As such, we settle for the easier fix of just not optimizing away rules that contain a wildcard.
* Fix issue with directory glob ignore in subdirectoriesRobert Gay2017-05-171-0/+12
|
* `cl_git_exec` -> `cl_git_expect`ethomson/clar_messagesEdward Thomson2017-02-171-1/+1
|
* tests: provide better pass/failure error messagesEdward Thomson2017-02-171-2/+2
| | | | | | Provide more detailed messages when conditions pass or fail unexpectedly. In particular, this provides the error messages when a test fails with a different error code than was expected.
* ignore: fix directory limits when searching for star-starCarlos Martín Nieto2016-04-191-0/+12
| | | | | | | | | | | | In order to match the star-star, we disable the flag that's looking for a single path element, but that leads to searching for the pattern in the middle of elements in the input string. Mark when we're handing a star-star so we jump over the elements in our attempt to match the part of the pattern that comes after the star-star. While here, tighten up the check so we don't allow invalid rules through.
* Add more tests for path matching with globs and path delimitersAntonio Scandurra2016-04-181-0/+14
|
* ignore: don't use realpath to canonicalize pathcmn/ignore-symlinkCarlos Martín Nieto2016-04-021-0/+13
| | | | | | If we're looking for a symlink, realpath will give us the resolved path, which is not what we're after, but a canonicalized version of the path the user asked for.
* attr tests: make explicit our dir/file match testsEdward Thomson2015-05-131-12/+24
|
* attr test: test a file beneath ignored folderEdward Thomson2015-05-121-1/+1
|
* attr: test that a file is not ignored for a folderEdward Thomson2015-05-121-0/+17
| | | | | When a .gitignore specifies some folder "foo/", ensure that a file with the same name "foo" is not ignored.
* attr: regression tests for ignore matchingEdward Thomson2015-05-121-0/+32
| | | | | | Ensure that when examining a .gitignore in a subdirectory, we do not erroneously apply the paths contained therein to the root of the repository. (Fixed in c02a0e4).
* Add failing subdirectory gitignore attr test.Mike McQuaid2015-04-231-0/+18
|
* Improve handling of fake home directoryRussell Belfer2014-05-021-3/+2
| | | | | | | | | | There are a few tests that set up a fake home directory and a fake GLOBAL search path so that we can test things in global ignore or attribute or config files. This cleans up that code to work more robustly even if there is a test failure. This also fixes some valgrind warnings where scanning search paths for separators could end up doing a little bit of sketchy data access when coming to the end of search list.
* Make ** pattern eat trailing slashrb/fix-starstar-againRussell Belfer2014-05-011-0/+18
| | | | This allows "foo/**/*.html" to match "foo/file.html"
* Cleanup tests with helper functionsRussell Belfer2014-04-181-1/+1
|
* Fix core.excludesfile named .gitignorerb/fix-leading-slash-ignoresRussell Belfer2014-04-141-12/+9
| | | | | | | | | | | | | | | | | Ignore rules with slashes in them are matched using FNM_PATHNAME and use the path to the .gitignore file from the root of the repository along with the path fragment (including slashes) in the ignore file itself. Unfortunately, the relative path to the .gitignore file was being applied to the global core.excludesfile if that was also named ".gitignore". This fixes that with more precise matching and includes test for ignore rules with leading slashes (which were the primary example of this being broken in the real world). This also backports an improvement to the file context logic from the threadsafe-iterators branch where we don't rely on mutating the key of the attribute file name to generate the context path.
* More ** tests for pattern rulesRussell Belfer2014-04-061-4/+50
|
* Add support for ** matches in ignoresRussell Belfer2014-04-041-0/+13
| | | | | This is an experimental addition to add ** support to fnmatch pattern matching in libgit2. It needs more testing.
* Rename tests-clar to testsBen Straub2013-11-141-0/+102