Hello community,

here is the log from the commit of package grpc-httpjson-transcoding for 
openSUSE:Factory checked in at 2019-11-12 11:55:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/grpc-httpjson-transcoding (Old)
 and      /work/SRC/openSUSE:Factory/.grpc-httpjson-transcoding.new.2990 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "grpc-httpjson-transcoding"

Tue Nov 12 11:55:36 2019 rev:3 rq:746573 version:20190920

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/grpc-httpjson-transcoding/grpc-httpjson-transcoding.changes
      2019-03-20 13:21:11.737316037 +0100
+++ 
/work/SRC/openSUSE:Factory/.grpc-httpjson-transcoding.new.2990/grpc-httpjson-transcoding.changes
    2019-11-12 11:56:39.503422354 +0100
@@ -1,0 +2,16 @@
+Tue Nov 05 11:59:40 UTC 2019 - [email protected]
+
+- Update to version 20190920:
+  * Changed return of ByteCount() to use plain int64_t.
+  * Relax Base64 Decoding Strict decoding breaks Base64 MIME encodings, which 
place newlines after a certain number of spaces. MIME encoding is commonly used 
by Java Clients.
+  * Update googleapis and protobuf
+  * Run clang-format
+  * Make path matcher utility compilable with gcc 4.9
+  * Replace std::set with std::unordered_set in path matcher utility
+  * Make path_matcher.h compile with gcc 4.9
+  * Replace std::set with std::unordered_set in path matcher
+  * Replace a single character string literal with a character
+- Add patch which fixes the build with newer googleapis:
+  * 0001-bazel-Update-googleapis-and-do-not-define-custom-BUI.patch
+
+-------------------------------------------------------------------

Old:
----
  BUILD
  WORKSPACE
  grpc-httpjson-transcoding-20181128.tar.xz
  repositories.bzl

New:
----
  0001-bazel-Update-googleapis-and-do-not-define-custom-BUI.patch
  grpc-httpjson-transcoding-20190920.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ grpc-httpjson-transcoding.spec ++++++
--- /var/tmp/diff_new_pack.8hPokN/_old  2019-11-12 11:56:40.051422938 +0100
+++ /var/tmp/diff_new_pack.8hPokN/_new  2019-11-12 11:56:40.051422938 +0100
@@ -12,7 +12,7 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
@@ -21,23 +21,32 @@
 %define src_install_dir /usr/src/%{name}
 
 Name:           grpc-httpjson-transcoding
-Version:        20181128
+Version:        20190920
 Release:        0
 Summary:        Library for transcoding HTTP/JSON to gRPC
 License:        Apache-2.0
 Group:          Development/Libraries/C and C++
 Url:            https://github.com/grpc-ecosystem/%{name}
 Source0:        %{name}-%{version}.tar.xz
-Source1:        repositories.bzl
-Source2:        BUILD
-Source3:        WORKSPACE
 Source100:      grpc-httpjson-transcoding-rpmlintrc
-BuildRequires:  abseil-cpp-devel
-BuildRequires:  bazel
+Patch0:         0001-bazel-Update-googleapis-and-do-not-define-custom-BUI.patch
+BuildRequires:  abseil-cpp-source
+BuildRequires:  bazel-rules-cc-source
+BuildRequires:  bazel-rules-go-source
+BuildRequires:  bazel-rules-java-source
+BuildRequires:  bazel-rules-proto-source
+BuildRequires:  bazel-skylib-source
+BuildRequires:  bazel-workspaces
+BuildRequires:  bazel0.29
+BuildRequires:  fdupes
 BuildRequires:  gcc-c++
+BuildRequires:  golang-packaging
 BuildRequires:  googleapis-source
+BuildRequires:  grpc-source
 BuildRequires:  patchelf
 BuildRequires:  protobuf-source
+BuildRequires:  zlib-devel
+BuildRequires:  golang(API) >= 1.11
 ExcludeArch:    %ix86
 
 %description
@@ -78,18 +87,16 @@
 # Upstream sources of googleapis do not export servicecontrol protobufs for
 # Bazel builds which use googleapis as a dependency. This custom BUILD file
 # expots them.
