push: teach --force-with-lease to smart-http transport
[gitweb.git] / t / lib-httpd.sh
index 02f442bfadbb1239785a456cddc50223da4f3834..dab405d57479fe95dcb71b16a7a059410d2ae005 100644 (file)
@@ -80,6 +80,7 @@ fi
 prepare_httpd() {
        mkdir -p "$HTTPD_DOCUMENT_ROOT_PATH"
        cp "$TEST_PATH"/passwd "$HTTPD_ROOT_PATH"
+       cp "$TEST_PATH"/broken-smart-http.sh "$HTTPD_ROOT_PATH"
 
        ln -s "$LIB_HTTPD_MODULE_PATH" "$HTTPD_ROOT_PATH/modules"
 
@@ -140,10 +141,11 @@ stop_httpd() {
                -f "$TEST_PATH/apache.conf" $HTTPD_PARA -k stop
 }
 
-test_http_push_nonff() {
+test_http_push_nonff () {
        REMOTE_REPO=$1
        LOCAL_REPO=$2
        BRANCH=$3
+       EXPECT_CAS_RESULT=${4-failure}
 
        test_expect_success 'non-fast-forward push fails' '
                cd "$REMOTE_REPO" &&
@@ -166,6 +168,22 @@ test_http_push_nonff() {
        test_expect_success 'non-fast-forward push shows help message' '
                test_i18ngrep "Updates were rejected because" output
        '
+
+       test_expect_failure 'force with lease aka cas' '
+               HEAD=$( cd "$REMOTE_REPO" && git rev-parse --verify HEAD ) &&
+               test_when_finished '\''
+                       (cd "$REMOTE_REPO" && git update-ref HEAD "$HEAD")
+               '\'' &&
+               (
+                       cd "$LOCAL_REPO" &&
+                       git push -v --force-with-lease=$BRANCH:$HEAD origin
+               ) &&
+               git rev-parse --verify "$BRANCH" >expect &&
+               (
+                       cd "$REMOTE_REPO" && git rev-parse --verify HEAD
+               ) >actual &&
+               test_cmp expect actual
+       '
 }
 
 setup_askpass_helper() {