git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] push: don't fetch commit object when checking existence

From
Tom Hughes <tom@compton.nu>
Date
May 22, 2024, 13:36 UTC
Message-ID
<20240522133621.1308393-1-tom@compton.nu>

If we're checking to see whether to tell the user to do a fetch before pushing there's no need for us to actually fetch the object from the remote if the clone is partial.

Because the promisor doesn't do negotiation actually trying to do the fetch of the new head can be very expensive as it will try and include history that we already have and it just results in rejecting the push with a different message, and in behavior that is different to a clone that is not partial.

Signed-off-by: Tom Hughes <tom@compton.nu>
---
 remote.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/remote.c b/remote.c
index 2b650b813b..20395bbbd0 100644
--- a/remote.c
+++ b/remote.c
@@ -1773,7 +1773,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
 		if (!reject_reason && !ref->deletion && !is_null_oid(&ref->old_oid)) {
 			if (starts_with(ref->name, "refs/tags/"))
 				reject_reason = REF_STATUS_REJECT_ALREADY_EXISTS;
-			else if (!repo_has_object_file(the_repository, &ref->old_oid))
+			else if (!repo_has_object_file_with_flags(the_repository, &ref->old_oid, OBJECT_INFO_SKIP_FETCH_OBJECT))
 				reject_reason = REF_STATUS_REJECT_FETCH_FIRST;
 			else if (!lookup_commit_reference_gently(the_repository, &ref->old_oid, 1) ||
 				 !lookup_commit_reference_gently(the_repository, &ref->new_oid, 1))
-- 
2.45.1
Next: Junio C Hamano
Message 1 of 8 in “push: don't fetch commit object when checking existence”
  1. push: don't fetch commit object when checking existenceTom Hughes, May 22, 2024
  2. Junio C HamanoMay 22, 2024
  3. push: don't fetch commit object when checking existenceTom Hughes, May 22, 2024
  4. Junio C HamanoMay 22, 2024
  5. Tom HughesMay 22, 2024
  6. Junio C HamanoMay 22, 2024
  7. Jeff KingMay 23, 2024
  8. Tom HughesMay 22, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.