aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-02-25 08:27:09 -0800
committerJunio C Hamano <gitster@pobox.com>2013-02-25 08:27:09 -0800
commitef94636a4def20453a6552c278a27820f2ccf79b (patch)
tree7a6479cb19722d0b6a19a63f5689e0f314dd6e15
parenta2b109f27575a8b05a627b7e6842bd81a62ba991 (diff)
parentc19387e79947de9307af06ce92a83eaf786153b7 (diff)
downloadgit-ef94636a4def20453a6552c278a27820f2ccf79b.tar.gz
git-ef94636a4def20453a6552c278a27820f2ccf79b.tar.xz
Merge branch 'as/check-ignore'
"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
-rw-r--r--builtin/check-ignore.c2
-rw-r--r--name-hash.c4
-rwxr-xr-xt/t0008-ignores.sh15
3 files changed, 18 insertions, 3 deletions
diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c
index 709535ce0..0240f99b5 100644
--- a/builtin/check-ignore.c
+++ b/builtin/check-ignore.c
@@ -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) {
diff --git a/name-hash.c b/name-hash.c
index d8d25c23e..942c45962 100644
--- a/name-hash.c
+++ b/name-hash.c
@@ -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;
}
diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh
index d7df7198c..9c1bde1fd 100755
--- a/t/t0008-ignores.sh
+++ b/t/t0008-ignores.sh
@@ -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"