Skip to content

ci: work around osx-* hangs #2527

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 26, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ci/install-dependencies.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ osx-clang|osx-gcc)
test -z "$BREW_INSTALL_PACKAGES" ||
brew install $BREW_INSTALL_PACKAGES
brew link --force gettext
brew cask install perforce || {
brew cask install --no-quarantine perforce || {
# Update the definitions and try again
cask_repo="$(brew --repository)"/Library/Taps/homebrew/homebrew-cask &&
git -C "$cask_repo" pull --no-stat &&
brew cask install perforce
brew cask install --no-quarantine perforce
} ||
brew install caskroom/cask/perforce
case "$jobname" in
Expand Down
2 changes: 1 addition & 1 deletion t/lib-httpd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ prepare_httpd() {
install_script broken-smart-http.sh
install_script error-smart-http.sh
install_script error.sh
install_script apply-one-time-sed.sh
install_script apply-one-time-perl.sh

ln -s "$LIB_HTTPD_MODULE_PATH" "$HTTPD_ROOT_PATH/modules"

Expand Down
6 changes: 3 additions & 3 deletions t/lib-httpd/apache.conf
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ Alias /auth/dumb/ www/auth/dumb/
SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH}
SetEnv GIT_HTTP_EXPORT_ALL
</LocationMatch>
<LocationMatch /one_time_sed/>
<LocationMatch /one_time_perl/>
SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH}
SetEnv GIT_HTTP_EXPORT_ALL
</LocationMatch>
Expand All @@ -122,7 +122,7 @@ ScriptAliasMatch /smart_*[^/]*/(.*) ${GIT_EXEC_PATH}/git-http-backend/$1
ScriptAlias /broken_smart/ broken-smart-http.sh/
ScriptAlias /error_smart/ error-smart-http.sh/
ScriptAlias /error/ error.sh/
ScriptAliasMatch /one_time_sed/(.*) apply-one-time-sed.sh/$1
ScriptAliasMatch /one_time_perl/(.*) apply-one-time-perl.sh/$1
<Directory ${GIT_EXEC_PATH}>
Options FollowSymlinks
</Directory>
Expand All @@ -135,7 +135,7 @@ ScriptAliasMatch /one_time_sed/(.*) apply-one-time-sed.sh/$1
<Files error.sh>
Options ExecCGI
</Files>
<Files apply-one-time-sed.sh>
<Files apply-one-time-perl.sh>
Options ExecCGI
</Files>
<Files ${GIT_EXEC_PATH}/git-http-backend>
Expand Down
33 changes: 33 additions & 0 deletions t/lib-httpd/apply-one-time-perl.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/sh

# If "one-time-perl" exists in $HTTPD_ROOT_PATH, run perl on the HTTP response,
# using the contents of "one-time-perl" as the perl command to be run. If the
# response was modified as a result, delete "one-time-perl" so that subsequent
# HTTP responses are no longer modified.
#
# This can be used to simulate the effects of the repository changing in
# between HTTP request-response pairs.
if test -f one-time-perl
then
LC_ALL=C
export LC_ALL

"$GIT_EXEC_PATH/git-http-backend" >out
perl -pe "$(cat one-time-perl)" out >out_modified

echo "before applying one-time $(cat one-time-perl)" >&2
hexdump -C out >&2
echo "after applying one-time $(cat one-time-perl)" >&2
hexdump -C out_modified >&2

if cmp -s out out_modified
then
cat out
else
cat out_modified
# rm one-time-perl
mv one-time-perl one-time-perl.$(($(ls one-time-perl.* 2>/dev/null | wc -l | tr -dc 0-9)+1))
fi
else
"$GIT_EXEC_PATH/git-http-backend"
fi
24 changes: 0 additions & 24 deletions t/lib-httpd/apply-one-time-sed.sh

This file was deleted.

10 changes: 5 additions & 5 deletions t/t5537-fetch-shallow.sh
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ test_expect_success 'shallow fetches check connectivity before writing shallow f
git -C "$REPO" config protocol.version 2 &&
git -C client config protocol.version 2 &&

git -C client fetch --depth=2 "$HTTPD_URL/one_time_sed/repo" master:a_branch &&
git -C client fetch --depth=2 "$HTTPD_URL/one_time_perl/repo" master:a_branch &&

