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

Re: [PATCH] Trivial support for cloning and fetching via ftp://.

From
Junio C Hamano <junkio@cox.net>
Date
Sep 16, 2006, 17:58 UTC
Message-ID
<7vd59vae2r.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<20060916174134.GE17504@sashak.voltaire.com>
Sasha Khapyorsky <sashak@voltaire.com> writes:
> Good. Am I need to send the patch or you will integrate it?
Actually, I am thinking of doing this in two steps.

The attached is the first "clean-up" step, which should be obvious enough.

And you already know what the second one that would come on top of this should look like ;-).

-- >8 -- http-fetch.c: consolidate code to detect missing fetch target

At a handful places we check two error codes from curl library to see if the file we asked was missing from the remote (e.g. we asked for a loose object when it is in a pack) to decide what to do next. This consolidates the check into a single function.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
diff --git a/http-fetch.c b/http-fetch.c
index a113bb8..bc74f30 100644
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -144,6 +144,19 @@ static size_t fwrite_sha1_file(void *ptr
 	return size;
 }
 
+static int missing__target(int code, int result)
+{
+	return	/* file:// URL -- do we ever use one??? */
+		(result == CURLE_FILE_COULDNT_READ_FILE) ||
+		/* http:// and https:// URL */
+		(code == 404 && result == CURLE_HTTP_RETURNED_ERROR) ||
+		/* ftp:// URL */
+		(code == 550 && result == CURLE_FTP_COULDNT_RETR_FILE)
+		;
+}
+
+#define missing_target(a) missing__target((a)->http_code, (a)->curl_result)
+
 static void fetch_alternates(const char *base);
 
 static void process_object_response(void *callback_data);
@@ -323,8 +336,7 @@ static void process_object_response(void
 	obj_req->state = COMPLETE;
 
 	/* Use alternates if necessary */
-	if (obj_req->http_code == 404 ||
-	    obj_req->curl_result == CURLE_FILE_COULDNT_READ_FILE) {
+	if (missing_target(obj_req)) {
 		fetch_alternates(alt->base);
 		if (obj_req->repo->next != NULL) {
 			obj_req->repo =
@@ -537,8 +549,7 @@ static void process_alternates_response(
 			return;
 		}
 	} else if (slot->curl_result != CURLE_OK) {
-		if (slot->http_code != 404 &&
-		    slot->curl_result != CURLE_FILE_COULDNT_READ_FILE) {
+		if (!missing_target(slot)) {
 			got_alternates = -1;
 			return;
 		}
@@ -941,8 +952,7 @@ #endif
 	if (start_active_slot(slot)) {
 		run_active_slot(slot);
 		if (results.curl_result != CURLE_OK) {
-			if (results.http_code == 404 ||
-			    results.curl_result == CURLE_FILE_COULDNT_READ_FILE) {
+			if (missing_target(&results)) {
 				repo->got_indices = 1;
 				free(buffer.buffer);
 				return 0;
@@ -1123,8 +1133,7 @@ #endif
 		ret = error("Request for %s aborted", hex);
 	} else if (obj_req->curl_result != CURLE_OK &&
 		   obj_req->http_code != 416) {
-		if (obj_req->http_code == 404 ||
-		    obj_req->curl_result == CURLE_FILE_COULDNT_READ_FILE)
+		if (missing_target(obj_req))
 			ret = -1; /* Be silent, it is probably in a pack. */
 		else
 			ret = error("%s (curl_result = %d, http_code = %ld, sha1 = %s)",
Previous: Sasha KhapyorskyNext: Junio C Hamano
Message 9 of 11 in “Trivial support for cloning and fetching via ftp://.”
  1. Trivial support for cloning and fetching via ftp://.Sasha Khapyorsky, Sep 14, 2006
  2. Junio C HamanoSep 14, 2006
  3. Sasha KhapyorskySep 16, 2006
  4. Junio C HamanoSep 16, 2006
  5. Sasha KhapyorskySep 16, 2006
  6. Sasha KhapyorskySep 16, 2006
  7. Junio C HamanoSep 16, 2006
  8. Sasha KhapyorskySep 16, 2006
  9. Junio C HamanoSep 16, 2006
  10. Junio C HamanoSep 16, 2006
  11. Sasha KhapyorskySep 16, 2006

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.