diff options
author | Junio C Hamano <gitster@pobox.com> | 2009-02-15 01:43:57 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-02-15 01:43:57 -0800 |
commit | c42b04bbb0cdf7618d3bdb57ed02569a5f128fe9 (patch) | |
tree | 14e997553a5ce307611abc6cca62f353a5b5e601 /http-push.c | |
parent | 43e35f6bc14c6e00148a01700e3df191aa99c9f7 (diff) | |
parent | dfab7c144eb2f02fc1481173422ecc416a060155 (diff) | |
download | git-c42b04bbb0cdf7618d3bdb57ed02569a5f128fe9.tar.gz |
Merge branch 'rc/http-push'
* rc/http-push:
use a hash of the lock token as the suffix for PUT/MOVE
Diffstat (limited to 'http-push.c')
-rw-r--r-- | http-push.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/http-push.c b/http-push.c index a8ae545dfb..30d2d34041 100644 --- a/http-push.c +++ b/http-push.c @@ -153,6 +153,7 @@ struct remote_lock char *url; char *owner; char *token; + char tmpfile_suffix[41]; time_t start_time; long timeout; int refreshing; @@ -557,8 +558,7 @@ static void start_put(struct transfer_request *request) request->dest = strbuf_detach(&buf, NULL); append_remote_object_url(&buf, remote->url, hex, 0); - strbuf_addstr(&buf, "_"); - strbuf_addstr(&buf, request->lock->token); + strbuf_add(&buf, request->lock->tmpfile_suffix, 41); request->url = strbuf_detach(&buf, NULL); slot = get_active_slot(); @@ -1130,6 +1130,8 @@ static void handle_lockprop_ctx(struct xml_ctx *ctx, int tag_closed) static void handle_new_lock_ctx(struct xml_ctx *ctx, int tag_closed) { struct remote_lock *lock = (struct remote_lock *)ctx->userData; + git_SHA_CTX sha_ctx; + unsigned char lock_token_sha1[20]; if (tag_closed && ctx->cdata) { if (!strcmp(ctx->name, DAV_ACTIVELOCK_OWNER)) { @@ -1142,6 +1144,13 @@ static void handle_new_lock_ctx(struct xml_ctx *ctx, int tag_closed) } else if (!strcmp(ctx->name, DAV_ACTIVELOCK_TOKEN)) { lock->token = xmalloc(strlen(ctx->cdata) + 1); strcpy(lock->token, ctx->cdata); + + git_SHA1_Init(&sha_ctx); + git_SHA1_Update(&sha_ctx, lock->token, strlen(lock->token)); + git_SHA1_Final(lock_token_sha1, &sha_ctx); + + lock->tmpfile_suffix[0] = '_'; + memcpy(lock->tmpfile_suffix + 1, sha1_to_hex(lock_token_sha1), 40); } } } |