# Craft a situation in which the server sends back an unshallow request
# with an empty packfile. This is done by refetching with a shorter
Expand All @@ -242,13 +242,13 @@ test_expect_success 'shallow fetches check connectivity before writing shallow f
printf "s/0034shallow %s/0036unshallow %s/" \
"$(git -C "$REPO" rev-parse HEAD)" \
"$(git -C "$REPO" rev-parse HEAD^)" \
>"$HTTPD_ROOT_PATH/one-time-sed" &&
>"$HTTPD_ROOT_PATH/one-time-perl" &&
test_must_fail env GIT_TEST_SIDEBAND_ALL=0 git -C client \
fetch --depth=1 "$HTTPD_URL/one_time_sed/repo" \
fetch --depth=1 "$HTTPD_URL/one_time_perl/repo" \
master:a_branch &&

# Ensure that the one-time-sed script was used.
! test -e "$HTTPD_ROOT_PATH/one-time-sed" &&
# Ensure that the one-time-perl script was used.
! test -e "$HTTPD_ROOT_PATH/one-time-perl" &&

# Ensure that the resulting repo is consistent, despite our failure to
# fetch.
Expand Down
38 changes: 21 additions & 17 deletions t/t5616-partial-clone.sh
Original file line number Diff line number Diff line change
Expand Up @@ -398,14 +398,18 @@ intersperse () {
sed 's/\(..\)/'$1'\1/g'
}

# Create a one-time-sed command to replace the existing packfile with $1.
# Create a one-time-perl command to replace the existing packfile with $1.
replace_packfile () {
# The protocol requires that the packfile be sent in sideband 1, hence
# the extra \x01 byte at the beginning.
printf "1,/packfile/!c %04x\\\\x01%s0000" \
"$(($(wc -c <$1) + 5))" \
"$(hex_unpack <$1 | intersperse '\\x')" \
>"$HTTPD_ROOT_PATH/one-time-sed"
cp $1 "$HTTPD_ROOT_PATH/one-time-pack" &&
echo 'if (/packfile/) {
print;
my $length = -s "one-time-pack";
printf "%04x\x01", $length + 5;
print `cat one-time-pack` . "0000";
last
}' >"$HTTPD_ROOT_PATH/one-time-perl"
}

test_expect_success 'upon cloning, check that all refs point to objects' '
Expand All @@ -429,16 +433,16 @@ test_expect_success 'upon cloning, check that all refs point to objects' '
# \x01 byte at the beginning.
replace_packfile incomplete.pack &&

# Use protocol v2 because the sed command looks for the "packfile"
# Use protocol v2 because the perl command looks for the "packfile"
# section header.
test_config -C "$SERVER" protocol.version 2 &&
test_must_fail git -c protocol.version=2 clone \
--filter=blob:none $HTTPD_URL/one_time_sed/server repo 2>err &&
--filter=blob:none $HTTPD_URL/one_time_perl/server repo 2>err &&

test_i18ngrep "did not send all necessary objects" err &&

# Ensure that the one-time-sed script was used.
! test -e "$HTTPD_ROOT_PATH/one-time-sed"
# Ensure that the one-time-perl script was used.
! test -e "$HTTPD_ROOT_PATH/one-time-perl"
'

test_expect_success 'when partial cloning, tolerate server not sending target of tag' '
Expand Down Expand Up @@ -469,17 +473,17 @@ test_expect_success 'when partial cloning, tolerate server not sending target of
# \x01 byte at the beginning.
replace_packfile incomplete.pack &&

# Use protocol v2 because the sed command looks for the "packfile"
# Use protocol v2 because the perl command looks for the "packfile"
# section header.
test_config -C "$SERVER" protocol.version 2 &&

# Exercise to make sure it works.
git -c protocol.version=2 clone \
--filter=blob:none $HTTPD_URL/one_time_sed/server repo 2> err &&
--filter=blob:none $HTTPD_URL/one_time_perl/server repo 2> err &&
! grep "missing object referenced by" err &&

# Ensure that the one-time-sed script was used.
! test -e "$HTTPD_ROOT_PATH/one-time-sed"
# Ensure that the one-time-perl script was used.
! test -e "$HTTPD_ROOT_PATH/one-time-perl"
'

test_expect_success 'tolerate server sending REF_DELTA against missing promisor objects' '
Expand All @@ -502,7 +506,7 @@ test_expect_success 'tolerate server sending REF_DELTA against missing promisor

# Clone. The client has deltabase_have but not deltabase_missing.
git -c protocol.version=2 clone --no-checkout \
--filter=blob:none $HTTPD_URL/one_time_sed/server repo &&
--filter=blob:none $HTTPD_URL/one_time_perl/server repo &&
git -C repo hash-object -w -- "$SERVER/have.txt" &&

