Skip to content

Commit

Permalink
Merge branch 'as/check-ignore'
Browse files Browse the repository at this point in the history
"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
  • Loading branch information
Junio C Hamano committed Feb 25, 2013
2 parents a2b109f + c19387e commit ef94636
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 3 deletions.
2 changes: 1 addition & 1 deletion builtin/check-ignore.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
4 changes: 2 additions & 2 deletions name-hash.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
15 changes: 15 additions & 0 deletions t/t0008-ignores.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -128,6 +138,7 @@ test_expect_success 'setup' '
cat <<-\EOF >.gitignore &&
one
ignored-*
top-level-dir/
EOF
for dir in . a
do
Expand Down Expand Up @@ -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"
Expand Down

0 comments on commit ef94636

Please sign in to comment.