Merge branch 'as/check-ignore'
authorJunio C Hamano <gitster@pobox.com>
Mon, 25 Feb 2013 16:27:09 +0000 (08:27 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 25 Feb 2013 16:27:09 +0000 (08:27 -0800)
"git check-ignore ." segfaulted, as a function it calls deep in its
callchain took a string in the <ptr, length> form but did not stop
when given an empty string.

* as/check-ignore:
name-hash: allow hashing an empty string
t0008: document test_expect_success_multi

builtin/check-ignore.c
name-hash.c
t/t0008-ignores.sh
index 709535ce09fd3876e48e6e7b81bc2f6654e04c1e..0240f99b57a2f81320b84951bf6dc89ab60d6282 100644 (file)
@@ -89,7 +89,7 @@ static int check_ignore(const char *prefix, const char **pathspec)
                                        ? strlen(prefix) : 0, path);
                full_path = check_path_for_gitlink(full_path);
                die_if_path_beyond_symlink(full_path, prefix);
-               if (!seen[i] && path[0]) {
+               if (!seen[i]) {
                        exclude = last_exclude_matching_path(&check, full_path,
                                                             -1, &dtype);
                        if (exclude) {
index d8d25c23e99dddd9bd0bf83d73f2ae136d7307b5..942c45962252eba4c6f88b4f4f7593c9247749ae 100644 (file)
@@ -24,11 +24,11 @@ static unsigned int hash_name(const char *name, int namelen)
 {
        unsigned int hash = 0x123;
 
-       do {
+       while (namelen--) {
                unsigned char c = *name++;
                c = icase_hash(c);
                hash = hash*101 + c;
-       } while (--namelen);
+       }
        return hash;
 }
 
index d7df7198c4379216616a8a0de06bc4f5ec724a42..9c1bde1fd6e6424f7af732556656a9daf9be350b 100755 (executable)
@@ -75,6 +75,16 @@ test_check_ignore () {
        stderr_empty_on_success "$expect_code"
 }
 
+# Runs the same code with 3 different levels of output verbosity,
+# expecting success each time.  Takes advantage of the fact that
+# check-ignore --verbose output is the same as normal output except
+# for the extra first column.
+#
+# Arguments:
+#   - (optional) prereqs for this test, e.g. 'SYMLINKS'
+#   - test name
+#   - output to expect from -v / --verbose mode
+#   - code to run (should invoke test_check_ignore)
 test_expect_success_multi () {
        prereq=
        if test $# -eq 4
@@ -128,6 +138,7 @@ test_expect_success 'setup' '
        cat <<-\EOF >.gitignore &&
                one
                ignored-*
+               top-level-dir/
        EOF
        for dir in . a
        do
@@ -167,6 +178,10 @@ test_expect_success 'setup' '
 #
 # test invalid inputs
 
+test_expect_success_multi '. corner-case' '' '
+       test_check_ignore . 1
+'
+
 test_expect_success_multi 'empty command line' '' '
        test_check_ignore "" 128 &&
        stderr_contains "fatal: no path specified"