t5548: refactor to reuse setup_upstream() function

Refactor the function setup_upstream_and_workbench(), extracting
create_upstream_template() and setup_upstream() from it. The former is
used to create the upstream repository template, while the latter is
used to rebuild the upstream repository and will be reused in subsequent
commits.

To ensure that setup_upstream() works properly in both local and HTTP
protocols, the HTTP settings have been moved to the setup_upstream() and
setup_upstream_and_workbench() functions.

Signed-off-by: Jiang Xin <zhiyou.jx@alibaba-inc.com>
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jiang Xin
2025-02-03 07:29:32 +01:00
committed by Junio C Hamano
parent b1be3953e5
commit 12ad6b8fea

View File

@ -54,29 +54,65 @@ format_and_save_expect () {
sed -e 's/^> //' -e 's/Z$//' >expect sed -e 's/^> //' -e 's/Z$//' >expect
} }
setup_upstream_and_workbench () { create_upstream_template () {
# Upstream after setup : main(B) foo(A) bar(A) baz(A) git init --bare upstream-template.git &&
# Workbench after setup : main(A) git clone upstream-template.git tmp_work_dir &&
test_expect_success "setup upstream repository and workbench" ' create_commits_in tmp_work_dir A B &&
rm -rf upstream.git workbench &&
git init --bare upstream.git &&
git init workbench &&
create_commits_in workbench A B &&
( (
cd workbench && cd tmp_work_dir &&
# Try to make a stable fixed width for abbreviated commit ID,
# this fixed-width oid will be replaced with "<OID>".
git config core.abbrev 7 &&
git remote add origin ../upstream.git &&
git update-ref refs/heads/main $A &&
git push origin \ git push origin \
$B:refs/heads/main \ $B:refs/heads/main \
$A:refs/heads/foo \ $A:refs/heads/foo \
$A:refs/heads/bar \ $A:refs/heads/bar \
$A:refs/heads/baz $A:refs/heads/baz
) && ) &&
git -C "workbench" config advice.pushUpdateRejected false && rm -rf tmp_work_dir
upstream=upstream.git }
setup_upstream () {
if test $# -ne 1
then
BUG "location of upstream repository is not provided"
fi &&
rm -rf "$1" &&
if ! test -d upstream-template.git
then
create_upstream_template
fi &&
git clone --mirror upstream-template.git "$1" &&
# The upstream repository provides services using the HTTP protocol.
if ! test "$1" = "upstream.git"
then
git -C "$1" config http.receivepack true
fi
}
setup_upstream_and_workbench () {
if test $# -ne 1
then
BUG "location of upstream repository is not provided"
fi
upstream="$1"
# Upstream after setup : main(B) foo(A) bar(A) baz(A)
# Workbench after setup : main(A)
test_expect_success "setup upstream repository and workbench" '
setup_upstream "$upstream" &&
rm -rf workbench &&
git clone "$upstream" workbench &&
(
cd workbench &&
git update-ref refs/heads/main $A &&
# Try to make a stable fixed width for abbreviated commit ID,
# this fixed-width oid will be replaced with "<OID>".
git config core.abbrev 7 &&
git config advice.pushUpdateRejected false
) &&
# The upstream repository provides services using the HTTP protocol.
if ! test "$upstream" = "upstream.git"
then
git -C workbench remote set-url origin "$HTTPD_URL/smart/upstream.git"
fi
' '
} }
@ -88,7 +124,7 @@ run_git_push_porcelain_output_test() {
;; ;;
file) file)
PROTOCOL="builtin protocol" PROTOCOL="builtin protocol"
URL_PREFIX="\.\." URL_PREFIX=".*"
;; ;;
esac esac
@ -247,10 +283,8 @@ run_git_push_porcelain_output_test() {
' '
} }
# Initialize the upstream repository and local workbench. setup_upstream_and_workbench upstream.git
setup_upstream_and_workbench
# Run git-push porcelain test on builtin protocol
run_git_push_porcelain_output_test file run_git_push_porcelain_output_test file
ROOT_PATH="$PWD" ROOT_PATH="$PWD"
@ -258,21 +292,10 @@ ROOT_PATH="$PWD"
. "$TEST_DIRECTORY"/lib-httpd.sh . "$TEST_DIRECTORY"/lib-httpd.sh
. "$TEST_DIRECTORY"/lib-terminal.sh . "$TEST_DIRECTORY"/lib-terminal.sh
start_httpd start_httpd
# Re-initialize the upstream repository and local workbench.
setup_upstream_and_workbench
test_expect_success "setup for http" '
git -C upstream.git config http.receivepack true &&
upstream="$HTTPD_DOCUMENT_ROOT_PATH/upstream.git" &&
mv upstream.git "$upstream" &&
git -C workbench remote set-url origin $HTTPD_URL/smart/upstream.git
'
setup_askpass_helper setup_askpass_helper
# Run git-push porcelain test on HTTP protocol setup_upstream_and_workbench "$HTTPD_DOCUMENT_ROOT_PATH/upstream.git"
run_git_push_porcelain_output_test http run_git_push_porcelain_output_test http
test_done test_done