Skip to content

Commit eb6392f

Browse files
committed
Merge branch 'th/push-local-ff-check-without-lazy-fetch'
When "git push" notices that the commit at the tip of the ref on the other side it is about to overwrite does not exist locally, it used to first try fetching it if the local repository is a partial clone. The command has been taught not to do so and immediately fail instead. * th/push-local-ff-check-without-lazy-fetch: push: don't fetch commit object when checking existence
2 parents 5c7c063 + 6549c41 commit eb6392f

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

remote.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1778,7 +1778,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
17781778
if (!reject_reason && !ref->deletion && !is_null_oid(&ref->old_oid)) {
17791779
if (starts_with(ref->name, "refs/tags/"))
17801780
reject_reason = REF_STATUS_REJECT_ALREADY_EXISTS;
1781-
else if (!repo_has_object_file(the_repository, &ref->old_oid))
1781+
else if (!repo_has_object_file_with_flags(the_repository, &ref->old_oid, OBJECT_INFO_SKIP_FETCH_OBJECT))
17821782
reject_reason = REF_STATUS_REJECT_FETCH_FIRST;
17831783
else if (!lookup_commit_reference_gently(the_repository, &ref->old_oid, 1) ||
17841784
!lookup_commit_reference_gently(the_repository, &ref->new_oid, 1))

t/t0410-partial-clone.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,25 @@ test_expect_success 'lazy-fetch when accessing object not in the_repository' '
689689
! grep "[?]$FILE_HASH" out
690690
'
691691

692+
test_expect_success 'push should not fetch new commit objects' '
693+
rm -rf server client &&
694+
test_create_repo server &&
695+
test_config -C server uploadpack.allowfilter 1 &&
696+
test_config -C server uploadpack.allowanysha1inwant 1 &&
697+
test_commit -C server server1 &&
698+
699+
git clone --filter=blob:none "file://$(pwd)/server" client &&
700+
test_commit -C client client1 &&
701+
702+
test_commit -C server server2 &&
703+
COMMIT=$(git -C server rev-parse server2) &&
704+
705+
test_must_fail git -C client push 2>err &&
706+
grep "fetch first" err &&
707+
git -C client rev-list --objects --missing=print "$COMMIT" >objects &&
708+
grep "^[?]$COMMIT" objects
709+
'
710+
692711
. "$TEST_DIRECTORY"/lib-httpd.sh
693712
start_httpd
694713

0 commit comments

Comments
 (0)