libgit2/tests
Russell Belfer f554611a27 Improve checks for ignore containment
The diff code was using an "ignored_prefix" directory to track if
a parent directory was ignored that contained untracked files
alongside tracked files. Unfortunately, when negative ignore rules
were used for directories inside ignored parents, the wrong rules
were applied to untracked files inside the negatively ignored
child directories.

This commit moves the logic for ignore containment into the workdir
iterator (which is a better place for it), so the ignored-ness of
a directory is contained in the frame stack during traversal.  This
allows a child directory to override with a negative ignore and yet
still restore the ignored state of the parent when we traverse out
of the child.

Along with this, there are some problems with "directory only"
ignore rules on container directories.  Given "a/*" and "!a/b/c/"
(where the second rule is a directory rule but the first rule is
just a generic prefix rule), then the directory only constraint
was having "a/b/c/d/file" match the first rule and not the second.
This was fixed by having ignore directory-only rules test a rule
against the prefix of a file with LEADINGDIR enabled.

Lastly, spot checks for ignores using `git_ignore_path_is_ignored`
were tested from the top directory down to the bottom to deal with
the containment problem, but this is wrong. We have to test bottom
to top so that negative subdirectory rules will be checked before
parent ignore rules.

This does change the behavior of some existing tests, but it seems
only to bring us more in line with core Git, so I think those
changes are acceptable.
2014-05-06 12:41:26 -07:00
..
attr Some further sandboxing cleanups to tests 2014-05-02 09:21:33 -07:00
blame Clar: skip tests 2014-04-02 18:50:47 +02:00
buf Rename tests-clar to tests 2013-11-14 14:05:52 -08:00
checkout git_checkout_opts -> git_checkout_options 2014-03-06 09:44:51 -08:00
cherrypick Added cherry pick tests 2014-04-14 16:16:22 +02:00
clar Clar: skip tests 2014-04-02 18:50:47 +02:00
clone remote: write tests for cloning from an empty repo 2014-04-02 20:22:22 +02:00
commit commit: safer commit creation with reference update 2014-04-30 00:41:37 +02:00
config Improve handling of fake home directory 2014-05-02 09:21:33 -07:00
core Merge pull request #2291 from ethomson/patch_binary 2014-04-23 09:27:15 -07:00
date Added RFC2822 date format test cases 2014-04-11 21:55:36 +02:00
diff Improve checks for ignore containment 2014-05-06 12:41:26 -07:00
fetchhead fetchhead: deal with quotes in branch names 2014-04-24 14:08:29 +02:00
filter Introduce core.safecrlf handling 2014-04-07 21:09:09 -07:00
graph Added a no path test for git_graph_descendant_of 2014-04-08 16:32:06 +02:00
index Some vector utility tweaks 2014-04-17 14:43:45 -07:00
merge merge: checkout default shouldn't clobber given 2014-04-23 19:43:35 -04:00
network remote: rename inmemory to anonymous and swap url and fetch order 2014-04-01 13:38:04 +02:00
notes note: rename the id getter to git_note_id() 2014-01-24 11:18:51 +01:00
object commit: safer commit creation with reference update 2014-04-30 00:41:37 +02:00
odb Fix a number of git_odb_exists_prefix bugs 2014-03-10 11:34:50 -07:00
online Verify update_tips callbacks in push test cases 2014-04-21 19:38:34 +02:00
pack Test cancel from indexer progress callback 2013-12-11 15:02:20 -08:00
refs Some further sandboxing cleanups to tests 2014-05-02 09:21:33 -07:00
repo Correct C90 warnings 2014-04-11 22:48:42 +02:00
reset Reset tests: Use sandboxed index 2014-04-25 15:49:58 +02:00
resources Merge pull request #2261 from jacquesg/format-patch 2014-04-16 19:09:35 +02:00
revert Capture conflict information in MERGE_MSG for revert and merge 2014-04-14 16:16:22 +02:00
revwalk No need to find merge base. 2014-03-31 15:15:32 -07:00
stash Make checkout match diff for untracked/ignored dir 2014-04-22 21:51:54 -07:00
status Improve checks for ignore containment 2014-05-06 12:41:26 -07:00
stress Rename tests-clar to tests 2013-11-14 14:05:52 -08:00
structinit Fix remaining init_options inconsistencies 2014-05-02 09:21:33 -07:00
submodule Test (and fix) the git_submodule_sync changes 2014-04-03 11:58:51 -07:00
threads Some memory leak fixes 2014-04-17 15:04:42 -07:00
trace Remove trace / add git_diff_perfdata struct + api 2014-05-02 09:21:33 -07:00
clar_libgit2.c Some further sandboxing cleanups to tests 2014-05-02 09:21:33 -07:00
clar_libgit2.h Improve handling of fake home directory 2014-05-02 09:21:33 -07:00
clar.c Clar: skip tests 2014-04-02 18:50:47 +02:00
clar.h Clar: skip tests 2014-04-02 18:50:47 +02:00
generate.py Rename tests-clar to tests 2013-11-14 14:05:52 -08:00
main.c Sandbox configuration during test runs 2014-03-28 10:39:15 -07:00
README.md Rename tests-clar to tests 2013-11-14 14:05:52 -08:00
valgrind-supp-mac.txt Test cancel from indexer progress callback 2013-12-11 15:02:20 -08:00

Writing Clar tests for libgit2

For information on the Clar testing framework and a detailed introduction please visit:

https://github.com/vmg/clar

  • Write your modules and tests. Use good, meaningful names.

  • Make sure you actually build the tests by setting:

      cmake -DBUILD_CLAR=ON build/
    
  • Test:

      ./build/libgit2_clar
    
  • Make sure everything is fine.

  • Send your pull request. That's it.