diff options
| author | Edward Thomson <ethomson@edwardthomson.com> | 2022-02-08 20:42:45 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-08 20:42:45 -0500 |
| commit | d299a7aad66e8e32135d801f47d46fecf9042b9f (patch) | |
| tree | eb9d80886fa0e0c476b9fc26abafa91a472f0f15 | |
| parent | 1e7c8b1f644e44de881a3c15b743bb558c3a71e6 (diff) | |
| parent | aceac672fd0431ec55d4efe3f037c596700ad46c (diff) | |
| download | libgit2-d299a7aad66e8e32135d801f47d46fecf9042b9f.tar.gz | |
Merge pull request #6205 from ccstolley/ccs_fix_http_push_timeout
push: Prepare pack before sending pack header.
| -rw-r--r-- | src/pack-objects.c | 4 | ||||
| -rw-r--r-- | src/pack-objects.h | 2 | ||||
| -rw-r--r-- | src/transports/smart_protocol.c | 4 |
3 files changed, 8 insertions, 2 deletions
diff --git a/src/pack-objects.c b/src/pack-objects.c index 35c1d55db..1aa6731b3 100644 --- a/src/pack-objects.c +++ b/src/pack-objects.c @@ -1308,7 +1308,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list, #define ll_find_deltas(pb, l, ls, w, d) find_deltas(pb, l, &ls, w, d) #endif -static int prepare_pack(git_packbuilder *pb) +int git_packbuilder__prepare(git_packbuilder *pb) { git_pobject **delta_list; size_t i, n = 0; @@ -1353,7 +1353,7 @@ static int prepare_pack(git_packbuilder *pb) return 0; } -#define PREPARE_PACK if (prepare_pack(pb) < 0) { return -1; } +#define PREPARE_PACK if (git_packbuilder__prepare(pb) < 0) { return -1; } int git_packbuilder_foreach(git_packbuilder *pb, int (*cb)(void *buf, size_t size, void *payload), void *payload) { diff --git a/src/pack-objects.h b/src/pack-objects.h index 53c9f5d45..2faa3ec7f 100644 --- a/src/pack-objects.h +++ b/src/pack-objects.h @@ -100,5 +100,7 @@ struct git_packbuilder { }; int git_packbuilder__write_buf(git_str *buf, git_packbuilder *pb); +int git_packbuilder__prepare(git_packbuilder *pb); + #endif diff --git a/src/transports/smart_protocol.c b/src/transports/smart_protocol.c index 06102817d..adfc30466 100644 --- a/src/transports/smart_protocol.c +++ b/src/transports/smart_protocol.c @@ -1036,6 +1036,10 @@ int git_smart__push(git_transport *transport, git_push *push) } } + /* prepare pack before sending pack header to avoid timeouts */ + if (need_pack && ((error = git_packbuilder__prepare(push->pb))) < 0) + goto done; + if ((error = git_smart__get_push_stream(t, &packbuilder_payload.stream)) < 0 || (error = gen_pktline(&pktline, push)) < 0 || (error = packbuilder_payload.stream->write(packbuilder_payload.stream, git_str_cstr(&pktline), git_str_len(&pktline))) < 0) |
