aboutsummaryrefslogtreecommitdiff
path: root/http.h
diff options
context:
space:
mode:
authorTay Ray Chuan <rctay89@gmail.com>2009-06-06 16:44:02 +0800
committerJunio C Hamano <gitster@pobox.com>2009-06-06 11:03:11 -0700
commit5424bc557fc6414660830b470dd45774b8f5f281 (patch)
tree418193e2e6ca3dce2ba599451a4981a4c368b2a5 /http.h
parent2264dfa5c4f11e2b0e2740072208186bee361afd (diff)
downloadgit-5424bc557fc6414660830b470dd45774b8f5f281.tar.gz
git-5424bc557fc6414660830b470dd45774b8f5f281.tar.xz
http*: add helper methods for fetching objects (loose)
The code handling the fetching of loose objects in http-push.c and http-walker.c have been refactored into new methods and a new struct (object_http_request) in http.c. They are not meant to be invoked elsewhere. The new methods in http.c are - new_http_object_request - process_http_object_request - finish_http_object_request - abort_http_object_request - release_http_object_request and the new struct is http_object_request. RANGER_HEADER_SIZE and no_pragma_header is no longer made available outside of http.c, since after the above changes, there are no other instances of usage outside of http.c. Remove members of the transfer_request struct in http-push.c and http-walker.c, including filename, real_sha1 and zret, as they are used no longer used. Move the methods append_remote_object_url() and get_remote_object_url() from http-push.c to http.c. Additionally, get_remote_object_url() is no longer defined only when USE_CURL_MULTI is defined, since non-USE_CURL_MULTI code in http.c uses it (namely, in new_http_object_request()). Refactor code from http-push.c::start_fetch_loose() and http-walker.c::start_object_fetch_request() that deals with the details of coming up with the filename to store the retrieved object, resuming a previously aborted request, and making a new curl request, into a new function, new_http_object_request(). Refactor code from http-walker.c::process_object_request() into the function, process_http_object_request(). Refactor code from http-push.c::finish_request() and http-walker.c::finish_object_request() into a new function, finish_http_object_request(). It returns the result of the move_temp_to_file() invocation. Add a function, release_http_object_request(), which cleans up object request data. http-push.c and http-walker.c invoke this function separately; http-push.c::release_request() and http-walker.c::release_object_request() do not invoke this function. Add a function, abort_http_object_request(), which unlink()s the object file and invokes release_http_object_request(). Update http-walker.c::abort_object_request() to use this. Signed-off-by: Tay Ray Chuan <rctay89@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'http.h')
-rw-r--r--http.h37
1 files changed, 33 insertions, 4 deletions
diff --git a/http.h b/http.h
index 511c0c441..4c4e99c2f 100644
--- a/http.h
+++ b/http.h
@@ -88,10 +88,6 @@ extern void add_fill_function(void *data, int (*fill)(void *));
extern void step_active_slots(void);
#endif
-extern struct curl_slist *no_pragma_header;
-
-#define RANGE_HEADER_SIZE 30
-
extern void http_init(struct remote *remote);
extern void http_cleanup(void);
@@ -114,6 +110,13 @@ static inline int missing__target(int code, int result)
#define missing_target(a) missing__target((a)->http_code, (a)->curl_result)
+/* Helpers for modifying and creating URLs */
+extern void append_remote_object_url(struct strbuf *buf, const char *url,
+ const char *hex,
+ int only_two_digit_prefix);
+extern char *get_remote_object_url(const char *url, const char *hex,
+ int only_two_digit_prefix);
+
/* Options for http_request_*() */
#define HTTP_NO_CACHE 1
@@ -167,4 +170,30 @@ extern struct http_pack_request *new_http_pack_request(
extern int finish_http_pack_request(struct http_pack_request *preq);
extern void release_http_pack_request(struct http_pack_request *preq);
+/* Helpers for fetching object */
+struct http_object_request
+{
+ char *url;
+ char filename[PATH_MAX];
+ char tmpfile[PATH_MAX];
+ int localfile;
+ CURLcode curl_result;
+ char errorstr[CURL_ERROR_SIZE];
+ long http_code;
+ unsigned char sha1[20];
+ unsigned char real_sha1[20];
+ git_SHA_CTX c;
+ z_stream stream;
+ int zret;
+ int rename;
+ struct active_request_slot *slot;
+};
+
+extern struct http_object_request *new_http_object_request(
+ const char *base_url, unsigned char *sha1);
+extern void process_http_object_request(struct http_object_request *freq);
+extern int finish_http_object_request(struct http_object_request *freq);
+extern void abort_http_object_request(struct http_object_request *freq);
+extern void release_http_object_request(struct http_object_request *freq);
+
#endif /* HTTP_H */