Modified: subversion/branches/swig-py3/subversion/tests/libsvn_fs/fs-test.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/libsvn_fs/fs-test.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/libsvn_fs/fs-test.c (original) +++ subversion/branches/swig-py3/subversion/tests/libsvn_fs/fs-test.c Wed Nov 28 21:25:32 2018 @@ -7369,6 +7369,78 @@ closest_copy_test_svn_4677(const svn_tes return SVN_NO_ERROR; } +static svn_error_t * +test_closest_copy_file_replaced_with_dir(const svn_test_opts_t *opts, + apr_pool_t *pool) +{ + svn_fs_t *fs; + svn_fs_txn_t *txn; + svn_fs_root_t *txn_root; + svn_fs_root_t *rev_root; + svn_revnum_t youngest_rev; + svn_fs_root_t *copy_root; + const char *copy_path; + + /* Prepare a filesystem. */ + SVN_ERR(svn_test__create_fs(&fs, "test-closest-copy-file-replaced-with-dir", + opts, pool)); + + youngest_rev = 0; + + /* Modeled after the case described in the thread: + "[PATCH] A test for "Can't get entries" error" + https://lists.apache.org/thread.html/693a95b0da834387e78a7f08df2392b634397d32f37428c81c02f8c5@%3Cdev.subversion.apache.org%3E + */ + /* r1: Add a directory with a file. */ + SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool)); + SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool)); + SVN_ERR(svn_fs_make_dir(txn_root, "/A", pool)); + SVN_ERR(svn_fs_make_file(txn_root, "/A/mu", pool)); + SVN_ERR(test_commit_txn(&youngest_rev, txn, NULL, pool)); + SVN_TEST_INT_ASSERT(youngest_rev, 1); + + /* r2: Copy the directory. */ + SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool)); + SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool)); + SVN_ERR(svn_fs_revision_root(&rev_root, fs, 1, pool)); + SVN_ERR(svn_fs_copy(rev_root, "/A", txn_root, "/B", pool)); + SVN_ERR(test_commit_txn(&youngest_rev, txn, NULL, pool)); + SVN_TEST_INT_ASSERT(youngest_rev, 2); + + /* r3: Delete the file. */ + SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool)); + SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool)); + SVN_ERR(svn_fs_delete(txn_root, "/B/mu", pool)); + SVN_ERR(test_commit_txn(&youngest_rev, txn, NULL, pool)); + SVN_TEST_INT_ASSERT(youngest_rev, 3); + + /* r4: Replace the file with a new directory containing a file. */ + SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool)); + SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool)); + SVN_ERR(svn_fs_make_dir(txn_root, "/B/mu", pool)); + SVN_ERR(svn_fs_make_file(txn_root, "/B/mu/iota", pool)); + SVN_ERR(test_commit_txn(&youngest_rev, txn, NULL, pool)); + SVN_TEST_INT_ASSERT(youngest_rev, 4); + + /* Test a couple of svn_fs_closest_copy() calls; the second call used + to fail with an unexpected SVN_ERR_FS_NOT_DIRECTORY error. */ + + SVN_ERR(svn_fs_revision_root(&rev_root, fs, 2, pool)); + SVN_ERR(svn_fs_closest_copy(©_root, ©_path, rev_root, "/B/mu", pool)); + + SVN_TEST_ASSERT(copy_root != NULL); + SVN_TEST_INT_ASSERT(svn_fs_revision_root_revision(copy_root), 2); + SVN_TEST_STRING_ASSERT(copy_path, "/B"); + + SVN_ERR(svn_fs_revision_root(&rev_root, fs, 4, pool)); + SVN_ERR(svn_fs_closest_copy(©_root, ©_path, rev_root, "/B/mu/iota", pool)); + + SVN_TEST_ASSERT(copy_root == NULL); + SVN_TEST_ASSERT(copy_path == NULL); + + return SVN_NO_ERROR; +} + /* ------------------------------------------------------------------------ */ /* The test table. */ @@ -7513,6 +7585,8 @@ static struct svn_test_descriptor_t test "test rep-sharing on content rather than SHA1"), SVN_TEST_OPTS_PASS(closest_copy_test_svn_4677, "test issue SVN-4677 regression"), + SVN_TEST_OPTS_PASS(test_closest_copy_file_replaced_with_dir, + "svn_fs_closest_copy after replacing file with dir"), SVN_TEST_NULL };
Modified: subversion/branches/swig-py3/subversion/tests/libsvn_repos/authz-test.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/libsvn_repos/authz-test.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/libsvn_repos/authz-test.c (original) +++ subversion/branches/swig-py3/subversion/tests/libsvn_repos/authz-test.c Wed Nov 28 21:25:32 2018 @@ -444,6 +444,73 @@ test_global_rights(apr_pool_t *pool) return SVN_NO_ERROR; } +static svn_error_t * +issue_4741_groups(apr_pool_t *pool) +{ + const char rules[] = + "[groups]" NL + "g1 = userA" NL + "g2 = userB" NL + "g = @g1, @g2" NL + "" NL + "[/]" NL + "* =" NL + "@g = rw" NL + ; + + svn_stringbuf_t *buf = svn_stringbuf_create(rules, pool); + svn_stream_t *stream = svn_stream_from_stringbuf(buf, pool); + svn_authz_t *authz; + svn_boolean_t access_granted; + + SVN_ERR(svn_repos_authz_parse(&authz, stream, NULL, pool)); + + SVN_ERR(svn_repos_authz_check_access(authz, "repo", "/", "userA", + svn_authz_write, &access_granted, + pool)); + SVN_TEST_ASSERT(access_granted == TRUE); + + SVN_ERR(svn_repos_authz_check_access(authz, "repo", "/", "userB", + svn_authz_write, &access_granted, + pool)); + SVN_TEST_ASSERT(access_granted == TRUE); + + return SVN_NO_ERROR; +} + +static svn_error_t * +reposful_reposless_stanzas_inherit(apr_pool_t *pool) +{ + const char rules[] = + "[groups]" NL + "company = user1, user2, user3" NL + "customer = customer1, customer2" NL + "" NL + "# company can read-write on everything" NL + "[/]" NL + "@company = rw" NL + "" NL + "[project1:/]" NL + "@customer = r" NL + "" NL + "[project2:/]" NL; + + svn_stringbuf_t *buf = svn_stringbuf_create(rules, pool); + svn_stream_t *stream = svn_stream_from_stringbuf(buf, pool); + svn_authz_t *authz; + svn_boolean_t access_granted; + + SVN_ERR(svn_repos_authz_parse(&authz, stream, NULL, pool)); + + SVN_ERR(svn_repos_authz_check_access(authz, "project1", "/foo", "user1", + svn_authz_write | svn_authz_recursive, + &access_granted, + pool)); + SVN_TEST_ASSERT(access_granted == TRUE); + + return SVN_NO_ERROR; +} + static int max_threads = 4; static struct svn_test_descriptor_t test_funcs[] = @@ -453,6 +520,10 @@ static struct svn_test_descriptor_t test "test svn_authz__parse"), SVN_TEST_PASS2(test_global_rights, "test svn_authz__get_global_rights"), + SVN_TEST_PASS2(issue_4741_groups, + "issue 4741 groups"), + SVN_TEST_XFAIL2(reposful_reposless_stanzas_inherit, + "[foo:/] inherits [/]"), SVN_TEST_NULL }; Modified: subversion/branches/swig-py3/subversion/tests/libsvn_repos/repos-test.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/libsvn_repos/repos-test.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/libsvn_repos/repos-test.c (original) +++ subversion/branches/swig-py3/subversion/tests/libsvn_repos/repos-test.c Wed Nov 28 21:25:32 2018 @@ -4461,7 +4461,7 @@ test_list(const svn_test_opts_t *opts, SVN_ERR(svn_repos_list(rev_root, "/A", patterns, svn_depth_infinity, FALSE, NULL, NULL, list_callback, &counter, NULL, NULL, pool)); - SVN_TEST_ASSERT(counter == 6); + SVN_TEST_ASSERT(counter == 7); return SVN_NO_ERROR; } Modified: subversion/branches/swig-py3/subversion/tests/libsvn_subr/mergeinfo-test.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/libsvn_subr/mergeinfo-test.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/libsvn_subr/mergeinfo-test.c (original) +++ subversion/branches/swig-py3/subversion/tests/libsvn_subr/mergeinfo-test.c Wed Nov 28 21:25:32 2018 @@ -1673,100 +1673,27 @@ test_remove_prefix_from_catalog(apr_pool static svn_error_t * test_rangelist_merge_overlap(apr_pool_t *pool) { - svn_rangelist_t * changes; - /* 15014-19472,19473-19612*,19613-19614,19615-19630*,19631-19634,19635-20055* */ - svn_rangelist_t * rangelist = apr_array_make(pool, 1, sizeof(svn_merge_range_t *)); - svn_merge_range_t *mrange = apr_pcalloc(pool, sizeof(*mrange)); - - /* This range is optional for reproducing issue #4686 */ - mrange->start = 15013; - mrange->end = 19472; - mrange->inheritable = TRUE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19472; - mrange->end = 19612; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - /* This range is optional for reproducing issue #4686 */ - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19612; - mrange->end = 19614; - mrange->inheritable = TRUE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19614; - mrange->end = 19630; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19630; - mrange->end = 19634; - mrange->inheritable = TRUE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - /* This range is optional for reproducing issue #4686 */ - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19634; - mrange->end = 20055; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - /* 15014-20515* */ - changes = apr_array_make(pool, 1, sizeof(svn_merge_range_t *)); - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 15013; - mrange->end = 20515; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(changes, svn_merge_range_t *) = mrange; -#if 0 - { - svn_string_t * tmpString; - - svn_rangelist_to_string(&tmpString, rangelist, pool); - printf("rangelist %s\n", tmpString->data); - } - { - svn_string_t * tmpString; - - svn_rangelist_to_string(&tmpString, changes, pool); - printf("changes %s\n", tmpString->data); - } -#endif - + const char *rangelist_str = "19473-19612*,19615-19630*,19631-19634"; + const char *changes_str = "15014-20515*"; + const char *expected_str = "15014-19630*,19631-19634,19635-20515*"; + /* wrong result: "15014-19630*,19634-19631*,19631-19634,19635-20515*" */ + svn_rangelist_t *rangelist, *changes; + svn_string_t *result_string; + + /* prepare the inputs */ + SVN_ERR(svn_rangelist__parse(&rangelist, rangelist_str, pool)); + SVN_ERR(svn_rangelist__parse(&changes, changes_str, pool)); SVN_TEST_ASSERT(svn_rangelist__is_canonical(rangelist)); SVN_TEST_ASSERT(svn_rangelist__is_canonical(changes)); + /* perform the merge */ SVN_ERR(svn_rangelist_merge2(rangelist, changes, pool, pool)); + /* check the output */ SVN_TEST_ASSERT(svn_rangelist__is_canonical(rangelist)); + SVN_ERR(svn_rangelist_to_string(&result_string, rangelist, pool)); + SVN_TEST_STRING_ASSERT(result_string->data, expected_str); -#if 0 - { - svn_string_t * tmpString; - - svn_rangelist_to_string(&tmpString, rangelist, pool); - printf("result %s\n", tmpString->data); - } -#endif - - /* wrong result - result 15014-19472,19473-19612*,19613-19614,19615-19630*,19634-19631*,19631-19634,19635-20515* - */ - - { - svn_string_t * tmp_string; - svn_rangelist_t *range_list; - - SVN_ERR(svn_rangelist_to_string(&tmp_string, rangelist, pool)); - - SVN_ERR(svn_rangelist__parse(&range_list, tmp_string->data, pool)); - } - return SVN_NO_ERROR; } @@ -1900,9 +1827,9 @@ static struct svn_test_descriptor_t test "diff of rangelists"), SVN_TEST_PASS2(test_remove_prefix_from_catalog, "removal of prefix paths from catalog keys"), - SVN_TEST_XFAIL2(test_rangelist_merge_overlap, + SVN_TEST_PASS2(test_rangelist_merge_overlap, "merge of rangelists with overlaps (issue 4686)"), - SVN_TEST_XFAIL2(test_rangelist_loop, + SVN_TEST_PASS2(test_rangelist_loop, "test rangelist edgecases via loop"), SVN_TEST_NULL }; Modified: subversion/branches/swig-py3/subversion/tests/libsvn_subr/utf-test.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/libsvn_subr/utf-test.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/libsvn_subr/utf-test.c (original) +++ subversion/branches/swig-py3/subversion/tests/libsvn_subr/utf-test.c Wed Nov 28 21:25:32 2018 @@ -752,8 +752,10 @@ test_utf_conversions(apr_pool_t *pool) { svn_boolean_t sixteenbit; svn_boolean_t bigendian; + apr_size_t sourcelen; const char *source; const char *result; + svn_boolean_t counted; } tests[] = { #define UTF_32_LE FALSE, FALSE @@ -762,32 +764,36 @@ test_utf_conversions(apr_pool_t *pool) #define UTF_16_BE TRUE, TRUE /* Normal character conversion */ - { UTF_32_LE, "t\0\0\0" "e\0\0\0" "s\0\0\0" "t\0\0\0" "\0\0\0\0", "test" }, - { UTF_32_BE, "\0\0\0t" "\0\0\0e" "\0\0\0s" "\0\0\0t" "\0\0\0\0", "test" }, - { UTF_16_LE, "t\0" "e\0" "s\0" "t\0" "\0\0", "test" }, - { UTF_16_BE, "\0t" "\0e" "\0s" "\0t" "\0\0", "test" }, + { UTF_32_LE, 4, "t\0\0\0" "e\0\0\0" "s\0\0\0" "t\0\0\0" "\0\0\0\0", "test", FALSE }, + { UTF_32_BE, 4, "\0\0\0t" "\0\0\0e" "\0\0\0s" "\0\0\0t" "\0\0\0\0", "test", FALSE }, + { UTF_16_LE, 4, "t\0" "e\0" "s\0" "t\0" "\0\0", "test", FALSE }, + { UTF_16_BE, 4, "\0t" "\0e" "\0s" "\0t" "\0\0", "test", FALSE }, /* Valid surrogate pairs */ - { UTF_16_LE, "\x00\xD8" "\x00\xDC" "\0\0", "\xf0\x90\x80\x80" }, /* U+010000 */ - { UTF_16_LE, "\x34\xD8" "\x1E\xDD" "\0\0", "\xf0\x9d\x84\x9e" }, /* U+01D11E */ - { UTF_16_LE, "\xFF\xDB" "\xFD\xDF" "\0\0", "\xf4\x8f\xbf\xbd" }, /* U+10FFFD */ - - { UTF_16_BE, "\xD8\x00" "\xDC\x00" "\0\0", "\xf0\x90\x80\x80" }, /* U+010000 */ - { UTF_16_BE, "\xD8\x34" "\xDD\x1E" "\0\0", "\xf0\x9d\x84\x9e" }, /* U+01D11E */ - { UTF_16_BE, "\xDB\xFF" "\xDF\xFD" "\0\0", "\xf4\x8f\xbf\xbd" }, /* U+10FFFD */ + { UTF_16_LE, 2, "\x00\xD8" "\x00\xDC" "\0\0", "\xf0\x90\x80\x80", FALSE }, /* U+010000 */ + { UTF_16_LE, 2, "\x34\xD8" "\x1E\xDD" "\0\0", "\xf0\x9d\x84\x9e", FALSE }, /* U+01D11E */ + { UTF_16_LE, 2, "\xFF\xDB" "\xFD\xDF" "\0\0", "\xf4\x8f\xbf\xbd", FALSE }, /* U+10FFFD */ + + { UTF_16_BE, 2, "\xD8\x00" "\xDC\x00" "\0\0", "\xf0\x90\x80\x80", FALSE }, /* U+010000 */ + { UTF_16_BE, 2, "\xD8\x34" "\xDD\x1E" "\0\0", "\xf0\x9d\x84\x9e", FALSE }, /* U+01D11E */ + { UTF_16_BE, 2, "\xDB\xFF" "\xDF\xFD" "\0\0", "\xf4\x8f\xbf\xbd", FALSE }, /* U+10FFFD */ /* Swapped, single and trailing surrogate pairs */ - { UTF_16_LE, "*\0" "\x00\xDC" "\x00\xD8" "*\0\0\0", "*\xed\xb0\x80" "\xed\xa0\x80*" }, - { UTF_16_LE, "*\0" "\x1E\xDD" "*\0\0\0", "*\xed\xb4\x9e*" }, - { UTF_16_LE, "*\0" "\xFF\xDB" "*\0\0\0", "*\xed\xaf\xbf*" }, - { UTF_16_LE, "\x1E\xDD" "\0\0", "\xed\xb4\x9e" }, - { UTF_16_LE, "\xFF\xDB" "\0\0", "\xed\xaf\xbf" }, - - { UTF_16_BE, "\0*" "\xDC\x00" "\xD8\x00" "\0*\0\0", "*\xed\xb0\x80" "\xed\xa0\x80*" }, - { UTF_16_BE, "\0*" "\xDD\x1E" "\0*\0\0", "*\xed\xb4\x9e*" }, - { UTF_16_BE, "\0*" "\xDB\xFF" "\0*\0\0", "*\xed\xaf\xbf*" }, - { UTF_16_BE, "\xDD\x1E" "\0\0", "\xed\xb4\x9e" }, - { UTF_16_BE, "\xDB\xFF" "\0\0", "\xed\xaf\xbf" }, + { UTF_16_LE, 4, "*\0" "\x00\xDC" "\x00\xD8" "*\0\0\0", "*\xed\xb0\x80" "\xed\xa0\x80*", FALSE }, + { UTF_16_LE, 3, "*\0" "\x1E\xDD" "*\0\0\0", "*\xed\xb4\x9e*", FALSE }, + { UTF_16_LE, 3, "*\0" "\xFF\xDB" "*\0\0\0", "*\xed\xaf\xbf*", FALSE }, + { UTF_16_LE, 1, "\x1E\xDD" "\0\0", "\xed\xb4\x9e", FALSE }, + { UTF_16_LE, 1, "\xFF\xDB" "\0\0", "\xed\xaf\xbf", FALSE }, + + { UTF_16_BE, 4, "\0*" "\xDC\x00" "\xD8\x00" "\0*\0\0", "*\xed\xb0\x80" "\xed\xa0\x80*", FALSE }, + { UTF_16_BE, 3, "\0*" "\xDD\x1E" "\0*\0\0", "*\xed\xb4\x9e*", FALSE }, + { UTF_16_BE, 3, "\0*" "\xDB\xFF" "\0*\0\0", "*\xed\xaf\xbf*", FALSE }, + { UTF_16_BE, 1, "\xDD\x1E" "\0\0", "\xed\xb4\x9e", FALSE }, + { UTF_16_BE, 1, "\xDB\xFF" "\0\0", "\xed\xaf\xbf", FALSE }, + + /* Counted strings with NUL characters */ + { UTF_16_LE, 3, "x\0" "\0\0" "y\0" "*\0", "x\0y", TRUE }, + { UTF_32_BE, 3, "\0\0\0x" "\0\0\0\0" "\0\0\0y" "\0\0\0*", "x\0y", TRUE }, #undef UTF_32_LE #undef UTF_32_BE @@ -799,33 +805,46 @@ test_utf_conversions(apr_pool_t *pool) const struct cvt_test_t *tc; const svn_string_t *result; - int i; + apr_size_t maxlen = 0; - for (i = 1, tc = tests; tc->source; ++tc, ++i) + /* To assure proper alignment of the source string, it needs to be copied + into an array of the appropriate type before calling + svn_utf__utf{16,32}_to_utf8. */ + apr_uint16_t *source16; + apr_int32_t *source32; + + for (tc = tests; tc->source; ++tc) + if (tc->sourcelen > maxlen) + maxlen = tc->sourcelen; + maxlen++; + + source16 = apr_pcalloc(pool, maxlen * sizeof(*source16)); + source32 = apr_pcalloc(pool, maxlen * sizeof(*source32)); + + for (tc = tests; tc->source; ++tc) { if (tc->sixteenbit) - SVN_ERR(svn_utf__utf16_to_utf8(&result, (const void*)tc->source, - SVN_UTF__UNKNOWN_LENGTH, - tc->bigendian, pool, pool)); + { + memset(source16, 0, maxlen * sizeof(*source16)); + memcpy(source16, tc->source, (tc->sourcelen + 1) * sizeof(*source16)); + SVN_ERR(svn_utf__utf16_to_utf8(&result, source16, + tc->counted ? tc->sourcelen : SVN_UTF__UNKNOWN_LENGTH, + tc->bigendian, pool, pool)); + } else - SVN_ERR(svn_utf__utf32_to_utf8(&result, (const void*)tc->source, - SVN_UTF__UNKNOWN_LENGTH, - tc->bigendian, pool, pool)); - SVN_ERR_ASSERT(0 == strcmp(result->data, tc->result)); + { + memset(source32, 0, maxlen * sizeof(*source32)); + memcpy(source32, tc->source, (tc->sourcelen + 1) * sizeof(*source32)); + SVN_ERR(svn_utf__utf32_to_utf8(&result, source32, + tc->counted ? tc->sourcelen : SVN_UTF__UNKNOWN_LENGTH, + tc->bigendian, pool, pool)); + } + if (tc->counted) + SVN_ERR_ASSERT(0 == memcmp(result->data, tc->result, tc->sourcelen)); + else + SVN_ERR_ASSERT(0 == strcmp(result->data, tc->result)); } - /* Test counted strings with NUL characters */ - SVN_ERR(svn_utf__utf16_to_utf8( - &result, (void*)("x\0" "\0\0" "y\0" "*\0"), 3, - FALSE, pool, pool)); - SVN_ERR_ASSERT(0 == memcmp(result->data, "x\0y", 3)); - - SVN_ERR(svn_utf__utf32_to_utf8( - &result, - (void*)("\0\0\0x" "\0\0\0\0" "\0\0\0y" "\0\0\0*"), 3, - TRUE, pool, pool)); - SVN_ERR_ASSERT(0 == memcmp(result->data, "x\0y", 3)); - return SVN_NO_ERROR; } Modified: subversion/branches/swig-py3/subversion/tests/libsvn_subr/x509-test.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/libsvn_subr/x509-test.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/libsvn_subr/x509-test.c (original) +++ subversion/branches/swig-py3/subversion/tests/libsvn_subr/x509-test.c Wed Nov 28 21:25:32 2018 @@ -592,6 +592,32 @@ static struct x509_test cert_tests[] = { "good.example.com", "9693f17e59205f41ca2e14450d151b945651b2d7" }, + /* Signed using RSASSA-PSS algorithm with algorithm parameters */ + { + "MIICsjCCAWkCCQDHslXYA8hCxTA+BgkqhkiG9w0BAQowMaANMAsGCWCGSAFlAwQC" + "AaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiBAICAN4wKjEUMBIGA1UECgwL" + "TXkgTG9jYWwgQ0ExEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xODAyMDIxNjQ4MzVa" + "Fw0xODAyMDMxNjQ4MzVaMC4xGDAWBgNVBAoMD015IExvY2FsIFNlcnZlcjESMBAG" + "A1UEAwwJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCues61" + "JXXpLQI5yeg4aCLWRfvnJY7wnuU6FSA++3wwCJREx1/7ebnP9RRRqqKM+ZeeFMC+" + "UlJE3ft2tJTDOVk9j6qjvKrJUKM1YkIe0lARxs4RtZKDGfOdBhw/+iD+6fZzhL0n" + "+w+dIJGzl6ADWsE/x9yjDTkdgbtxHrx/76K0KQIDAQABMD4GCSqGSIb3DQEBCjAx" + "oA0wCwYJYIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIEAgIA" + "3gOCAQEABYRAijCSGyFdSuUYALUnNzPylqYXlW+dMKPywlUrFEhKnvS+FD9twerI" + "8kT4MDW6XvhScmL1MCDPNAkFY92UqaUrgT80oyrbpuakVrxFSS1i28xy8+kXAWYq" + "RNQVaME1NqnATYF0ZMD5xQK4rpa76gvWj3K8Lt++9EjjbkNiirIIMQEOxh1lwnDQ" + "81q1Rk6iujlnVDGHDQ+w8reE6fKfSWfv1EaQRcjNKCuzrW8WNN387G2byvwaaKeL" + "M7lV7wiV6PwrTNTZzVG3cWKDOEP1mGE7gyMu66siLECo8U95+ahK7O6vfeT3m3gv" + "7kzWNYozAQtBSC7b0WqWbVrzWI4HSg==", + "O=My Local Server, CN=localhost", + "2.5.4.10 2.5.4.3", + "O=My Local CA, CN=localhost", + "2.5.4.10 2.5.4.3", + "2018-02-02T16:48:35.000000Z ", + "2018-02-03T16:48:35.000000Z ", + "localhost", + "25ab5a059acfc793fc0d3734d426794a4ca7b631" + }, { NULL } }; Modified: subversion/branches/swig-py3/subversion/tests/libsvn_wc/conflict-data-test.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/libsvn_wc/conflict-data-test.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/libsvn_wc/conflict-data-test.c (original) +++ subversion/branches/swig-py3/subversion/tests/libsvn_wc/conflict-data-test.c Wed Nov 28 21:25:32 2018 @@ -594,6 +594,7 @@ test_serialize_tree_conflict(const svn_t svn_wc_conflict_reason_moved_away, svn_wc_conflict_action_delete, sbox_wc_path(&sbox, "A/B"), + sbox_wc_path(&sbox, "A/C"), pool, pool)); SVN_ERR(svn_wc__conflict_skel_set_op_switch( @@ -610,11 +611,13 @@ test_serialize_tree_conflict(const svn_t { svn_wc_conflict_reason_t reason; svn_wc_conflict_action_t action; - const char *moved_away_op_root_abspath; + const char *moved_away_src_op_root_abspath; + const char *moved_away_dst_op_root_abspath; SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, &action, - &moved_away_op_root_abspath, + &moved_away_src_op_root_abspath, + &moved_away_dst_op_root_abspath, sbox.wc_ctx->db, sbox.wc_abspath, conflict_skel, @@ -622,8 +625,10 @@ test_serialize_tree_conflict(const svn_t SVN_TEST_ASSERT(reason == svn_wc_conflict_reason_moved_away); SVN_TEST_ASSERT(action == svn_wc_conflict_action_delete); - SVN_TEST_STRING_ASSERT(moved_away_op_root_abspath, + SVN_TEST_STRING_ASSERT(moved_away_src_op_root_abspath, sbox_wc_path(&sbox, "A/B")); + SVN_TEST_STRING_ASSERT(moved_away_dst_op_root_abspath, + sbox_wc_path(&sbox, "A/C")); } return SVN_NO_ERROR; Modified: subversion/branches/swig-py3/subversion/tests/libsvn_wc/op-depth-test.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/libsvn_wc/op-depth-test.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/libsvn_wc/op-depth-test.c (original) +++ subversion/branches/swig-py3/subversion/tests/libsvn_wc/op-depth-test.c Wed Nov 28 21:25:32 2018 @@ -535,7 +535,7 @@ check_db_conflicts(svn_test__sandbox_t * SVN_ERR(svn_wc__conflict_read_tree_conflict(&info->tc.reason, &info->tc.action, &move_src_abspath, - b->wc_ctx->db, + NULL, b->wc_ctx->db, local_abspath, conflict, b->pool, iterpool)); Modified: subversion/branches/swig-py3/subversion/tests/libsvn_wc/utils.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/libsvn_wc/utils.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/libsvn_wc/utils.c (original) +++ subversion/branches/swig-py3/subversion/tests/libsvn_wc/utils.c Wed Nov 28 21:25:32 2018 @@ -417,11 +417,12 @@ sbox_wc_revert(svn_test__sandbox_t *b, c SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, b->wc_ctx, dir_abspath, FALSE /* lock_anchor */, b->pool, b->pool)); - SVN_ERR(svn_wc_revert5(b->wc_ctx, abspath, depth, + SVN_ERR(svn_wc_revert6(b->wc_ctx, abspath, depth, FALSE /* use_commit_times */, NULL /* changelist_filter */, FALSE /* clear_changelists */, FALSE /* metadata_only */, + TRUE /*added_keep_local*/, NULL, NULL, /* cancel baton + func */ NULL, NULL, /* notify baton + func */ b->pool)); Modified: subversion/branches/swig-py3/subversion/tests/libsvn_wc/wc-queries-test.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/libsvn_wc/wc-queries-test.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/libsvn_wc/wc-queries-test.c (original) +++ subversion/branches/swig-py3/subversion/tests/libsvn_wc/wc-queries-test.c Wed Nov 28 21:25:32 2018 @@ -99,6 +99,7 @@ static const int slow_statements[] = STMT_SELECT_DELETE_LIST, STMT_SELECT_UPDATE_MOVE_LIST, STMT_FIND_REPOS_PATH_IN_WC, + STMT_SELECT_PRESENT_HIGHEST_WORKING_NODES_BY_BASENAME_AND_KIND, /* Designed as slow to avoid penalty on other queries */ STMT_SELECT_UNREFERENCED_PRISTINES, Modified: subversion/branches/swig-py3/subversion/tests/svn_test_main.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/tests/svn_test_main.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/tests/svn_test_main.c (original) +++ subversion/branches/swig-py3/subversion/tests/svn_test_main.c Wed Nov 28 21:25:32 2018 @@ -903,9 +903,12 @@ svn_test_main(int argc, const char *argv apr_err = apr_getopt_long(os, cl_options, &opt_id, &opt_arg); if (APR_STATUS_IS_EOF(apr_err)) break; - else if (apr_err && (apr_err != APR_BADCH)) + else if (apr_err) { /* Ignore invalid option error to allow passing arbitrary options */ + if (apr_err == APR_BADCH) + continue; + fprintf(stderr, "apr_getopt_long failed : [%d] %s\n", apr_err, apr_strerror(apr_err, errmsg, sizeof(errmsg))); exit(1); Modified: subversion/branches/swig-py3/tools/buildbot/slaves/bb-openbsd/svnbuild.sh URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/buildbot/slaves/bb-openbsd/svnbuild.sh?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/buildbot/slaves/bb-openbsd/svnbuild.sh (original) +++ subversion/branches/swig-py3/tools/buildbot/slaves/bb-openbsd/svnbuild.sh Wed Nov 28 21:25:32 2018 @@ -25,4 +25,5 @@ set -x url="$(svn info --show-item url)" branch="${url##*/}" (test -h ../GNUmakefile || ln -s ../unix-build/Makefile.svn ../GNUmakefile) +touch ../objdir/svn-${branch}/.retrieved (cd .. && gmake BRANCH="$branch" THREADING="no" JAVA="no" MAKE_JOBS=8) Modified: subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/setenv.sh URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/setenv.sh?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/setenv.sh (original) +++ subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/setenv.sh Wed Nov 28 21:25:32 2018 @@ -24,8 +24,9 @@ ## SVNBB_SERF Serf installation prefix ## Note: Serf should be built only ## with the system APR/-Util. +## SVNBB_APR Path of the default APR +## SVNBB_APRUTIL Path of the default APR-Util ## SVNBB_APR_13_NOTHREAD Path of APR-1.3 with threading disabled -## SVNBB_APR_15 Path of APR-1.5 ## SVNBB_APR_20_DEV Path of APR-2.0 ## SVNBB_JUNIT The path of the junit.jar ## SVNBB_PARALLEL Optional: parallelization; defaults to 2 @@ -45,7 +46,8 @@ export SVNBB_BDB export SVNBB_SWIG export SVNBB_SERF export SVNBB_APR_13_NOTHREAD -export SVNBB_APR_15 +export SVNBB_APR +export SVNBB_APRUTIL export SVNBB_APR_20_DEV export SVNBB_JUNIT export SVNBB_PARALLEL Modified: subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svnbuild-bindings.sh URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svnbuild-bindings.sh?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svnbuild-bindings.sh (original) +++ subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svnbuild-bindings.sh Wed Nov 28 21:25:32 2018 @@ -25,21 +25,16 @@ scripts=$(cd $(dirname "$0") && pwd) . ${scripts}/setenv.sh # -# Step 4: build swig-py +# Step 4: build bindings # -echo "============ make swig-py" -cd ${absbld} -make swig-py +build_bindings() { + echo "============ make $1" + cd ${absbld} + make $1 +} -echo "============ make swig-pl" -cd ${absbld} -make swig-pl - -echo "============ make swig-rb" -cd ${absbld} -make swig-rb - -echo "============ make javahl" -cd ${absbld} -make javahl +build_bindings swig-py +build_bindings swig-pl +build_bindings swig-rb +build_bindings javahl Modified: subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svnbuild.sh URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svnbuild.sh?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svnbuild.sh (original) +++ subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svnbuild.sh Wed Nov 28 21:25:32 2018 @@ -27,17 +27,33 @@ scripts=$(cd $(dirname "$0") && pwd) ${scripts}/mkramdisk.sh ${volume_name} ${ramconf} # These are the default APR and Serf config options -serfconfig="--with-serf=${SVNBB_SERF} --with-apxs=/usr/sbin/apxs" +serfconfig=" --with-serf=${SVNBB_SERF} --with-apxs=/usr/local/opt/httpd/bin/apxs" # An optional parameter tells build scripts which version of APR to use if [ ! -z "$1" ]; then aprdir=$(eval 'echo $SVNBB_'"$1") +else + aprconfig="--with-apr=${SVNBB_APR} --with-apr-util=${SVNBB_APRUTIL}" fi if [ ! -z "${aprdir}" -a -d "${aprdir}" ]; then aprconfig="--with-apr=${aprdir} --with-apr-util=${aprdir}" serfconfig=" --without-serf --without-apxs" fi +# An optional parameter tells us if this is a warnings-only build. +# We run the warnings build with a number of additional options. +if [ "$2" = "warnings" ]; then + parallel=1 + maintainer_mode=' -q --enable-maintainer-mode' + config_cflags="-Wno-deprecated-declarations" + config_cflags="${config_cflags} -DPACK_AFTER_EVERY_COMMIT" + config_cflags="${config_cflags} -DSVN_UNALIGNED_ACCESS_IS_OK=0" + config_cflags="${config_cflags} -DSUFFIX_LINES_TO_KEEP=0" + config_cflags="${config_cflags} -DSVN_DEPRECATED=" +else + parallel=${SVNBB_PARALLEL} +fi + # # Step 0: Create a directory for the test log files # @@ -82,8 +98,10 @@ fi echo "============ configure" cd ${absbld} -env CC=clang CXX=clang++ \ -${abssrc}/configure \ +env CC=clang CFLAGS="${config_cflags}" \ + CXX=clang++ CXXFLAGS="${config_cxxflags}" \ + LDFLAGS='-Wl,-w' \ +${abssrc}/configure${maintainer_mode} \ --prefix="${absbld}/.install-prefix" \ --enable-debug${optimizeconfig} \ --disable-nls \ @@ -91,6 +109,7 @@ ${abssrc}/configure \ ${aprconfig}${serfconfig} \ --with-swig="${SVNBB_SWIG}" \ --with-berkeley-db=db.h:"${SVNBB_BDB}/include":${SVNBB_BDB}/lib:db \ + --enable-bdb6 \ --enable-javahl \ --without-jikes \ ${lz4config} \ @@ -105,4 +124,4 @@ test -f config.log && mv config.log "${a echo "============ make" cd ${absbld} -make -j${SVNBB_PARALLEL} +make -j${parallel} Modified: subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svncheck-bindings.sh URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svncheck-bindings.sh?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svncheck-bindings.sh (original) +++ subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svncheck-bindings.sh Wed Nov 28 21:25:32 2018 @@ -24,6 +24,8 @@ run_tests() { echo "============ make check-${check}" cd ${absbld} + make -s install + make -s install-${check} make check-${check} ${cleanup} || exit 1 } Modified: subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svncheck.sh URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svncheck.sh?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svncheck.sh (original) +++ subversion/branches/swig-py3/tools/buildbot/slaves/svn-x64-macosx/svncheck.sh Wed Nov 28 21:25:32 2018 @@ -24,15 +24,22 @@ run_tests() { ok=true case "${ra}" in - local) check=check; skipC=;; - svn) check=svnserveautocheck; skipC="SKIP_C_TESTS=1";; - dav) check=davautocheck; skipC="SKIP_C_TESTS=1";; + local) check=check; more=;; + svn) check=svnserveautocheck; more="SKIP_C_TESTS=1";; + dav) check=davautocheck; more="SKIP_C_TESTS=1"; + if [ "${fs}" == "bdb" ]; then + more="${more} APACHE_MPM=prefork" + else + more="${more} APACHE_MPM=event" + fi;; *) exit 1;; esac + ${allow_remote} && more="${more} ALLOW_REMOTE_HTTP_CONNECTION=1" + echo "============ make check ${ra}+${fs}" cd ${absbld} - make ${check} FS_TYPE=${fs} PARALLEL=${SVNBB_PARALLEL} CLEANUP=1 ${skipC} || ok=false + make ${check} FS_TYPE=${fs} PARALLEL=${SVNBB_PARALLEL} CLEANUP=1 ${more} || ok=false # Move any log files to the buildbot work directory test -f tests.log && mv tests.log "${abssrc}/.test-logs/tests-${ra}-${fs}.log" @@ -72,6 +79,7 @@ check_fsfs_v6=false check_fsfs_v4=false check_fsx=false check_bdb=false +allow_remote=false while [ ! -z "$1" ]; do case "$1" in @@ -84,6 +92,7 @@ while [ ! -z "$1" ]; do fsfs-v4) check_fsfs_v4=true;; fsx) check_fsx=true;; bdb) check_bdb=true;; + remote) allow_remote=true;; *) exit 1;; esac shift Modified: subversion/branches/swig-py3/tools/client-side/bash_completion URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/client-side/bash_completion?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/client-side/bash_completion (original) +++ subversion/branches/swig-py3/tools/client-side/bash_completion Wed Nov 28 21:25:32 2018 @@ -248,8 +248,8 @@ _svn() cmds="$cmds patch propdel pdel propedit pedit propget pget proplist" cmds="$cmds plist propset pset relocate resolve resolved revert status" cmds="$cmds switch unlock update upgrade" - cmds="$cmds shelf-diff shelf-drop shelf-list shelf-log shelf-save" - cmds="$cmds shelve shelves unshelve" + cmds="$cmds x-shelf-diff x-shelf-drop x-shelf-list x-shelf-list-by-paths" + cmds="$cmds x-shelf-log x-shelf-save x-shelve x-shelves x-unshelve" # help options have a strange command status... local helpOpts='--help -h' @@ -1024,32 +1024,35 @@ _svn() upgrade) cmdOpts="$qOpts $pOpts" ;; - shelf-diff) + x-shelf-list-by-paths) cmdOpts="$pOpts" ;; - shelf-drop) + x-shelf-diff) + cmdOpts="$pOpts --summarize" + ;; + x-shelf-drop) cmdOpts="$pOpts" ;; - shelf-list|shelves) + x-shelf-list|x-shelves) cmdOpts="$qOpts $pOpts" ;; - shelf-log) + x-shelf-log) cmdOpts="$qOpts $pOpts" ;; - shelf-save) + x-shelf-save) cmdOpts="--dry-run \ --depth --targets $cOpts \ $mOpts \ $qOpts $pOpts" ;; - shelve) + x-shelve) cmdOpts="--keep-local --dry-run \ --depth --targets $cOpts \ $mOpts \ $qOpts $pOpts" ;; - unshelve) - cmdOpts="--dry-run \ + x-unshelve) + cmdOpts="--drop --dry-run \ $qOpts $pOpts" ;; *) Modified: subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/help-cmd.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/help-cmd.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/help-cmd.c (original) +++ subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/help-cmd.c Wed Nov 28 21:25:32 2018 @@ -163,7 +163,7 @@ svn_min__help(apr_getopt_t *os, pool)), pool); #endif -#ifdef SVN_HAVE_GNOME_KEYRING +#if (defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_LIBSECRET)) svn_stringbuf_appendcstr(version_footer, "* Gnome Keyring\n"); #endif #ifdef SVN_HAVE_GPG_AGENT @@ -176,7 +176,7 @@ svn_min__help(apr_getopt_t *os, svn_stringbuf_appendcstr(version_footer, "* KWallet (KDE)\n"); #endif - return svn_opt_print_help4(os, + return svn_opt_print_help5(os, "svn-mergeinfo-normalizer", opt_state ? opt_state->version : FALSE, opt_state ? opt_state->quiet : FALSE, Modified: subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h (original) +++ subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h Wed Nov 28 21:25:32 2018 @@ -117,7 +117,7 @@ svn_opt_subcommand_t svn_min__remove_branches; /* See definition in svn.c for documentation. */ -extern const svn_opt_subcommand_desc2_t svn_min__cmd_table[]; +extern const svn_opt_subcommand_desc3_t svn_min__cmd_table[]; /* See definition in svn.c for documentation. */ extern const int svn_min__global_options[]; Modified: subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c (original) +++ subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c Wed Nov 28 21:25:32 2018 @@ -221,43 +221,44 @@ const int svn_min__global_options[] = opt_config_dir, opt_config_options, 0 }; -const svn_opt_subcommand_desc2_t svn_min__cmd_table[] = +const svn_opt_subcommand_desc3_t svn_min__cmd_table[] = { - { "help", svn_min__help, {"?", "h"}, N_ - ("Describe the usage of this program or its subcommands.\n" - "usage: help [SUBCOMMAND...]\n"), + { "help", svn_min__help, {"?", "h"}, {N_( + "Describe the usage of this program or its subcommands.\n" + "usage: help [SUBCOMMAND...]\n" + )}, {0} }, /* This command is also invoked if we see option "--help", "-h" or "-?". */ - { "analyze", svn_min__analyze, { "analyse" }, N_ - ("Generate a report of which part of the sub-tree mergeinfo can be\n" + { "analyze", svn_min__analyze, { "analyse" }, {N_( + "Generate a report of which part of the sub-tree mergeinfo can be\n" "removed and which part can't.\n" "usage: analyze [WCPATH...]\n" - "\n" + "\n"), N_( " If neither --remove-obsoletes, --remove-redundant nor --combine-ranges\n" " option is given, all three will be used implicitly.\n" - "\n" + "\n"), N_( " In verbose mode, the command will behave just like 'normalize --dry-run'\n" " but will show an additional summary of all deleted branches that were\n" " encountered plus the revision of their latest deletion (if available).\n" - "\n" + "\n"), N_( " In non-verbose mode, the per-node output does not give the parent path,\n" " no successful elisions and branch removals nor the list of remaining\n" " branches.\n" - ), + )}, {opt_targets, opt_depth, 'v', opt_remove_obsoletes, opt_remove_redundant, opt_remove_redundant_misaligned, opt_combine_ranges} }, - { "normalize", svn_min__normalize, { 0 }, N_ - ("Normalize / reduce the mergeinfo throughout the working copy sub-tree.\n" + { "normalize", svn_min__normalize, { 0 }, {N_( + "Normalize / reduce the mergeinfo throughout the working copy sub-tree.\n" "usage: normalize [WCPATH...]\n" - "\n" + "\n"), N_( " If neither --remove-obsoletes, --remove-redundant, --combine-ranges\n" " nor --remove-redundant-misaligned option is given, --remove-redundant\n" " will be used implicitly.\n" - "\n" + "\n"), N_( " In non-verbose mode, only general progress as well as a summary before\n" " and after the normalization process will be shown. Note that sub-node\n" " mergeinfo which could be removed entirely does not contribute to the\n" @@ -265,12 +266,12 @@ const svn_opt_subcommand_desc2_t svn_min " ranges combined only refers to the mergeinfo lines still present after\n" " the normalization process. To get total numbers, compare the initial\n" " with the final mergeinfo statistics.\n" - "\n" + "\n"), N_( " The detailed operation log in verbose mode replaces the progress display.\n" " For each node with mergeinfo, the nearest parent node with mergeinfo is\n" " given - if there is one and the result of trying to remove the mergeinfo\n" " is shown for each branch. The various outputs are:\n" - "\n" + "\n"), N_( " elide redundant branch - Revision ranges are the same as in the parent.\n" " Mergeinfo for this branch can be elided.\n" " elide branch - Not an exact match with the parent but the\n" @@ -324,32 +325,34 @@ const svn_opt_subcommand_desc2_t svn_min " The sub-tree mergeinfo cannot be elided.\n" " REVERSE RANGE(S) found - The mergeinfo contains illegal reverse ranges.\n" " The sub-tree mergeinfo cannot be elided.\n" - "\n" + "\n"), N_( " If all branches have been removed from a nodes' mergeinfo, the whole\n" " svn:mergeinfo property will be removed. Otherwise, only obsolete\n" " branches will be removed. In verbose mode, a list of branches that\n" - " could not be removed will be shown per node.\n"), + " could not be removed will be shown per node.\n" + )}, {opt_targets, opt_depth, opt_dry_run, 'q', 'v', opt_remove_obsoletes, opt_remove_redundant, opt_remove_redundant_misaligned, opt_combine_ranges} }, - { "remove-branches", svn_min__remove_branches, { 0 }, N_ - ("Read a list of branch names from the given file and remove all\n" + { "remove-branches", svn_min__remove_branches, { 0 }, {N_( + "Read a list of branch names from the given file and remove all\n" "mergeinfo referring to these branches from the given targets.\n" "usage: remove-branches [WCPATH...] --file FILE\n" - "\n" + "\n"), N_( " The command will behave just like 'normalize --remove-obsoletes' but\n" " will never actually contact the repository. Instead, it assumes any\n" " path given in FILE is a deleted branch.\n" - "\n" + "\n"), N_( " Compared to a simple 'normalize --remove-obsoletes' run, this command\n" " allows for selective removal of obsolete branches. It may therefore be\n" " better suited for large deployments with complex branch structures.\n" " You may also use this to remove mergeinfo that refers to still existing\n" - " branches.\n"), + " branches.\n" + )}, {opt_targets, opt_depth, opt_dry_run, 'q', 'v', 'F'} }, - { NULL, NULL, {0}, NULL, {0} } + { NULL, NULL, {0}, {NULL}, {0} } }; @@ -414,7 +417,7 @@ sub_main(int *exit_code, int argc, const svn_client_ctx_t *ctx; apr_array_header_t *received_opts; int i; - const svn_opt_subcommand_desc2_t *subcommand = NULL; + const svn_opt_subcommand_desc3_t *subcommand = NULL; svn_min__cmd_baton_t command_baton = { 0 }; svn_auth_baton_t *ab; svn_config_t *cfg_config; @@ -639,7 +642,7 @@ sub_main(int *exit_code, int argc, const just typos/mistakes. Whatever the case, the subcommand to actually run is svn_cl__help(). */ if (opt_state.help) - subcommand = svn_opt_get_canonical_subcommand2(svn_min__cmd_table, "help"); + subcommand = svn_opt_get_canonical_subcommand3(svn_min__cmd_table, "help"); /* If we're not running the `help' subcommand, then look for a subcommand in the first argument. */ @@ -650,8 +653,8 @@ sub_main(int *exit_code, int argc, const if (opt_state.version) { /* Use the "help" subcommand to handle the "--version" option. */ - static const svn_opt_subcommand_desc2_t pseudo_cmd = - { "--version", svn_min__help, {0}, "", + static const svn_opt_subcommand_desc3_t pseudo_cmd = + { "--version", svn_min__help, {0}, {""}, {opt_version, /* must accept its own option */ 'q', /* brief output */ 'v', /* verbose output */ @@ -676,7 +679,7 @@ sub_main(int *exit_code, int argc, const SVN_ERR(svn_utf_cstring_to_utf8(&first_arg, os->argv[os->ind++], pool)); - subcommand = svn_opt_get_canonical_subcommand2(svn_min__cmd_table, + subcommand = svn_opt_get_canonical_subcommand3(svn_min__cmd_table, first_arg); if (subcommand == NULL) { @@ -704,12 +707,12 @@ sub_main(int *exit_code, int argc, const if (opt_id == 'h' || opt_id == '?') continue; - if (! svn_opt_subcommand_takes_option3(subcommand, opt_id, + if (! svn_opt_subcommand_takes_option4(subcommand, opt_id, svn_min__global_options)) { const char *optstr; const apr_getopt_option_t *badopt = - svn_opt_get_option_from_code2(opt_id, svn_min__options, + svn_opt_get_option_from_code3(opt_id, svn_min__options, subcommand, pool); svn_opt_format_option(&optstr, badopt, FALSE, pool); if (subcommand->name[0] == '-') Modified: subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.c (original) +++ subversion/branches/swig-py3/tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.c Wed Nov 28 21:25:32 2018 @@ -112,8 +112,8 @@ static int compare_mergeinfo(const void *lhs, const void *rhs) { - const mergeinfo_t *lhs_mi = *(const mergeinfo_t **)lhs; - const mergeinfo_t *rhs_mi = *(const mergeinfo_t **)rhs; + const mergeinfo_t *lhs_mi = *(const mergeinfo_t *const *)lhs; + const mergeinfo_t *rhs_mi = *(const mergeinfo_t *const *)rhs; return strcmp(lhs_mi->local_path, rhs_mi->local_path); } Modified: subversion/branches/swig-py3/tools/client-side/svn-viewspec.py URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/client-side/svn-viewspec.py?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/client-side/svn-viewspec.py (original) +++ subversion/branches/swig-py3/tools/client-side/svn-viewspec.py Wed Nov 28 21:25:32 2018 @@ -121,6 +121,8 @@ DEPTH_FILES = 'files' DEPTH_IMMEDIATES = 'immediates' DEPTH_INFINITY = 'infinity' +os_system = None +args = None class TreeNode: """A representation of a single node in a Subversion sparse @@ -159,8 +161,8 @@ def svn_path_compare_paths(path1, path2) NOTE: Stolen unapologetically from Subversion's Python bindings module svn.core.""" - path1_len = len(path1); - path2_len = len(path2); + path1_len = len(path1) + path2_len = len(path2) min_len = min(path1_len, path2_len) i = 0 @@ -280,10 +282,10 @@ def checkout_tree(base_url, revision, tr if revision != -1: revision_str = "--revision=%d " % (revision) if is_top: - os.system('svn checkout "%s" "%s" --depth=%s %s' + os_system('svn checkout "%s" "%s" --depth=%s %s' % (base_url, target_dir, depth, revision_str)) else: - os.system('svn update "%s" --set-depth=%s %s' + os_system('svn update "%s" --set-depth=%s %s' % (target_dir, depth, revision_str)) child_names = tree_node.children.keys() child_names.sort(svn_path_compare_paths) @@ -304,27 +306,34 @@ def checkout_spec(viewspec, target_dir): def usage_and_exit(errmsg=None): stream = errmsg and sys.stderr or sys.stdout - msg = __doc__.replace("__SCRIPTNAME__", os.path.basename(sys.argv[0])) + msg = __doc__.replace("__SCRIPTNAME__", os.path.basename(args[0])) stream.write(msg) if errmsg: stream.write("ERROR: %s\n" % (errmsg)) - sys.exit(errmsg and 1 or 0) + return 1 + return 0 + +def main(os_sys, args_in): + global os_system + global args + os_system = os_sys + args = args_in -def main(): - argc = len(sys.argv) + argc = len(args) if argc < 2: - usage_and_exit('Not enough arguments.') - subcommand = sys.argv[1] + return usage_and_exit('Not enough arguments.') + subcommand = args[1] if subcommand == 'help': - usage_and_exit() + return usage_and_exit() elif subcommand == 'help-format': msg = FORMAT_HELP.replace("__SCRIPTNAME__", - os.path.basename(sys.argv[0])) + os.path.basename(args[0])) sys.stdout.write(msg) + return 1 elif subcommand == 'examine': if argc < 3: - usage_and_exit('No viewspec file specified.') - fp = (sys.argv[2] == '-') and sys.stdin or open(sys.argv[2], 'r') + return usage_and_exit('No viewspec file specified.') + fp = (args[2] == '-') and sys.stdin or open(args[2], 'r') viewspec = parse_viewspec(fp) sys.stdout.write("Url: %s\n" % (viewspec.base_url)) revision = viewspec.revision @@ -336,13 +345,14 @@ def main(): viewspec.tree.dump(True) elif subcommand == 'checkout': if argc < 3: - usage_and_exit('No viewspec file specified.') + return usage_and_exit('No viewspec file specified.') if argc < 4: - usage_and_exit('No target directory specified.') - fp = (sys.argv[2] == '-') and sys.stdin or open(sys.argv[2], 'r') - checkout_spec(parse_viewspec(fp), sys.argv[3]) + return usage_and_exit('No target directory specified.') + fp = (args[2] == '-') and sys.stdin or open(args[2], 'r') + checkout_spec(parse_viewspec(fp), args[3]) else: - usage_and_exit('Unknown subcommand "%s".' % (subcommand)) + return usage_and_exit('Unknown subcommand "%s".' % (subcommand)) if __name__ == "__main__": - main() + if main(os.system, sys.argv): + sys.exit(1) Modified: subversion/branches/swig-py3/tools/client-side/svnconflict/svnconflict.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/client-side/svnconflict/svnconflict.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/client-side/svnconflict/svnconflict.c (original) +++ subversion/branches/swig-py3/tools/client-side/svnconflict/svnconflict.c Wed Nov 28 21:25:32 2018 @@ -148,18 +148,19 @@ static const int svnconflict_global_opti { opt_auth_username, opt_auth_password, opt_auth_password_from_stdin, opt_config_dir, opt_config_options, 0 }; -static const svn_opt_subcommand_desc2_t svnconflict_cmd_table[] = +static const svn_opt_subcommand_desc3_t svnconflict_cmd_table[] = { /* This command is also invoked if we see option "--help", "-h" or "-?". */ - { "help", svnconflict_help, {"?", "h"}, N_ - ("Describe the usage of this program or its subcommands.\n" - "usage: help [SUBCOMMAND...]\n"), + { "help", svnconflict_help, {"?", "h"}, {N_( + "Describe the usage of this program or its subcommands.\n" + "usage: help [SUBCOMMAND...]\n" + )}, {0} }, - { "list", svnconflict_list, {"ls"}, N_ - ("List conflicts at a conflicted path.\n" + { "list", svnconflict_list, {"ls"}, {N_( + "List conflicts at a conflicted path.\n" "usage: list PATH\n" - "\n" + "\n"), N_( " List conflicts at PATH, one per line. Possible conflicts are:\n" " \n" " text-conflict\n" @@ -176,67 +177,67 @@ static const svn_opt_subcommand_desc2_t " If a tree conflict exists, no text or property conflicts exist.\n" " \n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "options-text", svnconflict_options_text, {0}, N_ - ("List options for resolving a text conflict at path.\n" + { "options-text", svnconflict_options_text, {0}, {N_( + "List options for resolving a text conflict at path.\n" "usage: options-text PATH\n" - "\n" + "\n"), N_( " List text conflict resolution options at PATH, one per line.\n" " Each line contains a numeric option ID, a colon, and a description.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "options-prop", svnconflict_options_prop, {0}, N_ - ("List options for resolving a property conflict at path.\n" + { "options-prop", svnconflict_options_prop, {0}, {N_( + "List options for resolving a property conflict at path.\n" "usage: options-prop PATH\n" - "\n" + "\n"), N_( " List property conflict resolution options at PATH, one per line.\n" " Each line contains a numeric option ID, a colon, and a description.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "options-tree", svnconflict_options_tree, {0}, N_ - ("List options for resolving a tree conflict at path.\n" + { "options-tree", svnconflict_options_tree, {0}, {N_( + "List options for resolving a tree conflict at path.\n" "usage: options-tree PATH\n" - "\n" + "\n"), N_( " List tree conflict resolution options at PATH, one per line.\n" " Each line contains a numeric option ID, a colon, and a description.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "resolve-text", svnconflict_resolve_text, {0}, N_ - ("Resolve the text conflict at path.\n" + { "resolve-text", svnconflict_resolve_text, {0}, {N_( + "Resolve the text conflict at path.\n" "usage: resolve-text OPTION_ID PATH\n" - "\n" + "\n"), N_( " Resolve the text conflict at PATH with a given resolution option.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "resolve-prop", svnconflict_resolve_prop, {0}, N_ - ("Resolve the property conflict at path.\n" + { "resolve-prop", svnconflict_resolve_prop, {0}, {N_( + "Resolve the property conflict at path.\n" "usage: resolve-prop PROPNAME OPTION_ID PATH\n" - "\n" + "\n"), N_( " Resolve conflicted property PROPNAME at PATH with a given resolution option.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "resolve-tree", svnconflict_resolve_tree, {0}, N_ - ("Resolve the tree conflict at path.\n" + { "resolve-tree", svnconflict_resolve_tree, {0}, {N_( + "Resolve the tree conflict at path.\n" "usage: resolve-tree OPTION_ID PATH\n" - "\n" + "\n"), N_( " Resolve the tree conflict at PATH with a given resolution option.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { NULL, NULL, {0}, NULL, {0} } + { NULL, NULL, {0}, {NULL}, {0} } }; /* Version compatibility check */ @@ -297,7 +298,7 @@ svnconflict_help(apr_getopt_t *os, void SVN_ERR(svn_ra_print_modules(version_footer, pool)); } - SVN_ERR(svn_opt_print_help4(os, + SVN_ERR(svn_opt_print_help5(os, "svnconflict", /* ### erm, derive somehow? */ opt_state ? opt_state->version : FALSE, FALSE, /* quiet */ @@ -641,7 +642,7 @@ sub_main(int *exit_code, int argc, const apr_array_header_t *received_opts; svnconflict_cmd_baton_t command_baton; int i; - const svn_opt_subcommand_desc2_t *subcommand = NULL; + const svn_opt_subcommand_desc3_t *subcommand = NULL; svn_auth_baton_t *ab; svn_config_t *cfg_config; apr_hash_t *cfg_hash; @@ -742,7 +743,7 @@ sub_main(int *exit_code, int argc, const just typos/mistakes. Whatever the case, the subcommand to actually run is svnconflict_help(). */ if (opt_state.help) - subcommand = svn_opt_get_canonical_subcommand2(svnconflict_cmd_table, + subcommand = svn_opt_get_canonical_subcommand3(svnconflict_cmd_table, "help"); /* If we're not running the `help' subcommand, then look for a @@ -754,8 +755,8 @@ sub_main(int *exit_code, int argc, const if (opt_state.version) { /* Use the "help" subcommand to handle the "--version" option. */ - static const svn_opt_subcommand_desc2_t pseudo_cmd = - { "--version", svnconflict_help, {0}, "", + static const svn_opt_subcommand_desc3_t pseudo_cmd = + { "--version", svnconflict_help, {0}, {""}, {opt_version, /* must accept its own option */ opt_config_dir /* all commands accept this */ } }; @@ -778,7 +779,7 @@ sub_main(int *exit_code, int argc, const SVN_ERR(svn_utf_cstring_to_utf8(&first_arg, os->argv[os->ind++], pool)); - subcommand = svn_opt_get_canonical_subcommand2(svnconflict_cmd_table, + subcommand = svn_opt_get_canonical_subcommand3(svnconflict_cmd_table, first_arg); if (subcommand == NULL) { @@ -805,12 +806,12 @@ sub_main(int *exit_code, int argc, const if (opt_id == 'h' || opt_id == '?') continue; - if (! svn_opt_subcommand_takes_option3(subcommand, opt_id, + if (! svn_opt_subcommand_takes_option4(subcommand, opt_id, svnconflict_global_options)) { const char *optstr; const apr_getopt_option_t *badopt = - svn_opt_get_option_from_code2(opt_id, svnconflict_options, + svn_opt_get_option_from_code3(opt_id, svnconflict_options, subcommand, pool); svn_opt_format_option(&optstr, badopt, FALSE, pool); if (subcommand->name[0] == '-') Modified: subversion/branches/swig-py3/tools/dev/svnmover/svnmover.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/dev/svnmover/svnmover.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/dev/svnmover/svnmover.c (original) +++ subversion/branches/swig-py3/tools/dev/svnmover/svnmover.c Wed Nov 28 21:25:32 2018 @@ -4042,7 +4042,7 @@ display_version(apr_getopt_t *os, svn_bo version_footer = svn_stringbuf_create(ra_desc_start, pool); SVN_ERR(svn_ra_print_modules(version_footer, pool)); - SVN_ERR(svn_opt_print_help4(NULL, "svnmover", TRUE, _quiet, FALSE, + SVN_ERR(svn_opt_print_help5(NULL, "svnmover", TRUE, _quiet, FALSE, version_footer->data, NULL, NULL, NULL, NULL, NULL, pool)); Modified: subversion/branches/swig-py3/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c (original) +++ subversion/branches/swig-py3/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c Wed Nov 28 21:25:32 2018 @@ -52,7 +52,7 @@ static svn_error_t * version(apr_pool_t *pool) { - return svn_opt_print_help4(NULL, "svnraisetreeconflict", TRUE, FALSE, FALSE, + return svn_opt_print_help5(NULL, "svnraisetreeconflict", TRUE, FALSE, FALSE, NULL, NULL, NULL, NULL, NULL, NULL, pool); } Modified: subversion/branches/swig-py3/tools/dev/unix-build/Makefile.svn URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/dev/unix-build/Makefile.svn?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/dev/unix-build/Makefile.svn (original) +++ subversion/branches/swig-py3/tools/dev/unix-build/Makefile.svn Wed Nov 28 21:25:32 2018 @@ -72,6 +72,12 @@ endif # 2.2 endif # 2.3 endif # 2.4 +ifeq ($(UNAME),OpenBSD) +# Pick the correct base compiler (ie. clang rather than ancient gcc 4.2.1) +CC = cc +CXX = c++ +endif + TAG ?= none ifeq ($(TAG),none) BRANCH ?= trunk @@ -102,7 +108,7 @@ SERF_OLD_VER = 0.3.1 CYRUS_SASL_VER = 2.1.25 SQLITE_VER = 3160200 LIBMAGIC_VER = 5.30 -RUBY_VER = 2.4.2 +RUBY_VER = 2.4.4 BZ2_VER = 1.0.6 PYTHON_VER = 2.7.13 JUNIT_VER = 4.10 @@ -132,7 +138,7 @@ SHA256_${NEON_DIST} = db0bd8cdec329b48f5 SHA256_${CYRUS_SASL_DIST} = 418c16e6240a4f9b637cbe3d62937b9675627bad27c622191d47de8686fe24fe SHA256_${SQLITE_DIST} = 65cc0c3e9366f50c0679c5ccd31432cea894bc4a3e8947dabab88c8693263615 SHA256_${LIBMAGIC_DIST} = 694c2432e5240187524c9e7cf1ec6acc77b47a0e19554d34c14773e43dbbf214 -SHA256_${RUBY_DIST} = 93b9e75e00b262bc4def6b26b7ae8717efc252c47154abb7392e54357e6c8c9c +SHA256_${RUBY_DIST} = 254f1c1a79e4cc814d1e7320bc5bdd995dc57e08727d30a767664619a9c8ae5a SHA256_${BZ2_DIST} = a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd SHA256_${PYTHON_DIST} = a4f05a0720ce0fd92626f0278b6b433eee9a6173ddf2bced7957dfb599a5ece1 SHA256_${JUNIT_DIST} = 36a747ca1e0b86f6ea88055b8723bb87030d627766da6288bf077afdeeb0f75a @@ -171,7 +177,7 @@ FETCH_CMD = wget -c SUBVERSION_REPOS_URL = https://svn.apache.org/repos/asf/subversion BDB_URL = http://download.oracle.com/berkeley-db/$(BDB_DIST) APR_URL = https://svn.apache.org/repos/asf/apr/apr -APR_ICONV_URL = https://www.apache.org/dist/apr/$(APR_ICONV_DIST) +APR_ICONV_URL = https://archive.apache.org/dist/apr/$(APR_ICONV_DIST) GNU_ICONV_URL = https://ftp.gnu.org/pub/gnu/libiconv/$(GNU_ICONV_DIST) APR_UTIL_URL = https://svn.apache.org/repos/asf/apr/apr-util HTTPD_URL = https://archive.apache.org/dist/httpd/$(HTTPD_DIST) @@ -183,7 +189,7 @@ SQLITE_URL = https://www.sqlite.org/2017 CYRUS_SASL_URL = ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/$(CYRUS_SASL_DIST) LIBMAGIC_URL = ftp://ftp.astron.com/pub/file/$(LIBMAGIC_DIST) RUBY_URL = https://cache.ruby-lang.org/pub/ruby/2.4/$(RUBY_DIST) -BZ2_URL = http://bzip.org/$(BZ2_VER)/$(BZ2_DIST) +BZ2_URL = https://ftp.openbsd.org/pub/OpenBSD/distfiles/$(BZ2_DIST) PYTHON_URL = https://python.org/ftp/python/$(PYTHON_VER)/$(PYTHON_DIST) JUNIT_URL = https://downloads.sourceforge.net/project/junit/junit/$(JUNIT_VER)/$(JUNIT_DIST) GETTEXT_URL = https://ftp.gnu.org/pub/gnu/gettext/$(GETTEXT_DIST) @@ -240,6 +246,10 @@ endif # We need this to make sure some targets below pick up the right libraries LD_LIBRARY_PATH=$(PREFIX)/apr/lib:$(PREFIX)/gettext/lib:$(PREFIX)/iconv/lib:$(PREFIX)/bdb/lib:$(PREFIX)/neon/lib:$(PREFIX)/serf/lib:$(PREFIX)/sqlite/lib:$(PREFIX)/cyrus-sasl/lib:$(PREFIX)/iconv/lib:$(PREFIX)/libmagic/lib:$(PREFIX)/ruby/lib:$(PREFIX)/python/lib:$(PREFIX)/svn-$(WC)/lib +# We need this to make sure some targets below pick up the right pkg-config files +PKG_CONFIG_PATH=$(PREFIX)/apr/lib/pkgconfig:$(PREFIX)/neon/lib/pkgconfig:$(PREFIX)/serf/lib/pkgconfig:$(PREFIX)/sqlite/lib/pkgconfig:$(PREFIX)/ruby/lib/pkgconfig:$(PREFIX)/python/lib/pkgconfig:$(PREFIX)/lz4/lib/pkgconfig + + ####################################################################### # Main targets. ####################################################################### @@ -333,6 +343,7 @@ $(BDB_OBJDIR)/.retrieved: $(DISTDIR)/$(B $(BDB_OBJDIR)/.configured: $(BDB_OBJDIR)/.retrieved cd $(BDB_SRCDIR)/build_unix \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`" \ + CC=$(CC) CXX=$(CXX) \ ../dist/configure \ --prefix=$(PREFIX)/bdb \ --enable-debug @@ -390,6 +401,8 @@ $(APR_OBJDIR)/.configured: $(APR_OBJDIR) cd $(APR_SRCDIR) && ./buildconf cd $(APR_OBJDIR) \ && env CFLAGS="-O0 -g $(PROFILE_CFLAGS)" GREP="`which grep`" \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ + CC=$(CC) CXX=$(CXX) \ $(APR_SRCDIR)/configure \ --prefix=$(PREFIX)/apr \ --enable-maintainer-mode \ @@ -438,7 +451,9 @@ $(APR_ICONV_OBJDIR)/.configured: $(APR_I $(APR_OBJDIR)/.installed cd $(APR_ICONV_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS) -DAPR_POOL_DEBUG" \ + CC=$(CC) CXX=$(CXX) \ GREP="`which grep`" \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(APR_ICONV_SRCDIR)/configure \ --prefix=$(PREFIX)/apr \ --with-apr=$(PREFIX)/apr @@ -522,6 +537,8 @@ $(GNU_ICONV_OBJDIR)/.configured: $(GNU_I ${MAKE} -f Makefile.devel lib/aliases.h cd $(GNU_ICONV_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`"\ + CC=$(CC) CXX=$(CXX) \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(GNU_ICONV_SRCDIR)/configure \ --prefix=$(PREFIX)/iconv \ --enable-extra-encodings @@ -592,7 +609,9 @@ $(APR_UTIL_OBJDIR)/.configured: $(APR_UT cd $(APR_UTIL_SRCDIR) && ./buildconf --with-apr=$(APR_SRCDIR) cd $(APR_UTIL_OBJDIR) \ && env LD_LIBRARY_PATH=$(PREFIX)/bdb/lib \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ CFLAGS="-O0 -g $(PROFILE_CFLAGS) -DAPR_POOL_DEBUG" \ + CC=$(CC) CXX=$(CXX) \ GREP="`which grep`" \ $(APR_UTIL_SRCDIR)/configure \ --prefix=$(PREFIX)/apr \ @@ -727,7 +746,9 @@ $(HTTPD_OBJDIR)/.configured: $(HTTPD_OBJ cd $(HTTPD_SRCDIR) && ./buildconf cd $(HTTPD_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS) -DAPR_POOL_DEBUG" \ + CC=$(CC) CXX=$(CXX) \ GREP="`which grep`" \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(HTTPD_SRCDIR)/configure \ --prefix=$(PREFIX)/httpd \ --enable-maintainer-mode \ @@ -812,6 +833,8 @@ $(NEON_OBJDIR)/.configured: $(NEON_OBJDI fi cd $(NEON_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`" \ + CC=$(CC) CXX=$(CXX) \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(NEON_SRCDIR)/configure \ PATH=$(NEON_OBJDIR):$$PATH \ --prefix=$(PREFIX)/neon \ @@ -872,9 +895,11 @@ $(SERF_OBJDIR)/.compiled: $(SERF_OBJDIR) cd $(SERF_SRCDIR) && \ scons -j${MAKE_JOBS} DEBUG=1 \ CFLAGS="-O0 -g $(PROFILE_CFLAGS) -DAPR_POOL_DEBUG" \ + CC=$(CC) CXX=$(CXX) \ APR=$(PREFIX)/apr \ APU=$(PREFIX)/apr \ - PREFIX=$(PREFIX)/serf + PREFIX=$(PREFIX)/serf \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) touch $@ # install serf @@ -915,6 +940,7 @@ $(SERF_OLD_OBJDIR)/.compiled: $(SERF_OLD $(APR_UTIL_OBJDIR)/.installed cd $(SERF_OLD_SRCDIR) && \ env CFLAGS="-O0 -g $(PROFILE_CFLAGS) -DAPR_POOL_DEBUG" \ + CC=$(CC) CXX=$(CXX) \ ./serfmake --with-apr=$(PREFIX)/apr \ --prefix=$(PREFIX)/serf-old \ build @@ -966,6 +992,8 @@ endif $(SQLITE_OBJDIR)/.configured: $(SQLITE_OBJDIR)/.retrieved cd $(SQLITE_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`" \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ + CC=$(CC) CXX=$(CXX) \ $(SQLITE_SRCDIR)/configure \ --prefix=$(PREFIX)/sqlite \ $(THREADSAFE_FLAG) @@ -1035,7 +1063,9 @@ $(CYRUS_SASL_OBJDIR)/.configured: $(CYRU cd $(CYRUS_SASL_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" \ CPPFLAGS="-I/usr/include/kerberosV" \ + CC=$(CC) CXX=$(CXX) \ GREP="`which grep`" \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(CYRUS_SASL_SRCDIR)/configure \ --with-dbpath=$(PREFIX)/cyrus-sasl/etc/sasldb2 \ --with-plugindir=$(PREFIX)/cyrus-sasl/lib/sasl2 \ @@ -1087,6 +1117,8 @@ $(LIBMAGIC_OBJDIR)/.retrieved: $(DISTDIR $(LIBMAGIC_OBJDIR)/.configured: $(LIBMAGIC_OBJDIR)/.retrieved cd $(LIBMAGIC_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`"\ + CC=$(CC) CXX=$(CXX) \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(LIBMAGIC_SRCDIR)/configure \ --enable-fsect-man5 \ --prefix=$(PREFIX)/libmagic @@ -1121,13 +1153,54 @@ ruby-clean: $(DISTDIR)/$(RUBY_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(RUBY_URL) +$(RUBY_OBJDIR)/openssl_missing.patch: + mkdir -p $(dir $@) + echo > [email protected] 'Index: ext/openssl/openssl_missing.h' + echo >> [email protected] '--- ext/openssl/openssl_missing.h.orig' + echo >> [email protected] '+++ ext/openssl/openssl_missing.h' + echo >> [email protected] '@@ -119,6 +119,9 @@ void ossl_HMAC_CTX_free(HMAC_CTX *);' + echo >> [email protected] ' #if !defined(HAVE_X509_STORE_SET_EX_DATA)' + echo >> [email protected] ' # define X509_STORE_set_ex_data(x, idx, data) \' + echo >> [email protected] ' CRYPTO_set_ex_data(&(x)->ex_data, (idx), (data))' + echo >> [email protected] '+#endif' + echo >> [email protected] '+' + echo >> [email protected] '+#if !defined(HAVE_X509_STORE_GET_EX_NEW_INDEX)' + echo >> [email protected] ' # define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \' + echo >> [email protected] ' CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, (l), (p), \' + echo >> [email protected] ' (newf), (dupf), (freef))' + echo >> [email protected] '@@ -192,6 +195,7 @@ void ossl_X509_REQ_get0_signature(const X509_REQ *, co' + echo >> [email protected] ' #endif' + echo >> [email protected] ' ' + echo >> [email protected] ' #if !defined(HAVE_OPAQUE_OPENSSL)' + echo >> [email protected] '+#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL' + echo >> [email protected] ' #define IMPL_PKEY_GETTER(_type, _name) \' + echo >> [email protected] ' static inline _type *EVP_PKEY_get0_##_type(EVP_PKEY *pkey) { \' + echo >> [email protected] ' return pkey->pkey._name; }' + echo >> [email protected] '@@ -243,6 +247,7 @@ IMPL_PKEY_GETTER(EC_KEY, ec)' + echo >> [email protected] ' #undef IMPL_PKEY_GETTER' + echo >> [email protected] ' #undef IMPL_KEY_ACCESSOR2' + echo >> [email protected] ' #undef IMPL_KEY_ACCESSOR3' + echo >> [email protected] '+#endif' + echo >> [email protected] ' #endif /* HAVE_OPAQUE_OPENSSL */' + echo >> [email protected] ' ' + echo >> [email protected] ' #if defined(HAVE_AUTHENTICATED_ENCRYPTION) && !defined(EVP_CTRL_AEAD_GET_TAG)' + mv -f [email protected] $@ + +ifeq ($(UNAME),OpenBSD) +RUBY_SSL_EX_NEW_DATA_PATCH = sed -i -e '/^have_func("X509_STORE_set_ex_data")$$/ { p; s/^.*$$/\have_func("X509_STORE_get_ex_new_index")/; }' +else +RUBY_SSL_EX_NEW_DATA_PATCH = true +endif + # retrieve ruby # -$(RUBY_OBJDIR)/.retrieved: $(DISTDIR)/$(RUBY_DIST) +$(RUBY_OBJDIR)/.retrieved: $(DISTDIR)/$(RUBY_DIST) $(RUBY_OBJDIR)/openssl_missing.patch $(call do_check_sha256,$(RUBY_DIST)) [ -d $(RUBY_OBJDIR) ] || mkdir -p $(RUBY_OBJDIR) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(RUBY_DIST) -which ghead && sed -i -e "s/head -c/ghead -c/" $(RUBY_SRCDIR)/configure + $(RUBY_SSL_EX_NEW_DATA_PATCH) $(RUBY_SRCDIR)/ext/openssl/extconf.rb + cd $(RUBY_SRCDIR) && patch -p0 < $(RUBY_OBJDIR)/openssl_missing.patch touch $@ ifeq ($(THREADING),yes) @@ -1140,6 +1213,8 @@ endif $(RUBY_OBJDIR)/.configured: $(RUBY_OBJDIR)/.retrieved cd $(RUBY_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`"\ + CC=$(CC) CXX=$(CXX) \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(RUBY_SRCDIR)/configure \ --prefix=$(PREFIX)/ruby \ --enable-shared \ @@ -1187,7 +1262,8 @@ $(BZ2_OBJDIR)/.retrieved: $(DISTDIR)/$(B # compile bz2 $(BZ2_OBJDIR)/.compiled: $(BZ2_OBJDIR)/.retrieved - (cd $(BZ2_SRCDIR) && env MAKEFLAGS= make CFLAGS="-g $(PROFILE_CFLAGS) -fPIC" -j${MAKE_JOBS}) + (cd $(BZ2_SRCDIR) && env MAKEFLAGS= make CC=$(CC) CXX=$(CXX) \ + CFLAGS="-g $(PROFILE_CFLAGS) -fPIC" -j${MAKE_JOBS}) touch $@ # install bz2 @@ -1247,9 +1323,11 @@ $(PYTHON_OBJDIR)/.configured: $(PYTHON_O $(BZ2_OBJDIR)/.installed cd $(PYTHON_OBJDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`" \ + CC=$(CC) CXX=$(CXX) \ CPPFLAGS="-I$(PREFIX)/bz2/include" \ LDFLAGS="-Wl,-rpath=$(PREFIX)/python/lib -L$(PREFIX)/bz2/lib" \ LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH" \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(PYTHON_SRCDIR)/configure \ --prefix=$(PREFIX)/python \ --enable-shared \ @@ -1316,7 +1394,9 @@ $(GETTEXT_OBJDIR)/.retrieved: $(DISTDIR) $(GETTEXT_OBJDIR)/.configured: $(GETTEXT_OBJDIR)/.retrieved cd $(GETTEXT_SRCDIR) \ && env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`"\ + CC=$(CC) CXX=$(CXX) \ LDFLAGS="-L$(PREFIX)/iconv/lib" \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ $(GETTEXT_SRCDIR)/configure \ --prefix=$(PREFIX)/gettext \ --with-libiconv-prefix=$(PREFIX)/iconv \ @@ -1375,7 +1455,8 @@ $(LZ4_OBJDIR)/.configured: $(LZ4_OBJDIR) # compile lz4 $(LZ4_OBJDIR)/.compiled: $(LZ4_OBJDIR)/.configured (cd $(LZ4_SRCDIR)/lib && \ - env MAKEFLAGS= $(MAKE) -j${MAKE_JOBS} PREFIX=$(PREFIX)/lz4) + env MAKEFLAGS= $(MAKE) CC=$(CC) CXX=$(CXX) \ + -j${MAKE_JOBS} PREFIX=$(PREFIX)/lz4) touch $@ # install lz4 @@ -1503,6 +1584,17 @@ SVN_WITH_HTTPD=--with-apxs="$(PREFIX)/ht SVN_WITH_SASL=--with-sasl="$(PREFIX)/cyrus-sasl" endif +# On OpenBSD, MExtUtils -e ldopts outputs -L/usr/local/lib, which can +# cause us to link Perl bindings against the wrong set of SVN libraries. +# As a workaround, we patch the configure script after it has been generated. +ifeq ($(UNAME),OpenBSD) +SWIG_PL_INCLUDES_HACK= sed -i 's^\($$PERL -MExtUtils::Embed -e ccopts\)^\1 | sed -e s@-I/usr/local/include@@^' $(svn_builddir)/configure +SWIG_PL_LINK_HACK= sed -i 's^\($$PERL -MExtUtils::Embed -e ldopts\)^\1 | sed -e s@-L/usr/local/lib@@^' $(svn_builddir)/configure +else +SWIG_PL_INCLUDES_HACK=true +SWIG_PL_LINK_HACK=true +endif + $(SVN_OBJDIR)/.configured: $(SVN_OBJDIR)/.retrieved $(DISTDIR)/$(JUNIT_DIST) \ $(APR_OBJDIR)/.installed $(APR_UTIL_OBJDIR)/.installed \ $(BDB_OBJDIR)/.installed $(SQLITE_OBJDIR)/.installed \ @@ -1511,11 +1603,15 @@ $(SVN_OBJDIR)/.configured: $(SVN_OBJDIR) $(SERF_OBJDIR)/.installed $(SERF_OLD_OBJDIR)/.installed \ $(RUBY_OBJDIR)/.installed $(PYTHON_OBJDIR)/.installed cd $(SVN_SRCDIR) && ./autogen.sh + $(SWIG_PL_INCLUDES_HACK) + $(SWIG_PL_LINK_HACK) cd $(svn_builddir) && \ env LDFLAGS="-L$(PREFIX)/neon/lib -L$(PREFIX)/apr/lib $(SERF_LDFLAG) $(LZ4_LDFLAG) -L$(PREFIX)/gettext/lib -L$(PREFIX)/iconv/lib" \ + CC=$(CC) CXX=$(CXX) \ CFLAGS="-I$(PREFIX)/gettext/include -DAPR_POOL_DEBUG" \ CXXFLAGS="-I$(PREFIX)/gettext/include -DAPR_POOL_DEBUG" \ LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH" \ + PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) \ GREP="`which grep`" \ PATH=$(PREFIX)/ruby/bin:$(PREFIX)/python/bin:$(PREFIX)/gettext/bin:$$PATH \ $(SVN_SRCDIR)/configure \ @@ -1563,6 +1659,17 @@ $(SVN_OBJDIR)/.pre-generated-swig-cleane && env MAKEFLAGS= make clean-swig touch $@ + +# On OpenBSD, Perl's LDDLFLAGS include -L/usr/local/lib, which can cause +# us to link Perl bindings against the wrong set of SVN libraries. +# We manually fix up the generated Makefile.PL to work around this issue. +ifeq ($(UNAME),OpenBSD) +MAKEFILE_PL_LDDLFLAGS_HACK= sed -i 's@^WriteMakefile@$$config{LDDLFLAGS} =~ s+-L/usr/local/lib++; WriteMakefile@' \ + $(SVN_SRCDIR)/subversion/bindings/swig/perl/native/Makefile.PL +else +MAKEFILE_PL_LDDLFLAGS_HACK=true +endif + $(SVN_OBJDIR)/.bindings-compiled: $(SVN_OBJDIR)/.installed $(SVN_OBJDIR)/.pre-generated-swig-cleaned cd $(svn_builddir) \ && env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ @@ -1571,13 +1678,15 @@ $(SVN_OBJDIR)/.bindings-compiled: $(SVN_ env PATH=$(PREFIX)/ruby/bin:$$PATH \ LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) env MAKEFLAGS= make -j${MAKE_JOBS} swig-rb if [ $(ENABLE_PERL_BINDINGS) = yes ]; then \ + cd $(svn_builddir) && make $(SVN_SRCDIR)/subversion/bindings/swig/perl/native/Makefile.PL; \ + $(MAKEFILE_PL_LDDLFLAGS_HACK); \ cd $(svn_builddir) \ && env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ env MAKEFLAGS= make -j${MAKE_JOBS} swig-pl; \ fi if [ $(ENABLE_JAVA_BINDINGS) = yes ]; then \ cd $(svn_builddir) \ - && env MAKEFLAGS= make -j${MAKE_JOBS} javahl; \ + && env MAKEFLAGS= make javahl; \ fi touch $@ @@ -1587,13 +1696,15 @@ $(SVN_OBJDIR)/.bindings-installed: $(SVN env MAKEFLAGS= make install-swig-py cd $(svn_builddir) && \ env PATH=$(PREFIX)/ruby/bin:$$PATH \ - LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) env MAKEFLAGS= make install-swig-rb + LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) MAKEFLAGS= make install-swig-rb if [ $(ENABLE_PERL_BINDINGS) = yes ]; then \ cd $(svn_builddir) \ - && env MAKEFLAGS= make install-swig-pl-lib; \ - cd subversion/bindings/swig/perl/native \ - && perl Makefile.PL PREFIX="$(SVN_PREFIX)" \ - && env MAKEFLAGS= make install; \ + && env MAKEFLAGS= LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ + make install-swig-pl-lib; \ + cd subversion/bindings/swig/perl/native \ + && perl Makefile.PL PREFIX="$(SVN_PREFIX)" \ + && env MAKEFLAGS= LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ + make install; \ fi if [ $(ENABLE_JAVA_BINDINGS) = yes ]; then \ cd $(svn_builddir) \ @@ -1924,6 +2035,7 @@ endif HTTPD_CMD = env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(LIB_PTHREAD_HACK) \ $(PREFIX)/httpd/bin/apachectl +HTTPD_LOG_ROTATE = mv $(PREFIX)/httpd/logs/error_log $(PREFIX)/httpd/logs/error_log.old HTTPD_START_CMD = $(HTTPD_CMD) -f $(HTTPD_CHECK_CONF) -k start HTTPD_START_CMD_PROXY = $(HTTPD_CMD) -f $(HTTPD_PROXY_CONF) HTTPD_START_CMD_DEBUG = $(HTTPD_START_CMD) -X @@ -1942,6 +2054,7 @@ SVNSERVE_STOP_CMD = kill `cat $(PWD)/svn rm -f $(PWD)/svnserve-$(WC).pid start-httpd: $(HTTPD_CHECK_CONF) + -$(HTTPD_LOG_ROTATE) $(HTTPD_START_CMD) @echo "To run tests over http, run:" @echo " make check BASE_URL=http://localhost:$(HTTPD_CHECK_PORT)" @@ -2064,7 +2177,7 @@ svn-check-javahl: -if [ $(ENABLE_JAVA_BINDINGS) = yes ]; then \ (cd $(svn_builddir) && \ env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ - env MAKEFLAGS= make $(JAVAHL_CHECK_TARGET) 2>&1) | \ + MAKEFLAGS= make $(JAVAHL_CHECK_TARGET) 2>&1) | \ tee $(svn_builddir)/tests.log.bindings.javahl; \ fi Modified: subversion/branches/swig-py3/tools/dev/wc-ng/svn-wc-db-tester.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/dev/wc-ng/svn-wc-db-tester.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/dev/wc-ng/svn-wc-db-tester.c (original) +++ subversion/branches/swig-py3/tools/dev/wc-ng/svn-wc-db-tester.c Wed Nov 28 21:25:32 2018 @@ -44,7 +44,7 @@ static svn_error_t * version(apr_pool_t *pool) { - return svn_opt_print_help4(NULL, "svn-wc-db-tester", TRUE, FALSE, FALSE, + return svn_opt_print_help5(NULL, "svn-wc-db-tester", TRUE, FALSE, FALSE, NULL, NULL, NULL, NULL, NULL, NULL, pool); } Modified: subversion/branches/swig-py3/tools/dist/README.backport URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/dist/README.backport?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/dist/README.backport (original) +++ subversion/branches/swig-py3/tools/dist/README.backport Wed Nov 28 21:25:32 2018 @@ -7,20 +7,23 @@ F1. Auto-merge bot; the nightly svn-role F2. Conflicts detector bot; the svn-backport-conflicts-1.9.x buildbot task. -And two interactive functions, described later. +And two interactive functions¹: + +F3. Reviewing STATUS nominations and casting votes. + +F4. Adding new entries to STATUS. The scripts are: backport.pl: - oldest script, implements both [F1] and [F2], plus two interactive - functions¹. As of March 2015, used in production by svn-role and - by svn-backport-conflicts-1.9.x. + oldest script, implements [F1], [F2], and [F3]. As of Feb 2018, used in + production by svn-role (running on svn-qavm3) and by svn-backport-conflicts-1.9.x + (a buildbot job). nominate.pl: - Symlink to backport.pl. Implements one of the two interactive features. - Not used by bots. + Symlink to backport.pl. Implements [F4]. (The script inspects its argv[0].) backport_tests_pl.py: Regression tests for backport.pl. @@ -39,9 +42,11 @@ backport/*.py: detect-conflicting-backports.py: Implementation of [F2] using backport.py. + Not currently used in production. merge-approved-backports.py: Implementation of [F1] using backport.py. + Not currently used in production. backport_tests_py.py: Regression tests for detect-conflicting-backports.py and merge-approved-backports.py @@ -52,13 +57,28 @@ backport_tests.py: svntest framework (../../subversion/tests/cmdline/svntest/), which is written in Python 2. -backport*.dump: + Note that backport_tests.py and backport/*.py are written in different + languages, so they never 'import' each other. backport_tests.py invokes + detect-conflicting-backports.py, merge-approved-backports.py, and + backport.pl in the same manner: through subprocess.check_call(). + +backport_tests_data/backport*.dump: Expected output files for backport_tests.py; see the BackportTest - decorator. + decorator in backport_tests.py. All scripts can be run with '--help' to display their usage messages. +backport.pl is considered deprecated since backport.py is better architected +and is written in a language that many more active developers are comfortable +with. The unattended jobs [F1] and [F2] should be converted to using +backport.py whenever someone gets around to do the legwork. The interactive +versions [F3] and [F4] are still in active use, however, so the physical +backport.pl script should be kept around until Python versions of these are +available. + + +TODO: document that "Notes: ... --accept=foo ..." is parsed, see backport_tests.py #3. ¹ For backport.pl's interactive features, see: Modified: subversion/branches/swig-py3/tools/dist/backport.pl URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/tools/dist/backport.pl?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/tools/dist/backport.pl (original) +++ subversion/branches/swig-py3/tools/dist/backport.pl Wed Nov 28 21:25:32 2018 @@ -9,11 +9,11 @@ use v5.10.0; # needed for $^V # experimental and "subject to change" in v5.18 (see perl5180delta). Every # use of it now triggers a warning. # -# As of Perl v5.24.1, the semantics of given/when provided by Perl are +# As of Perl v5.26.1, the semantics of given/when provided by Perl are # compatible with those expected by the script, so disable the warning for # those Perls. But don't try to disable the the warning category on Perls # that don't know that category, since that breaks compilation. -no if (v5.17.0 le $^V and $^V le v5.24.1), +no if (v5.17.0 le $^V and $^V le v5.26.1), warnings => 'experimental::smartmatch'; # Licensed to the Apache Software Foundation (ASF) under one @@ -791,7 +791,7 @@ sub vote { # Add to state votes that aren't '+0' or 'edit' $state->{$_->{digest}}++ for grep - +{ qw/-1 t -0 t +1 t/ }->{$_->{vote}}, + +($_->{approval} or $_->{vote} =~ /^(-1|-0|[+]1)$/), @votesarray; } } @@ -1279,7 +1279,7 @@ sub nominate_main { # Open the file in line-mode (not paragraph-mode). my @STATUS; tie @STATUS, "Tie::File", $STATUS, recsep => "\n"; - my ($index) = grep { $STATUS[$_] =~ /^Veto/ } (0..$#STATUS); + my ($index) = grep { $STATUS[$_] =~ /^Veto|^Approved/ } (0..$#STATUS); die "Couldn't find where to add an entry" unless $index; # Add an empty line if needed.
