From 22d7248c973470d15408c88578a4c1806b181bfe Mon Sep 17 00:00:00 2001 From: Bo Yang Date: Tue, 20 Sep 2016 23:34:05 +0000 Subject: Fix bugs for internal integration. --- Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Makefile.am') diff --git a/Makefile.am b/Makefile.am index a4de1bd3..a47a1882 100644 --- a/Makefile.am +++ b/Makefile.am @@ -617,6 +617,7 @@ python_EXTRA_DIST= \ python/google/protobuf/internal/symbol_database_test.py \ python/google/protobuf/internal/test_bad_identifiers.proto \ python/google/protobuf/internal/test_util.py \ + python/google/protobuf/internal/testing_refleaks.py \ python/google/protobuf/internal/text_encoding_test.py \ python/google/protobuf/internal/text_format_test.py \ python/google/protobuf/internal/type_checkers.py \ @@ -648,6 +649,8 @@ python_EXTRA_DIST= \ python/google/protobuf/pyext/map_container.h \ python/google/protobuf/pyext/message.cc \ python/google/protobuf/pyext/message.h \ + python/google/protobuf/pyext/message_factory.cc \ + python/google/protobuf/pyext/message_factory.h \ python/google/protobuf/pyext/message_module.cc \ python/google/protobuf/pyext/proto2_api_test.proto \ python/google/protobuf/pyext/python.proto \ @@ -749,6 +752,7 @@ js_EXTRA_DIST= \ js/gulpfile.js \ js/jasmine.json \ js/map.js \ + js/maps_test.js \ js/message.js \ js/message_test.js \ js/node_loader.js \ -- cgit v1.2.3 From a428e42072765993ff674fda72863c9f1aa2d268 Mon Sep 17 00:00:00 2001 From: Bo Yang Date: Fri, 23 Sep 2016 18:37:37 -0700 Subject: Add php files for make dist. --- Makefile.am | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++- configure.ac | 2 +- post_process_dist.sh | 2 +- tests.sh | 2 +- 4 files changed, 55 insertions(+), 4 deletions(-) (limited to 'Makefile.am') diff --git a/Makefile.am b/Makefile.am index a47a1882..83f1043d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -571,6 +571,57 @@ objectivec_EXTRA_DIST= \ objectivec/Tests/UnitTests-Info.plist \ Protobuf.podspec +php_EXTRA_DIST= \ + php/src/phpdoc.dist.xml \ + php/src/Google/Protobuf/Internal/DescriptorPool.php \ + php/src/Google/Protobuf/Internal/OneofField.php \ + php/src/Google/Protobuf/Internal/MapEntry.php \ + php/src/Google/Protobuf/Internal/Type.php \ + php/src/Google/Protobuf/Internal/InputStream.php \ + php/src/Google/Protobuf/Internal/OutputStream.php \ + php/src/Google/Protobuf/Internal/MessageBuilderContext.php \ + php/src/Google/Protobuf/Internal/MapField.php \ + php/src/Google/Protobuf/Internal/RepeatedField.php \ + php/src/Google/Protobuf/Internal/Message.php \ + php/src/Google/Protobuf/Internal/GPBWire.php \ + php/src/Google/Protobuf/Internal/GPBType.php \ + php/src/Google/Protobuf/Internal/GPBLabel.php \ + php/src/Google/Protobuf/Internal/EnumBuilderContext.php \ + php/src/Google/Protobuf/Internal/GPBUtil.php \ + php/src/Google/Protobuf/descriptor_internal.pb.php \ + php/src/Google/Protobuf/descriptor.php \ + php/tests/encode_decode_test.php \ + php/tests/test.sh \ + php/tests/generated_class_test.php \ + php/tests/array_test.php \ + php/tests/php_implementation_test.php \ + php/tests/test_include.proto \ + php/tests/test_include.pb.php \ + php/tests/map_field_test.php \ + php/tests/test_base.php \ + php/tests/test_util.php \ + php/tests/test.proto \ + php/tests/test.pb.php \ + php/tests/memory_leak_test.php \ + php/README.md \ + php/ext/google/protobuf/utf8.h \ + php/ext/google/protobuf/message.c \ + php/ext/google/protobuf/utf8.c \ + php/ext/google/protobuf/package.xml \ + php/ext/google/protobuf/upb.h \ + php/ext/google/protobuf/array.c \ + php/ext/google/protobuf/encode_decode.c \ + php/ext/google/protobuf/protobuf.h \ + php/ext/google/protobuf/type_check.c \ + php/ext/google/protobuf/def.c \ + php/ext/google/protobuf/storage.c \ + php/ext/google/protobuf/map.c \ + php/ext/google/protobuf/config.m4 \ + php/ext/google/protobuf/upb.c \ + php/ext/google/protobuf/protobuf.c \ + phpunit.xml \ + composer.json + python_EXTRA_DIST= \ python/MANIFEST.in \ python/google/__init__.py \ @@ -768,7 +819,7 @@ js_EXTRA_DIST= \ js/testbinary.proto \ js/testempty.proto -all_EXTRA_DIST=$(csharp_EXTRA_DIST) $(java_EXTRA_DIST) $(javanano_EXTRA_DIST) $(objectivec_EXTRA_DIST) $(python_EXTRA_DIST) $(ruby_EXTRA_DIST) $(js_EXTRA_DIST) +all_EXTRA_DIST=$(csharp_EXTRA_DIST) $(java_EXTRA_DIST) $(javanano_EXTRA_DIST) $(objectivec_EXTRA_DIST) $(php_EXTRA_DIST) $(python_EXTRA_DIST) $(ruby_EXTRA_DIST) $(js_EXTRA_DIST) EXTRA_DIST = $(@DIST_LANG@_EXTRA_DIST) \ autogen.sh \ diff --git a/configure.ac b/configure.ac index a454bbe0..896f3471 100644 --- a/configure.ac +++ b/configure.ac @@ -31,7 +31,7 @@ AC_CONFIG_MACRO_DIR([m4]) AC_ARG_VAR(DIST_LANG, [language to include in the distribution package (i.e., make dist)]) case "$DIST_LANG" in "") DIST_LANG=all ;; - all | cpp | csharp | java | python | javanano | objectivec | ruby | js) ;; + all | cpp | csharp | java | python | javanano | objectivec | ruby | js | php) ;; *) AC_MSG_FAILURE([unknown language: $DIST_LANG]) ;; esac AC_SUBST(DIST_LANG) diff --git a/post_process_dist.sh b/post_process_dist.sh index 82736bd0..a5f95800 100755 --- a/post_process_dist.sh +++ b/post_process_dist.sh @@ -27,7 +27,7 @@ fi set -ex -LANGUAGES="cpp csharp java javanano js objectivec python ruby" +LANGUAGES="cpp csharp java javanano js objectivec python ruby php" BASENAME=`basename $1 .tar.gz` VERSION=${BASENAME:9} diff --git a/tests.sh b/tests.sh index 94a92018..c8c7dabc 100755 --- a/tests.sh +++ b/tests.sh @@ -51,7 +51,7 @@ build_cpp_distcheck() { make dist # List all files that should be included in the distribution package. - git ls-files | grep "^\(java\|python\|objectivec\|csharp\|js\|ruby\|cmake\|examples\)" |\ + git ls-files | grep "^\(java\|python\|objectivec\|csharp\|js\|ruby\|php\|cmake\|examples\)" |\ grep -v ".gitignore" | grep -v "java/compatibility_tests" > dist.lst # Unzip the dist tar file. DIST=`ls *.tar.gz` -- cgit v1.2.3 From b0d62dd71388813658222172a42383eca2e37c06 Mon Sep 17 00:00:00 2001 From: Bo Yang Date: Thu, 6 Oct 2016 10:23:34 -0700 Subject: Add csharp/build_tools.sh for dist check. --- Makefile.am | 1 + 1 file changed, 1 insertion(+) (limited to 'Makefile.am') diff --git a/Makefile.am b/Makefile.am index 83f1043d..69d162e1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -54,6 +54,7 @@ csharp_EXTRA_DIST= \ csharp/Google.Protobuf.Tools.nuspec \ csharp/README.md \ csharp/build_packages.bat \ + csharp/build_tools.sh \ csharp/buildall.sh \ csharp/generate_protos.sh \ csharp/keys/Google.Protobuf.public.snk \ -- cgit v1.2.3 From 60d95f36c0081a03b947c2b625c10841bb19736c Mon Sep 17 00:00:00 2001 From: Paul Yang Date: Tue, 11 Oct 2016 10:36:25 -0700 Subject: Fix the bug that message without namespace is not found in the descriptor pool. (#2240) --- Makefile.am | 2 ++ php/ext/google/protobuf/def.c | 46 +++++++++++++++++++--------------- php/src/Google/Protobuf/descriptor.php | 10 +++++--- php/tests/generated_class_test.php | 9 +++++++ php/tests/test_no_namespace.pb.php | 34 +++++++++++++++++++++++++ php/tests/test_no_namespace.proto | 5 ++++ 6 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 php/tests/test_no_namespace.pb.php create mode 100644 php/tests/test_no_namespace.proto (limited to 'Makefile.am') diff --git a/Makefile.am b/Makefile.am index 69d162e1..de197088 100644 --- a/Makefile.am +++ b/Makefile.am @@ -600,6 +600,8 @@ php_EXTRA_DIST= \ php/tests/test_include.pb.php \ php/tests/map_field_test.php \ php/tests/test_base.php \ + php/tests/test_no_namespace.proto \ + php/tests/test_no_namespace.pb.php \ php/tests/test_util.php \ php/tests/test.proto \ php/tests/test.pb.php \ diff --git a/php/ext/google/protobuf/def.c b/php/ext/google/protobuf/def.c index 156eca07..5a8c3c25 100644 --- a/php/ext/google/protobuf/def.c +++ b/php/ext/google/protobuf/def.c @@ -250,28 +250,36 @@ PHP_METHOD(DescriptorPool, getGeneratedPool) { RETURN_ZVAL(generated_pool_php, 1, 0); } -static void convert_to_class_name_inplace(char *proto_name, - size_t pkg_name_len) { +static void convert_to_class_name_inplace(char *class_name, + const char* fullname, + const char* package_name) { size_t i; bool first_char = false; - - for (i = 0; i <= pkg_name_len + 1; i++) { - // PHP package uses camel case. - if (!first_char && proto_name[i] != '.') { - first_char = true; - proto_name[i] += 'A' - 'a'; - } - // php packages are divided by '\'. - if (proto_name[i] == '.') { - first_char = false; - proto_name[i] = '\\'; + size_t pkg_name_len = package_name == NULL ? 0 : strlen(package_name); + + if (pkg_name_len == 0) { + strcpy(class_name, fullname); + } else { + class_name[0] = '.'; + strcpy(&class_name[1], fullname); + for (i = 0; i <= pkg_name_len + 1; i++) { + // PHP package uses camel case. + if (!first_char && class_name[i] != '.') { + first_char = true; + class_name[i] += 'A' - 'a'; + } + // php packages are divided by '\'. + if (class_name[i] == '.') { + first_char = false; + class_name[i] = '\\'; + } } } // Submessage is concatenated with its containing messages by '_'. - for (i = pkg_name_len; i < strlen(proto_name); i++) { - if (proto_name[i] == '.') { - proto_name[i] = '_'; + for (i = pkg_name_len; i < strlen(class_name); i++) { + if (class_name[i] == '.') { + class_name[i] = '_'; } } } @@ -325,10 +333,8 @@ PHP_METHOD(DescriptorPool, internalAddGeneratedFile) { /* Prepend '.' to package name to make it absolute. */ \ const char *fullname = upb_##def_type_lower##_fullname(def_type_lower); \ char *klass_name = ecalloc(sizeof(char), 2 + strlen(fullname)); \ - klass_name[0] = '.'; \ - strcpy(&klass_name[1], fullname); \ - size_t pkg_name_len = strlen(upb_filedef_package(files[0])); \ - convert_to_class_name_inplace(klass_name, pkg_name_len); \ + convert_to_class_name_inplace(klass_name, fullname, \ + upb_filedef_package(files[0])); \ zend_class_entry **pce; \ if (zend_lookup_class(klass_name, strlen(klass_name), &pce TSRMLS_CC) == \ FAILURE) { \ diff --git a/php/src/Google/Protobuf/descriptor.php b/php/src/Google/Protobuf/descriptor.php index afe08227..e5cff0ba 100644 --- a/php/src/Google/Protobuf/descriptor.php +++ b/php/src/Google/Protobuf/descriptor.php @@ -240,9 +240,13 @@ function getFullClassName( $class_name_without_package = implode('_', array_map('ucwords', explode('.', $message_name_without_package))); - $classname = - implode('\\', array_map('ucwords', explode('.', $package))). - "\\".$class_name_without_package; + if ($package === "") { + $classname = $class_name_without_package; + } else { + $classname = + implode('\\', array_map('ucwords', explode('.', $package))). + "\\".$class_name_without_package; + } } class OneofDescriptor diff --git a/php/tests/generated_class_test.php b/php/tests/generated_class_test.php index 56466cae..d1a0bd51 100644 --- a/php/tests/generated_class_test.php +++ b/php/tests/generated_class_test.php @@ -1,6 +1,7 @@ assertSame('', $m->getOneofString()); $this->assertSame(1, $m->getOneofMessage()->getA()); } + + ######################################################### + # Test oneof field. + ######################################################### + + public function testMessageWithoutNamespace() { + $m = new NoNameSpace(); + } } diff --git a/php/tests/test_no_namespace.pb.php b/php/tests/test_no_namespace.pb.php new file mode 100644 index 00000000..2f92c955 --- /dev/null +++ b/php/tests/test_no_namespace.pb.php @@ -0,0 +1,34 @@ +a; + } + + public function setA($var) + { + GPBUtil::checkInt32($var); + $this->a = $var; + } + +} + +$pool = DescriptorPool::getGeneratedPool(); + +$pool->internalAddGeneratedFile(hex2bin( + "0a3b0a17746573745f6e6f5f6e616d6573706163652e70726f746f22180a" . + "0b4e6f4e616d65537061636512090a0161180120012805620670726f746f" . + "33" +)); + diff --git a/php/tests/test_no_namespace.proto b/php/tests/test_no_namespace.proto new file mode 100644 index 00000000..4331aeab --- /dev/null +++ b/php/tests/test_no_namespace.proto @@ -0,0 +1,5 @@ +syntax = "proto3"; + +message NoNameSpace { + int32 a = 1; +} -- cgit v1.2.3