-mkdir googleapis
-cp -r /usr/src/googleapis/* googleapis/
+# mkdir googleapis
+# cp -r /usr/src/googleapis/* googleapis/
 
-%setup -q
-cp %{SOURCE1} .
-cp %{SOURCE2} .
-cp %{SOURCE3} .
+%autosetup -p1
+sed -i -e "s|go_register_toolchains()|go_register_toolchains(\"host\")|" 
WORKSPACE
 # Unit tests in grpc-httpjson-transcoding are not able to use gtest as a shared
 # library. We don't run tests in this spec, so let's just get rid of them...
 rm test/BUILD
 
-sed -i 's|@com_google_absl//absl/strings|//:abseil_strings|g' ./src/BUILD
+#sed -i 's|@com_google_absl//absl/strings|//:abseil_strings|g' ./src/BUILD
 
 %build
 # TODO(mrostecki): Create a macro in bazel package.
@@ -98,9 +105,16 @@
     --color=no \
     %(for opt in %{optflags}; do echo -e "--copt=${opt} \c"; done) \
     --curses=no \
-    --distdir=%{_sourcedir} \
-    --genrule_strategy=standalone \
-    --spawn_strategy=standalone \
+    --override_repository="bazel_skylib=/usr/src/bazel-skylib" \
+    --override_repository="com_github_grpc_grpc=/usr/src/grpc" \
+    --override_repository="com_google_absl=/usr/src/abseil-cpp" \
+    --override_repository="com_google_protobuf=/usr/src/protobuf" \
+    --override_repository="googleapis_git=/usr/src/googleapis" \
+    --override_repository="io_bazel_rules_go=/usr/src/bazel-rules-go" \
+    --override_repository="rules_cc=/usr/src/bazel-rules-cc" \
+    --override_repository="rules_java=/usr/src/bazel-rules-java" \
+    --override_repository="rules_proto=/usr/src/bazel-rules-proto" \
+    --override_repository="zlib=%{_datadir}/bazel-workspaces/zlib" \
     --strip=never \
     --verbose_failures \
     //...
@@ -147,14 +161,10 @@
 done
 
 # Install sources
+rm -rf "bazel-*"
 mkdir -p %{buildroot}%{src_install_dir}
-tar -xf %{SOURCE0} --strip-components=1 -C %{buildroot}%{src_install_dir}
-pushd %{buildroot}%{src_install_dir}
-sed -i 's|@com_google_absl//absl/strings|//:abseil_strings|g' ./src/BUILD
-cp %{SOURCE1} .
-cp %{SOURCE2} .
-cp %{SOURCE3} .
-popd
+cp -r * %{buildroot}%{src_install_dir}
+%fdupes %{buildroot}%{src_install_dir}
 
 %post -n %{libname} -p /sbin/ldconfig
 %postun -n %{libname} -p /sbin/ldconfig

++++++ 0001-bazel-Update-googleapis-and-do-not-define-custom-BUI.patch ++++++
>From f41ed4ccb3b563a2d44d856c6b9582baeddde4ed Mon Sep 17 00:00:00 2001
From: Michal Rostecki <[email protected]>
Date: Tue, 5 Nov 2019 14:22:18 +0100
Subject: [PATCH] bazel: Update googleapis and do not define custom BUILD file

This change updates googleapis to the version which is currently used by
Envoy and which has its own set of BUILD files exposing proto libraries.

Signed-off-by: Michal Rostecki <[email protected]>
---
 WORKSPACE        |  20 +++++++++++
 repositories.bzl | 104 +++++++++++++------------------------------------------
 2 files changed, 44 insertions(+), 80 deletions(-)

diff --git a/WORKSPACE b/WORKSPACE
index 34f40fe..9c2bb13 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -20,6 +20,7 @@ load(
     "absl_repositories",
     "protobuf_repositories",
     "googletest_repositories",
+    "grpc_repositories",
     "googleapis_repositories",
 )
 
@@ -30,3 +31,22 @@ protobuf_repositories()
 googletest_repositories()
 
 googleapis_repositories()
+
+grpc_repositories()
+
+load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps")
+
+grpc_deps()
+
+load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", 
"go_register_toolchains")
+go_rules_dependencies()
+go_register_toolchains()
+
+load("@googleapis_git//:repository_rules.bzl", "switched_rules_by_language")
+
+switched_rules_by_language(
+    name = "com_google_googleapis_imports",
+    cc = True,
+    go = True,
+    grpc = True,
+)
diff --git a/repositories.bzl b/repositories.bzl
index b8d3fc7..833385f 100644
--- a/repositories.bzl
+++ b/repositories.bzl
@@ -92,10 +92,12 @@ cc_library(
         build_file_content = BUILD,
     )
 
-
 BAZEL_SKYLIB_RELEASE = "0.8.0"
 BAZEL_SKYLIB_SHA256 = 
"2ef429f5d7ce7111263289644d233707dba35e39696377ebab8b0bc701f7818e"
 
+RULES_PROTO_COMMIT = "97d8af4dc474595af3900dd85cb3a29ad28cc313"  # August 02, 
2019
+RULES_PROTO_SHA256 = 
"602e7161d9195e50246177e7c55b2f39950a9cf7366f74ed5f22fd45750cd208"
+
 PROTOBUF_COMMIT = "3.9.0"  # July 10, 2019
 PROTOBUF_SHA256 = 
"2ee9dcec820352671eb83e081295ba43f7a4157181dad549024d7070d079cf65"
 
@@ -108,6 +110,13 @@ def protobuf_repositories(bind=True):
         sha256 = BAZEL_SKYLIB_SHA256,
     )
 
+    http_archive(
+        name = "rules_proto",
+        strip_prefix = "rules_proto-" + RULES_PROTO_COMMIT,
+        urls = ["https://github.com/bazelbuild/rules_proto/archive/"; + 
RULES_PROTO_COMMIT + ".tar.gz"],
+        sha256 = RULES_PROTO_SHA256,
+    )
+
     http_archive(
         name = "protobuf_git",
         strip_prefix = "protobuf-" + PROTOBUF_COMMIT,
@@ -235,100 +244,35 @@ cc_library(
             actual = "@googletest_git//:googletest_prod",
         )
 
-GOOGLEAPIS_COMMIT = "32a10f69e2c9ce15bba13ab1ff928bacebb25160" # May 20, 2019
-GOOGLEAPIS_SHA256 = 
"6861efa8619579e06e70dd4765cdf6cef1ecad6a1a2026ad750541e99552bf71"
+GRPC_VERSION = "1.23.0"
+GRPC_SHA256 = 
"f56ced18740895b943418fa29575a65cc2396ccfa3159fa40d318ef5f59471f9"
 
-def googleapis_repositories(protobuf_repo="@protobuf_git//", bind=True):
-    BUILD = """
-# Copyright 2016 Google Inc. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-################################################################################
-#
-
-licenses(["notice"])
-
-load("{0}:protobuf.bzl", "cc_proto_library")
-
-exports_files(glob(["google/**"]))
-
-cc_proto_library(
-    name = "http_api_protos",
-    srcs = [
-        "google/api/annotations.proto",
-        "google/api/http.proto",
-    ],
-    default_runtime = "//external:protobuf",
-    protoc = "//external:protoc",
-    visibility = ["//visibility:public"],
-    deps = ["{0}:cc_wkt_protos"],
-)
+def grpc_repositories():
+    http_archive(
+        name = "com_github_grpc_grpc",
+        strip_prefix = "grpc-" + GRPC_VERSION,
+        url = "https://github.com/grpc/grpc/archive/v"; + GRPC_VERSION + 
".tar.gz",
+        sha256 = GRPC_SHA256,
+    )
 
-cc_proto_library(
-    name = "service_config",
-    srcs = [
-        "google/api/auth.proto",
-        "google/api/backend.proto",
-        "google/api/billing.proto",
-        "google/api/consumer.proto",
-        "google/api/context.proto",
-        "google/api/control.proto",
-        "google/api/documentation.proto",
-        "google/api/endpoint.proto",
-        "google/api/label.proto",
-        "google/api/launch_stage.proto",
-        "google/api/log.proto",
-        "google/api/logging.proto",
-        "google/api/metric.proto",
-        "google/api/experimental/experimental.proto",
-        "google/api/experimental/authorization_config.proto",
-        "google/api/monitored_resource.proto",
-        "google/api/monitoring.proto",
-        "google/api/resource.proto",
-        "google/api/quota.proto",
-        "google/api/service.proto",
-        "google/api/source_info.proto",
-        "google/api/system_parameter.proto",
-        "google/api/usage.proto",
-    ],
-    include = ".",
-    visibility = ["//visibility:public"],
-    deps = [
-        ":http_api_protos",
-        "//external:cc_wkt_protos",
-    ],
-    protoc = "//external:protoc",
-    default_runtime = "//external:protobuf",
-)
-""".format(protobuf_repo)
+GOOGLEAPIS_COMMIT = "be480e391cc88a75cf2a81960ef79c80d5012068" # Jul 24, 2019
+GOOGLEAPIS_SHA256 = 
"c1969e5b72eab6d9b6cfcff748e45ba57294aeea1d96fd04cd081995de0605c2"
 
+def googleapis_repositories(protobuf_repo="@protobuf_git//", bind=True):
     http_archive(
         name = "googleapis_git",
-        patch_cmds = ["find . -type f -name '*BUILD*' | xargs rm"],
         strip_prefix = "googleapis-" + GOOGLEAPIS_COMMIT,
         url = "https://github.com/googleapis/googleapis/archive/"; + 
GOOGLEAPIS_COMMIT + ".tar.gz",
-        build_file_content = BUILD,
         sha256 = GOOGLEAPIS_SHA256,
     )
 
     if bind:
         native.bind(
             name = "service_config",
-            actual = "@googleapis_git//:service_config",
+            actual = "@googleapis_git//google/api:service_cc_proto",
         )
 
         native.bind(
             name = "http_api_protos",
-            actual = "@googleapis_git//:http_api_protos",
+            actual = "@googleapis_git//google/api:annotations_cc_proto",
         )
-- 
2.16.4

++++++ _service ++++++
--- /var/tmp/diff_new_pack.8hPokN/_old  2019-11-12 11:56:40.087422977 +0100
+++ /var/tmp/diff_new_pack.8hPokN/_new  2019-11-12 11:56:40.087422977 +0100
@@ -5,6 +5,7 @@
     <param name="changesgenerate">enable</param>
     <param name="filename">grpc-httpjson-transcoding</param>
     <param name="versionformat">%cd</param>
+    <param name="revision">82850792f42ab7ea7ee9b9c6bcbfc578bc3810c0</param>
   </service>
   <service mode="disabled" name="recompress">
     <param name="file">*.tar</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.8hPokN/_old  2019-11-12 11:56:40.107422998 +0100
+++ /var/tmp/diff_new_pack.8hPokN/_new  2019-11-12 11:56:40.107422998 +0100
@@ -1,4 +1,4 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/grpc-ecosystem/grpc-httpjson-transcoding</param>
-              <param 
name="changesrevision">39c3fc91e2027d3c4fd069b925ed56ead7584593</param></service></servicedata>
\ No newline at end of file
+              <param 
name="changesrevision">01bb500c4cab2f14e929d23735879a5490d8e4ce</param></service></servicedata>
\ No newline at end of file

++++++ grpc-httpjson-transcoding-20181128.tar.xz -> 
grpc-httpjson-transcoding-20190920.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpc-httpjson-transcoding-20181128/repositories.bzl 
new/grpc-httpjson-transcoding-20190920/repositories.bzl
--- old/grpc-httpjson-transcoding-20181128/repositories.bzl     2018-11-28 
20:24:54.000000000 +0100
+++ new/grpc-httpjson-transcoding-20190920/repositories.bzl     2019-09-20 
19:13:03.000000000 +0200
@@ -27,14 +27,91 @@
         sha256 = ABSEIL_SHA256,
     )
 
-PROTOBUF_COMMIT = "106ffc04be1abf3ff3399f54ccf149815b287dd9"  # v3.5.1
-PROTOBUF_SHA256 = 
"ebc5f911ae580234da9cbcff03b841395bd97861efc82f67a165c5c3d366f2c6"
+def zlib_repositories(bind = True):
+    BUILD = """
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+#
+licenses(["notice"])
+exports_files(["README"])
+cc_library(
+    name = "zlib",
+    srcs = [
+        "adler32.c",
+        "crc32.c",
+        "crc32.h",
+        "deflate.c",
+        "deflate.h",
+        "infback.c",
+        "inffast.c",
+        "inffast.h",
+        "inffixed.h",
+        "inflate.c",
+        "inflate.h",
+        "inftrees.c",
+        "inftrees.h",
+        "trees.c",
+        "trees.h",
+        "zconf.h",
+        "zutil.c",
+        "zutil.h",
+    ],
+    hdrs = [
+        "zlib.h",
+    ],
+    copts = [
+        "-Wno-shift-negative-value",
+        "-Wno-unknown-warning-option",
+    ],
+    defines = [
+        "Z_SOLO",
+    ],
+    visibility = [
+        "//visibility:public",
+    ],
+)
+"""
+    http_archive(
+        name = "zlib",
+        strip_prefix = "zlib-1.2.11",
+        urls = ["https://github.com/madler/zlib/archive/v1.2.11.tar.gz";],
+        sha256 = 
"629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff",
+        build_file_content = BUILD,
+    )
+
+
+BAZEL_SKYLIB_RELEASE = "0.8.0"
+BAZEL_SKYLIB_SHA256 = 
"2ef429f5d7ce7111263289644d233707dba35e39696377ebab8b0bc701f7818e"
+
+PROTOBUF_COMMIT = "3.9.0"  # July 10, 2019
+PROTOBUF_SHA256 = 
"2ee9dcec820352671eb83e081295ba43f7a4157181dad549024d7070d079cf65"
 
 def protobuf_repositories(bind=True):
+    zlib_repositories(bind)
+
+    http_archive(
+        name = "bazel_skylib",
+        urls = 
["https://github.com/bazelbuild/bazel-skylib/releases/download/"; + 
BAZEL_SKYLIB_RELEASE + "/bazel-skylib." + BAZEL_SKYLIB_RELEASE + ".tar.gz"],
+        sha256 = BAZEL_SKYLIB_SHA256,
+    )
+
     http_archive(
         name = "protobuf_git",
         strip_prefix = "protobuf-" + PROTOBUF_COMMIT,
-        url = "https://github.com/google/protobuf/archive/"; + PROTOBUF_COMMIT 
+ ".tar.gz",
+        url = "https://github.com/google/protobuf/archive/v"; + PROTOBUF_COMMIT 
+ ".tar.gz",
         sha256 = PROTOBUF_SHA256,
     )
 
@@ -158,8 +235,8 @@
             actual = "@googletest_git//:googletest_prod",
         )
 
-GOOGLEAPIS_COMMIT = "5c6df0cd18c6a429eab739fb711c27f6e1393366" # May 14, 2017
-GOOGLEAPIS_SHA256 = 
"c6ce26246232c0f3e78d3a30f087444ec01c8ee64b34d058bfcd4f0f4a387a0b"
+GOOGLEAPIS_COMMIT = "32a10f69e2c9ce15bba13ab1ff928bacebb25160" # May 20, 2019
+GOOGLEAPIS_SHA256 = 
"6861efa8619579e06e70dd4765cdf6cef1ecad6a1a2026ad750541e99552bf71"
 
 def googleapis_repositories(protobuf_repo="@protobuf_git//", bind=True):
     BUILD = """
@@ -199,30 +276,6 @@
 )
 
 cc_proto_library(
-    name = "servicecontrol",
-    srcs = [
-        "google/api/servicecontrol/v1/check_error.proto",
-        "google/api/servicecontrol/v1/distribution.proto",
-        "google/api/servicecontrol/v1/log_entry.proto",
-        "google/api/servicecontrol/v1/metric_value.proto",
-        "google/api/servicecontrol/v1/operation.proto",
-        "google/api/servicecontrol/v1/service_controller.proto",
-        "google/logging/type/http_request.proto",
-        "google/logging/type/log_severity.proto",
-        "google/rpc/error_details.proto",
-        "google/rpc/status.proto",
-        "google/type/money.proto",
-    ],
-    include = ".",
-    visibility = ["//visibility:public"],
-    deps = [
-        ":service_config",
-    ],
-    protoc = "//external:protoc",
-    default_runtime = "//external:protobuf",
-)
-
-cc_proto_library(
     name = "service_config",
     srcs = [
         "google/api/auth.proto",
@@ -234,6 +287,7 @@
         "google/api/documentation.proto",
         "google/api/endpoint.proto",
         "google/api/label.proto",
+        "google/api/launch_stage.proto",
         "google/api/log.proto",
         "google/api/logging.proto",
         "google/api/metric.proto",
@@ -241,6 +295,7 @@
         "google/api/experimental/authorization_config.proto",
         "google/api/monitored_resource.proto",
         "google/api/monitoring.proto",
+        "google/api/resource.proto",
         "google/api/quota.proto",
         "google/api/service.proto",
         "google/api/source_info.proto",
@@ -260,6 +315,7 @@
 
     http_archive(
         name = "googleapis_git",
+        patch_cmds = ["find . -type f -name '*BUILD*' | xargs rm"],
         strip_prefix = "googleapis-" + GOOGLEAPIS_COMMIT,
         url = "https://github.com/googleapis/googleapis/archive/"; + 
GOOGLEAPIS_COMMIT + ".tar.gz",
         build_file_content = BUILD,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/grpc-httpjson-transcoding-20181128/src/include/grpc_transcoding/path_matcher.h
 
new/grpc-httpjson-transcoding-20190920/src/include/grpc_transcoding/path_matcher.h
--- 
old/grpc-httpjson-transcoding-20181128/src/include/grpc_transcoding/path_matcher.h
  2018-11-28 20:24:54.000000000 +0100
+++ 
new/grpc-httpjson-transcoding-20190920/src/include/grpc_transcoding/path_matcher.h
  2019-09-20 19:13:03.000000000 +0200
@@ -17,10 +17,10 @@
 
 #include <cstddef>
 #include <memory>
-#include <set>
 #include <sstream>
 #include <string>
 #include <unordered_map>
+#include <unordered_set>
 
 #include "http_template.h"
 #include "path_matcher_node.h"
@@ -71,13 +71,13 @@
   // registered to this node.
   std::unique_ptr<PathMatcherNode> root_ptr_;
   // Holds the set of custom verbs found in configured templates.
-  std::set<std::string> custom_verbs_;
+  std::unordered_set<std::string> custom_verbs_;
   // Data we store per each registered method
   struct MethodData {
     Method method;
     std::vector<HttpTemplate::Variable> variables;
     std::string body_field_path;
-    std::set<std::string> system_query_parameter_names;
+    std::unordered_set<std::string> system_query_parameter_names;
   };
   // The info associated with each method. The path matcher nodes
   // will hold pointers to MethodData objects in this vector.
@@ -105,10 +105,11 @@
   // Registrations are one-to-one. If this function is called more than once, 
it
   // replaces the existing method. Only the last registered method is stored.
   // Return false if path is an invalid http template.
-  bool Register(const std::string& http_method, const std::string& path,
-                const std::string& body_field_path,
-                const std::set<std::string>& system_query_parameter_names,
-                Method method);
+  bool Register(
+      const std::string& http_method, const std::string& path,
+      const std::string& body_field_path,
+      const std::unordered_set<std::string>& system_query_parameter_names,
+      Method method);
   bool Register(const std::string& http_method, const std::string& path,
                 const std::string& body_field_path, Method method);
 
@@ -129,7 +130,7 @@
   // TODO: Perhaps this should not be at this level because there will
   // be multiple templates in different services on a server. Consider moving
   // this to PathMatcherNode.
-  std::set<std::string> custom_verbs_;
+  std::unordered_set<std::string> custom_verbs_;
   typedef typename PathMatcher<Method>::MethodData MethodData;
   std::vector<std::unique_ptr<MethodData>> methods_;
 
@@ -291,7 +292,8 @@
 
 template <class VariableBinding>
 void ExtractBindingsFromQueryParameters(
-    const std::string& query_params, const std::set<std::string>& 
system_params,
+    const std::string& query_params,
+    const std::unordered_set<std::string>& system_params,
     std::vector<VariableBinding>* bindings) {
   // The bindings in URL the query parameters have the following form:
   //      <field_path1>=value1&<field_path2>=value2&...&<field_pathN>=valueN
@@ -476,7 +478,8 @@
 bool PathMatcherBuilder<Method>::Register(
     const std::string& http_method, const std::string& http_template,
     const std::string& body_field_path,
-    const std::set<std::string>& system_query_parameter_names, Method method) {
+    const std::unordered_set<std::string>& system_query_parameter_names,
+    Method method) {
   std::unique_ptr<HttpTemplate> ht(HttpTemplate::Parse(http_template));
   if (nullptr == ht) {
     return false;
@@ -505,7 +508,8 @@
                                           const std::string& http_template,
                                           const std::string& body_field_path,
                                           Method method) {
-  return Register(http_method, http_template, body_field_path, {}, method);
+  return Register(http_method, http_template, body_field_path,
+                  std::unordered_set<std::string>(), method);
 }
 
 }  // namespace transcoding
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/grpc-httpjson-transcoding-20181128/src/include/grpc_transcoding/path_matcher_utility.h
 
new/grpc-httpjson-transcoding-20190920/src/include/grpc_transcoding/path_matcher_utility.h
--- 
old/grpc-httpjson-transcoding-20181128/src/include/grpc_transcoding/path_matcher_utility.h
  2018-11-28 20:24:54.000000000 +0100
+++ 
new/grpc-httpjson-transcoding-20190920/src/include/grpc_transcoding/path_matcher_utility.h
  2019-09-20 19:13:03.000000000 +0200
@@ -28,21 +28,22 @@
   template <class Method>
   static bool RegisterByHttpRule(
       PathMatcherBuilder<Method> &pmb, const google::api::HttpRule &http_rule,
-      const std::set<std::string> &system_query_parameter_names,
+      const std::unordered_set<std::string> &system_query_parameter_names,
       const Method &method);
 
   template <class Method>
   static bool RegisterByHttpRule(PathMatcherBuilder<Method> &pmb,
                                  const google::api::HttpRule &http_rule,
                                  const Method &method) {
-    return RegisterByHttpRule(pmb, http_rule, {}, method);
+    return RegisterByHttpRule(pmb, http_rule, 
std::unordered_set<std::string>(),
+                              method);
   }
 };
 
 template <class Method>
 bool PathMatcherUtility::RegisterByHttpRule(
     PathMatcherBuilder<Method> &pmb, const google::api::HttpRule &http_rule,
-    const std::set<std::string> &system_query_parameter_names,
+    const std::unordered_set<std::string> &system_query_parameter_names,
     const Method &method) {
   bool ok = true;
   switch (http_rule.pattern_case()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/grpc-httpjson-transcoding-20181128/src/message_stream.cc 
new/grpc-httpjson-transcoding-20190920/src/message_stream.cc
--- old/grpc-httpjson-transcoding-20181128/src/message_stream.cc        
2018-11-28 20:24:54.000000000 +0100
+++ new/grpc-httpjson-transcoding-20190920/src/message_stream.cc        
2019-09-20 19:13:03.000000000 +0200
@@ -71,7 +71,7 @@
 
   bool Skip(int) { return false; }  // Not implemented (no need)
 
-  google::protobuf::int64 ByteCount() const { return 0; }  // Not implemented
+  int64_t ByteCount() const { return 0; }  // Not implemented
 
   int64_t BytesAvailable() const {
     if (position_ >= message_.size()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/grpc-httpjson-transcoding-20181128/src/request_message_translator.cc 
new/grpc-httpjson-transcoding-20190920/src/request_message_translator.cc
--- old/grpc-httpjson-transcoding-20181128/src/request_message_translator.cc    
2018-11-28 20:24:54.000000000 +0100
+++ new/grpc-httpjson-transcoding-20190920/src/request_message_translator.cc    
2019-09-20 19:13:03.000000000 +0200
@@ -58,6 +58,9 @@
       writer_pipeline_(&proto_writer_),
       output_delimiter_(output_delimiter),
       finished_(false) {
+  // Relax Base64 decoding to support RFC 2045 Base64
+  proto_writer_.set_use_strict_base64_decoding(false);
+
   // Create a RequestWeaver if we have variable bindings to weave
   if (!request_info.variable_bindings.empty()) {
     request_weaver_.reset(new RequestWeaver(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/grpc-httpjson-transcoding-20181128/src/type_helper.cc 
new/grpc-httpjson-transcoding-20190920/src/type_helper.cc
--- old/grpc-httpjson-transcoding-20181128/src/type_helper.cc   2018-11-28 
20:24:54.000000000 +0100
+++ new/grpc-httpjson-transcoding-20190920/src/type_helper.cc   2019-09-20 
19:13:03.000000000 +0200
@@ -139,7 +139,7 @@
     std::vector<const pb::Field*>* field_path_out) const {
   // Split the field names & call ResolveFieldPath()
   const std::vector<std::string> field_names =
-      absl::StrSplit(field_path_str, ".", absl::SkipEmpty());
+      absl::StrSplit(field_path_str, '.', absl::SkipEmpty());
   return ResolveFieldPath(type, field_names, field_path_out);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/grpc-httpjson-transcoding-20181128/test/path_matcher_test.cc 
new/grpc-httpjson-transcoding-20190920/test/path_matcher_test.cc
--- old/grpc-httpjson-transcoding-20181128/test/path_matcher_test.cc    
2018-11-28 20:24:54.000000000 +0100
+++ new/grpc-httpjson-transcoding-20190920/test/path_matcher_test.cc    
2019-09-20 19:13:03.000000000 +0200
@@ -99,7 +99,7 @@
 
   MethodInfo* AddPathWithSystemParams(
       std::string http_method, std::string http_template,
-      const std::set<std::string>* system_params) {
+      const std::unordered_set<std::string>* system_params) {
     auto method = new MethodInfo();
     if (!builder_.Register(http_method, http_template, std::string(),
                            *system_params, method)) {
@@ -150,7 +150,7 @@
   PathMatcherBuilder<MethodInfo*> builder_;
   PathMatcherPtr<MethodInfo*> matcher_;
   std::vector<std::unique_ptr<MethodInfo>> stored_methods_;
-  std::set<std::string> empty_set_;
+  std::unordered_set<std::string> empty_set_;
 };
 
 TEST_F(PathMatcherTest, WildCardMatchesRoot) {
@@ -712,7 +712,7 @@
 }
 
 TEST_F(PathMatcherTest, VariableBindingsWithQueryParamsAndSystemParams) {
-  std::set<std::string> system_params{"key", "api_key"};
+  std::unordered_set<std::string> system_params{"key", "api_key"};
   MethodInfo* a_b = AddPathWithSystemParams("GET", "/a/{x}/b", &system_params);
   Build();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/grpc-httpjson-transcoding-20181128/test/path_matcher_utility_test.cc 
new/grpc-httpjson-transcoding-20190920/test/path_matcher_utility_test.cc
--- old/grpc-httpjson-transcoding-20181128/test/path_matcher_utility_test.cc    
2018-11-28 20:24:54.000000000 +0100
+++ new/grpc-httpjson-transcoding-20190920/test/path_matcher_utility_test.cc    
2019-09-20 19:13:03.000000000 +0200
@@ -37,11 +37,11 @@
  public:
   MOCK_METHOD5(Register,
                bool(const std::string&, const std::string&, const std::string&,
-                    const std::set<std::string>&, const TestMethod*));
+                    const std::unordered_set<std::string>&, const 
TestMethod*));
 };
-}
-}
-}
+}  // namespace transcoding
+}  // namespace grpc
+}  // namespace google
 
 class PathMatcherUtilityTest : public ::testing::Test {
  public:
@@ -63,13 +63,15 @@
   HttpRule http_rule;
   http_rule.set_get("/path");
   http_rule.set_body("body");
-  EXPECT_CALL(pmb, Register(Eq("GET"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>()), Eq(&method1_)))
+  EXPECT_CALL(pmb,
+              Register(Eq("GET"), Eq("/path"), Eq("body"),
+                       Eq(std::unordered_set<std::string>()), Eq(&method1_)))
       .WillOnce(Return(true));
   ASSERT_TRUE(
       PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, &method1_));
-  EXPECT_CALL(pmb, Register(Eq("GET"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>{"key"}), Eq(&method2_)))
+  EXPECT_CALL(
+      pmb, Register(Eq("GET"), Eq("/path"), Eq("body"),
+                    Eq(std::unordered_set<std::string>{"key"}), Eq(&method2_)))
       .WillOnce(Return(false));
   ASSERT_FALSE(PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, {"key"},
                                                       &method2_));
@@ -79,13 +81,15 @@
   HttpRule http_rule;
   http_rule.set_put("/path");
   http_rule.set_body("body");
-  EXPECT_CALL(pmb, Register(Eq("PUT"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>()), Eq(&method1_)))
+  EXPECT_CALL(pmb,
+              Register(Eq("PUT"), Eq("/path"), Eq("body"),
+                       Eq(std::unordered_set<std::string>()), Eq(&method1_)))
       .WillOnce(Return(true));
   ASSERT_TRUE(
       PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, &method1_));
-  EXPECT_CALL(pmb, Register(Eq("PUT"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>{"key"}), Eq(&method2_)))
+  EXPECT_CALL(
+      pmb, Register(Eq("PUT"), Eq("/path"), Eq("body"),
+                    Eq(std::unordered_set<std::string>{"key"}), Eq(&method2_)))
       .WillOnce(Return(false));
   ASSERT_FALSE(PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, {"key"},
                                                       &method2_));
@@ -95,13 +99,15 @@
   HttpRule http_rule;
   http_rule.set_post("/path");
   http_rule.set_body("body");
-  EXPECT_CALL(pmb, Register(Eq("POST"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>()), Eq(&method1_)))
+  EXPECT_CALL(pmb,
+              Register(Eq("POST"), Eq("/path"), Eq("body"),
+                       Eq(std::unordered_set<std::string>()), Eq(&method1_)))
       .WillOnce(Return(true));
   ASSERT_TRUE(
       PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, &method1_));
-  EXPECT_CALL(pmb, Register(Eq("POST"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>{"key"}), Eq(&method2_)))
+  EXPECT_CALL(
+      pmb, Register(Eq("POST"), Eq("/path"), Eq("body"),
+                    Eq(std::unordered_set<std::string>{"key"}), Eq(&method2_)))
       .WillOnce(Return(false));
   ASSERT_FALSE(PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, {"key"},
                                                       &method2_));
@@ -111,13 +117,15 @@
   HttpRule http_rule;
   http_rule.set_delete_("/path");
   http_rule.set_body("body");
-  EXPECT_CALL(pmb, Register(Eq("DELETE"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>()), Eq(&method1_)))
+  EXPECT_CALL(pmb,
+              Register(Eq("DELETE"), Eq("/path"), Eq("body"),
+                       Eq(std::unordered_set<std::string>()), Eq(&method1_)))
       .WillOnce(Return(true));
   ASSERT_TRUE(
       PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, &method1_));
-  EXPECT_CALL(pmb, Register(Eq("DELETE"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>{"key"}), Eq(&method2_)))
+  EXPECT_CALL(
+      pmb, Register(Eq("DELETE"), Eq("/path"), Eq("body"),
+                    Eq(std::unordered_set<std::string>{"key"}), Eq(&method2_)))
       .WillOnce(Return(false));
   ASSERT_FALSE(PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, {"key"},
                                                       &method2_));
@@ -127,13 +135,15 @@
   HttpRule http_rule;
   http_rule.set_patch("/path");
   http_rule.set_body("body");
-  EXPECT_CALL(pmb, Register(Eq("PATCH"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>()), Eq(&method1_)))
+  EXPECT_CALL(pmb,
+              Register(Eq("PATCH"), Eq("/path"), Eq("body"),
+                       Eq(std::unordered_set<std::string>()), Eq(&method1_)))
       .WillOnce(Return(true));
   ASSERT_TRUE(
       PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, &method1_));
-  EXPECT_CALL(pmb, Register(Eq("PATCH"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>{"key"}), Eq(&method2_)))
+  EXPECT_CALL(
+      pmb, Register(Eq("PATCH"), Eq("/path"), Eq("body"),
+                    Eq(std::unordered_set<std::string>{"key"}), Eq(&method2_)))
       .WillOnce(Return(false));
   ASSERT_FALSE(PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, {"key"},
                                                       &method2_));
@@ -144,13 +154,15 @@
   http_rule.mutable_custom()->set_kind("OPTIONS");
   http_rule.mutable_custom()->set_path("/custom_path");
   http_rule.set_body("body");
-  EXPECT_CALL(pmb, Register(Eq("OPTIONS"), Eq("/custom_path"), Eq("body"),
-                            Eq(std::set<std::string>()), Eq(&method1_)))
+  EXPECT_CALL(pmb,
+              Register(Eq("OPTIONS"), Eq("/custom_path"), Eq("body"),
+                       Eq(std::unordered_set<std::string>()), Eq(&method1_)))
       .WillOnce(Return(true));
   ASSERT_TRUE(
       PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, &method1_));
-  EXPECT_CALL(pmb, Register(Eq("OPTIONS"), Eq("/custom_path"), Eq("body"),
-                            Eq(std::set<std::string>{"key"}), Eq(&method2_)))
+  EXPECT_CALL(
+      pmb, Register(Eq("OPTIONS"), Eq("/custom_path"), Eq("body"),
+                    Eq(std::unordered_set<std::string>{"key"}), Eq(&method2_)))
       .WillOnce(Return(false));
   ASSERT_FALSE(PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, {"key"},
                                                       &method2_));
@@ -173,26 +185,32 @@
   HttpRule& custom_http_rule3 = *http_rule.add_additional_bindings();
   custom_http_rule3.set_put("/put_path");
 
-  EXPECT_CALL(pmb, Register(Eq("GET"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>()), Eq(&method1_)))
+  EXPECT_CALL(pmb,
+              Register(Eq("GET"), Eq("/path"), Eq("body"),
+                       Eq(std::unordered_set<std::string>()), Eq(&method1_)))
       .WillOnce(Return(true));
-  EXPECT_CALL(pmb, Register(Eq("OPTIONS"), Eq("/custom_path"), Eq("body1"),
-                            Eq(std::set<std::string>()), Eq(&method1_)))
+  EXPECT_CALL(pmb,
+              Register(Eq("OPTIONS"), Eq("/custom_path"), Eq("body1"),
+                       Eq(std::unordered_set<std::string>()), Eq(&method1_)))
       .WillOnce(Return(true));
-  EXPECT_CALL(pmb, Register(Eq("HEAD"), Eq("/path"), Eq(""),
-                            Eq(std::set<std::string>()), Eq(&method1_)))
+  EXPECT_CALL(pmb,
+              Register(Eq("HEAD"), Eq("/path"), Eq(""),
+                       Eq(std::unordered_set<std::string>()), Eq(&method1_)))
       .WillOnce(Return(true));
-  EXPECT_CALL(pmb, Register(Eq("PUT"), Eq("/put_path"), Eq(""),
-                            Eq(std::set<std::string>()), Eq(&method1_)))
+  EXPECT_CALL(pmb,
+              Register(Eq("PUT"), Eq("/put_path"), Eq(""),
+                       Eq(std::unordered_set<std::string>()), Eq(&method1_)))
       .WillOnce(Return(true));
   ASSERT_TRUE(
       PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, &method1_));
 
-  EXPECT_CALL(pmb, Register(Eq("GET"), Eq("/path"), Eq("body"),
-                            Eq(std::set<std::string>{"key"}), Eq(&method2_)))
+  EXPECT_CALL(
+      pmb, Register(Eq("GET"), Eq("/path"), Eq("body"),
+                    Eq(std::unordered_set<std::string>{"key"}), Eq(&method2_)))
       .WillOnce(Return(true));
-  EXPECT_CALL(pmb, Register(Eq("OPTIONS"), Eq("/custom_path"), Eq("body1"),
-                            Eq(std::set<std::string>{"key"}), Eq(&method2_)))
+  EXPECT_CALL(
+      pmb, Register(Eq("OPTIONS"), Eq("/custom_path"), Eq("body1"),
+                    Eq(std::unordered_set<std::string>{"key"}), Eq(&method2_)))
       .WillOnce(Return(false));
   ASSERT_FALSE(PathMatcherUtility::RegisterByHttpRule(pmb, http_rule, {"key"},
                                                       &method2_));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/grpc-httpjson-transcoding-20181128/test/test_common.h 
new/grpc-httpjson-transcoding-20190920/test/test_common.h
--- old/grpc-httpjson-transcoding-20181128/test/test_common.h   2018-11-28 
20:24:54.000000000 +0100
+++ new/grpc-httpjson-transcoding-20190920/test/test_common.h   2019-09-20 
19:13:03.000000000 +0200
@@ -51,8 +51,8 @@
   bool Next(const void** data, int* size);
   void BackUp(int count);
   int64_t BytesAvailable() const;
-  ::google::protobuf::int64 ByteCount() const { return 0; }  // Not implemented
-  bool Skip(int) { return false; }                           // Not implemented
+  int64_t ByteCount() const { return 0; }  // Not implemented
+  bool Skip(int) { return false; }         // Not implemented
 
  private:
   std::deque<std::string> chunks_;


Reply via email to