On Thu, Apr 14, 2016 at 1:50 PM, James Peach <jpe...@apache.org> wrote: > >> On Apr 13, 2016, at 9:45 PM, Masakazu Kitajo <mas...@apache.org> wrote: >> >> I merged a pull request on GitHub with "squash and merge" button. >> https://github.com/blog/2141-squash-your-commits >> >> This makes only one commits on master like we used to. It looks better >> than making a merge commit. > > Is there a rebase option? If the PR is structured as a clear patch series we > ought to preserve that (while still being able to squash messy PR branches).
No, it seems there is not. We would need to treat them manually in that case. >> >> On Thu, Apr 14, 2016 at 1:31 PM, <mas...@apache.org> wrote: >>> This is an automated email from the ASF dual-hosted git repository. >>> >>> maskit pushed a commit to branch master >>> in repository https://git-dual.apache.org/repos/asf/trafficserver.git >>> >>> The following commit(s) were added to refs/heads/master by this push: >>> new 60d07be TS-4321: Keep response headers in FetchSM as they are >>> (#551) >>> 60d07be is described below >>> >>> commit 60d07be8b199cc843c5e220ac0f6ed0545040422 >>> Author: Masakazu Kitajo <mas...@apache.org> >>> AuthorDate: Thu Apr 14 13:31:00 2016 +0900 >>> >>> TS-4321: Keep response headers in FetchSM as they are (#551) >>> --- >>> proxy/http2/HTTP2.cc | 27 +++++++++++---------------- >>> proxy/http2/HTTP2.h | 2 +- >>> proxy/http2/Http2ConnectionState.cc | 12 ++++++++---- >>> 3 files changed, 20 insertions(+), 21 deletions(-) >>> >>> diff --git a/proxy/http2/HTTP2.cc b/proxy/http2/HTTP2.cc >>> index f563210..3557cec 100644 >>> --- a/proxy/http2/HTTP2.cc >>> +++ b/proxy/http2/HTTP2.cc >>> @@ -499,24 +499,21 @@ http2_convert_header_from_2_to_1_1(HTTPHdr *headers) >>> } >>> >>> void >>> -http2_convert_header_from_1_1_to_2(HTTPHdr *headers) >>> +http2_generate_h2_header_from_1_1(HTTPHdr *headers, HTTPHdr *h2_headers) >>> { >>> - HTTPHdr tmp; >>> - tmp.create(http_hdr_type_get(headers->m_http)); >>> - tmp.copy(headers); >>> - headers->fields_clear(); >>> + h2_headers->create(http_hdr_type_get(headers->m_http)); >>> >>> - if (http_hdr_type_get(tmp.m_http) == HTTP_TYPE_RESPONSE) { >>> + if (http_hdr_type_get(headers->m_http) == HTTP_TYPE_RESPONSE) { >>> char status_str[HTTP2_LEN_STATUS_VALUE_STR + 1]; >>> - snprintf(status_str, sizeof(status_str), "%d", tmp.status_get()); >>> + snprintf(status_str, sizeof(status_str), "%d", headers->status_get()); >>> >>> // Add ':status' header field >>> - MIMEField *status_field = headers->field_create(HTTP2_VALUE_STATUS, >>> HTTP2_LEN_STATUS); >>> - status_field->value_set(headers->m_heap, headers->m_mime, status_str, >>> HTTP2_LEN_STATUS_VALUE_STR); >>> - headers->field_attach(status_field); >>> + MIMEField *status_field = h2_headers->field_create(HTTP2_VALUE_STATUS, >>> HTTP2_LEN_STATUS); >>> + status_field->value_set(h2_headers->m_heap, h2_headers->m_mime, >>> status_str, HTTP2_LEN_STATUS_VALUE_STR); >>> + h2_headers->field_attach(status_field); >>> >>> MIMEFieldIter field_iter; >>> - for (MIMEField *field = tmp.iter_get_first(&field_iter); field != >>> NULL; field = tmp.iter_get_next(&field_iter)) { >>> + for (MIMEField *field = headers->iter_get_first(&field_iter); field != >>> NULL; field = headers->iter_get_next(&field_iter)) { >>> // Intermediaries SHOULD remove connection-specific header fields. >>> const char *name; >>> int name_len; >>> @@ -533,14 +530,12 @@ http2_convert_header_from_1_1_to_2(HTTPHdr *headers) >>> >>> MIMEField *newfield; >>> name = field->name_get(&name_len); >>> - newfield = headers->field_create(name, name_len); >>> + newfield = h2_headers->field_create(name, name_len); >>> value = field->value_get(&value_len); >>> - newfield->value_set(headers->m_heap, headers->m_mime, value, >>> value_len); >>> - tmp.field_delete(field); >>> - headers->field_attach(newfield); >>> + newfield->value_set(h2_headers->m_heap, h2_headers->m_mime, value, >>> value_len); >>> + h2_headers->field_attach(newfield); >>> } >>> } >>> - tmp.destroy(); >>> } >>> >>> Http2ErrorCode >>> diff --git a/proxy/http2/HTTP2.h b/proxy/http2/HTTP2.h >>> index a70703c..7448ed6 100644 >>> --- a/proxy/http2/HTTP2.h >>> +++ b/proxy/http2/HTTP2.h >>> @@ -331,7 +331,7 @@ Http2ErrorCode http2_decode_header_blocks(HTTPHdr *, >>> const uint8_t *, const uint >>> Http2ErrorCode http2_encode_header_blocks(HTTPHdr *, uint8_t *, uint32_t, >>> uint32_t *, HpackHandle &); >>> >>> MIMEParseResult http2_convert_header_from_2_to_1_1(HTTPHdr *); >>> -void http2_convert_header_from_1_1_to_2(HTTPHdr *); >>> +void http2_generate_h2_header_from_1_1(HTTPHdr *headers, HTTPHdr >>> *h2_headers); >>> >>> >>> // Not sure where else to put this, but figure this is as good of a start as >>> diff --git a/proxy/http2/Http2ConnectionState.cc >>> b/proxy/http2/Http2ConnectionState.cc >>> index 713b91f..04b1cc4 100644 >>> --- a/proxy/http2/Http2ConnectionState.cc >>> +++ b/proxy/http2/Http2ConnectionState.cc >>> @@ -1007,14 +1007,17 @@ Http2ConnectionState::send_headers_frame(FetchSM >>> *fetch_sm) >>> >>> DebugHttp2Stream(ua_session, stream->get_id(), "Send HEADERS frame"); >>> >>> - http2_convert_header_from_1_1_to_2(resp_header); >>> - buf_len = resp_header->length_get() * 2; // Make it double just in case >>> + HTTPHdr h2_hdr; >>> + http2_generate_h2_header_from_1_1(resp_header, &h2_hdr); >>> + buf_len = h2_hdr.length_get() * 2; // Make it double just in case >>> buf = (uint8_t *)ats_malloc(buf_len); >>> if (buf == NULL) { >>> + h2_hdr.destroy(); >>> return; >>> } >>> - Http2ErrorCode result = http2_encode_header_blocks(resp_header, buf, >>> buf_len, &header_blocks_size, *(this->remote_hpack_handle)); >>> + Http2ErrorCode result = http2_encode_header_blocks(&h2_hdr, buf, >>> buf_len, &header_blocks_size, *(this->remote_hpack_handle)); >>> if (result != HTTP2_ERROR_NO_ERROR) { >>> + h2_hdr.destroy(); >>> ats_free(buf); >>> return; >>> } >>> @@ -1023,7 +1026,7 @@ Http2ConnectionState::send_headers_frame(FetchSM >>> *fetch_sm) >>> if (header_blocks_size <= >>> BUFFER_SIZE_FOR_INDEX(buffer_size_index[HTTP2_FRAME_TYPE_HEADERS]) - >>> HTTP2_FRAME_HEADER_LEN) { >>> payload_length = header_blocks_size; >>> flags |= HTTP2_FLAGS_HEADERS_END_HEADERS; >>> - if (resp_header->presence(MIME_PRESENCE_CONTENT_LENGTH) && >>> resp_header->get_content_length() == 0) { >>> + if (h2_hdr.presence(MIME_PRESENCE_CONTENT_LENGTH) && >>> h2_hdr.get_content_length() == 0) { >>> flags |= HTTP2_FLAGS_HEADERS_END_STREAM; >>> } >>> } else { >>> @@ -1057,6 +1060,7 @@ Http2ConnectionState::send_headers_frame(FetchSM >>> *fetch_sm) >>> sent += payload_length; >>> } >>> >>> + h2_hdr.destroy(); >>> ats_free(buf); >>> } >>> >>> >>> -- >>> To stop receiving notification emails like this one, please contact >>> ['"comm...@trafficserver.apache.org" <comm...@trafficserver.apache.org>']. >