diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-12-28 11:42:37 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-12-28 11:42:37 -0800 |
commit | b5c12797b442ddf4256332fe4baf709f90bb57a5 (patch) | |
tree | e2cafd7b1b17b341df5cb5d9b934cc93ebef7ffa | |
parent | 81eaa0655f140202c7ce4ce12d5225dfadf26e28 (diff) | |
parent | 02f7914734eb8360cf314d887931c5d5ad0d8046 (diff) | |
download | git-b5c12797b442ddf4256332fe4baf709f90bb57a5.tar.gz |
Merge branch 'jk/http-push-to-empty' into maint
* jk/http-push-to-empty:
remote-curl: don't pass back fake refs
Conflicts:
remote-curl.c
-rw-r--r-- | remote-curl.c | 7 | ||||
-rwxr-xr-x | t/t5541-http-push.sh | 32 |
2 files changed, 36 insertions, 3 deletions
diff --git a/remote-curl.c b/remote-curl.c index 6a352de7be..48c20b86f3 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -188,7 +188,7 @@ static int write_discovery(int in, int out, void *data) return err; } -static struct ref *parse_git_refs(struct discovery *heads) +static struct ref *parse_git_refs(struct discovery *heads, int for_push) { struct ref *list = NULL; struct async async; @@ -200,7 +200,8 @@ static struct ref *parse_git_refs(struct discovery *heads) if (start_async(&async)) die("cannot start thread to parse advertised refs"); - get_remote_heads(async.out, &list, 0, NULL); + get_remote_heads(async.out, &list, + for_push ? REF_NORMAL : 0, NULL); close(async.out); if (finish_async(&async)) die("ref parsing thread failed"); @@ -268,7 +269,7 @@ static struct ref *get_refs(int for_push) heads = discover_refs("git-upload-pack"); if (heads->proto_git) - return parse_git_refs(heads); + return parse_git_refs(heads, for_push); return parse_info_refs(heads); } diff --git a/t/t5541-http-push.sh b/t/t5541-http-push.sh index a73c82635f..9b85d420c3 100755 --- a/t/t5541-http-push.sh +++ b/t/t5541-http-push.sh @@ -154,5 +154,37 @@ test_expect_success 'push (chunked)' ' test $HEAD = $(git rev-parse --verify HEAD)) ' +test_expect_success 'push --all can push to empty repo' ' + d=$HTTPD_DOCUMENT_ROOT_PATH/empty-all.git && + git init --bare "$d" && + git --git-dir="$d" config http.receivepack true && + git push --all "$HTTPD_URL"/smart/empty-all.git +' + +test_expect_success 'push --mirror can push to empty repo' ' + d=$HTTPD_DOCUMENT_ROOT_PATH/empty-mirror.git && + git init --bare "$d" && + git --git-dir="$d" config http.receivepack true && + git push --mirror "$HTTPD_URL"/smart/empty-mirror.git +' + +test_expect_success 'push --all to repo with alternates' ' + s=$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git && + d=$HTTPD_DOCUMENT_ROOT_PATH/alternates-all.git && + git clone --bare --shared "$s" "$d" && + git --git-dir="$d" config http.receivepack true && + git --git-dir="$d" repack -adl && + git push --all "$HTTPD_URL"/smart/alternates-all.git +' + +test_expect_success 'push --mirror to repo with alternates' ' + s=$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git && + d=$HTTPD_DOCUMENT_ROOT_PATH/alternates-mirror.git && + git clone --bare --shared "$s" "$d" && + git --git-dir="$d" config http.receivepack true && + git --git-dir="$d" repack -adl && + git push --mirror "$HTTPD_URL"/smart/alternates-mirror.git +' + stop_httpd test_done |