[PATCH 2/2] http-push: remove MOVE step after PUT when sending objects to server
From: Ray Chuan <hidden>
Date: 2016-06-15 22:45:58
Subsystem:
the rest · Maintainer:
Linus Torvalds
Currently, git PUTs to /repo.git/objects/1a/1a2b...9z_opaquelocktoken:1234-.... then MOVEs to /repo.git/objects/1a/1a2b...9z This is needless. In fact, the only time MOVE requests are sent is for this sole purpose (ie. of renaming an object). A concern raised was repository corruption in the event of failure during PUT. "put && move" won't afford any more protection than using simply "put", since info/refs is not updated if a PUT fails, so there is no cause for concern. Signed-off-by: Tay Ray Chuan <redacted> --- http-push.c | 45 +-------------------------------------------- 1 files changed, 1 insertions(+), 44 deletions(-)
diff --git a/http-push.c b/http-push.c
index 4517cf2..d21fd3b 100644
--- a/http-push.c
+++ b/http-push.c@@ -31,7 +31,6 @@ enum XML_Status { /* DAV methods */ #define DAV_LOCK "LOCK" #define DAV_MKCOL "MKCOL" -#define DAV_MOVE "MOVE" #define DAV_PROPFIND "PROPFIND" #define DAV_PUT "PUT" #define DAV_UNLOCK "UNLOCK"
@@ -105,7 +104,6 @@ enum transfer_state { NEED_PUSH, RUN_MKCOL, RUN_PUT, - RUN_MOVE, ABORTED, COMPLETE, };
@@ -531,11 +529,6 @@ static void start_put(struct transfer_request *request) posn += 2; *(posn++) = '/'; strcpy(posn, hex + 2); - request->dest = xmalloc(strlen(request->url) + 14); - sprintf(request->dest, "Destination: %s", request->url); - posn += 38; - *(posn++) = '_'; - strcpy(posn, request->lock->token); if_header = xmalloc(strlen(request->lock->token) + 25); sprintf(if_header, "If: <%s>", request->lock->token);
@@ -565,32 +558,6 @@ static void start_put(struct transfer_request *request) } } -static void start_move(struct transfer_request *request) -{ - struct active_request_slot *slot; - struct curl_slist *dav_headers = NULL; - - slot = get_active_slot(); - slot->callback_func = process_response; - slot->callback_data = request; - curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1); /* undo PUT setup */ - curl_easy_setopt(slot->curl, CURLOPT_CUSTOMREQUEST, DAV_MOVE); - dav_headers = curl_slist_append(dav_headers, request->dest); - dav_headers = curl_slist_append(dav_headers, "Overwrite: T"); - curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, dav_headers); - curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, fwrite_null); - curl_easy_setopt(slot->curl, CURLOPT_URL, request->url); - - if (start_active_slot(slot)) { - request->slot = slot; - request->state = RUN_MOVE; - } else { - request->state = ABORTED; - free(request->url); - request->url = NULL; - } -} - static int refresh_lock(struct remote_lock *lock) { struct active_request_slot *slot;
@@ -713,23 +680,13 @@ static void finish_request(structtransfer_request *request)
}
} else if (request->state == RUN_PUT) {
if (request->curl_result == CURLE_OK) {
- start_move(request);
- } else {
- fprintf(stderr, "PUT %s failed, aborting (%d/%ld)\n",
- sha1_to_hex(request->obj->sha1),
- request->curl_result, request->http_code);
- request->state = ABORTED;
- aborted = 1;
- }
- } else if (request->state == RUN_MOVE) {
- if (request->curl_result == CURLE_OK) {
if (push_verbosely)
fprintf(stderr, " sent %s\n",
sha1_to_hex(request->obj->sha1));
request->obj->flags |= REMOTE;
release_request(request);
} else {
- fprintf(stderr, "MOVE %s failed, aborting (%d/%ld)\n",
+ fprintf(stderr, "PUT %s failed, aborting (%d/%ld)\n",
sha1_to_hex(request->obj->sha1),
request->curl_result, request->http_code);
request->state = ABORTED;
--
1.5.6.3