Skip to content

Commit

Permalink
do not override receive-pack errors
Browse files Browse the repository at this point in the history
Receive runs rev-list --verify-objects in order to detect missing
objects. However, such errors are ignored and overridden later.
Instead, consequently ignore all update commands for which an error has
already been detected.

Some tests in t5504 are obsoleted by this change, because invalid
objects are detected even if fsck is not enabled. Instead, they now test
for different error messages depending on whether or not fsck is turned
on. A better fix would be to force a corruption that will be detected by
fsck but not by rev-list.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Clemens Buchacher authored and Junio C Hamano committed Feb 13, 2012
1 parent d0482e8 commit ef7e93d
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 11 deletions.
24 changes: 17 additions & 7 deletions builtin/receive-pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -623,8 +623,10 @@ static void check_aliased_updates(struct command *commands)
}
sort_string_list(&ref_list);

for (cmd = commands; cmd; cmd = cmd->next)
check_aliased_update(cmd, &ref_list);
for (cmd = commands; cmd; cmd = cmd->next) {
if (!cmd->error_string)
check_aliased_update(cmd, &ref_list);
}

string_list_clear(&ref_list, 0);
}
Expand Down Expand Up @@ -688,18 +690,26 @@ static void execute_commands(struct command *commands, const char *unpacker_erro
set_connectivity_errors(commands);

if (run_receive_hook(commands, pre_receive_hook, 0)) {
for (cmd = commands; cmd; cmd = cmd->next)
cmd->error_string = "pre-receive hook declined";
for (cmd = commands; cmd; cmd = cmd->next) {
if (!cmd->error_string)
cmd->error_string = "pre-receive hook declined";
}
return;
}

check_aliased_updates(commands);

head_name = resolve_ref("HEAD", sha1, 0, NULL);

for (cmd = commands; cmd; cmd = cmd->next)
if (!cmd->skip_update)
cmd->error_string = update(cmd);
for (cmd = commands; cmd; cmd = cmd->next) {
if (cmd->error_string)
continue;

if (cmd->skip_update)
continue;

cmd->error_string = update(cmd);
}
}

static struct command *read_head_info(void)
Expand Down
22 changes: 18 additions & 4 deletions t/t5504-fetch-receive-strict.sh
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@ test_expect_success 'fetch with transfer.fsckobjects' '
)
'

cat >exp <<EOF
To dst
! refs/heads/master:refs/heads/test [remote rejected] (missing necessary objects)
EOF

test_expect_success 'push without strict' '
rm -rf dst &&
git init dst &&
Expand All @@ -66,7 +71,8 @@ test_expect_success 'push without strict' '
git config fetch.fsckobjects false &&
git config transfer.fsckobjects false
) &&
git push dst master:refs/heads/test
test_must_fail git push --porcelain dst master:refs/heads/test >act &&
test_cmp exp act
'

test_expect_success 'push with !receive.fsckobjects' '
Expand All @@ -77,9 +83,15 @@ test_expect_success 'push with !receive.fsckobjects' '
git config receive.fsckobjects false &&
git config transfer.fsckobjects true
) &&
git push dst master:refs/heads/test
test_must_fail git push --porcelain dst master:refs/heads/test >act &&
test_cmp exp act
'

cat >exp <<EOF
To dst
! refs/heads/master:refs/heads/test [remote rejected] (n/a (unpacker error))
EOF

test_expect_success 'push with receive.fsckobjects' '
rm -rf dst &&
git init dst &&
Expand All @@ -88,7 +100,8 @@ test_expect_success 'push with receive.fsckobjects' '
git config receive.fsckobjects true &&
git config transfer.fsckobjects false
) &&
test_must_fail git push dst master:refs/heads/test
test_must_fail git push --porcelain dst master:refs/heads/test >act &&
test_cmp exp act
'

test_expect_success 'push with transfer.fsckobjects' '
Expand All @@ -98,7 +111,8 @@ test_expect_success 'push with transfer.fsckobjects' '
cd dst &&
git config transfer.fsckobjects true
) &&
test_must_fail git push dst master:refs/heads/test
test_must_fail git push --porcelain dst master:refs/heads/test >act &&
test_cmp exp act
'

test_done

0 comments on commit ef7e93d

Please sign in to comment.