# Sanity check to ensure that the client does not have
Expand Down Expand Up @@ -543,7 +547,7 @@ test_expect_success 'tolerate server sending REF_DELTA against missing promisor

replace_packfile thin.pack &&

# Use protocol v2 because the sed command looks for the "packfile"
# Use protocol v2 because the perl command looks for the "packfile"
# section header.
test_config -C "$SERVER" protocol.version 2 &&

Expand All @@ -556,8 +560,8 @@ test_expect_success 'tolerate server sending REF_DELTA against missing promisor
grep "want $(cat deltabase_missing)" trace &&
! grep "want $(cat deltabase_have)" trace &&

# Ensure that the one-time-sed script was used.
! test -e "$HTTPD_ROOT_PATH/one-time-sed"
# Ensure that the one-time-perl script was used.
! test -e "$HTTPD_ROOT_PATH/one-time-perl"
'

# DO NOT add non-httpd-specific tests here, because the last part of this
Expand Down
12 changes: 6 additions & 6 deletions t/t5702-protocol-v2.sh
Original file line number Diff line number Diff line change
Expand Up @@ -712,11 +712,11 @@ test_expect_success 'when server sends "ready", expect DELIM' '

# After "ready" in the acknowledgments section, pretend that a FLUSH
# (0000) was sent instead of a DELIM (0001).
printf "/ready/,$ s/0001/0000/" \
>"$HTTPD_ROOT_PATH/one-time-sed" &&
printf "\$ready = 1 if /ready/; \$ready && s/0001/0000/" \
>"$HTTPD_ROOT_PATH/one-time-perl" &&

test_must_fail git -C http_child -c protocol.version=2 \
fetch "$HTTPD_URL/one_time_sed/http_parent" 2> err &&
fetch "$HTTPD_URL/one_time_perl/http_parent" 2> err &&
test_i18ngrep "expected packfile to be sent after .ready." err
'

Expand All @@ -737,12 +737,12 @@ test_expect_success 'when server does not send "ready", expect FLUSH' '

# After the acknowledgments section, pretend that a DELIM
# (0001) was sent instead of a FLUSH (0000).
printf "/acknowledgments/,$ s/0000/0001/" \
>"$HTTPD_ROOT_PATH/one-time-sed" &&
printf "\$ack = 1 if /acknowledgments/; \$ack && s/0000/0001/" \
>"$HTTPD_ROOT_PATH/one-time-perl" &&

test_must_fail env GIT_TRACE_PACKET="$(pwd)/log" git -C http_child \
-c protocol.version=2 \
fetch "$HTTPD_URL/one_time_sed/http_parent" 2> err &&
fetch "$HTTPD_URL/one_time_perl/http_parent" 2> err &&
grep "fetch< .*acknowledgments" log &&
! grep "fetch< .*ready" log &&
test_i18ngrep "expected no other sections to be sent after no .ready." err
Expand Down
6 changes: 3 additions & 3 deletions t/t5703-upload-pack-ref-in-want.sh
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ test_expect_success 'setup repos for change-while-negotiating test' '
test_commit m3 &&
git tag -d m2 m3
) &&
git -C "$LOCAL_PRISTINE" remote set-url origin "http://127.0.0.1:$LIB_HTTPD_PORT/one_time_sed/repo" &&
git -C "$LOCAL_PRISTINE" remote set-url origin "http://127.0.0.1:$LIB_HTTPD_PORT/one_time_perl/repo" &&
git -C "$LOCAL_PRISTINE" config protocol.version 2
'

Expand All @@ -326,7 +326,7 @@ inconsistency () {
# RPCs during a single negotiation.
oid1=$(git -C "$REPO" rev-parse $1) &&
oid2=$(git -C "$REPO" rev-parse $2) &&
echo "s/$oid1/$oid2/" >"$HTTPD_ROOT_PATH/one-time-sed"
echo "s/$oid1/$oid2/" >"$HTTPD_ROOT_PATH/one-time-perl"
}

test_expect_success 'server is initially ahead - no ref in want' '
Expand Down Expand Up @@ -378,7 +378,7 @@ test_expect_success 'server loses a ref - ref in want' '
git -C "$REPO" config uploadpack.allowRefInWant true &&
rm -rf local &&
cp -r "$LOCAL_PRISTINE" local &&
echo "s/master/raster/" >"$HTTPD_ROOT_PATH/one-time-sed" &&
echo "s/master/raster/" >"$HTTPD_ROOT_PATH/one-time-perl" &&
test_must_fail git -C local fetch 2>err &&

test_i18ngrep "fatal: remote error: unknown ref refs/heads/raster" err
Expand Down