index-pack: work around thread-unsafe pread()
[gitweb.git] / t / t5538-push-shallow.sh
index ff5eb5bcf5e3591d2ca0d0cb6ce2a3e158403286..0a6e40f144a767cba03818cffca8b8b2aa6a16e2 100755 (executable)
@@ -16,6 +16,7 @@ test_expect_success 'setup' '
        commit 2 &&
        commit 3 &&
        commit 4 &&
+       git clone . full &&
        (
        git init full-abc &&
        cd full-abc &&
@@ -82,4 +83,101 @@ EOF
        test_cmp expect actual
 '
 
+test_expect_success 'push from shallow to shallow' '
+       (
+       cd shallow &&
+       git --git-dir=../shallow2/.git config receive.shallowupdate true &&
+       git push ../shallow2/.git +master:refs/remotes/shallow/master &&
+       git --git-dir=../shallow2/.git config receive.shallowupdate false
+       ) &&
+       (
+       cd shallow2 &&
+       git log --format=%s shallow/master >actual &&
+       git fsck &&
+       cat <<EOF >expect &&
+5
+4
+3
+EOF
+       test_cmp expect actual
+       )
+'
+
+test_expect_success 'push from full to shallow' '
+       ! git --git-dir=shallow2/.git cat-file blob `echo 1|git hash-object --stdin` &&
+       commit 1 &&
+       git push shallow2/.git +master:refs/remotes/top/master &&
+       (
+       cd shallow2 &&
+       git log --format=%s top/master >actual &&
+       git fsck &&
+       cat <<EOF >expect &&
+1
+4
+3
+EOF
+       test_cmp expect actual &&
+       git cat-file blob `echo 1|git hash-object --stdin` >/dev/null
+       )
+'
+
+if test -n "$NO_CURL" -o -z "$GIT_TEST_HTTPD"; then
+       say 'skipping remaining tests, git built without http support'
+       test_done
+fi
+
+LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5537'}
+. "$TEST_DIRECTORY"/lib-httpd.sh
+start_httpd
+
+test_expect_success 'push to shallow repo via http' '
+       git clone --bare --no-local shallow "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+       (
+       cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+       git config http.receivepack true
+       ) &&
+       (
+       cd full &&
+       commit 9 &&
+       git push $HTTPD_URL/smart/repo.git +master:refs/remotes/top/master
+       ) &&
+       (
+       cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+       git fsck &&
+       git log --format=%s top/master >actual &&
+       cat <<EOF >expect &&
+9
+4
+3
+EOF
+       test_cmp expect actual
+       )
+'
+
+test_expect_success 'push from shallow repo via http' '
+       mv "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" shallow-upstream.git &&
+       git clone --bare --no-local full "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+       (
+       cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+       git config http.receivepack true
+       ) &&
+       commit 10 &&
+       git push $HTTPD_URL/smart/repo.git +master:refs/remotes/top/master &&
+       (
+       cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+       git fsck &&
+       git log --format=%s top/master >actual &&
+       cat <<EOF >expect &&
+10
+1
+4
+3
+2
+1
+EOF
+       test_cmp expect actual
+       )
+'
+
+stop_httpd
 test_done