|  | #!/bin/sh | 
|  | # | 
|  | # Copyright (c) 2020 Jiang Xin | 
|  | # | 
|  |  | 
|  | test_description='Test proc-receive hook' | 
|  |  | 
|  | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main | 
|  | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME | 
|  |  | 
|  | . ./test-lib.sh | 
|  |  | 
|  | . "$TEST_DIRECTORY"/t5411/common-functions.sh | 
|  |  | 
|  | setup_upstream_and_workbench () { | 
|  | # Refs of upstream : main(A) | 
|  | # Refs of workbench: main(A)  tags/v123 | 
|  | test_expect_success "setup upstream and workbench" ' | 
|  | rm -rf upstream.git && | 
|  | rm -rf workbench && | 
|  | git init --bare upstream.git && | 
|  | git init workbench && | 
|  | create_commits_in workbench A B && | 
|  | ( | 
|  | cd workbench && | 
|  | # 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 tag -m "v123" v123 $A && | 
|  | git remote add origin ../upstream.git && | 
|  | git push origin main && | 
|  | git update-ref refs/heads/main $A $B && | 
|  | git -C ../upstream.git update-ref \ | 
|  | refs/heads/main $A $B | 
|  | ) && | 
|  | TAG=$(git -C workbench rev-parse v123) && | 
|  |  | 
|  | # setup pre-receive hook | 
|  | write_script upstream.git/hooks/pre-receive <<-\EOF && | 
|  | exec >&2 | 
|  | echo "# pre-receive hook" | 
|  | while read old new ref | 
|  | do | 
|  | echo "pre-receive< $old $new $ref" | 
|  | done | 
|  | EOF | 
|  |  | 
|  | # setup post-receive hook | 
|  | write_script upstream.git/hooks/post-receive <<-\EOF && | 
|  | exec >&2 | 
|  | echo "# post-receive hook" | 
|  | while read old new ref | 
|  | do | 
|  | echo "post-receive< $old $new $ref" | 
|  | done | 
|  | EOF | 
|  |  | 
|  | upstream=upstream.git | 
|  | ' | 
|  | } | 
|  |  | 
|  | run_proc_receive_hook_test() { | 
|  | case $1 in | 
|  | http) | 
|  | PROTOCOL="HTTP protocol" | 
|  | URL_PREFIX="http://.*" | 
|  | ;; | 
|  | local) | 
|  | PROTOCOL="builtin protocol" | 
|  | URL_PREFIX="\.\." | 
|  | ;; | 
|  | esac | 
|  |  | 
|  | # Include test cases for both file and HTTP protocol | 
|  | for t in  "$TEST_DIRECTORY"/t5411/test-*.sh | 
|  | do | 
|  | . "$t" | 
|  | done | 
|  | } | 
|  |  | 
|  | # Initialize the upstream repository and local workbench. | 
|  | setup_upstream_and_workbench | 
|  |  | 
|  | # Load test cases that only need to be executed once. | 
|  | for t in  "$TEST_DIRECTORY"/t5411/once-*.sh | 
|  | do | 
|  | . "$t" | 
|  | done | 
|  |  | 
|  | # Initialize the upstream repository and local workbench. | 
|  | setup_upstream_and_workbench | 
|  |  | 
|  | # Run test cases for 'proc-receive' hook on local file protocol. | 
|  | run_proc_receive_hook_test local | 
|  |  | 
|  | ROOT_PATH="$PWD" | 
|  | . "$TEST_DIRECTORY"/lib-gpg.sh | 
|  | . "$TEST_DIRECTORY"/lib-httpd.sh | 
|  | . "$TEST_DIRECTORY"/lib-terminal.sh | 
|  | start_httpd | 
|  |  | 
|  | # Re-initialize the upstream repository and local workbench. | 
|  | setup_upstream_and_workbench | 
|  |  | 
|  | # Refs of upstream : main(A) | 
|  | # Refs of workbench: main(A)  tags/v123 | 
|  | test_expect_success "setup for HTTP protocol" ' | 
|  | 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/auth-push/smart/upstream.git" && | 
|  | set_askpass user@host pass@host | 
|  | ' | 
|  |  | 
|  | setup_askpass_helper | 
|  |  | 
|  | # Run test cases for 'proc-receive' hook on HTTP protocol. | 
|  | run_proc_receive_hook_test http | 
|  |  | 
|  | test_done |