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

[PATCH] clone: disconnect transport after fetching

From
Jeff King <peff@peff.net>
Date
Sep 2, 2009, 06:36 UTC
Message-ID
<20090902063647.GA29559@coredump.intra.peff.net>
In-Reply-To
<alpine.LNX.2.00.0909020159080.28290@iabervon.org>

The current code just leaves the transport in whatever state it was in after performing the fetch. For a non-empty clone over the git protocol, the transport code already disconnects at the end of the fetch.

But for an empty clone, we leave the connection hanging, and eventually close the socket when clone exits. This causes the remote upload-pack to complain "the remote end hung up unexpectedly". While this message is harmless to the clone itself, it is unnecessarily scary for a user to see and may pollute git-daemon logs.

This patch just explicitly calls disconnect after we are done with the remote end, which sends a flush packet to upload-pack and cleanly disconnects, avoiding the error message.

Other transports are unaffected or slightly improved:
 - for a non-empty repo over the git protocol, the second
   disconnect is a no-op (since we are no longer connected)
 - for "walker" transports (like HTTP or FTP), we actually
   free some used memory (which previously just sat until
   the clone process exits)
 - for "rsync", disconnect is always a no-op anyway
Signed-off-by: Jeff King <peff@peff.net>
---
This was suggested by Daniel, so theoretically
  Acked-by: Daniel Barkalow <barkalow@iabervon.org>
:)

As you can see from the commit message, I did a little extra hunting to make sure we are not going to impact any other code paths, and I am pretty sure we are fine.

 builtin-clone.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/builtin-clone.c b/builtin-clone.c
index 991a7ae..0f231d8 100644
--- a/builtin-clone.c
+++ b/builtin-clone.c
@@ -580,8 +580,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 		option_no_checkout = 1;
 	}
 
-	if (transport)
+	if (transport) {
 		transport_unlock_pack(transport);
+		transport_disconnect(transport);
+	}
 
 	if (!option_no_checkout) {
 		struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
-- 
1.6.4.2.401.ga275f.dirty
Previous: Daniel BarkalowNext: Sverre Rabbelier
Message 18 of 25 in “clong an empty repo over ssh causes (harmless) fatal”
  1. Sitaram ChamartyAug 31, 2009
  2. Matthieu MoyAug 31, 2009
  3. Sitaram ChamartyAug 31, 2009
  4. Matthieu MoyAug 31, 2009
  5. Jeff KingAug 31, 2009
  6. Sverre RabbelierAug 31, 2009
  7. Jeff KingAug 31, 2009
  8. Sverre RabbelierAug 31, 2009
  9. Matthieu MoyAug 31, 2009
  10. Jeff KingAug 31, 2009
  11. Björn SteinbrinkAug 31, 2009
  12. Jeff KingAug 31, 2009
  13. Sverre RabbelierAug 31, 2009
  14. Jeff KingSep 1, 2009
  15. Daniel BarkalowSep 2, 2009
  16. Jeff KingSep 2, 2009
  17. Daniel BarkalowSep 2, 2009
  18. clone: disconnect transport after fetchingJeff King, Sep 2, 2009
  19. Sverre RabbelierSep 2, 2009
  20. Jeff KingSep 2, 2009
  21. Sverre RabbelierSep 2, 2009
  22. Daniel BarkalowSep 2, 2009
  23. Junio C HamanoSep 2, 2009
  24. Jeff KingSep 4, 2009
  25. Sitaram ChamartySep 2, 2009

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.