svn commit: r1915904 - /subversion/branches/move-tracking-3/BRANCH-README
Author: julianfoad Date: Tue Feb 20 20:19:55 2024 New Revision: 1915904 URL: http://svn.apache.org/viewvc?rev=1915904=rev Log: On the 'move-tracking-3' branch: add BRANCH-README. Added: subversion/branches/move-tracking-3/BRANCH-README (with props) Added: subversion/branches/move-tracking-3/BRANCH-README URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-3/BRANCH-README?rev=1915904=auto == --- subversion/branches/move-tracking-3/BRANCH-README (added) +++ subversion/branches/move-tracking-3/BRANCH-README Tue Feb 20 20:19:55 2024 @@ -0,0 +1,20 @@ +A branch on which to prototype a model of move-tracking and branching. + +This experimental functionality is exposed through one stand-alone dev +tool 'tools/dev/svnmover' and through one undocumented environment +variable 'SVN_ELEMENT_MERGE' which hooks the code in to the 'svn merge' +command. + +Status: + + This approach to move tracking is not currently being pursued. It is + retained for historical reference. + +Merge policy: + + Development branch -- periodic catch-up merges from trunk. + + The work on this branch may or may not eventually be wanted on trunk. It + is not intended to be kept in a state where it could be merged to trunk. + +See notes/move-tracking/README for further details of this work. Propchange: subversion/branches/move-tracking-3/BRANCH-README -- svn:eol-style = native
svn commit: r1915903 - in /subversion/trunk: ./ build/generator/ notes/move-tracking/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_delta/ subversion/tests/cmdline/ subversio
Author: julianfoad Date: Tue Feb 20 20:19:03 2024 New Revision: 1915903 URL: http://svn.apache.org/viewvc?rev=1915903=rev Log: Remove experimental move-tracking development. The former state is now preserved in the branch 'move-tracking-3'. This approach to move tracking is no longer being pursued. No impact on public functionality. It was exposed only through one stand-alone dev tool 'tools/dev/svnmover' and through one undocumented environment variable 'SVN_ELEMENT_MERGE' which hooks the code in to the 'svn merge' command. Removed: subversion/trunk/notes/move-tracking/ subversion/trunk/subversion/include/private/svn_branch.h subversion/trunk/subversion/include/private/svn_branch_compat.h subversion/trunk/subversion/include/private/svn_branch_impl.h subversion/trunk/subversion/include/private/svn_branch_nested.h subversion/trunk/subversion/include/private/svn_branch_repos.h subversion/trunk/subversion/include/private/svn_element.h subversion/trunk/subversion/libsvn_client/merge_elements.c subversion/trunk/subversion/libsvn_delta/branch.c subversion/trunk/subversion/libsvn_delta/branch_compat.c subversion/trunk/subversion/libsvn_delta/branch_migrate.c subversion/trunk/subversion/libsvn_delta/branch_nested.c subversion/trunk/subversion/libsvn_delta/branch_repos.c subversion/trunk/subversion/libsvn_delta/element.c subversion/trunk/subversion/tests/cmdline/svnmover_tests.py subversion/trunk/tools/dev/svnmover/ Modified: subversion/trunk/LICENSE subversion/trunk/build.conf subversion/trunk/build/generator/gen_base.py subversion/trunk/subversion/libsvn_client/client.h subversion/trunk/subversion/libsvn_client/merge.c subversion/trunk/subversion/tests/cmdline/svntest/actions.py subversion/trunk/subversion/tests/cmdline/svntest/main.py Modified: subversion/trunk/LICENSE URL: http://svn.apache.org/viewvc/subversion/trunk/LICENSE?rev=1915903=1915902=1915903=diff == --- subversion/trunk/LICENSE (original) +++ subversion/trunk/LICENSE Tue Feb 20 20:19:03 2024 @@ -367,35 +367,6 @@ subversion/libsvn_subr/x509.h * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -For the (modified) 'linenoise' library in tools/dev/svnmover/linenoise - - Copyright (c) 2010-2014, Salvatore Sanfilippo - Copyright (c) 2010-2013, Pieter Noordhuis - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - For the (modified) LZ4 library files in subversion/libsvn_subr/lz4 LZ4 Library Modified: subversion/trunk/build.conf URL: http://svn.apache.org/viewvc/subversion/trunk/build.conf?rev=1915903=1915902=1915903=diff == --- subversion/trunk/build.conf (original) +++ subversion/trunk/build.conf Tue Feb 20 20:19:03 2024 @@ -48,8 +48,6 @@ private-includes = subversion/bindings/cxx/tests/*.hpp subversion/bindings/javahl/native/*.hpp subversion/bindings/javahl/native/jniwrapper/jni_*.hpp -tools/dev/svnmover/linenoise/linenoise.h -tools/dev/svnmover/linenoise/linenoise.c subversion/libsvn_subr/utf8proc/utf8proc_internal.h subversion/libsvn_subr/utf8proc/utf8proc.c subversion/libsvn_subr/utf8proc/utf8proc_data.c @@ -258,7 +256,7 @@ type = lib install = fsmod-lib path = subversion/libsvn_delta libs = libsvn_subr aprutil apriconv apr zlib -msvc-export = svn_delta.h private/svn_editor.h private/svn_delta_private.h private/svn_element.h private/svn_branch.h private/svn_branch_compat.
svn commit: r1915902 - /subversion/branches/move-tracking-3/
Author: julianfoad Date: Tue Feb 20 20:18:53 2024 New Revision: 1915902 URL: http://svn.apache.org/viewvc?rev=1915902=rev Log: Create a branch to preserve experimental move-tracking development. The creation of this branch 'move-tracking-3' preserves the state that was on trunk until r1915900. This experimental functionality is exposed only through one stand-alone dev tool 'tools/dev/svnmover' and through one undocumented environment variable 'SVN_ELEMENT_MERGE' which hooks the code in to the 'svn merge' command. Added: subversion/branches/move-tracking-3/ (props changed) - copied from r1915901, subversion/trunk/ Propchange: subversion/branches/move-tracking-3/ -- --- svn:auto-props (added) +++ svn:auto-props Tue Feb 20 20:18:53 2024 @@ -0,0 +1,14 @@ +*.c = svn:eol-style=native +*.cpp = svn:eol-style=native +*.h = svn:eol-style=native +*.hpp = svn:eol-style=native +*.java = svn:eol-style=native +*.m4 = svn:eol-style=native +*.py = svn:eol-style=native +*.pl = svn:eol-style=native +*.rb = svn:eol-style=native +*.sql = svn:eol-style=native +*.txt = svn:eol-style=native +README = svn:eol-style=native +BRANCH-README = svn:eol-style=native +STATUS = svn:eol-style=native Propchange: subversion/branches/move-tracking-3/ -- --- svn:ignore (added) +++ svn:ignore Tue Feb 20 20:18:53 2024 @@ -0,0 +1,67 @@ +ChangeLog* +Makefile +config.cache +config.log +config.nice +config.status +configure +libtool +.gdb_history +.swig_checked +*.orig +*.rej +TAGS +tags +neon +build-outputs.mk +aclocal.m4 +autogen-standalone.mk +autom4te.cache +gen-make.opts +tests.log* +fails.log* +db4-win32 +db +*.o +*~ +.*~ +apr +apr-util +apr-iconv +Release +release_win32 +release_win32_static +release_x64 +release_ARM64 +Debug +debug_win32 +debug_win32_static +debug_x64 +debug_ARM64 +ipch +subversion_msvc.dsw +subversion_msvc.ncb +subversion_msvc.opt +subversion_msvc.plg +subversion_vcnet.* +mkmf.log +.project +.classpath +.cdtproject +.settings +.cproject +py3c +zlib +sqlite-amalgamation +serf +googlemock +.git +.gitignore +.idea +compile_commands.json +.kdev4 +*.kdev4 +.vs +.swig_pl_checked +.swig_py_checked +.swig_rb_checked Propchange: subversion/branches/move-tracking-3/ -- --- svn:mergeinfo (added) +++ svn:mergeinfo Tue Feb 20 20:18:53 2024 @@ -0,0 +1,113 @@ +/subversion/branches/1.10-cache-improvements:1669168-1694487 +/subversion/branches/1.11.x:1841316,1841548 +/subversion/branches/1.5.x-r30215:870312 +/subversion/branches/1.7.x-fs-verify:1146708,1161180 +/subversion/branches/1.9-cache-improvements:1678948-1679863 +/subversion/branches/1.9.x:1735680 +/subversion/branches/10Gb:1388102,1388163-1388190,1388195,1388202,1388205,1388211,1388276,1388362,1388375,1388394,1388636,1388639-1388640,1388643-1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388807,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390209,1390216,1390407,1390409,1390414,1390419,1390955 +/subversion/branches/atomic-revprop:965046-1000689 +/subversion/branches/authzperf:1613053-1776831 +/subversion/branches/auto-props-sdc:1384106-1401643 +/subversion/branches/bdb-reverse-deltas:872050-872529 +/subversion/branches/better-pristines:1807118-1843075 +/subversion/branches/cache-server:1458643-1476567 +/subversion/branches/decouple-shelving-cli:1874630-1875035 +/subversion/branches/diff-callbacks3:870059-870761 +/subversion/branches/diff-optimizations:1031270-1037352 +/subversion/branches/diff-optimizations-bytes:1037353-1067789 +/subversion/branches/dont-save-plaintext-passwords-by-default:870728-871118 +/subversion/branches/double-delete:870511-872970 +/subversion/branches/dump-load-cross-check:1654853-1657295 +/subversion/branches/ev2-export:1325914,1332738,1413107 +/subversion/branches/explore-wc:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997 +/subversion/branches/file-externals:871779-873302 +/subversion/branches/fs-rep-sharing:869036-873803 +/subversion/branches/fsfs-format7:1426304,1430673,1433848,1438408,1438982,1441129,1442051,1442068,1442504,1442910,1443171,1443803,1444690,1444693,1444695,1445040,1445080,1446103,1451129,1453590,1454307,1460579,1461851,1461865,1462837,1462904,1463120,1467362,1467382,1469487,1471208,1477166,1478055,1481447,1489817,1489949,1490673-1490674,1491784,1493042,1498029,1498103,1498155,1500054,1507729-1507731,1507735-1507736 +/subversion/branches/fsfs-improvements:1499981-1547039 +/subversion/branches/fsfs-lock-many:1571740-1577217
svn commit: r1900110 - in /subversion/branches/pristines-on-demand-on-mwf/subversion/svn: cat-cmd.c cl.h diff-cmd.c notify.c svn.c
Author: julianfoad Date: Thu Apr 21 13:46:48 2022 New Revision: 1900110 URL: http://svn.apache.org/viewvc?rev=1900110=rev Log: On the 'pristines-on-demand-on-mwf' branch: A follow-up to r1899173 "notify when hydrating". Don't unconditionally suppress all notifications in 'cat' and 'diff', just suppress the progress feedback for text base hydration, in case (now or later) we are using notifications for something else in 'cat' (less likely) or 'diff' (more likely). * subversion/svn/cl.h (svn_cl__notifier_suppress_progress_output): New. * subversion/svn/cat-cmd.c (svn_cl__cat): Don't disable the notification callback entirely. * subversion/svn/diff-cmd.c (svn_cl__diff): Same. * subversion/svn/notify.c (notify_baton): Add a flag. (notify_body): Print text base hydration progress only if the flag is set. (svn_cl__get_notifier): Initialize the flag. (svn_cl__notifier_suppress_progress_output): New. * subversion/svn/svn.c (sub_main): Tell our notifier to suppress progress output for 'cat' and 'diff'. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cat-cmd.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cl.h subversion/branches/pristines-on-demand-on-mwf/subversion/svn/diff-cmd.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/notify.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/svn.c Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cat-cmd.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cat-cmd.c?rev=1900110=1900109=1900110=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cat-cmd.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cat-cmd.c Thu Apr 21 13:46:48 2022 @@ -53,9 +53,6 @@ svn_cl__cat(apr_getopt_t *os, apr_array_header_t *errors = apr_array_make(pool, 0, sizeof(apr_status_t)); svn_error_t *err; - /* Don't print any feedback notifications. (At least not on stdout.) */ - ctx->notify_func2 = NULL; - SVN_ERR(svn_cl__args_to_target_array_print_reserved(, os, opt_state->targets, ctx, FALSE, pool)); Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cl.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cl.h?rev=1900110=1900109=1900110=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cl.h (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cl.h Thu Apr 21 13:46:48 2022 @@ -709,6 +709,11 @@ svn_cl__notifier_mark_export(void *baton svn_error_t * svn_cl__notifier_mark_wc_to_repos_copy(void *baton); +/* Make the notifier for use with BATON suppress progress notifications + */ +svn_error_t * +svn_cl__notifier_suppress_progress_output(void *baton); + /* Baton for use with svn_cl__check_externals_failed_notify_wrapper(). */ struct svn_cl__check_externals_failed_notify_baton { Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/svn/diff-cmd.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/svn/diff-cmd.c?rev=1900110=1900109=1900110=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/svn/diff-cmd.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/svn/diff-cmd.c Thu Apr 21 13:46:48 2022 @@ -222,9 +222,6 @@ svn_cl__diff(apr_getopt_t *os, opt_state->diff.patch_compatible || opt_state->diff.ignore_properties; int i; - /* Don't print any feedback notifications. (At least not on stdout.) */ - ctx->notify_func2 = NULL; - if (opt_state->extensions) options = svn_cstring_split(opt_state->extensions, " \t\n\r", TRUE, pool); else Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/svn/notify.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/svn/notify.c?rev=1900110=1900109=1900110=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/svn/notify.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/svn/notify.c Thu Apr 21 13:46:48 2022 @@ -56,6 +56,7 @@ struct notify_baton svn_boolean_t hydrating_printed_start; int in_external; svn_revnum_t progress_revision; + svn_boolean_t progress_output; svn_boolean_t had_print_error; /* Used to not keep printing error messages when we've already had one print error. */ svn_boolea
svn commit: r1900103 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py
Author: julianfoad Date: Thu Apr 21 10:47:01 2022 New Revision: 1900103 URL: http://svn.apache.org/viewvc?rev=1900103=rev Log: On the 'pristines-on-demand-on-mwf' branch: add a test related to #4988 "Pristines-on-demand: authz denied during textbase sync". * subversion/tests/cmdline/authz_tests.py (cat_base_after_repo_access_removed): New test. (test_list): Run it. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py?rev=1900103=1900102=1900103=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py Thu Apr 21 10:47:01 2022 @@ -1818,6 +1818,29 @@ def log_inaccessible_copyfrom(sbox): 'log', '-r2', '-v', sbox.repo_url) +@Skip(svntest.main.is_ra_type_file) +def cat_base_after_repo_access_removed(sbox): + "cat_base_after_repo_access_removed" + + sbox.build() + wc_dir = sbox.wc_dir + + svntest.main.write_restrictive_svnserve_conf(sbox.repo_dir) + svntest.main.write_authz_file(sbox, { "/" : "*=rw", +"/A/D" : "*="}) + + # Local modification so base can't be derived from working version + sbox.simple_append('A/D/G/pi', 'appended\n') + + # With repository read access denied, expect we can still access the + # text base locally, if and only if text bases are present. + if sbox.pristines_on_demand_enabled(): +svntest.actions.run_and_verify_svn(None, '.*E170001: Authorization failed', + 'cat', sbox.ospath('A/D/G/pi') + '@BASE') + else: +svntest.actions.run_and_verify_svn("This is the file 'pi'.\n", [], + 'cat', sbox.ospath('A/D/G/pi') + '@BASE') + # Run the tests @@ -1860,6 +1883,7 @@ test_list = [ None, empty_group, delete_file_with_starstar_rules, log_inaccessible_copyfrom, + cat_base_after_repo_access_removed, ] serial_only = True
svn commit: r1899647 - in /subversion/branches/pristines-on-demand-on-mwf: ./ CHANGES INSTALL subversion/tests/cmdline/revert_tests.py tools/dev/unix-build/Makefile.svn tools/dist/README.backport
Author: julianfoad Date: Thu Apr 7 09:56:49 2022 New Revision: 1899647 URL: http://svn.apache.org/viewvc?rev=1899647=rev Log: On the 'pristines-on-demand-on-mwf' branch: sync with trunk@1899646. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/CHANGES subversion/branches/pristines-on-demand-on-mwf/INSTALL subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/revert_tests.py subversion/branches/pristines-on-demand-on-mwf/tools/dev/unix-build/Makefile.svn subversion/branches/pristines-on-demand-on-mwf/tools/dist/README.backport Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- Merged /subversion/trunk:r1899386-1899646 Modified: subversion/branches/pristines-on-demand-on-mwf/CHANGES URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/CHANGES?rev=1899647=1899646=1899647=diff == --- subversion/branches/pristines-on-demand-on-mwf/CHANGES (original) +++ subversion/branches/pristines-on-demand-on-mwf/CHANGES Thu Apr 7 09:56:49 2022 @@ -11,6 +11,31 @@ https://svn.apache.org/repos/asf/subvers - Client-side improvements and bugfixes: * Support multiple working copy formats (1.8-onward, 1.15) (issue #) +Version 1.14.2 +(12 Apr 2022, from /branches/1.14.x) + User-visible changes: + - Client-side bugfixes: +* Don't show unreadable copyfrom paths in 'svn log -v' (r1899227) +* Fix -r option documentation for some svnadmin subcommands (r1896877) +* Fix error message encoding when system() call fails (r1887641, r1890013) +* Fix assertion failure in conflict resolver (r1892470, -471, -541) + + - Server-side bugfixes: +* Fix use-after-free of object-pools when running in httpd (issue #4880) + + Developer-visible changes: +* Add test coverage for CVE-2020-17525 (r1883838 et al) +* Fix «make davautocheck» failure due to unbuilt dependency (r1891908) +* Follow up to r1866587, r1866588: Unbreak a msgid. (r1887704) +* swig-py: Fix double-free with cyclic garbage collector (r1889487) +* swig-py: Skip some tests on Python2 if encoding is 'utf-8' (r1885199) +* swig-py: Fix dependency of make copy-swig-py target (r1886708) +* Document how the port number is passed to custom tunnels (r1889629) +* tests: Include additional information in an error message (r1897449) +* Fix an error message when running make davautocheck (r1892121) +* Use the APR-1.4+ API for flushing file contents to disk (r1883355) +* JavaHL: Fix RequestChannel_nativeRead_AfterException failure (r1898633) + Version 1.14.1 (10 Feb 2021, from /branches/1.14.x) User-visible changes: @@ -271,6 +296,22 @@ http://svn.apache.org/repos/asf/subversi * Enable building against Java 10 (r1841180 et al) * Fix a potential crash in JavaHL (issue #4764) +Version 1.10.8 +(12 Apr 2022, from /branches/1.10.x) + User-visible changes: + - Client-side bugfixes: +* Don't show unreadable copyfrom paths in 'svn log -v' (r1899227) +* Fix merge assertion failure in svn_sort__array_insert (issue #4840) + + - Server-side bugfixes: +* Fix use-after-free of object-pools when running in httpd (issue #4880) +* Fix authz doesn't combine global and repository rules (issue #4762) + + Developer-visible changes: +* Add test coverage for CVE-2020-17525 (r1883838 et al) +* Fix «make davautocheck» failure due to unbuilt dependency (r1891908) +* Follow up to r1866587, r1866588: Unbreak a msgid (r1887704) +* Remove incorrect include paths from svn_cv_ruby_includes (r1875602) Version 1.10.7 (10 Feb 2021, from /branches/1.10.x) Modified: subversion/branches/pristines-on-demand-on-mwf/INSTALL URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/INSTALL?rev=1899647=1899646=1899647=diff == --- subversion/branches/pristines-on-demand-on-mwf/INSTALL (original) +++ subversion/branches/pristines-on-demand-on-mwf/INSTALL Thu Apr 7 09:56:49 2022 @@ -1451,7 +1451,7 @@ IV. PLATFORM-SPECIFIC ISSUES And there's an item about this in the Subversion FAQ: - https://subversion.apache.org/faq.html#windows-xp-server + https://subversion.apache.org/faq.html#windows-xp-server The only known workaround for now is to update to Windows XP SP1 (or higher). Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/revert_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/revert_tests.py?rev=1899647=1899646=1899647=diff == --- subversion/branches/pristines-on-demand-on-mwf
svn commit: r1899646 - /subversion/trunk/subversion/tests/cmdline/revert_tests.py
Author: julianfoad Date: Thu Apr 7 09:53:38 2022 New Revision: 1899646 URL: http://svn.apache.org/viewvc?rev=1899646=rev Log: Print diagnostics when test revert_tests.py 2 fails. * subversion/tests/cmdline/revert_tests.py (revert_reexpand_keyword): Print expected and actual outputs on failure. Modified: subversion/trunk/subversion/tests/cmdline/revert_tests.py Modified: subversion/trunk/subversion/tests/cmdline/revert_tests.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/revert_tests.py?rev=1899646=1899645=1899646=diff == --- subversion/trunk/subversion/tests/cmdline/revert_tests.py (original) +++ subversion/trunk/subversion/tests/cmdline/revert_tests.py Thu Apr 7 09:53:38 2022 @@ -281,8 +281,9 @@ def revert_reexpand_keyword(sbox): fp = open(path, 'r') lines = fp.readlines() fp.close() -if lines[0] != "This is newfile: $Rev: 3 $.\n": - raise svntest.Failure +expected = "This is newfile: $Rev: 3 $.\n" +if lines[0] != expected: + raise svntest.Failure({"actual": lines[0], "expected": expected}) check_expanded(newfile_path)
svn commit: r1899645 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py
Author: julianfoad Date: Thu Apr 7 09:27:51 2022 New Revision: 1899645 URL: http://svn.apache.org/viewvc?rev=1899645=rev Log: On the 'pristines-on-demand-on-mwf' branch: fix diff_tests.py 48 on Windows. A follow-up to r1898528. * subversion/tests/cmdline/diff_tests.py (diff_external_diffcmd): Properly escape paths in regex. Patch by: Jun Omae Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py?rev=1899645=1899644=1899645=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py Thu Apr 7 09:27:51 2022 @@ -3090,8 +3090,8 @@ def diff_external_diffcmd(sbox): r"iota\t\(revision 1\)\n", "-L\n", r"iota\t\(working copy\)\n", -os.path.abspath(svntest.main.get_admin_name()) + '.*' + "\n", -os.path.abspath("iota") + "\n"]) +re.escape(os.path.abspath(svntest.main.get_admin_name())) + '.*' + "\n", +re.escape(os.path.abspath("iota")) + "\n"]) # Check that the output of diff corresponds with the expected arguments, # in the correct order.
svn commit: r1899622 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py
Author: julianfoad Date: Wed Apr 6 16:05:49 2022 New Revision: 1899622 URL: http://svn.apache.org/viewvc?rev=1899622=rev Log: On the 'pristines-on-demand-on-mwf' branch: progress on trans_tests.py 1. The test fails because detranslated fixed-length keywords are not as expected: W: text base item 3, Expected: :: $ W: text base item 3, Got: :: f#$ * subversion/tests/cmdline/trans_tests.py (keywords_from_birth): Read text-base from repo when not available locally in pristines-on-demand mode, and make it XFail then. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py?rev=1899622=1899621=1899622=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py Wed Apr 6 16:05:49 2022 @@ -213,7 +213,7 @@ def keywords_off(path): ### This test is know to fail when Subversion is built in very deep ### directory structures, caused by SVN_KEYWORD_MAX_LEN being defined ### as 255. -@Wimp("Relies on wc.text_base_path()") +@XFail(lambda: svntest.main.options.wc_format_version=='1.15') def keywords_from_birth(sbox): "commit new files with keywords active from birth" @@ -394,9 +394,16 @@ def keywords_from_birth(sbox): '$URL::x%sx$\n' % (' ' * len(url_expand_test_data)) ] - fp = open(svntest.wc.text_base_path(fixed_length_keywords_path), 'r') - actual_textbase_kw = fp.readlines() - fp.close() + # Read the text base. In pristines-on-demand mode it isn't stored locally + # after commit, so read it from the repo. + if sbox.pristines_on_demand_enabled(): +_, actual_textbase_kw, _ = svntest.main.run_svn(False, + 'cat', '-rHEAD', fixed_length_keywords_path) + else: +fp = open(svntest.wc.text_base_path(fixed_length_keywords_path), 'r') +actual_textbase_kw = fp.readlines() +fp.close() + check_keywords(actual_textbase_kw, kw_textbase, "text base") # Check the Id keyword for filename with spaces.
svn commit: r1899620 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py
Author: julianfoad Date: Wed Apr 6 15:33:53 2022 New Revision: 1899620 URL: http://svn.apache.org/viewvc?rev=1899620=rev Log: On the 'pristines-on-demand-on-mwf' branch: trivially fix trans_tests.py 3. * subversion/tests/cmdline/trans_tests.py (eol_change_is_text_mod): Don't check text-base in pristines-on-demand mode. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py?rev=1899620=1899619=1899620=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py Wed Apr 6 15:33:53 2022 @@ -552,7 +552,6 @@ def update_modified_with_translation(sbo # after the commit, the file and its text-base have been changed to # have the new line-ending style. @Issue(1085) -@Wimp("Relies on wc.text_base_path()") def eol_change_is_text_mod(sbox): "committing eol-style change forces text send" @@ -599,10 +598,11 @@ def eol_change_is_text_mod(sbox): if contents != b"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n": raise svntest.Failure - foo_base_path = svntest.wc.text_base_path(foo_path) - base_contents = open(foo_base_path, 'rb').read() - if contents != base_contents: -raise svntest.Failure + if not sbox.pristines_on_demand_enabled(): +foo_base_path = svntest.wc.text_base_path(foo_path) +base_contents = open(foo_base_path, 'rb').read() +if contents != base_contents: + raise svntest.Failure #-- # Regression test for issue #1151. A single file in a directory
svn commit: r1899618 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py
Author: julianfoad Date: Wed Apr 6 14:52:08 2022 New Revision: 1899618 URL: http://svn.apache.org/viewvc?rev=1899618=rev Log: On the 'pristines-on-demand-on-mwf' branch: adjust a test to XFAIL. * subversion/tests/cmdline/upgrade_tests.py (replaced_files): Reference #4891. XFAIL in pristines-on-demand mode. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py?rev=1899618=1899617=1899618=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Wed Apr 6 14:52:08 2022 @@ -866,7 +866,10 @@ def delete_in_copy_upgrade(sbox): 'b347d1da69df9a6a70433ceeaa0d46c8483e8c03']]) -@Wimp("Can't fetch pristines: the working copy points to file:///tmp/repo") +# XFAIL when pristines-on-demand enabled: at the revert step the pristines +# are missing and it can't fetch them as repo no longer exists. See #4891. +@Issue(4891) +@XFail(lambda: svntest.main.options.wc_format_version=='1.15') def replaced_files(sbox): "upgrade with base and working replaced files"
svn commit: r1899616 - in /subversion/branches/pristines-on-demand-on-mwf/subversion: libsvn_wc/wc_db_textbase.c tests/cmdline/authz_tests.py
Author: julianfoad Date: Wed Apr 6 13:20:34 2022 New Revision: 1899616 URL: http://svn.apache.org/viewvc?rev=1899616=rev Log: On the 'pristines-on-demand-on-mwf' branch: revert r1898184 (issue #4888). This patch was papering over the problem in an incomplete way and so possibly causes more confusion than it fixes. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c?rev=1899616=1899615=1899616=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c Wed Apr 6 13:20:34 2022 @@ -330,13 +330,6 @@ svn_wc__db_textbase_sync(svn_wc__db_t *d hydrate_baton, cancel_func, cancel_baton, checksum, repos_root_url, repos_relpath, revision, iterpool); - /* If read access is unauthorized, for some operations we need - * to continue even though we failed to fetch the textbase. */ - if (err && err->apr_err == SVN_ERR_RA_NOT_AUTHORIZED) -{ - svn_error_clear(err); - err = SVN_NO_ERROR; -} if (err) return svn_error_compose_create(err, svn_sqlite__reset(stmt)); } Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py?rev=1899616=1899615=1899616=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py Wed Apr 6 13:20:34 2022 @@ -1613,6 +1613,7 @@ def authz_log_censor_revprops(sbox): '-r1', sbox.repo_url]) @Skip(svntest.main.is_ra_type_file) +@Wimp("Applying delta to a local mod needs access to the text base") def remove_access_after_commit(sbox): "remove a subdir with authz file"
svn commit: r1899612 - /subversion/branches/pristines-on-demand/
Author: julianfoad Date: Wed Apr 6 11:29:42 2022 New Revision: 1899612 URL: http://svn.apache.org/viewvc?rev=1899612=rev Log: Remove the 'pristines-on-demand' branch, as it has been superseded by the 'pristines-on-demand-on-mwf' branch. Removed: subversion/branches/pristines-on-demand/
svn commit: r53561 - in /dev/subversion: subversion-1.10.8.tar.bz2.asc subversion-1.10.8.tar.gz.asc subversion-1.14.2.tar.bz2.asc subversion-1.14.2.tar.gz.asc
Author: julianfoad Date: Sun Apr 3 20:59:07 2022 New Revision: 53561 Log: Add my signatures for 1.10.8 and 1.14.2 (Unix). Modified: dev/subversion/subversion-1.10.8.tar.bz2.asc dev/subversion/subversion-1.10.8.tar.gz.asc dev/subversion/subversion-1.14.2.tar.bz2.asc dev/subversion/subversion-1.14.2.tar.gz.asc Modified: dev/subversion/subversion-1.10.8.tar.bz2.asc == --- dev/subversion/subversion-1.10.8.tar.bz2.asc (original) +++ dev/subversion/subversion-1.10.8.tar.bz2.asc Sun Apr 3 20:59:07 2022 @@ -5,3 +5,19 @@ yyHaAP0WNT2j8LTLxG6WoQ1ivZwgFV3aTJLGXEED njbEpS/1AIMFENT0EHGpzWK7m6FCZQE= =N0r2 -END PGP SIGNATURE- +-BEGIN PGP SIGNATURE- + +iQIzBAABCAAdFiEEYBFjz51Jn9cYz1gtH7BkuE7sxJMFAmJKA/YACgkQH7BkuE7s +xJOtwRAAzq/nk131by8rhIjASYyPzWG7k+qraaSzDkORO3mVV2s/+ap82rFESy5i +usU3Zno4x1xmDgJw+PG0csB39wgbA86DXpeie/+9hWHYYrC0BAI9ao+VeNn+Be9y +Rv2XUUSkfMYwgjH9fW8WWmHvmG+IDBrZWWYcvZnhBO7/mU8tT29/IGLbvOViSZcz +uOM/5YJscniwm30em9cSS94ee0ViNO7BfADaEmPfY/sj1eaZQj2E92IqLGMOyCWk +M+iOUds0+5HYTTGrEzjqu7veyvMM9iyAISAc1jhi+nygDU158xS76KDQ/HOMuHJI +3M0r3QExWh1LvzDh46/lZ9HUVgaDHZ9oA0E1wRQv/w+JETynYqmpjzu07DXYDbz2 +AyPzUCF1J3xtE84iFF3fCZLc4DM0NlvzpYPDze7E44zBtkyEO2+XCE9Vkg4IERHN +iqb2VShKR/AJYxfW0/ZrpnUdBUX1FB57SRVUvfpClAUnVllNGKyyfOvIL+2ASTCv +M6uQ8tykROYJxVk9ajyMLJIDAL+VrKFTDO5GXrNlChLSHE2IqJ8qEISleeKWVlZF +Pe8aOrlPFsLl/lSYzHRQ8L4nrbrHdGhTyd/2kv2NfYwGn1AucGdsPs4e4n1FBpkF +7JINqhWpGXf6hObFC+/7HxNdTUgC8uMp1y8dwPuFrMAv1Mb/pBk= +=diLt +-END PGP SIGNATURE- Modified: dev/subversion/subversion-1.10.8.tar.gz.asc == --- dev/subversion/subversion-1.10.8.tar.gz.asc (original) +++ dev/subversion/subversion-1.10.8.tar.gz.asc Sun Apr 3 20:59:07 2022 @@ -5,3 +5,19 @@ y3f9AQDXyTBfESZnjK/7XDcsQrKxDSYPB7hORJPs cXeKdYP4MrSa7tnu7aXUCTFlD/9ITw0= =hRdS -END PGP SIGNATURE- +-BEGIN PGP SIGNATURE- + +iQIzBAABCAAdFiEEYBFjz51Jn9cYz1gtH7BkuE7sxJMFAmJKA/YACgkQH7BkuE7s +xJOumRAAoNnBCZEpJVhI1J2NF4x2bFvfk/dJ7jkX7HDw0Jj/NjLy6GobDx3qB2oO +YpGxsyvUITnsHPH09ugHLwgcKAek5C6VouE1P9eBjSsKp1tKXujOU1xuLcIHlw9D +CjOCZWL2aDbFRjy3Gw13ydDoB4zZ97s9ULAt+93X9uYZz662H7ZvpCsg3hbinUF+ +pMOsFuWhhyhfXn/dGYOBUO0XSAGD/GHxVEHfjY1BtcckgDxbmH7u3+zrPqYU9HtR +aaURlYWwjto4JfXLcG3bY9jiouEb09B3w/2MUCXj91hJFoz3hY2B/isibnIoM4Ib +/iPrVvHCrRYXzA7pa16UgcHRY6ZlQm08ITqYbg80/7Qde2vDtAM6eGKL+b/McvXJ +U95mN25MmzLdwBUP9rSQCC8CzKTvLOK5PmJ/kMuFMG6sqnbOyStF/luuGFycqoff +FheoehRJXIGO4YALxO7pmAriVJxG5kg1feq9JqHqo3/f7YRRHsP1X85FDbq8EReq +pAQ2A/VtN0QYR13z7JoM8LupIn90NuCnLZdk6AxUNLtM4TLFVD3GnWo6RxozNzTM +QLgQJrmAIgLMdy/Au9BZ6TChLKUETbH+ECcyXVj1SFF8cXcPeFymyADvyAfjhI/g +pgs+QLTKZWduVjvPygSsvs1ZGtwkDfixqiQH/ufNFu0ay1k00II= +=V57K +-END PGP SIGNATURE- Modified: dev/subversion/subversion-1.14.2.tar.bz2.asc == --- dev/subversion/subversion-1.14.2.tar.bz2.asc (original) +++ dev/subversion/subversion-1.14.2.tar.bz2.asc Sun Apr 3 20:59:07 2022 @@ -5,3 +5,19 @@ y6mRAQDV+0XPH+LQzZ4/34rtkoXz3EIza8Vjs3eD ZwluxOn1MjRlju05kSEbXWDxCYCiaQU= =pQq5 -END PGP SIGNATURE- +-BEGIN PGP SIGNATURE- + +iQIzBAABCAAdFiEEYBFjz51Jn9cYz1gtH7BkuE7sxJMFAmJKA9oACgkQH7BkuE7s +xJMspg//fT0ONQ4AIKpTAthnZQ3ECNta/S2c7nQppQdR7JZ8Q7iWVnVWn8rMJqPE +kFtlymmfdQGrmBZGdMvZzOqXSClyEkoZRF1pgbEWbUvCbzxvuqxPNrnBb/9C+nmq +mg8QeWYpVYRylzeq5fiKl2MnM7RmvwM2QCE1e4LVoM56kgcqxmtAjXJauLR3ubm7 +p1uDasdNekThMJvf/GHU3HQuxWxX7XzQ1tvO3FS6jDA+47HBKojKREFgQFx2NOxp +sGYn/DwHmHYgicg/6kF+SCk6cvz/ck6+DkE4z6ctjBNPc701zOdpnTb6T0I1Ovxt +IEy1QWkKQrO63yD2tbUBszB+d2rYY+c8X+t73dxq0RzOxkJGMpf/ZTZ6LC4AKNgY +sZC1wg7fkXJNjGgiKSt0SzfQUzNjk/Onf4LKd7gOuv/TeOHucEa1l2KvNwa0OI0l +AC3k3ppBEdh+aXN9y+8QsQdKPv57jCS29NOgieVT6WUV8mugdKsxWHlDHewa8wGR +Iyd4BIyWzOwyCLzyuESYCXyn9FDXMQOORvbDXvf5IvdBgkWEUUBaqv4rhYE2RrCU +i0G4wXsLQa2VCioL/Azt+S9+sFQhmlweZPtoLj2+xfTIoFXmealaXmm4hSA2ayks +SYc+A+Hn4zoebqY9XhUJU9Vs5JKXe1/xVtJdzBsczgiakrrEo44= +=dfDx +-END PGP SIGNATURE- Modified: dev/subversion/subversion-1.14.2.tar.gz.asc == --- dev/subversion/subversion-1.14.2.tar.gz.asc (original) +++ dev/subversion/subversion-1.14.2.tar.gz.asc Sun Apr 3 20:59:07 2022 @@ -5,3 +5,19 @@ yzKMAQCAZEcLc5u1i4yyIHSusKQftdQcYo89xV9y rMmBeD6DEE8cR1Kv0ELRlYTnpmJoxQM= =eVhy -END PGP SIGNATURE- +-BEGIN PGP SIGNATURE- + +iQIzBAABCAAdFiEEYBFjz51Jn9cYz1gtH7BkuE7sxJMFAmJKA+YACgkQH7BkuE7s +xJPtRw/+JPFeVvjFKHlNKswdHZ0nylKCIYIVEKDP5mSptvpxKhbitignINXRfUv2 +Z4cK25p5L95wFJVzSTpgwc7rTCqkdgeooMt5jz6c7a4pNWfL2jkj0xVdwtKobyG6 +eyoJX/53mbSr/6p7+DAi/mpho5cXY8uu6W+xhn5+i9lRvfYy5zmh3+snYlHe2z7l +2cWFZn2a1bGaNN08a5mgz/U34CwXBA/U7aq5dfnuS1hl1dD14U3qT3lxfMEsCTT6 +Sv1SwP8V/uVqoqKeh6uz50CEBCZU5CKP3l9tpeaOWQwjn5PsfUQqTjHAkT1tCQHe +U4wKIHHFyz5T9sYWZE+i5SZ8H2skuhGWuLOCFwdUFRRLAi/eXBQk1HhGdPo0pGy9 +pChiuMAFVXOJX3WlM0ejvDPZsRuFAjoUau
svn commit: r1899388 - /subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md
Author: julianfoad Date: Wed Mar 30 13:18:02 2022 New Revision: 1899388 URL: http://svn.apache.org/viewvc?rev=1899388=rev Log: On the 'pristines-on-demand-on-mwf' branch: update the i525 user guide. Modified: subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md Modified: subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md?rev=1899388=1899387=1899388=diff == --- subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md (original) +++ subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md Wed Mar 30 13:18:02 2022 @@ -54,7 +54,7 @@ are found to be locally modified and cur - `svn cat` (default case: base version) - `svn diff` (default case: base against working) - - `svn resolve` (also conflicts resolver in `merge`, `update`) + - `svn resolve` (some cases; also conflicts resolver in `merge`, `update`) - `svn revert` Notes on previously *offline* operations,: @@ -65,17 +65,19 @@ Notes on previously *offline* operations - This contact may be needed as a result of a file being modified that is not of interest in the current operation, as the "sync scope" is a superset of the pristines that this operation will actually need. - - The "hydrating" phase may take a long time, and (currently) gives no -progress feedback, before the operation begins its usual (previous) -behaviour. - -[TODO: update that if we add progress feedback] + - The "hydrating" phase may take a long time, before the operation begins +its usual (previous) behaviour. To help the user know why there is a +delay, most commands will output progress notifications, "Fetching text +bases ..." with one dot per file fetched. However, the data-output +commands 'diff' and 'cat' give no progress feedback. (See issue #4897 +for any updates on this.) Each of the following operations, that previously were *online* operations, also will now require the same. - `svn diff` (comparing repository to WC) - `svn merge` + - `svn resolve` (some cases; also conflicts resolver in `merge`, `update`) - `svn switch` - `svn update` - `svn checkout --force` (similar to update)
svn commit: r1899386 - in /subversion/branches/pristines-on-demand-on-mwf: ./ build/generator/ subversion/bindings/swig/ subversion/include/ subversion/libsvn_repos/ subversion/libsvn_wc/ subversion/t
Author: julianfoad Date: Wed Mar 30 12:44:32 2022 New Revision: 1899386 URL: http://svn.apache.org/viewvc?rev=1899386=rev Log: On the 'pristines-on-demand-on-mwf' branch: sync with trunk@1899385. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/build/generator/gen_win_dependencies.py subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/swig/INSTALL subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_types.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_repos/log.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc-metadata.sql subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc.h subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/sandbox.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py subversion/branches/pristines-on-demand-on-mwf/tools/dist/backport.pl Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- Merged /subversion/trunk:r1899008-1899385 Modified: subversion/branches/pristines-on-demand-on-mwf/build/generator/gen_win_dependencies.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/build/generator/gen_win_dependencies.py?rev=1899386=1899385=1899386=diff == --- subversion/branches/pristines-on-demand-on-mwf/build/generator/gen_win_dependencies.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/build/generator/gen_win_dependencies.py Wed Mar 30 12:44:32 2022 @@ -285,6 +285,11 @@ class GenDependenciesBase(gen_base.Gener self.sln_version = '12.00' self.vcproj_version = '14.2' self.vcproj_extension = '.vcxproj' +elif val == '2022' or val == '17': + self.vs_version = '2022' + self.sln_version = '12.00' + self.vcproj_version = '14.3' + self.vcproj_extension = '.vcxproj' elif re.match('^20\d+$', val): print('WARNING: Unknown VS.NET version "%s",' ' assuming VS2012. Your VS can probably upgrade') Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/swig/INSTALL URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/swig/INSTALL?rev=1899386=1899385=1899386=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/swig/INSTALL (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/swig/INSTALL Wed Mar 30 12:44:32 2022 @@ -84,8 +84,10 @@ Step 1: [Optional] Install a suitable ve following notes: - SWIG 1.3.24 and later 1.3.x may work, but we do not test these versions on our latest source code. - - For Python 2 bindings, SWIG 4.0.0 or later is not supported. - - For Python 3 bindings, SWIG 3.0.10 or later is required. + - For Python 3 bindings, use SWIG 3.0.10 or later. (SWIG 4.0.0 +or later is supported as well.) + - For Python 2 bindings, use SWIG 2.x-3.x. (SWIG 4.0.0 or later +is not supported as it lacks the '-classic' option.) - Note that SWIG 3.0.9 has some trouble with Python support. (See https://sourceforge.net/p/swig/news/2016/06/swig-3010-released/) - For Perl 5.16 and later, SWIG 2.0.8 or later is required. @@ -171,12 +173,11 @@ Step 3: Install Specific Language Bindi * Python - 1. (Optional) If you want to build Python bindings for a version of - Python than other than that the prebuilt bindings C sources target - (e.g., if you use the Subversion distribution tarball but want to build - Python 2 bindings), run 'make clean-swig-py' from the top of the - Subversion build tree, to ensure not to use incompatible version of - bindings source files. + 1. (Optional) Run 'make clean-swig-py' from the top of the Subversion + build tree. This will clean any prebuilt or previously built bindings + to avoid a mixture of incompatible bindings source files (e.g., if you + use the Subversion distribution tarball but want to build Python 2 + bindings). 2. Run 'make swig-py' from the top of the Subversion build tree, to build the bindings. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_types.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_types.h?rev=1899386=1899385=18
svn commit: r1899173 - in /subversion/branches/pristines-on-demand-on-mwf/subversion: include/ libsvn_client/ svn/ tests/cmdline/ tests/cmdline/svntest/
Author: julianfoad Date: Thu Mar 24 16:09:54 2022 New Revision: 1899173 URL: http://svn.apache.org/viewvc?rev=1899173=rev Log: On the 'pristines-on-demand-on-mwf' branch: notify when hydrating. This adds hydration feedback notification to the library. This also makes 'svn' display these notifications, except in 'svn diff' and 'svn cat' which are primarily data output commands where notifications would interfere with the primary output. * subversion/include/svn_wc.h (svn_wc_notify_action_t): Add new action types. * subversion/libsvn_client/textbase.c (textbase_hydrate_cb): Notify when hydrating each file. (svn_client__textbase_sync): Notify when hydrating starts and finishes. * subversion/svn/notify.c (notify_baton, svn_cl__get_notifier): Remember when printing hydration notifications. (notify_body): Print hydration notifications. * subversion/svn/cat-cmd.c (svn_cl__cat): Suppress all notifications. * subversion/svn/diff-cmd.c (svn_cl__diff): Suppress all notifications. Updating tests to the new expectations: * subversion/tests/cmdline/depth_tests.py (revert_depth_files): Use 'run_and_verify_revert'. * subversion/tests/cmdline/merge_tests.py (merge_to_switched_path, dont_add_mergeinfo_from_own_history): Use 'run_and_verify_revert'. * subversion/tests/cmdline/move_tests.py (move_conflict_details): Add the 'Fetching...' notification line to expected output. * subversion/tests/cmdline/patch_tests.py (patch_no_svn_eol_style, patch_with_svn_eol_style, patch_with_svn_eol_style_uncommitted): Use 'run_and_verify_revert'. * subversion/tests/cmdline/revert_tests.py (run_and_verify_revert): Use 'run_and_verify_revert_output'. * subversion/tests/cmdline/schedule_tests.py (check_reversion): Remove. (revert_add_files, revert_add_directories, revert_nested_adds, revert_add_executable, revert_delete_files, revert_delete_dirs): Use 'run_and_verify_revert'. * subversion/tests/cmdline/svntest/actions.py (expected_noop_update_output): Add the 'Fetching...' notification line to expected output. (_run_and_verify_resolve, run_and_verify_revert): Remove the 'Fetching...' notification line from actual output before matching the expected output. (run_and_verify_revert_output): New. * subversion/tests/cmdline/svntest/mergetrees.py (expected_merge_output): Add the 'Fetching...' notification line to expected output. * subversion/tests/cmdline/svntest/sandbox.py (pristines_on_demand_enabled): New method. * subversion/tests/cmdline/update_tests.py (another_hudson_problem): Add the 'Fetching...' notification line to expected output. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/textbase.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cat-cmd.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/diff-cmd.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/notify.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/depth_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/merge_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/move_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/patch_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/revert_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/schedule_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/mergetrees.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/sandbox.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/wc.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h?rev=1899173=1899172=1899173=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h Thu Mar 24 16:09:54 2022 @@ -1305,6 +1305,22 @@ typedef enum svn_wc_notify_action_t * @since New in 1.10. */ svn_wc_notify_end_search_tree_conflict_details, + /** Hydrating (fetching text-bases): starting a batch of fetching + * within the WC subtree at @c svn_wc_notify_t.path. (Zero or more files + * may be fetched, each preceded by @c svn_wc_notify_hydrating_file.) + * @since New in 1.15
svn commit: r1898948 - in /subversion/branches/pristines-on-demand-issue4892: ./ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_wc/
Author: julianfoad Date: Tue Mar 15 13:42:47 2022 New Revision: 1898948 URL: http://svn.apache.org/viewvc?rev=1898948=rev Log: New branch 'pristines-on-demand-on-issue4892': update fetches minimal pristines. Branched from 'pristines-on-demand-on-mwf'. This commit, as well as branching, applies the proof-of-concept patch sent to dev@ thread "Issue #525/#4892: on only fetching the pristines we really need". This is a proof-of-concept patch, enabling "update" to fetch minimal pristines, using a deeper callback to fetch them at the point of use. Currently, "restore" functionality of the update is disabled. A similar approach could enable it to fetch at point of use as well. Currently it being disabled leads to the following test suite failures: FAIL: basic_tests.py 1: basic checkout of a wc FAIL: copy_tests.py 20: copy over a missing file FAIL: relocate_tests.py 1: relocate with deleted, missing and copied entries FAIL: stat_tests.py 13: timestamp behaviour FAIL: update_tests.py 6: delete files and update to resolve text conflicts FAIL: update_tests.py 9: update missing items (by name) in working copy FAIL: update_tests.py 14: update missing dir to rev in which it is absent FAIL: update_tests.py 15: another "hudson" problem: updates that delete FAIL: upgrade_tests.py 24: test upgrading a working copy with missing subdir FAIL: upgrade_tests.py 27: upgrade with missing replaced dir This patch leads to one additional test failure: FAIL: externals_tests.py 68: check file external recorded info * subversion/include/private/svn_wc_private.h (svn_wc__textbase_hydrate_cb_t): Moved to earlier. (svn_wc__get_update_editor): Add a hydrate callback. (svn_wc__crawl_revisions6): New, bumped... ### see below. * subversion/libsvn_client/client.h, subversion/libsvn_client/textbase.c (svn_client__textbase_get_hydrator): New. * subversion/libsvn_client/switch.c (svn_client__switch_internal): ### hydrate before conflicts resolver * subversion/libsvn_client/update.c (update_internal): (svn_client__update_internal): Don't hydrate everything at the start. Pass a hydrate callback down to the WC update operation. ### TODO/TO-CHECK: Also hydrate before conflicts resolver. * subversion/libsvn_wc/adm_crawler.c (maybe_restore_node): ### TEMPORARY: don't restore. (svn_wc_crawl_revisions5): Bump to ...6(), adding a hydrate callback. ### TODO: use the callback for "restore". * subversion/libsvn_wc/deprecated.c (svn_wc_get_update_editor4): Pass null for hydrate callback. * subversion/libsvn_wc/update_editor.c (lazy_open_source): Use a hydrate callback to hydrate if pristine is missing. (edit_baton, make_editor, svn_wc__get_update_editor, svn_wc__get_switch_editor): Pass a hydrate callback through. * subversion/libsvn_wc/wc_db.h, subversion/libsvn_wc/wc_db_textbase.c (svn_wc__db_textbase_hydrate): Newly public; renamed ... (textbase_hydrate): ... from this. (svn_wc__db_textbase_sync): Track the rename. Added: subversion/branches/pristines-on-demand-issue4892/ (props changed) - copied from r1898947, subversion/branches/pristines-on-demand-on-mwf/ Modified: subversion/branches/pristines-on-demand-issue4892/subversion/include/private/svn_wc_private.h subversion/branches/pristines-on-demand-issue4892/subversion/libsvn_client/client.h subversion/branches/pristines-on-demand-issue4892/subversion/libsvn_client/switch.c subversion/branches/pristines-on-demand-issue4892/subversion/libsvn_client/textbase.c subversion/branches/pristines-on-demand-issue4892/subversion/libsvn_client/update.c subversion/branches/pristines-on-demand-issue4892/subversion/libsvn_wc/adm_crawler.c subversion/branches/pristines-on-demand-issue4892/subversion/libsvn_wc/deprecated.c subversion/branches/pristines-on-demand-issue4892/subversion/libsvn_wc/update_editor.c subversion/branches/pristines-on-demand-issue4892/subversion/libsvn_wc/wc_db.h subversion/branches/pristines-on-demand-issue4892/subversion/libsvn_wc/wc_db_textbase.c Propchange: subversion/branches/pristines-on-demand-issue4892/ -- --- svn:auto-props (added) +++ svn:auto-props Tue Mar 15 13:42:47 2022 @@ -0,0 +1,14 @@ +*.c = svn:eol-style=native +*.cpp = svn:eol-style=native +*.h = svn:eol-style=native +*.hpp = svn:eol-style=native +*.java = svn:eol-style=native +*.m4 = svn:eol-style=native +*.py = svn:eol-style=native +*.pl = svn:eol-style=native +*.rb = svn:eol-style=native +*.sql = svn:eol-style=native +*.txt = svn:eol-style=native +README = svn:eol-style=native +BRANCH-README = svn:eol-style=native +STATUS = svn:eol-style=native Propchange: subversion/branches/pristines-on-demand-issue4892/ -- --- svn:ignore (added) +++ svn:ignore Tue Mar 15 13
svn commit: r1898850 - in /subversion/branches/pristines-on-demand-on-mwf: ./ subversion/libsvn_wc/adm_crawler.c
Author: julianfoad Date: Fri Mar 11 12:11:02 2022 New Revision: 1898850 URL: http://svn.apache.org/viewvc?rev=1898850=rev Log: On the 'pristines-on-demand-on-mwf' branch: sync with trunk@1898849. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/adm_crawler.c Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- Merged /subversion/trunk:r1898820-1898849 Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/adm_crawler.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/adm_crawler.c?rev=1898850=1898849=1898850=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/adm_crawler.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/adm_crawler.c Fri Mar 11 12:11:02 2022 @@ -110,57 +110,6 @@ restore_file(svn_wc__db_t *db, return SVN_NO_ERROR; } -svn_error_t * -svn_wc_restore(svn_wc_context_t *wc_ctx, - const char *local_abspath, - svn_boolean_t use_commit_times, - apr_pool_t *scratch_pool) -{ - /* ### If ever revved: Add cancel func. */ - svn_wc__db_status_t status; - svn_node_kind_t kind; - svn_node_kind_t disk_kind; - const svn_checksum_t *checksum; - - SVN_ERR(svn_io_check_path(local_abspath, _kind, scratch_pool)); - - if (disk_kind != svn_node_none) -return svn_error_createf(SVN_ERR_WC_PATH_FOUND, NULL, - _("The existing node '%s' can not be restored."), - svn_dirent_local_style(local_abspath, -scratch_pool)); - - SVN_ERR(svn_wc__db_read_info(, , NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, , NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - wc_ctx->db, local_abspath, - scratch_pool, scratch_pool)); - - if (status != svn_wc__db_status_normal - && !((status == svn_wc__db_status_added -|| status == svn_wc__db_status_incomplete) - && (kind == svn_node_dir - || (kind == svn_node_file && checksum != NULL) - /* || (kind == svn_node_symlink && target)*/))) -{ - return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL, - _("The node '%s' can not be restored."), - svn_dirent_local_style(local_abspath, - scratch_pool)); -} - - if (kind == svn_node_file || kind == svn_node_symlink) -SVN_ERR(restore_file(wc_ctx->db, local_abspath, use_commit_times, - FALSE /*mark_resolved_text_conflict*/, - NULL, NULL /* cancel func, baton */, - scratch_pool)); - else -SVN_ERR(svn_io_dir_make(local_abspath, APR_OS_DEFAULT, scratch_pool)); - - return SVN_NO_ERROR; -} - /* Try to restore LOCAL_ABSPATH of node type KIND and if successful, notify that the node is restored. Use DB for accessing the working copy. If USE_COMMIT_TIMES is set, then set working file's timestamp to @@ -207,6 +156,120 @@ restore_node(svn_wc__db_t *db, return SVN_NO_ERROR; } +/* Check the node at LOCAL_ABSPATH. If it is missing on disk and has + a suitable status in the metadata, then restore it on disk and if + successful, notify that the node is restored. + */ +static svn_error_t * +maybe_restore_node(svn_wc__db_t *db, + const char *local_abspath, + svn_boolean_t use_commit_times, + svn_cancel_func_t cancel_func, + void *cancel_baton, + svn_wc_notify_func2_t notify_func, + void *notify_baton, + apr_pool_t *scratch_pool) +{ + svn_error_t *err; + svn_wc__db_status_t wrk_status; + svn_node_kind_t wrk_kind; + const svn_checksum_t *checksum; + svn_boolean_t conflicted; + + err = svn_wc__db_read_info(_status, _kind, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, , NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, , NULL, NULL, NULL, NULL, + NULL, NULL, + db, local_abspath, + scratch_pool, scratch_pool); + + + if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND) +{ + svn_error_clear(err); + wrk_status = svn_wc__d
svn commit: r1898847 - /subversion/trunk/subversion/libsvn_wc/adm_crawler.c
Author: julianfoad Date: Fri Mar 11 11:29:31 2022 New Revision: 1898847 URL: http://svn.apache.org/viewvc?rev=1898847=rev Log: Factor out restore-missing-file code in the WC update code. No functional change. There is one minor change. The order of checking disk-kind first followed by db-kind, in deciding whether to restore the top level node in svn_wc_crawl_revisions5(), is now reversed, becoming consistent with the order it uses in checking every other node in the sub-tree in report_revisions_and_depths() (which is disk-kind then db-kind). This could in principle make a difference to timings and failure modes. * subversion/libsvn_wc/adm_crawler.c (svn_wc_restore): Move after 'restore_node' and use 'restore_node' rather than duplicating that logic. (maybe_restore_node): New, factored out... (report_revisions_and_depths, svn_wc_crawl_revisions5): ... from these. Modified: subversion/trunk/subversion/libsvn_wc/adm_crawler.c Modified: subversion/trunk/subversion/libsvn_wc/adm_crawler.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/adm_crawler.c?rev=1898847=1898846=1898847=diff == --- subversion/trunk/subversion/libsvn_wc/adm_crawler.c (original) +++ subversion/trunk/subversion/libsvn_wc/adm_crawler.c Fri Mar 11 11:29:31 2022 @@ -100,57 +100,6 @@ restore_file(svn_wc__db_t *db, return SVN_NO_ERROR; } -svn_error_t * -svn_wc_restore(svn_wc_context_t *wc_ctx, - const char *local_abspath, - svn_boolean_t use_commit_times, - apr_pool_t *scratch_pool) -{ - /* ### If ever revved: Add cancel func. */ - svn_wc__db_status_t status; - svn_node_kind_t kind; - svn_node_kind_t disk_kind; - const svn_checksum_t *checksum; - - SVN_ERR(svn_io_check_path(local_abspath, _kind, scratch_pool)); - - if (disk_kind != svn_node_none) -return svn_error_createf(SVN_ERR_WC_PATH_FOUND, NULL, - _("The existing node '%s' can not be restored."), - svn_dirent_local_style(local_abspath, -scratch_pool)); - - SVN_ERR(svn_wc__db_read_info(, , NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, , NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - wc_ctx->db, local_abspath, - scratch_pool, scratch_pool)); - - if (status != svn_wc__db_status_normal - && !((status == svn_wc__db_status_added -|| status == svn_wc__db_status_incomplete) - && (kind == svn_node_dir - || (kind == svn_node_file && checksum != NULL) - /* || (kind == svn_node_symlink && target)*/))) -{ - return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL, - _("The node '%s' can not be restored."), - svn_dirent_local_style(local_abspath, - scratch_pool)); -} - - if (kind == svn_node_file || kind == svn_node_symlink) -SVN_ERR(restore_file(wc_ctx->db, local_abspath, use_commit_times, - FALSE /*mark_resolved_text_conflict*/, - NULL, NULL /* cancel func, baton */, - scratch_pool)); - else -SVN_ERR(svn_io_dir_make(local_abspath, APR_OS_DEFAULT, scratch_pool)); - - return SVN_NO_ERROR; -} - /* Try to restore LOCAL_ABSPATH of node type KIND and if successful, notify that the node is restored. Use DB for accessing the working copy. If USE_COMMIT_TIMES is set, then set working file's timestamp to @@ -197,6 +146,120 @@ restore_node(svn_wc__db_t *db, return SVN_NO_ERROR; } +/* Check the node at LOCAL_ABSPATH. If it is missing on disk and has + a suitable status in the metadata, then restore it on disk and if + successful, notify that the node is restored. + */ +static svn_error_t * +maybe_restore_node(svn_wc__db_t *db, + const char *local_abspath, + svn_boolean_t use_commit_times, + svn_cancel_func_t cancel_func, + void *cancel_baton, + svn_wc_notify_func2_t notify_func, + void *notify_baton, + apr_pool_t *scratch_pool) +{ + svn_error_t *err; + svn_wc__db_status_t wrk_status; + svn_node_kind_t wrk_kind; + const svn_checksum_t *checksum; + svn_boolean_t conflicted; + + err = svn_wc__db_read_info(_status, _kind, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, , NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, , NULL,
svn commit: r1898846 - /subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-use-case-4892-minimal-update.txt
Author: julianfoad Date: Fri Mar 11 10:24:02 2022 New Revision: 1898846 URL: http://svn.apache.org/viewvc?rev=1898846=rev Log: On the 'pristines-on-demand-on-mwf' branch: #4892: document a use case. Added: subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-use-case-4892-minimal-update.txt (with props) Added: subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-use-case-4892-minimal-update.txt URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-use-case-4892-minimal-update.txt?rev=1898846=auto == --- subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-use-case-4892-minimal-update.txt (added) +++ subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-use-case-4892-minimal-update.txt Fri Mar 11 10:24:02 2022 @@ -0,0 +1,35 @@ +A use case in which it is considered unacceptable for 'svn update' to +fetch pristines of files that have become locally modified since the +previous fetch opportunity, but that are not actually being updated by +this update. + +In this use cases a developer locally modifies some large files. The +developer also modifies some small files (such as 'readme' files +describing the large files). The developer doesn't need to diff or +revert the large files, and so chooses the checkout mode which doesn't +keep the pristines initially. + +Before committing, the developer runs 'update', expecting to fetch any +remote changes to the small files (and not large files, not in this +case), expecting it to be quick, and then the developer continues work +and eventually commits. + +The time taken to fetch the pristines of the large, modified files would +be long (for example, ten minutes). Taking a long time for the commit is +acceptable because the commit is the end of the work flow (and the +developer can go away or move on to something else while it proceeds). +The concern is that taking a long time at the update stage would be too +disruptive. + +It wouldn't be a problem for an operation that really needs the +pristines taking a long time. (Revert, for example.) The perception is +that update doesn't really need them. That is, while it obviously needs +in principle to fetch the new pristines of the files that need updating +to a new version from the server (or fetch a delta and so be able to +generate the pristine), it doesn't, in principle, need pristines of +files that it isn't going to update. In this use case, it isn't going to +update the large, locally modified files. And fetching their pristines +wouldn't massively benefit the commit either, because they are poorly +diffable kinds of files. So it is wasted time. + +Filed as https://subversion.apache.org/issue/4892 . Propchange: subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-use-case-4892-minimal-update.txt -- svn:eol-style = native Propchange: subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-use-case-4892-minimal-update.txt -- svn:mime-type = text/plain
svn commit: r1898823 - /subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md
Author: julianfoad Date: Thu Mar 10 13:57:29 2022 New Revision: 1898823 URL: http://svn.apache.org/viewvc?rev=1898823=rev Log: On the 'pristines-on-demand-on-mwf' branch: update user guide. * notes/i525/i525-user-guide.md Extend the list of online operations that sync pristines. Modified: subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md Modified: subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md?rev=1898823=1898822=1898823=diff == --- subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md (original) +++ subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md Thu Mar 10 13:57:29 2022 @@ -69,8 +69,11 @@ Notes on previously *offline* operations Each of the following operations, that previously were *online* operations, also will now require the same. + - `svn diff` (comparing repository to WC) + - `svn merge` - `svn switch` - `svn update` + - `svn checkout --force` (similar to update) Additional notes on previously *online* operations:
svn commit: r1898820 - in /subversion/branches/pristines-on-demand-on-mwf: ./ subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java subversion/tests/cmdline/svntest/actions.py
Author: julianfoad Date: Thu Mar 10 11:32:56 2022 New Revision: 1898820 URL: http://svn.apache.org/viewvc?rev=1898820=rev Log: On the 'pristines-on-demand-on-mwf': sync with trunk@1898819. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- Merged /subversion/trunk:r1898537-1898731,1898733-1898819 Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1898820=1898819=1898820=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Thu Mar 10 11:32:56 2022 @@ -4676,7 +4676,20 @@ public class BasicTests extends SVNTests // RuntimeException("Test exception") is expected here } -tunnelAgent.joinAndTest(); +// In this test, there is a race condition that sometimes results in +// IOException when 'WAIT_TUNNEL' tries to read from a pipe that +// already has its read end closed. This is not an error, but +// it's hard to distinguish this case from other IOException which +// indicate a problem. To reproduce, simply wrap this test's body in +// a loop. The workaround is to ignore any detected IOException. +try +{ +tunnelAgent.join(); +} +catch (InterruptedException e) +{ +e.printStackTrace(); +} } /** Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py?rev=1898820=1898819=1898820=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py Thu Mar 10 11:32:56 2022 @@ -2135,11 +2135,7 @@ def disable_revprop_changes(repo_dir): 'import sys\n' 'sys.stderr.write("pre-revprop-change %s" %' ' " ".join(sys.argv[2:]))\n' - 'sys.exit(1)\n', - cmd_alternative= - '@shift\n' - '@echo pre-revprop-change %* 1>&2\n' - '@exit 1\n') + 'sys.exit(1)\n') def create_failing_post_commit_hook(repo_dir): """Create a post-commit hook script in the repository at REPO_DIR that always Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py?rev=1898820=1898819=1898820=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Thu Mar 10 11:32:56 2022 @@ -283,6 +283,14 @@ def basic_upgrade(sbox): svntest.actions.run_and_verify_svn(None, not_wc % 'A', 'upgrade', sbox.ospath('A')) + # Upgrading to a future version gives an error + expected_stderr = 'svn: E27: Cannot guarantee working copy compatibility' \ +' with the requested version.*3[.]0' + svntest.actions.run_and_verify_svn(None, expected_stderr, + sbox.wc_dir, 'upgrade', + '--compatible-version', + '3.0') + # Now upgrade the working copy svntest.actions.run_and_verify_svn(None, [], 'upgrade', sbox.wc_dir)
svn commit: r1898819 - in /subversion/branches/pristines-on-demand-on-mwf/notes/i525: ./ i525-user-guide.md
Author: julianfoad Date: Thu Mar 10 10:46:02 2022 New Revision: 1898819 URL: http://svn.apache.org/viewvc?rev=1898819=rev Log: On the 'pristines-on-demand-on-mwf': add a user guide. Added: subversion/branches/pristines-on-demand-on-mwf/notes/i525/ subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md (with props) Added: subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md?rev=1898819=auto == --- subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md (added) +++ subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md Thu Mar 10 10:46:02 2022 @@ -0,0 +1,320 @@ + +This is a detailed user guide to the "i525pod" feature. + + +# Terminology + +Place-holders: + + - "i525pod" stands for the name of the feature documented here, that is +as implemented on branch 'pristines-on-demand-on-mwf' on 2022-03-08. +(Not any other interpretation of what Issue #525 discusses.) + - "bare" stands for the state of a WC in which the feature "i525pod" is +enabled, and so contains only some of the pristine copies. + +Terminology: + + - "pristine copy" or "pristine" or "text base": a copy of a file's content +matching the corresponding base revision in the repository. For any file +type, not necessarily text format. Enables e.g. local diff and revert, +and delta update and commit. Stored in the WC metadata area. The term +herein refers only to file content, although Subversion also stores the +pristine copy of properties and of tree structure. + - "hydrate" a pristine copy: to fetch the pristine copy from the +repository and store it in the WC metadata area. + - "dehydrate" a pristine copy: to remove the pristine copy from the WC +metadata area, while remembering that it may be needed again. + - "sync scope": the set of WC paths in which a Subversion operation will +check for pristines that need to be hydrated or dehydrated. This is a +superset of the pristines that the operation will actually need. + - "operation": a high level Subversion operation, such as "diff" or +"merge" or "update"; e.g. a subcommand of the 'svn' program. + + +# "i525pod" User Guide + +## Functional and Timing Differences + +This section details the functional and timing differences when the +"i525pod" feature is used. + +In a WC where "i525pod" is enabled (see other sections for how), basic usage +differs from that found in previous versions of Subversion (1.14 in case of +doubt) in the following ways. + +Each of the following operations, that previously were *offline* operations, +will now contact the repository to "hydrate" pristine copies before +beginning its function, if (and only if) any pristines within the "sync scope" +are found to be locally modified and currently "dehydrated". + + - `svn cat` (default case: base version) + - `svn diff` (default case: base against working) + - `svn resolve` (also conflicts resolver in `merge`, `update`) + - `svn revert` + +Notes on previously *offline* operations,: + + - Contacting the repository may require authentication. + - If contact or authorization fails, the operation will error out and not +be available. + - This contact may be needed as a result of a file being modified that is +not of interest in the current operation, as the "sync scope" is a +superset of the pristines that this operation will actually need. + - The "hydrating" phase may take a long time, and (currently) gives no +progress feedback, before the operation begins its usual (previous) +behaviour. + +[TODO: update that if we add progress feedback] + +Each of the following operations, that previously were *online* operations, +also will now require the same. + + - `svn switch` + - `svn update` + +Additional notes on previously *online* operations: + + - The "hydrating" phase requires its own connection and authentication to +the repository, which is not [currently] shared with the main part of +the operation. This may mean a password would have to be entered an +additional time, for example, depending on the configuration. + - In some edge cases, there may be some difference in the outcome of the +operation. A possible example is if repository path authorization has +been withdrawn from a path that now needs to be hydrated; this +particular case is still under discussion in issue #. + +[TODO: check/eliminate the additional authentication? Issue filed?] + +## Disk Space Usage Difference
svn commit: r1898540 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py
Author: julianfoad Date: Wed Mar 2 21:44:41 2022 New Revision: 1898540 URL: http://svn.apache.org/viewvc?rev=1898540=rev Log: On the 'pristines-on-demand-on-mwf' branch: restore a test to normal. * subversion/tests/cmdline/upgrade_tests.py (auto_analyze): Remove '@Wimp' decorator: the test already passes on both old and new WC formats. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py?rev=1898540=1898539=1898540=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Wed Mar 2 21:44:41 2022 @@ -1390,7 +1390,6 @@ def upgrade_1_7_dir_external(sbox): svntest.actions.run_and_verify_svn(None, [], 'upgrade', sbox.wc_dir) @SkipUnless(svntest.wc.python_sqlite_can_read_wc) -@Wimp("Test calls status on a non-upgraded wc") def auto_analyze(sbox): """automatic SQLite ANALYZE"""
svn commit: r1898539 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py
Author: julianfoad Date: Wed Mar 2 21:42:10 2022 New Revision: 1898539 URL: http://svn.apache.org/viewvc?rev=1898539=rev Log: On the 'pristines-on-demand-on-mwf' branch: re-instate pristines check. A follow-up to r1898538. * subversion/tests/cmdline/upgrade_tests.py (expect_pristines_all_present): Fix. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py?rev=1898539=1898538=1898539=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Wed Mar 2 21:42:10 2022 @@ -103,7 +103,7 @@ def check_format(sbox, expected_format): (found_format, expected_format, sbox.wc_dir)) def expect_pristines_all_present(sbox): - return sbox_read_wc_format(sbox) <= 31 + return sbox.read_wc_format() <= 31 def check_pristine(sbox, files): for file in files:
svn commit: r1898538 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py
Author: julianfoad Date: Wed Mar 2 21:23:56 2022 New Revision: 1898538 URL: http://svn.apache.org/viewvc?rev=1898538=rev Log: On the 'pristines-on-demand-on-mwf' branch: re-instate pristines check. * subversion/tests/cmdline/upgrade_tests.py (expect_pristines_all_present): New. (check_pristine): Re-instate this check, but ignore missing pristines unless we expect all pristines present. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py?rev=1898538=1898537=1898538=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Wed Mar 2 21:23:56 2022 @@ -102,14 +102,22 @@ def check_format(sbox, expected_format): raise svntest.Failure("found format '%d'; expected '%d'; in wc '%s'" % (found_format, expected_format, sbox.wc_dir)) +def expect_pristines_all_present(sbox): + return sbox_read_wc_format(sbox) <= 31 + def check_pristine(sbox, files): for file in files: file_path = sbox.ospath(file) file_text = open(file_path, 'r').read() -# The file at wc.text_base_path() may not exist: -# file_pristine = open(svntest.wc.text_base_path(file_path), 'r').read() -# if (file_text != file_pristine): -# raise svntest.Failure("pristine mismatch for '%s'" % (file)) +try: + file_pristine = open(svntest.wc.text_base_path(file_path), 'r').read() +except: + if expect_pristines_all_present(sbox): +raise + # Pristine missing; pristines optional so ignore it + continue +if (file_text != file_pristine): + raise svntest.Failure("pristine mismatch for '%s'" % (file)) def check_dav_cache(dir_path, wc_id, expected_dav_caches): dot_svn = svntest.main.get_admin_name()
svn commit: r1898537 - in /subversion/branches/pristines-on-demand-on-mwf: ./ subversion/tests/cmdline/getopt_tests.py subversion/tests/cmdline/svntest/sandbox.py subversion/tests/cmdline/upgrade_test
Author: julianfoad Date: Wed Mar 2 21:18:27 2022 New Revision: 1898537 URL: http://svn.apache.org/viewvc?rev=1898537=rev Log: On the 'pristines-on-demand-on-mwf' branch: sync with trunk@1898536. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/getopt_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/sandbox.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- Merged /subversion/trunk:r1898532-1898536 Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/getopt_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/getopt_tests.py?rev=1898537=1898536=1898537=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/getopt_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/getopt_tests.py Wed Mar 2 21:18:27 2022 @@ -99,10 +99,6 @@ rep_lines_res = [ # In 'svn --version --quiet', we print only the version # number in a single line. (re.compile(r'^\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?$'), 'X.Y.Z\n'), - - # In svn --version, the supported WC versions vary. - (re.compile(r'^Supported working copy (WC) version.*$'), - 'Supported working copy (WC) versions: from X.Y to X.Y') ] # This is a trigger pattern that selects the secondary set of Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/sandbox.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/sandbox.py?rev=1898537=1898536=1898537=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/sandbox.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/sandbox.py Wed Mar 2 21:18:27 2022 @@ -600,6 +600,15 @@ class Sandbox: self.read_only and "true" or "false")) pass + def read_wc_format(self): +dot_svn = svntest.main.get_admin_name() +db = svntest.sqlite3.connect(os.path.join(self.wc_dir, dot_svn, 'wc.db')) +c = db.cursor() +c.execute('pragma user_version;') +found_format = c.fetchone()[0] +db.close() +return found_format + def is_url(target): return (target.startswith('^/') or target.startswith('file://') Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py?rev=1898537=1898536=1898537=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Wed Mar 2 21:18:27 2022 @@ -97,22 +97,10 @@ def replace_sbox_repo_with_tarfile(sbox, shutil.move(os.path.join(extract_dir, dir), sbox.repo_dir) def check_format(sbox, expected_format): - dot_svn = svntest.main.get_admin_name() - for root, dirs, files in os.walk(sbox.wc_dir): -db = svntest.sqlite3.connect(os.path.join(root, dot_svn, 'wc.db')) -c = db.cursor() -c.execute('pragma user_version;') -found_format = c.fetchone()[0] -db.close() - -if found_format != expected_format: - raise svntest.Failure("found format '%d'; expected '%d'; in wc '%s'" % -(found_format, expected_format, root)) - -dirs[:] = [] - -if dot_svn in dirs: - dirs.remove(dot_svn) + found_format = sbox.read_wc_format() + if found_format != expected_format: +raise svntest.Failure("found format '%d'; expected '%d'; in wc '%s'" % + (found_format, expected_format, sbox.wc_dir)) def check_pristine(sbox, files): for file in files:
svn commit: r1898536 - in /subversion/trunk/subversion/tests/cmdline: svntest/sandbox.py upgrade_tests.py
Author: julianfoad Date: Wed Mar 2 21:16:10 2022 New Revision: 1898536 URL: http://svn.apache.org/viewvc?rev=1898536=rev Log: Multi-WC-format: Factor out a useful test method. * subversion/tests/cmdline/svntest/sandbox.py (Sandbox.read_wc_format): New method, extracted... * subversion/tests/cmdline/upgrade_tests.py (check_format): ... from here, dropping some pre-WC-NG dead code. Modified: subversion/trunk/subversion/tests/cmdline/svntest/sandbox.py subversion/trunk/subversion/tests/cmdline/upgrade_tests.py Modified: subversion/trunk/subversion/tests/cmdline/svntest/sandbox.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/sandbox.py?rev=1898536=1898535=1898536=diff == --- subversion/trunk/subversion/tests/cmdline/svntest/sandbox.py (original) +++ subversion/trunk/subversion/tests/cmdline/svntest/sandbox.py Wed Mar 2 21:16:10 2022 @@ -600,6 +600,15 @@ class Sandbox: self.read_only and "true" or "false")) pass + def read_wc_format(self): +dot_svn = svntest.main.get_admin_name() +db = svntest.sqlite3.connect(os.path.join(self.wc_dir, dot_svn, 'wc.db')) +c = db.cursor() +c.execute('pragma user_version;') +found_format = c.fetchone()[0] +db.close() +return found_format + def is_url(target): return (target.startswith('^/') or target.startswith('file://') Modified: subversion/trunk/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/upgrade_tests.py?rev=1898536=1898535=1898536=diff == --- subversion/trunk/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/trunk/subversion/tests/cmdline/upgrade_tests.py Wed Mar 2 21:16:10 2022 @@ -97,22 +97,10 @@ def replace_sbox_repo_with_tarfile(sbox, shutil.move(os.path.join(extract_dir, dir), sbox.repo_dir) def check_format(sbox, expected_format): - dot_svn = svntest.main.get_admin_name() - for root, dirs, files in os.walk(sbox.wc_dir): -db = svntest.sqlite3.connect(os.path.join(root, dot_svn, 'wc.db')) -c = db.cursor() -c.execute('pragma user_version;') -found_format = c.fetchone()[0] -db.close() - -if found_format != expected_format: - raise svntest.Failure("found format '%d'; expected '%d'; in wc '%s'" % -(found_format, expected_format, root)) - -dirs[:] = [] - -if dot_svn in dirs: - dirs.remove(dot_svn) + found_format = sbox.read_wc_format() + if found_format != expected_format: +raise svntest.Failure("found format '%d'; expected '%d'; in wc '%s'" % + (found_format, expected_format, sbox.wc_dir)) def check_pristine(sbox, files): for file in files:
svn commit: r1898535 - /subversion/trunk/subversion/tests/cmdline/getopt_tests.py
Author: julianfoad Date: Wed Mar 2 20:31:19 2022 New Revision: 1898535 URL: http://svn.apache.org/viewvc?rev=1898535=rev Log: * subversion/tests/cmdline/getopt_tests.py (rep_lines_res): Remove lines no longer needed since r1898378. Suggested by: Daniel Sahlberg Modified: subversion/trunk/subversion/tests/cmdline/getopt_tests.py Modified: subversion/trunk/subversion/tests/cmdline/getopt_tests.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/getopt_tests.py?rev=1898535=1898534=1898535=diff == --- subversion/trunk/subversion/tests/cmdline/getopt_tests.py (original) +++ subversion/trunk/subversion/tests/cmdline/getopt_tests.py Wed Mar 2 20:31:19 2022 @@ -99,10 +99,6 @@ rep_lines_res = [ # In 'svn --version --quiet', we print only the version # number in a single line. (re.compile(r'^\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?$'), 'X.Y.Z\n'), - - # In svn --version, the supported WC versions vary. - (re.compile(r'^Supported working copy (WC) version.*$'), - 'Supported working copy (WC) versions: from X.Y to X.Y') ] # This is a trigger pattern that selects the secondary set of
svn commit: r1898532 - in /subversion/branches/pristines-on-demand-on-mwf: ./ subversion/tests/cmdline/svntest/main.py
Author: julianfoad Date: Wed Mar 2 15:41:02 2022 New Revision: 1898532 URL: http://svn.apache.org/viewvc?rev=1898532=rev Log: On the 'pristines-on-demand-on-mwf' branch: sync with trunk@1898531. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- Merged /subversion/trunk:r1898530-1898531 Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py?rev=1898532=1898531=1898532=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py Wed Mar 2 15:41:02 2022 @@ -802,7 +802,7 @@ def copy_trust(dst_cfgdir, src_cfgdir): def _with_wc_format_version(args): if '--compatible-version' in args \ - or any(one_arg.startswith('--compatible-version=') for one_arg in args) \ + or any(str(one_arg).startswith('--compatible-version=') for one_arg in args) \ or options.wc_format_version is None: return args non_opt_args = [a for a in args if not str(a).startswith('-')]
svn commit: r1898531 - /subversion/trunk/subversion/tests/cmdline/svntest/main.py
Author: julianfoad Date: Wed Mar 2 15:39:46 2022 New Revision: 1898531 URL: http://svn.apache.org/viewvc?rev=1898531=rev Log: * subversion/tests/cmdline/svntest/main.py (_with_wc_format_version): Fix test breakage: accept non-string args. Modified: subversion/trunk/subversion/tests/cmdline/svntest/main.py Modified: subversion/trunk/subversion/tests/cmdline/svntest/main.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/main.py?rev=1898531=1898530=1898531=diff == --- subversion/trunk/subversion/tests/cmdline/svntest/main.py (original) +++ subversion/trunk/subversion/tests/cmdline/svntest/main.py Wed Mar 2 15:39:46 2022 @@ -802,7 +802,7 @@ def copy_trust(dst_cfgdir, src_cfgdir): def _with_wc_format_version(args): if '--compatible-version' in args \ - or any(one_arg.startswith('--compatible-version=') for one_arg in args) \ + or any(str(one_arg).startswith('--compatible-version=') for one_arg in args) \ or options.wc_format_version is None: return args non_opt_args = [a for a in args if not str(a).startswith('-')]
svn commit: r1898530 - in /subversion/branches/pristines-on-demand-on-mwf: ./ subversion/include/ subversion/libsvn_client/ subversion/libsvn_wc/ subversion/svn/ subversion/tests/cmdline/ subversion/t
Author: julianfoad Date: Wed Mar 2 14:30:22 2022 New Revision: 1898530 URL: http://svn.apache.org/viewvc?rev=1898530=rev Log: On the 'pristines-on-demand-on-mwf' branch: sync with trunk@1898529. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_client.h subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/upgrade.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/info.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc-metadata.sql subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc.h subversion/branches/pristines-on-demand-on-mwf/subversion/svn/cl.h subversion/branches/pristines-on-demand-on-mwf/subversion/svn/help-cmd.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/info-cmd.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/notify.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/svn.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/upgrade-cmd.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- Merged /subversion/trunk:r1898379-1898529 Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_client.h?rev=1898530=1898529=1898530=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_client.h (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_client.h Wed Mar 2 14:30:22 2022 @@ -1244,7 +1244,7 @@ svn_client_args_to_target_array(apr_arra * client that supports the metadata format of the * created working copy; @c NULL means the library's default * format. See svn_client_default_wc_version(), - * svn_client_supported_wc_formats(). + * svn_client_get_wc_formats_supported(). * @param[in] ctx The standard client context, used for authentication and * notification. * @param[in] pool Used for any temporary allocation. @@ -4402,7 +4402,7 @@ svn_client_cleanup(const char *dir, * @a wc_format_version is the version number of the Subversion client * that supports a given WC metadata format; @c NULL means the library's * default format. See svn_client_default_wc_version(), - * svn_client_supported_wc_formats(). + * svn_client_get_wc_formats_supported(). * * Use @a scratch_pool for any temporary allocations. * @@ -4428,7 +4428,16 @@ svn_client_upgrade(const char *wcroot_di apr_pool_t *scratch_pool); /** - * Returns the version related to the library's default + * Returns the first version that supported the library's oldest + * working copy metadata format. + * + * @since New in 1.15. + */ +const svn_version_t * +svn_client_oldest_wc_version(apr_pool_t *result_pool); + +/** + * Returns the first version that supported the library's default * working copy metadata format. * * @since New in 1.15. @@ -4437,31 +4446,34 @@ const svn_version_t * svn_client_default_wc_version(apr_pool_t *result_pool); /** - * Information about a WC version. + * Returns the first version that supported the library's latest + * working copy metadata format. * - * Only the @c .major and @c .minor version fields are significant: so a - * version_max value of 1.15.0 for example means "up to 1.15.x". + * @since New in 1.15. */ -typedef struct svn_client_wc_format_t { -/* Oldest version of svn libraries known to support this WC version */ -const svn_version_t *version_min; -/* Newest version of svn libraries known to support this WC version. */ -const svn_version_t *version_max; -/* The WC format number of this format, as defined by libsvn_wc. */ -int wc_format; -} svn_client_wc_format_t; +const svn_version_t * +svn_client_latest_wc_version(apr_pool_t *result_pool); /** * Returns a list of the WC formats supported by the client library. * - * The list is sorted from oldest to newest, and terminated by an entry - * containing all null/zero fields. + * The list is sorted from oldest to newest, and terminated by a
svn commit: r1898529 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py
Author: julianfoad Date: Wed Mar 2 14:17:01 2022 New Revision: 1898529 URL: http://svn.apache.org/viewvc?rev=1898529=rev Log: On the 'pristines-on-demand-on-mwf' branch: fix disabled tests. * subversion/tests/cmdline/update_tests.py (missing_tmp_update): Re-enable. Allow error message variations. Old error: svn: E02: Unable to create pristine install stream svn: E02: Can't create temporary file from template '...': No such file or directory New error: svn: E02: Can't create temporary file from template '...': No such file or directory Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py?rev=1898529=1898528=1898529=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py Wed Mar 2 14:17:01 2022 @@ -6782,7 +6782,6 @@ def update_add_conflicted_deep(sbox): # This final update used to segfault using 1.9.0 and 1.9.1 sbox.simple_update('A/z/z', 3) -@Wimp("The error message has changed") def missing_tmp_update(sbox): "missing tmp update caused segfault" @@ -6793,7 +6792,7 @@ def missing_tmp_update(sbox): os.rmdir(sbox.ospath(svntest.main.get_admin_name() + '/tmp')) - svntest.actions.run_and_verify_svn(None, '.*Unable to create.*', + svntest.actions.run_and_verify_svn(None, ".*(Unable to create|Can't create).*", 'up', wc_dir, '--set-depth', 'infinity') # This re-creates .svn/tmp as a side-effect.
svn commit: r1898528 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py
Author: julianfoad Date: Wed Mar 2 14:12:33 2022 New Revision: 1898528 URL: http://svn.apache.org/viewvc?rev=1898528=rev Log: On the 'pristines-on-demand-on-mwf' branch: fix disabled tests. * subversion/tests/cmdline/diff_tests.py (diff_external_diffcmd): Re-enable. Allow path to the pristine version to be a temporary file. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py?rev=1898528=1898527=1898528=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py Wed Mar 2 14:12:33 2022 @@ -3063,7 +3063,6 @@ def diff_wrong_extension_type(sbox): 'diff', '-x', sbox.wc_dir, '-r', '1') # Check the order of the arguments for an external diff tool -@Wimp("Relies on wc.text_base_path()") def diff_external_diffcmd(sbox): "svn diff --diff-cmd provides the correct arguments" @@ -3083,15 +3082,15 @@ def diff_external_diffcmd(sbox): if sys.platform == 'win32': diff_script_path = "%s.bat" % diff_script_path - expected_output = svntest.verify.ExpectedOutput([ + expected_output = svntest.verify.RegexListOutput([ "Index: iota\n", "===\n", "-u\n", "-L\n", -"iota\t(revision 1)\n", +r"iota\t\(revision 1\)\n", "-L\n", -"iota\t(working copy)\n", -os.path.abspath(svntest.wc.text_base_path("iota")) + "\n", +r"iota\t\(working copy\)\n", +os.path.abspath(svntest.main.get_admin_name()) + '.*' + "\n", os.path.abspath("iota") + "\n"]) # Check that the output of diff corresponds with the expected arguments,
svn commit: r1898527 - /subversion/trunk/subversion/svn/svn.c
Author: julianfoad Date: Wed Mar 2 13:32:39 2022 New Revision: 1898527 URL: http://svn.apache.org/viewvc?rev=1898527=rev Log: Multi-WC-format: in help, tell about default WC format. * subversion/svn/svn.c (svn_cl__cmd_table_main): Add paragraphs to 'checkout' and 'upgrade' help. Modified: subversion/trunk/subversion/svn/svn.c Modified: subversion/trunk/subversion/svn/svn.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/svn.c?rev=1898527=1898526=1898527=diff == --- subversion/trunk/subversion/svn/svn.c (original) +++ subversion/trunk/subversion/svn/svn.c Wed Mar 2 13:32:39 2022 @@ -514,6 +514,12 @@ svn_cl__cmd_table_main[] = "Check out a working copy from a repository.\n" "usage: checkout URL[@REV]... [PATH]\n" "\n"), N_( + " By default Subversion will create a WC format compatible with\n" + " Subversion 1.8 and newer. To create a different WC format,\n" + " use an option such as '--compatible-version=1.15'.\n" + " The versions available are the same as in the 'upgrade' command.\n" + " Use 'svn --version' to see the compatible versions supported.\n" + "\n"), N_( " If specified, REV determines in which revision the URL is first\n" " looked up.\n" "\n"), N_( @@ -1909,6 +1915,14 @@ svn_cl__cmd_table_main[] = "Upgrade the metadata storage format for a working copy.\n" "usage: upgrade [WCPATH...]\n" "\n"), N_( + " By default Subversion will upgrade the working copy to a version\n" + " compatible with Subversion 1.8 and newer. To upgrade to a different\n" + " version, use an option such as '--compatible-version=1.15'.\n" + " The versions available are the same as in the 'checkout' command.\n" + " Use 'svn --version' to see the compatible versions supported.\n" + "\n"), N_( + " Only upgrades are supported, not downgrades.\n" + "\n"), N_( " Local modifications are preserved.\n" )}, { 'q', opt_compatible_version } },
svn commit: r1898526 - in /subversion/trunk/subversion: include/svn_client.h libsvn_client/upgrade.c svn/svn.c
Author: julianfoad Date: Wed Mar 2 12:48:05 2022 New Revision: 1898526 URL: http://svn.apache.org/viewvc?rev=1898526=rev Log: Multi-WC-format: simplify client APIs. * subversion/include/svn_client.h, subversion/libsvn_client/upgrade.c (svn_client_oldest_wc_version): New. * subversion/svn/svn.c (parse_compatible_version): Use it. Modified: subversion/trunk/subversion/include/svn_client.h subversion/trunk/subversion/libsvn_client/upgrade.c subversion/trunk/subversion/svn/svn.c Modified: subversion/trunk/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1898526=1898525=1898526=diff == --- subversion/trunk/subversion/include/svn_client.h (original) +++ subversion/trunk/subversion/include/svn_client.h Wed Mar 2 12:48:05 2022 @@ -4428,6 +4428,15 @@ svn_client_upgrade(const char *wcroot_di apr_pool_t *scratch_pool); /** + * Returns the first version that supported the library's oldest + * working copy metadata format. + * + * @since New in 1.15. + */ +const svn_version_t * +svn_client_oldest_wc_version(apr_pool_t *result_pool); + +/** * Returns the first version that supported the library's default * working copy metadata format. * Modified: subversion/trunk/subversion/libsvn_client/upgrade.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/upgrade.c?rev=1898526=1898525=1898526=diff == --- subversion/trunk/subversion/libsvn_client/upgrade.c (original) +++ subversion/trunk/subversion/libsvn_client/upgrade.c Wed Mar 2 12:48:05 2022 @@ -239,6 +239,15 @@ svn_client_get_wc_formats_supported(apr_ } const svn_version_t * +svn_client_oldest_wc_version(apr_pool_t *result_pool) +{ + /* NOTE: For consistency, always return the version of the client + that first introduced the format. */ + static const svn_version_t version = { 1, 8, 0, NULL }; + return +} + +const svn_version_t * svn_client_default_wc_version(apr_pool_t *result_pool) { /* NOTE: For consistency, always return the version of the client Modified: subversion/trunk/subversion/svn/svn.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/svn.c?rev=1898526=1898525=1898526=diff == --- subversion/trunk/subversion/svn/svn.c (original) +++ subversion/trunk/subversion/svn/svn.c Wed Mar 2 12:48:05 2022 @@ -2039,19 +2039,14 @@ parse_compatible_version(svn_cl__opt_sta const char *utf8_opt_arg; svn_version_t *target; - const int *formats_supported -= svn_client_get_wc_formats_supported(result_pool); - const svn_version_t *supported -= svn_client_wc_version_from_format(formats_supported[0], result_pool); - const svn_version_t *current = svn_client_version(); - const svn_version_t latest = {current->major, current->minor, 0, NULL}; - - /* Double check that the oldest supported version is sane. */ - SVN_ERR_ASSERT(supported->patch == 0); - SVN_ERR_ASSERT(svn_version__at_least(, - supported->major, - supported->minor, - supported->patch)); + const svn_version_t *oldest = svn_client_oldest_wc_version(result_pool); + const svn_version_t *latest = svn_client_latest_wc_version(result_pool); + + /* Double check that the oldest and latest versions are sane. */ + SVN_ERR_ASSERT(oldest->patch == 0); + SVN_ERR_ASSERT(latest->patch == 0); + SVN_ERR_ASSERT(svn_version__at_least(latest, + oldest->major, oldest->minor, 0)); /* Parse the requested version. */ SVN_ERR(svn_utf_cstring_to_utf8(_opt_arg, opt_arg, result_pool)); @@ -2061,30 +2056,28 @@ parse_compatible_version(svn_cl__opt_sta target->patch = 0; target->tag = NULL; - /* Check the earliest supported version. */ + /* Check the oldest supported version. */ if (!svn_version__at_least(target, - supported->major, - supported->minor, - supported->patch)) + oldest->major, oldest->minor, 0)) { return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL, _("Cannot make working copies compatible " "with the requested version %d.%d; " "the oldest supported version is %d.%d"), target->major, target->minor, - supported->major, supported->minor); + oldest->major, oldest->minor); } /* Check the latest supported version. */
svn commit: r1898525 - in /subversion/trunk/subversion: include/svn_client.h libsvn_client/upgrade.c libsvn_wc/wc.h svn/help-cmd.c svn/info-cmd.c svn/svn.c
Author: julianfoad Date: Wed Mar 2 12:24:40 2022 New Revision: 1898525 URL: http://svn.apache.org/viewvc?rev=1898525=rev Log: Multi-WC-format: clean up some client APIs. * subversion/include/svn_client.h, subversion/libsvn_client/upgrade.c (svn_client_wc_format_t): Delete. (svn_client_get_wc_formats_supported): New, simpler replacement for... (svn_client_supported_wc_formats): ... this, now removed. (svn_client_wc_version_from_format): Rename from 'svn_client__wc_version_from_format' to be a public API; remove a scratch-pool argument that was likely to be of net negative value. * subversion/libsvn_wc/wc.h (SVN_WC__SUPPORTED_VERSION): Update comment. * subversion/svn/help-cmd.c (print_supported_wc_formats): Update callers. * subversion/svn/info-cmd.c (print_info_item): Update callers. * subversion/svn/svn.c (parse_compatible_version): Update callers. Modified: subversion/trunk/subversion/include/svn_client.h subversion/trunk/subversion/libsvn_client/upgrade.c subversion/trunk/subversion/libsvn_wc/wc.h subversion/trunk/subversion/svn/help-cmd.c subversion/trunk/subversion/svn/info-cmd.c subversion/trunk/subversion/svn/svn.c Modified: subversion/trunk/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1898525=1898524=1898525=diff == --- subversion/trunk/subversion/include/svn_client.h (original) +++ subversion/trunk/subversion/include/svn_client.h Wed Mar 2 12:24:40 2022 @@ -1244,7 +1244,7 @@ svn_client_args_to_target_array(apr_arra * client that supports the metadata format of the * created working copy; @c NULL means the library's default * format. See svn_client_default_wc_version(), - * svn_client_supported_wc_formats(). + * svn_client_get_wc_formats_supported(). * @param[in] ctx The standard client context, used for authentication and * notification. * @param[in] pool Used for any temporary allocation. @@ -4402,7 +4402,7 @@ svn_client_cleanup(const char *dir, * @a wc_format_version is the version number of the Subversion client * that supports a given WC metadata format; @c NULL means the library's * default format. See svn_client_default_wc_version(), - * svn_client_supported_wc_formats(). + * svn_client_get_wc_formats_supported(). * * Use @a scratch_pool for any temporary allocations. * @@ -4446,24 +4446,16 @@ const svn_version_t * svn_client_latest_wc_version(apr_pool_t *result_pool); /** - * Information about a WC version. + * Returns a list of the WC formats supported by the client library. * - * Only the @c .major and @c .minor version fields are significant: so a - * version_max value of 1.15.0 for example means "up to 1.15.x". + * The list is sorted from oldest to newest, and terminated by a zero entry. * - * @warning Do not manually allocate structs of this type, as fields may - * be added in the future. + * The result is allocated in @a result_pool and/or statically. * * @since New in 1.15. */ -typedef struct svn_client_wc_format_t { -/* Oldest version of svn libraries known to support this WC version */ -const svn_version_t *version_min; -/* Newest version of svn libraries known to support this WC version. */ -const svn_version_t *version_max; -/* The WC format number of this format, as defined by libsvn_wc. */ -int wc_format; -} svn_client_wc_format_t; +const int * +svn_client_get_wc_formats_supported(apr_pool_t *result_pool); /** Return the version of the Subversion library that first supported * the given WC format, @a wc_format. @@ -4471,23 +4463,8 @@ typedef struct svn_client_wc_format_t { * @since New in 1.15. */ const svn_version_t * -svn_client__wc_version_from_format(int wc_format, - apr_pool_t *result_pool, - apr_pool_t *scratch_pool); - -/** - * Returns a list of the WC formats supported by the client library. - * - * The list is sorted from oldest to newest, and terminated by an entry - * containing all null/zero fields. - * - * The returned data are allocated in @a result_pool and/or statically. - * - * @since New in 1.15. - */ -const svn_client_wc_format_t * -svn_client_supported_wc_formats(apr_pool_t *result_pool, -apr_pool_t *scratch_pool); +svn_client_wc_version_from_format(int wc_format, + apr_pool_t *result_pool); /** @} */ Modified: subversion/trunk/subversion/libsvn_client/upgrade.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/upgrade.c?rev=1898525=1898524=1898525=diff == --- subversion/trunk/subversion/libsvn_client/upgrade.c (original) +++ subversion/trunk/
svn commit: r1898524 - in /subversion/trunk/subversion: svn/help-cmd.c tests/cmdline/getopt_tests_data/svn--version--verbose_stdout tests/cmdline/getopt_tests_data/svn--version_stdout
Author: julianfoad Date: Wed Mar 2 11:04:31 2022 New Revision: 1898524 URL: http://svn.apache.org/viewvc?rev=1898524=rev Log: Multi-WC-format: simplify supported versions display. Change the display format in 'svn --version' from: | * compatible with Subversion v1.8 to v1.15 (WC format 31) | * compatible with Subversion v1.15 (WC format 32) to: | * WC format 31, compatible with Subversion v1.8 and newer | * WC format 32, compatible with Subversion v1.15 and newer * subversion/svn/help-cmd.c (print_supported_wc_formats): Change as above. * subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout, subversion/tests/cmdline/getopt_tests_data/svn--version_stdout Update expected output for tests. Modified: subversion/trunk/subversion/svn/help-cmd.c subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout Modified: subversion/trunk/subversion/svn/help-cmd.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/help-cmd.c?rev=1898524=1898523=1898524=diff == --- subversion/trunk/subversion/svn/help-cmd.c (original) +++ subversion/trunk/subversion/svn/help-cmd.c Wed Mar 2 11:04:31 2022 @@ -54,28 +54,12 @@ print_supported_wc_formats(svn_stringbuf for (i = 0; wc_formats[i].version_min; i++) { const svn_client_wc_format_t *v = _formats[i]; - const char *s; - - if (v->version_min->major == v->version_min->major && - v->version_min->minor == v->version_max->minor) -{ - s = apr_psprintf( -pool, -_("%scompatible with Subversion v%d.%d (WC format %d)\n"), -prefix, -v->version_min->major, v->version_min->minor, -v->wc_format); -} - else -{ - s = apr_psprintf( -pool, -_("%scompatible with Subversion v%d.%d to v%d.%d (WC format %d)\n"), -prefix, -v->version_min->major, v->version_min->minor, -v->version_max->major, v->version_max->minor, -v->wc_format); -} + const svn_version_t *ver = v->version_min; + const char *s += apr_psprintf( +pool, +_("%sWC format %d, compatible with Subversion v%d.%d and newer\n"), +prefix, v->wc_format, ver->major, ver->minor); svn_stringbuf_appendcstr(output, s); } Modified: subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout?rev=1898524=1898523=1898524=diff == --- subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout (original) +++ subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout Wed Mar 2 11:04:31 2022 @@ -8,8 +8,8 @@ Subversion is open source software, see Supported working copy (WC) formats: -* compatible with Subversion v1.8 to v1.15 (WC format 31) -* compatible with Subversion v1.15 (WC format 32) +* WC format 31, compatible with Subversion v1.8 and newer +* WC format 32, compatible with Subversion v1.15 and newer The following repository access (RA) modules are available: Modified: subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout?rev=1898524=1898523=1898524=diff == --- subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout (original) +++ subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout Wed Mar 2 11:04:31 2022 @@ -1,15 +1,15 @@ svn, version 1.9.0-dev (under development) compiled Feb 26 2014, 15:15:42 on x86_64-unknown-openbsd5.5 -Copyright (C) 2014 The Apache Software Foundation. +Copyright (C) 2012 The Apache Software Foundation. This software consists of contributions made by many people; see the NOTICE file for more information. Subversion is open source software, see http://subversion.apache.org/ Supported working copy (WC) formats: -* compatible with Subversion v1.8 to v1.15 (WC format 31) -* compatible with Subversion v1.15 (WC format 32) +* WC format 31, compatible with Subversion v1.8 and newer +* WC format 32, compatible with Subversion v1.15 and newer The following repository access (RA) modules are available:
svn commit: r1898523 - /subversion/trunk/subversion/svn/svn.c
Author: julianfoad Date: Wed Mar 2 10:27:27 2022 New Revision: 1898523 URL: http://svn.apache.org/viewvc?rev=1898523=rev Log: Multi-WC-format: Make it an error to request a not-yet-known WC version. * subversion/svn/svn.c (parse_compatible_version): Error out if requested WC version is greater than latest supported WC version. Quietly ignore 'patch' and 'tag' fields if user specifies 'X.Y.PATCH[-TAG]', and consistently print versions in 'X.Y' format in the error messages. Modified: subversion/trunk/subversion/svn/svn.c Modified: subversion/trunk/subversion/svn/svn.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/svn.c?rev=1898523=1898522=1898523=diff == --- subversion/trunk/subversion/svn/svn.c (original) +++ subversion/trunk/subversion/svn/svn.c Wed Mar 2 10:27:27 2022 @@ -2023,6 +2023,14 @@ add_commands(const svn_opt_subcommand_de svn_cl__cmd_table = cmds_new; } +/* Parse OPT_ARG as a version number, into OPT_STATE->compatible_version. + * + * Ensure it is between the oldest and newest supported WC formats. + * + * WC formats are always defined by a X.Y.0 release. Quietly ignore any + * 'patch' and 'tag' fields in the requested version number, and set them to + * zero/null in the output. + */ static svn_error_t * parse_compatible_version(svn_cl__opt_state_t* opt_state, const char *opt_arg, @@ -2051,6 +2059,9 @@ parse_compatible_version(svn_cl__opt_sta SVN_ERR(svn_utf_cstring_to_utf8(_opt_arg, opt_arg, result_pool)); SVN_ERR(svn_version__parse_version_string(, utf8_opt_arg, result_pool)); + /* Quietly ignore 'patch' and 'tag' fields. */ + target->patch = 0; + target->tag = NULL; /* Check the earliest supported version. */ if (!svn_version__at_least(target, @@ -2059,43 +2070,23 @@ parse_compatible_version(svn_cl__opt_sta supported->patch)) { return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL, - _("Cannot create working copies older " - "than version %d.%d.%d"), - supported->major, - supported->minor, - supported->patch); + _("Cannot make working copies compatible " + "with the requested version %d.%d; " + "the oldest supported version is %d.%d"), + target->major, target->minor, + supported->major, supported->minor); } /* Check the latest supported version. */ - /* FIXME: ### Should we return an error here instead? It seems -### more friendly to issue a warning and continue with -### the latest supported format. */ - if (svn_version__at_least(target, -latest.major, -latest.minor, -latest.patch) - && (target->major != latest.major - || target->minor != latest.minor - || target->patch != latest.patch)) + if (!svn_version__at_least(, + target->major, target->minor, target->patch)) { - svn_error_t *w1 = svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL, - _("Cannot create working copies " -"for version %s"), - opt_arg); - svn_error_t *w2 = svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL, - _("Creating working copy version " -"%d.%d instead"), - latest.major, - latest.minor); - - svn_handle_warning2(stderr, w1, "svn: "); - svn_handle_warning2(stderr, w2, "svn: "); - svn_error_clear(w1); - svn_error_clear(w2); - - target->major = latest.major; - target->minor = latest.minor; - target->patch = latest.patch; + return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL, + _("Cannot guarantee working copy compatibility " + "with the requested version %d.%d; " + "the latest supported version is %d.%d"), + target->major, target->minor, + latest.major, latest.minor); } opt_state->compatible_version = target;
svn commit: r1898510 - /subversion/trunk/subversion/libsvn_client/upgrade.c
Author: julianfoad Date: Tue Mar 1 16:13:22 2022 New Revision: 1898510 URL: http://svn.apache.org/viewvc?rev=1898510=rev Log: * subversion/libsvn_client/upgrade.c (svn_client__wc_version_from_format): Remove an old unreleased WC format number. Modified: subversion/trunk/subversion/libsvn_client/upgrade.c Modified: subversion/trunk/subversion/libsvn_client/upgrade.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/upgrade.c?rev=1898510=1898509=1898510=diff == --- subversion/trunk/subversion/libsvn_client/upgrade.c (original) +++ subversion/trunk/subversion/libsvn_client/upgrade.c Tue Mar 1 16:13:22 2022 @@ -220,7 +220,6 @@ svn_client__wc_version_from_format(int w case 8: return _1_4; case 9: return _1_5; case 10: return _1_6; - case SVN_WC__WC_NG_VERSION: return _1_7; case 29: return _1_7; case 31: return _1_8; case 32: return _1_15;
svn commit: r1898461 - /subversion/trunk/subversion/include/svn_client.h
Author: julianfoad Date: Mon Feb 28 09:49:23 2022 New Revision: 1898461 URL: http://svn.apache.org/viewvc?rev=1898461=rev Log: * subversion/include/svn_client.h Fix doc strings. A follow-up to r1898378. Modified: subversion/trunk/subversion/include/svn_client.h Modified: subversion/trunk/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1898461=1898460=1898461=diff == --- subversion/trunk/subversion/include/svn_client.h (original) +++ subversion/trunk/subversion/include/svn_client.h Mon Feb 28 09:49:23 2022 @@ -4450,6 +4450,11 @@ svn_client_latest_wc_version(apr_pool_t * * Only the @c .major and @c .minor version fields are significant: so a * version_max value of 1.15.0 for example means "up to 1.15.x". + * + * @warning Do not manually allocate structs of this type, as fields may + * be added in the future. + * + * @since New in 1.15. */ typedef struct svn_client_wc_format_t { /* Oldest version of svn libraries known to support this WC version */ @@ -4462,6 +4467,8 @@ typedef struct svn_client_wc_format_t { /** Return the version of the Subversion library that first supported * the given WC format, @a wc_format. + * + * @since New in 1.15. */ const svn_version_t * svn_client__wc_version_from_format(int wc_format, @@ -4475,6 +4482,8 @@ svn_client__wc_version_from_format(int w * containing all null/zero fields. * * The returned data are allocated in @a result_pool and/or statically. + * + * @since New in 1.15. */ const svn_client_wc_format_t * svn_client_supported_wc_formats(apr_pool_t *result_pool,
svn commit: r1898397 - in /subversion/trunk/subversion: include/svn_client.h libsvn_client/upgrade.c svn/cl.h svn/notify.c svn/upgrade-cmd.c
Author: julianfoad Date: Thu Feb 24 21:50:54 2022 New Revision: 1898397 URL: http://svn.apache.org/viewvc?rev=1898397=rev Log: Multi-WC-format, issue #4885: Remind the user they can upgrade further. * subversion/include/svn_client.h, subversion/libsvn_client/upgrade.c (svn_client_default_wc_version): Fix doc string. (svn_client_latest_wc_version): New. * subversion/svn/cl.h, subversion/svn/notify.c (notify_baton): Add a flag. (svn_cl__notifier_get_wc_was_upgraded): New. (notify_body): Set the flag when a wc was upgraded. * subversion/svn/upgrade-cmd.c (svn_cl__upgrade): Remind the user when they can upgrade further. Modified: subversion/trunk/subversion/include/svn_client.h subversion/trunk/subversion/libsvn_client/upgrade.c subversion/trunk/subversion/svn/cl.h subversion/trunk/subversion/svn/notify.c subversion/trunk/subversion/svn/upgrade-cmd.c Modified: subversion/trunk/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1898397=1898396=1898397=diff == --- subversion/trunk/subversion/include/svn_client.h (original) +++ subversion/trunk/subversion/include/svn_client.h Thu Feb 24 21:50:54 2022 @@ -4428,7 +4428,7 @@ svn_client_upgrade(const char *wcroot_di apr_pool_t *scratch_pool); /** - * Returns the version related to the library's default + * Returns the first version that supported the library's default * working copy metadata format. * * @since New in 1.15. @@ -4437,6 +4437,15 @@ const svn_version_t * svn_client_default_wc_version(apr_pool_t *result_pool); /** + * Returns the first version that supported the library's latest + * working copy metadata format. + * + * @since New in 1.15. + */ +const svn_version_t * +svn_client_latest_wc_version(apr_pool_t *result_pool); + +/** * Information about a WC version. * * Only the @c .major and @c .minor version fields are significant: so a Modified: subversion/trunk/subversion/libsvn_client/upgrade.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/upgrade.c?rev=1898397=1898396=1898397=diff == --- subversion/trunk/subversion/libsvn_client/upgrade.c (original) +++ subversion/trunk/subversion/libsvn_client/upgrade.c Thu Feb 24 21:50:54 2022 @@ -251,6 +251,15 @@ svn_client_default_wc_version(apr_pool_t return } +const svn_version_t * +svn_client_latest_wc_version(apr_pool_t *result_pool) +{ + /* NOTE: For consistency, always return the version of the client + that first introduced the format. */ + static const svn_version_t version = { 1, 15, 0, NULL }; + return +} + /* Helper for upgrade_externals_from_properties: upgrades one external ITEM in EXTERNALS_PARENT. Uses SCRATCH_POOL for temporary allocations. */ static svn_error_t * Modified: subversion/trunk/subversion/svn/cl.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/cl.h?rev=1898397=1898396=1898397=diff == --- subversion/trunk/subversion/svn/cl.h (original) +++ subversion/trunk/subversion/svn/cl.h Thu Feb 24 21:50:54 2022 @@ -733,6 +733,10 @@ svn_cl__check_externals_failed_notify_wr svn_error_t * svn_cl__notifier_print_conflict_stats(void *baton, apr_pool_t *scratch_pool); +/* Get whether a WC upgrade notification was received. */ +svn_boolean_t +svn_cl__notifier_get_wc_was_upgraded(void *baton); + /*** Log message callback stuffs. ***/ Modified: subversion/trunk/subversion/svn/notify.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/notify.c?rev=1898397=1898396=1898397=diff == --- subversion/trunk/subversion/svn/notify.c (original) +++ subversion/trunk/subversion/svn/notify.c Thu Feb 24 21:50:54 2022 @@ -57,6 +57,7 @@ struct notify_baton svn_revnum_t progress_revision; svn_boolean_t had_print_error; /* Used to not keep printing error messages when we've already had one print error. */ + svn_boolean_t wc_was_upgraded; svn_cl__conflict_stats_t *conflict_stats; @@ -284,6 +285,14 @@ svn_cl__notifier_print_conflict_stats(vo return SVN_NO_ERROR; } +svn_boolean_t +svn_cl__notifier_get_wc_was_upgraded(void *baton) +{ + struct notify_baton *nb = baton; + + return nb->wc_was_upgraded; +} + /* The body for notify() function with standard error handling semantic. * Handling of errors implemented at caller side. */ static svn_error_t * @@ -1145,6 +1154,7 @@ notify_body(struct notify_baton *nb, case svn_wc_notify_upgraded_path: SVN_ERR(svn_cmdline_printf(pool, _("Upgraded '%s'\n"), path_local)); + nb->wc_was_upgraded = TRUE; break; case svn_wc_notify_url_red
svn commit: r1898389 - in /subversion/trunk/subversion: include/svn_client.h libsvn_client/upgrade.c svn/info-cmd.c svn/svn.c
Author: julianfoad Date: Thu Feb 24 20:06:32 2022 New Revision: 1898389 URL: http://svn.apache.org/viewvc?rev=1898389=rev Log: Multi-WC-format, issue #4884: add svn info --show-item=wc-compatible-version. * subversion/include/svn_client.h, subversion/libsvn_client/upgrade.c (svn_client__wc_version_from_format): New. * subversion/svn/info-cmd.c (info_item_t, info_item_map): Add the new option. (print_info_item): Obey the new option. * subversion/svn/svn.c (svn_cl__cmd_table_main): Add the corresponding help text. Modified: subversion/trunk/subversion/include/svn_client.h subversion/trunk/subversion/libsvn_client/upgrade.c subversion/trunk/subversion/svn/info-cmd.c subversion/trunk/subversion/svn/svn.c Modified: subversion/trunk/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1898389=1898388=1898389=diff == --- subversion/trunk/subversion/include/svn_client.h (original) +++ subversion/trunk/subversion/include/svn_client.h Thu Feb 24 20:06:32 2022 @@ -4451,6 +4451,14 @@ typedef struct svn_client_wc_format_t { int wc_format; } svn_client_wc_format_t; +/** Return the version of the Subversion library that first supported + * the given WC format, @a wc_format. + */ +const svn_version_t * +svn_client__wc_version_from_format(int wc_format, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + /** * Returns a list of the WC formats supported by the client library. * Modified: subversion/trunk/subversion/libsvn_client/upgrade.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/upgrade.c?rev=1898389=1898388=1898389=diff == --- subversion/trunk/subversion/libsvn_client/upgrade.c (original) +++ subversion/trunk/subversion/libsvn_client/upgrade.c Thu Feb 24 20:06:32 2022 @@ -200,6 +200,34 @@ svn_client_upgrade2(const char *path, return SVN_NO_ERROR; } +const svn_version_t * +svn_client__wc_version_from_format(int wc_format, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) +{ + static const svn_version_t +version_1_0 = { 1, 0, 0, NULL }, +version_1_4 = { 1, 4, 0, NULL }, +version_1_5 = { 1, 5, 0, NULL }, +version_1_6 = { 1, 6, 0, NULL }, +version_1_7 = { 1, 7, 0, NULL }, +version_1_8 = { 1, 8, 0, NULL }, +version_1_15 = { 1, 15, 0, NULL }; + + switch (wc_format) +{ + case 4: return _1_0; + case 8: return _1_4; + case 9: return _1_5; + case 10: return _1_6; + case SVN_WC__WC_NG_VERSION: return _1_7; + case 29: return _1_7; + case 31: return _1_8; + case 32: return _1_15; +} + return NULL; +} + const svn_client_wc_format_t * svn_client_supported_wc_formats(apr_pool_t *result_pool, apr_pool_t *scratch_pool) Modified: subversion/trunk/subversion/svn/info-cmd.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/info-cmd.c?rev=1898389=1898388=1898389=diff == --- subversion/trunk/subversion/svn/info-cmd.c (original) +++ subversion/trunk/subversion/svn/info-cmd.c Thu Feb 24 20:06:32 2022 @@ -40,6 +40,7 @@ #include "svn_dirent_uri.h" #include "svn_path.h" #include "svn_time.h" +#include "svn_version.h" #include "svn_xml.h" #include "cl.h" @@ -369,7 +370,8 @@ typedef enum info_item_schedule, info_item_depth, info_item_changelist, - info_item_wc_format + info_item_wc_format, + info_item_wc_compatible_version } info_item_t; /* Mapping between option keywords and info_item_t. */ @@ -397,6 +399,8 @@ static const info_item_map_t info_item_m { SVN__STATIC_STRING("depth"), info_item_depth }, { SVN__STATIC_STRING("changelist"), info_item_changelist }, { SVN__STATIC_STRING("wc-format"), info_item_wc_format }, +{ SVN__STATIC_STRING("wc-compatible-version"), + info_item_wc_compatible_version }, }; static const apr_size_t info_item_map_len = @@ -1247,6 +1251,18 @@ print_info_item(void *baton, target_path, pool)); break; +case info_item_wc_compatible_version: + { +const svn_version_t *wc_ver + = svn_client__wc_version_from_format(info->wc_info->wc_format, + pool, pool); +const char *s = apr_psprintf(pool, "%d.%d", + wc_ver->major, + wc_ver->minor
svn commit: r1898388 - /subversion/trunk/subversion/svn/svn.c
Author: julianfoad Date: Thu Feb 24 19:50:50 2022 New Revision: 1898388 URL: http://svn.apache.org/viewvc?rev=1898388=rev Log: Multi-WC-format, issue #4884: remove svn info --show-item=wc-format-min/max. A follow-up to r1898380. * subversion/svn/svn.c (svn_cl__cmd_table_main): Remove the corresponding help text. Modified: subversion/trunk/subversion/svn/svn.c Modified: subversion/trunk/subversion/svn/svn.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/svn.c?rev=1898388=1898387=1898388=diff == --- subversion/trunk/subversion/svn/svn.c (original) +++ subversion/trunk/subversion/svn/svn.c Thu Feb 24 19:50:50 2022 @@ -790,10 +790,6 @@ svn_cl__cmd_table_main[] = " " " 'wc-format' TARGET's working copy format\n" " " -" 'wc-format-min' oldest supported WC format\n" -" " -" 'wc-format-min' newest supported WC format\n" -" " " 'changelist' changelist of TARGET in WC")}}, },
svn commit: r1898380 - in /subversion/trunk/subversion: include/svn_wc.h libsvn_wc/info.c svn/info-cmd.c
Author: julianfoad Date: Thu Feb 24 16:41:04 2022 New Revision: 1898380 URL: http://svn.apache.org/viewvc?rev=1898380=rev Log: Multi-WC-format, issue #4884: remove svn info --show-item=wc-format-min/max. These two items were showing properties of the software, whereas 'svn info' is intended to show properties of the working copy and versioned nodes. (The output of 'svn --version' shows the supported WC versions.) * subversion/include/svn_wc.h, subversion/libsvn_wc/info.c (svn_wc_info_t, build_info_for_node): Remove wc-format-min and wc-format-max options. * subversion/svn/info-cmd.c (info_item_t, info_item_map, print_info_item): Remove wc-format-min and wc-format-max options. Modified: subversion/trunk/subversion/include/svn_wc.h subversion/trunk/subversion/libsvn_wc/info.c subversion/trunk/subversion/svn/info-cmd.c Modified: subversion/trunk/subversion/include/svn_wc.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_wc.h?rev=1898380=1898379=1898380=diff == --- subversion/trunk/subversion/include/svn_wc.h (original) +++ subversion/trunk/subversion/include/svn_wc.h Thu Feb 24 16:41:04 2022 @@ -3298,18 +3298,6 @@ typedef struct svn_wc_info_t * @since New in 1.15. */ int wc_format; - - /** - * The oldest supported working copy format, #SVN_WC__SUPPORTED_VERSION. - * @since New in 1.15. - */ - int wc_format_min; - - /** - * The newest supported working copy format, #SVN_WC__VERSION. - * @since New in 1.15. - */ - int wc_format_max; } svn_wc_info_t; /** Modified: subversion/trunk/subversion/libsvn_wc/info.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/info.c?rev=1898380=1898379=1898380=diff == --- subversion/trunk/subversion/libsvn_wc/info.c (original) +++ subversion/trunk/subversion/libsvn_wc/info.c Thu Feb 24 16:41:04 2022 @@ -105,8 +105,6 @@ build_info_for_node(svn_wc__info2_t **in tmpinfo->wc_info = wc_info; wc_info->copyfrom_rev = SVN_INVALID_REVNUM; - wc_info->wc_format_min = SVN_WC__SUPPORTED_VERSION; - wc_info->wc_format_max = SVN_WC__VERSION; SVN_ERR(svn_wc__db_get_format(_info->wc_format, db, local_abspath, scratch_pool)); Modified: subversion/trunk/subversion/svn/info-cmd.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/info-cmd.c?rev=1898380=1898379=1898380=diff == --- subversion/trunk/subversion/svn/info-cmd.c (original) +++ subversion/trunk/subversion/svn/info-cmd.c Thu Feb 24 16:41:04 2022 @@ -369,9 +369,7 @@ typedef enum info_item_schedule, info_item_depth, info_item_changelist, - info_item_wc_format, - info_item_wc_format_min, - info_item_wc_format_max + info_item_wc_format } info_item_t; /* Mapping between option keywords and info_item_t. */ @@ -399,8 +397,6 @@ static const info_item_map_t info_item_m { SVN__STATIC_STRING("depth"), info_item_depth }, { SVN__STATIC_STRING("changelist"), info_item_changelist }, { SVN__STATIC_STRING("wc-format"), info_item_wc_format }, -{ SVN__STATIC_STRING("wc-format-min"), info_item_wc_format_min }, -{ SVN__STATIC_STRING("wc-format-max"), info_item_wc_format_max }, }; static const apr_size_t info_item_map_len = @@ -1251,18 +1247,6 @@ print_info_item(void *baton, target_path, pool)); break; -case info_item_wc_format_min: - SVN_ERR(print_info_item_int((info->wc_info - ? info->wc_info->wc_format_min : -1), - target_path, pool)); - break; - -case info_item_wc_format_max: - SVN_ERR(print_info_item_int((info->wc_info - ? info->wc_info->wc_format_max : -1), - target_path, pool)); - break; - case info_item_changelist: SVN_ERR(print_info_item_string( ((info->wc_info && info->wc_info->changelist)
svn commit: r1898379 - in /subversion/branches/pristines-on-demand-on-mwf: ./ subversion/include/ subversion/libsvn_client/ subversion/libsvn_wc/ subversion/svn/ subversion/tests/cmdline/ subversion/t
Author: julianfoad Date: Thu Feb 24 16:19:04 2022 New Revision: 1898379 URL: http://svn.apache.org/viewvc?rev=1898379=rev Log: On the 'pristines-on-demand-on-mwf' branch: sync with trunk@1898378. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_client.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/checkout.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/upgrade.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc-metadata.sql subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc.h subversion/branches/pristines-on-demand-on-mwf/subversion/svn/help-cmd.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/svn.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/davautocheck.sh subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- Merged /subversion/trunk:r1898192-1898378 Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_client.h?rev=1898379=1898378=1898379=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_client.h (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_client.h Thu Feb 24 16:19:04 2022 @@ -1243,8 +1243,8 @@ svn_client_args_to_target_array(apr_arra * @param[in] wc_format_version is the version number of the Subversion * client that supports the metadata format of the * created working copy; @c NULL means the library's default - * format. The earliest supported version is returned by - * svn_client_supported_wc_version(). + * format. See svn_client_default_wc_version(), + * svn_client_supported_wc_formats(). * @param[in] ctx The standard client context, used for authentication and * notification. * @param[in] pool Used for any temporary allocation. @@ -4401,8 +4401,8 @@ svn_client_cleanup(const char *dir, * * @a wc_format_version is the version number of the Subversion client * that supports a given WC metadata format; @c NULL means the library's - * default format. The earliest supported version is returned by - * svn_client_supported_wc_version(). + * default format. See svn_client_default_wc_version(), + * svn_client_supported_wc_formats(). * * Use @a scratch_pool for any temporary allocations. * @@ -4428,13 +4428,40 @@ svn_client_upgrade(const char *wcroot_di apr_pool_t *scratch_pool); /** - * Returns the version related to the earliest supported + * Returns the version related to the library's default * working copy metadata format. * * @since New in 1.15. */ const svn_version_t * -svn_client_supported_wc_version(void); +svn_client_default_wc_version(apr_pool_t *result_pool); + +/** + * Information about a WC version. + * + * Only the @c .major and @c .minor version fields are significant: so a + * version_max value of 1.15.0 for example means "up to 1.15.x". + */ +typedef struct svn_client_wc_format_t { +/* Oldest version of svn libraries known to support this WC version */ +const svn_version_t *version_min; +/* Newest version of svn libraries known to support this WC version. */ +const svn_version_t *version_max; +/* The WC format number of this format, as defined by libsvn_wc. */ +int wc_format; +} svn_client_wc_format_t; + +/** + * Returns a list of the WC formats supported by the client library. + * + * The list is sorted from oldest to newest, and terminated by an entry + * containing all null/zero fields. + * + * The returned data are allocated in @a result_pool and/or statically. + */ +const svn_client_wc_format_t * +svn_client_supported_wc_formats(apr_pool_t *result_pool, +apr_pool_t *scratch_pool); /** @} */ Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/checkout.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/checkout.c?rev=1898379=1898378=1898379=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/checkout.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/
svn commit: r1898378 - in /subversion/trunk/subversion: include/ libsvn_client/ libsvn_wc/ svn/ tests/cmdline/getopt_tests_data/
Author: julianfoad Date: Thu Feb 24 15:58:10 2022 New Revision: 1898378 URL: http://svn.apache.org/viewvc?rev=1898378=rev Log: Multi-WC-format: Clarify the supported versions display. This patch: - Changes the APIs for querying the default WC format and the supported WC formats; - clarifies the display of supported WC formats in 'svn --version'. API changes: - Remove svn_client_supported_wc_version(). - Add svn_client_default_wc_version(). - Add svn_client_supported_wc_formats() and a type it returns. CLI changes: Old display in 'svn --version': | Supported working copy (WC) versions: from 1.8 to 1.15 New display in 'svn --version': | Supported working copy (WC) versions: | | * compatible with Subversion v1.8 to v1.15 (WC format 31) | * compatible with Subversion v1.15 (WC format 32) The list style, along with inclusion of the WC format number, helps show that each line describes a distinct format. Users sometimes also need to know about WC format numbers, and the 'version' command is an appropriate place to show these. The presentation style matches that used for the lists of RA modules and credential caches. * subversion/include/svn_client.h, subversion/libsvn_client/upgrade.c (svn_client_checkout4, svn_client_upgrade2): Update doc string. (svn_client_supported_wc_version): Remove. (svn_client_default_wc_version, svn_client_wc_format_t, svn_client_supported_wc_formats): New. * subversion/libsvn_client/checkout.c (svn_client_checkout4): Update caller: use svn_client_default_wc_version(). * subversion/libsvn_wc/wc.h (SVN_WC__SUPPORTED_VERSION): Update doc string. * subversion/svn/help-cmd.c (print_supported_wc_formats): New. (svn_cl__help): Use it to display supported WC formats as a list. * subversion/svn/svn.c (parse_compatible_version): Update caller: use svn_client_supported_wc_formats(). * subversion/tests/cmdline/getopt_tests_data/svn--version_stdout, subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout Update expected output. Modified: subversion/trunk/subversion/include/svn_client.h subversion/trunk/subversion/libsvn_client/checkout.c subversion/trunk/subversion/libsvn_client/upgrade.c subversion/trunk/subversion/libsvn_wc/wc.h subversion/trunk/subversion/svn/help-cmd.c subversion/trunk/subversion/svn/svn.c subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout Modified: subversion/trunk/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1898378=1898377=1898378=diff == --- subversion/trunk/subversion/include/svn_client.h (original) +++ subversion/trunk/subversion/include/svn_client.h Thu Feb 24 15:58:10 2022 @@ -1243,8 +1243,8 @@ svn_client_args_to_target_array(apr_arra * @param[in] wc_format_version is the version number of the Subversion * client that supports the metadata format of the * created working copy; @c NULL means the library's default - * format. The earliest supported version is returned by - * svn_client_supported_wc_version(). + * format. See svn_client_default_wc_version(), + * svn_client_supported_wc_formats(). * @param[in] ctx The standard client context, used for authentication and * notification. * @param[in] pool Used for any temporary allocation. @@ -4401,8 +4401,8 @@ svn_client_cleanup(const char *dir, * * @a wc_format_version is the version number of the Subversion client * that supports a given WC metadata format; @c NULL means the library's - * default format. The earliest supported version is returned by - * svn_client_supported_wc_version(). + * default format. See svn_client_default_wc_version(), + * svn_client_supported_wc_formats(). * * Use @a scratch_pool for any temporary allocations. * @@ -4428,13 +4428,40 @@ svn_client_upgrade(const char *wcroot_di apr_pool_t *scratch_pool); /** - * Returns the version related to the earliest supported + * Returns the version related to the library's default * working copy metadata format. * * @since New in 1.15. */ const svn_version_t * -svn_client_supported_wc_version(void); +svn_client_default_wc_version(apr_pool_t *result_pool); + +/** + * Information about a WC version. + * + * Only the @c .major and @c .minor version fields are significant: so a + * version_max value of 1.15.0 for example means "up to 1.15.x". + */ +typedef struct svn_client_wc_format_t { +/* Oldest version of svn libraries known to support this WC version */ +const svn_version_t *version_min; +/* Newest version of svn libraries known to support this WC version. */ +const svn_version_t *v
svn commit: r1898365 - /subversion/trunk/subversion/libsvn_wc/wc-metadata.sql
Author: julianfoad Date: Thu Feb 24 11:35:44 2022 New Revision: 1898365 URL: http://svn.apache.org/viewvc?rev=1898365=rev Log: * subversion/libsvn_wc/wc-metadata.sql Add a cross-reference to other places we need to update. Suggested by: danielsh Modified: subversion/trunk/subversion/libsvn_wc/wc-metadata.sql Modified: subversion/trunk/subversion/libsvn_wc/wc-metadata.sql URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc-metadata.sql?rev=1898365=1898364=1898365=diff == --- subversion/trunk/subversion/libsvn_wc/wc-metadata.sql (original) +++ subversion/trunk/subversion/libsvn_wc/wc-metadata.sql Thu Feb 24 11:35:44 2022 @@ -716,6 +716,14 @@ PRAGMA user_version = 32; /* - */ +/* When bumping the format, also update: + * + * * subversion/tests/libsvn_wc/wc-queries-test.c + * (schema_statements, create_memory_db) + */ + + +/* - */ /* Format 99 drops all columns not needed due to previous format upgrades. Before we release 1.7, these statements will be pulled into a format bump
svn commit: r1898364 - /subversion/trunk/subversion/libsvn_wc/wc-metadata.sql
Author: julianfoad Date: Thu Feb 24 11:06:31 2022 New Revision: 1898364 URL: http://svn.apache.org/viewvc?rev=1898364=rev Log: * subversion/libsvn_wc/wc-metadata.sql (STMT_UPGRADE_TO_32): Fill in the doc string. Suggested by: danielsh Modified: subversion/trunk/subversion/libsvn_wc/wc-metadata.sql Modified: subversion/trunk/subversion/libsvn_wc/wc-metadata.sql URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc-metadata.sql?rev=1898364=1898363=1898364=diff == --- subversion/trunk/subversion/libsvn_wc/wc-metadata.sql (original) +++ subversion/trunk/subversion/libsvn_wc/wc-metadata.sql Thu Feb 24 11:06:31 2022 @@ -708,7 +708,9 @@ WHERE l.op_depth = 0 /* - */ -/* Format 32 */ +/* Format 32 is identical to format 31. + Its purpose is as a place-holder in developing and testing the + multi-wc-format support feature. */ -- STMT_UPGRADE_TO_32 PRAGMA user_version = 32;
svn commit: r1898192 - in /subversion/branches/pristines-on-demand-on-mwf: ./ subversion/include/ subversion/libsvn_fs_x/ subversion/libsvn_subr/utf8proc/ subversion/tests/cmdline/ subversion/tests/cm
Author: julianfoad Date: Fri Feb 18 16:16:08 2022 New Revision: 1898192 URL: http://svn.apache.org/viewvc?rev=1898192=rev Log: On the 'pristines-on-demand-on-mwf' branch: sync with trunk. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_fs_x/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_subr/utf8proc/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/externals_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/stat_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/verify.py subversion/branches/pristines-on-demand-on-mwf/tools/buildbot/slaves/win32-vcpkg/ (props changed) subversion/branches/pristines-on-demand-on-mwf/tools/dist/templates/release-notes-lts.ezt subversion/branches/pristines-on-demand-on-mwf/tools/dist/templates/release-notes.ezt Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- Merged /subversion/trunk:r1897695-1898191 Merged /subversion/branches/multi-wc-format:r1897968-1898186 Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h?rev=1898192=1898191=1898192=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h Fri Feb 18 16:16:08 2022 @@ -3300,13 +3300,13 @@ typedef struct svn_wc_info_t int wc_format; /** - * The oldest supporter working copy format. + * The oldest supported working copy format, #SVN_WC__SUPPORTED_VERSION. * @since New in 1.15. */ int wc_format_min; /** - * The newest supporter working copy format. + * The newest supported working copy format, #SVN_WC__VERSION. * @since New in 1.15. */ int wc_format_max; @@ -3556,7 +3556,8 @@ svn_wc_mark_missing_deleted(const char * * * If the administrative area does not exist, then create it and * initialize it to an unlocked state. The format of the new - * administrative area will always be the newset supported format. + * administrative area will be the library's default format + * (#SVN_WC__DEFAULT_VERSION). * * If the administrative area already exists then the given @a url * must match the URL in the administrative area and the given @@ -7456,9 +7457,10 @@ typedef svn_error_t * (*svn_wc_upgrade_g /** - * Upgrade the working copy at @a local_abspath to the latest metadata - * storage format. @a local_abspath should be an absolute path to the - * root of the working copy. + * Upgrade the working copy at @a local_abspath to the library's + * default metadata storage format (#SVN_WC__DEFAULT_VERSION). + * @a local_abspath should be an absolute path to the root of the + * working copy. * * If @a cancel_func is non-NULL, invoke it with @a cancel_baton at * various points during the operation. If it returns an error @@ -7473,8 +7475,9 @@ typedef svn_error_t * (*svn_wc_upgrade_g * repository uuid, @a repos_info_func (if non-NULL) will be called * with @a repos_info_baton to provide the missing information. * - * @since New in 1.7 + * @since New in 1.7. * @deprecated Provided for backward compatibility with the 1.14 API. + * @see svn_wc__upgrade() */ SVN_DEPRECATED svn_error_t * Propchange: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_fs_x/ -- Merged /subversion/trunk/subversion/libsvn_fs_x:r1897030-1898191 Merged /subversion/branches/multi-wc-format/subversion/libsvn_fs_x:r1897945-1898186 Propchange: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_subr/utf8proc/ -- Merged /subversion/branches/multi-wc-format/subversion/libsvn_subr/utf8proc:r1897945-1898186 Merged /subversion/trunk/subversion/libsvn_subr/utf8proc:r1897030-1898191 Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/externals_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/externals_tests.py?rev=1898192=1898191=1898192=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/externals_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/externals_tests.py Fri Feb
svn commit: r1898191 - /subversion/trunk/subversion/include/svn_wc.h
Author: julianfoad Date: Fri Feb 18 15:45:58 2022 New Revision: 1898191 URL: http://svn.apache.org/viewvc?rev=1898191=rev Log: Clarify and correct 'multi-wc-format' API docs. * subversion/include/svn_wc.h (svn_wc_info_t): Add cross-references. (svn_wc_ensure_adm4, svn_wc_upgrade): These depracated APIs use the default not the latest format. Add cross-references. Modified: subversion/trunk/subversion/include/svn_wc.h Modified: subversion/trunk/subversion/include/svn_wc.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_wc.h?rev=1898191=1898190=1898191=diff == --- subversion/trunk/subversion/include/svn_wc.h (original) +++ subversion/trunk/subversion/include/svn_wc.h Fri Feb 18 15:45:58 2022 @@ -3300,13 +3300,13 @@ typedef struct svn_wc_info_t int wc_format; /** - * The oldest supporter working copy format. + * The oldest supported working copy format, #SVN_WC__SUPPORTED_VERSION. * @since New in 1.15. */ int wc_format_min; /** - * The newest supporter working copy format. + * The newest supported working copy format, #SVN_WC__VERSION. * @since New in 1.15. */ int wc_format_max; @@ -3556,7 +3556,8 @@ svn_wc_mark_missing_deleted(const char * * * If the administrative area does not exist, then create it and * initialize it to an unlocked state. The format of the new - * administrative area will always be the newset supported format. + * administrative area will be the library's default format + * (#SVN_WC__DEFAULT_VERSION). * * If the administrative area already exists then the given @a url * must match the URL in the administrative area and the given @@ -7456,9 +7457,10 @@ typedef svn_error_t * (*svn_wc_upgrade_g /** - * Upgrade the working copy at @a local_abspath to the latest metadata - * storage format. @a local_abspath should be an absolute path to the - * root of the working copy. + * Upgrade the working copy at @a local_abspath to the library's + * default metadata storage format (#SVN_WC__DEFAULT_VERSION). + * @a local_abspath should be an absolute path to the root of the + * working copy. * * If @a cancel_func is non-NULL, invoke it with @a cancel_baton at * various points during the operation. If it returns an error @@ -7473,8 +7475,9 @@ typedef svn_error_t * (*svn_wc_upgrade_g * repository uuid, @a repos_info_func (if non-NULL) will be called * with @a repos_info_baton to provide the missing information. * - * @since New in 1.7 + * @since New in 1.7. * @deprecated Provided for backward compatibility with the 1.14 API. + * @see svn_wc__upgrade() */ SVN_DEPRECATED svn_error_t *
svn commit: r1898188 - /subversion/branches/multi-wc-format/
Author: julianfoad Date: Fri Feb 18 15:27:04 2022 New Revision: 1898188 URL: http://svn.apache.org/viewvc?rev=1898188=rev Log: Remove the 'multi-wc-format' branch after merge to trunk. Removed: subversion/branches/multi-wc-format/
svn commit: r1898187 [1/2] - in /subversion/trunk: ./ build/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_fs_x/ subversion/libsvn_subr/utf8proc/ subversi
Author: julianfoad Date: Fri Feb 18 15:27:02 2022 New Revision: 1898187 URL: http://svn.apache.org/viewvc?rev=1898187=rev Log: Merge the 'multi-wc-format' branch to trunk. Modified: subversion/trunk/ (props changed) subversion/trunk/CHANGES subversion/trunk/Makefile.in subversion/trunk/build.conf subversion/trunk/build/run_tests.py subversion/trunk/subversion/include/private/svn_wc_private.h subversion/trunk/subversion/include/svn_client.h subversion/trunk/subversion/include/svn_wc.h subversion/trunk/subversion/libsvn_client/checkout.c subversion/trunk/subversion/libsvn_client/client.h subversion/trunk/subversion/libsvn_client/copy.c subversion/trunk/subversion/libsvn_client/deprecated.c subversion/trunk/subversion/libsvn_client/externals.c subversion/trunk/subversion/libsvn_client/shelf.c subversion/trunk/subversion/libsvn_client/upgrade.c subversion/trunk/subversion/libsvn_fs_x/ (props changed) subversion/trunk/subversion/libsvn_subr/utf8proc/ (props changed) subversion/trunk/subversion/libsvn_wc/adm_files.c subversion/trunk/subversion/libsvn_wc/deprecated.c subversion/trunk/subversion/libsvn_wc/info.c subversion/trunk/subversion/libsvn_wc/lock.c subversion/trunk/subversion/libsvn_wc/upgrade.c subversion/trunk/subversion/libsvn_wc/wc-metadata.sql subversion/trunk/subversion/libsvn_wc/wc.h subversion/trunk/subversion/libsvn_wc/wc_db.c subversion/trunk/subversion/libsvn_wc/wc_db.h subversion/trunk/subversion/libsvn_wc/wc_db_private.h subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c subversion/trunk/subversion/svn/checkout-cmd.c subversion/trunk/subversion/svn/cl.h subversion/trunk/subversion/svn/help-cmd.c subversion/trunk/subversion/svn/info-cmd.c subversion/trunk/subversion/svn/svn.c subversion/trunk/subversion/svn/upgrade-cmd.c subversion/trunk/subversion/tests/cmdline/basic_tests.py subversion/trunk/subversion/tests/cmdline/getopt_tests.py subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout subversion/trunk/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout subversion/trunk/subversion/tests/cmdline/svntest/main.py subversion/trunk/subversion/tests/cmdline/upgrade_tests.py subversion/trunk/subversion/tests/libsvn_client/client-test.c subversion/trunk/subversion/tests/libsvn_client/conflicts-test.c subversion/trunk/subversion/tests/libsvn_wc/db-test.c subversion/trunk/subversion/tests/libsvn_wc/entries-compat.c subversion/trunk/subversion/tests/libsvn_wc/utils.c subversion/trunk/subversion/tests/libsvn_wc/utils.h subversion/trunk/subversion/tests/libsvn_wc/wc-queries-test.c subversion/trunk/subversion/tests/svn_test.h subversion/trunk/subversion/tests/svn_test_main.c subversion/trunk/tools/buildbot/slaves/win32-vcpkg/ (props changed) Propchange: subversion/trunk/ -- Merged /subversion/branches/better-pristines:r1807118-1843075 Merged /subversion/branches/multi-wc-format:r1843076-1898186 Modified: subversion/trunk/CHANGES URL: http://svn.apache.org/viewvc/subversion/trunk/CHANGES?rev=1898187=1898186=1898187=diff == --- subversion/trunk/CHANGES (original) +++ subversion/trunk/CHANGES Fri Feb 18 15:27:02 2022 @@ -7,6 +7,9 @@ Version 1.15.0 (?? ??? 20XX, from /branches/1.15.x) https://svn.apache.org/repos/asf/subversion/tags/1.15.0 + User-visible changes: + - Client-side improvements and bugfixes: +* Support multiple working copy formats (1.8-onward, 1.15) (issue #) Version 1.14.1 (10 Feb 2021, from /branches/1.14.x) Modified: subversion/trunk/Makefile.in URL: http://svn.apache.org/viewvc/subversion/trunk/Makefile.in?rev=1898187=1898186=1898187=diff == --- subversion/trunk/Makefile.in (original) +++ subversion/trunk/Makefile.in Fri Feb 18 15:27:02 2022 @@ -576,6 +576,9 @@ check: bin @TRANSFORM_LIBTOOL_SCRIPTS@ $ if test "$(SERVER_MINOR_VERSION)" != ""; then \ flags="--server-minor-version $(SERVER_MINOR_VERSION) $$flags"; \ fi;\ + if test "$(WC_FORMAT_VERSION)" != ""; then \ + flags="--wc-format-version $(WC_FORMAT_VERSION) $$flags";\ + fi;\ if test "$(ENABLE_SASL)" != ""; then \ flags="--enable-sasl $$flags"; \ fi;\
svn commit: r1898187 [2/2] - in /subversion/trunk: ./ build/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_fs_x/ subversion/libsvn_subr/utf8proc/ subversi
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.h?rev=1898187=1898186=1898187=diff == --- subversion/trunk/subversion/libsvn_wc/wc_db.h (original) +++ subversion/trunk/subversion/libsvn_wc/wc_db.h Fri Feb 18 15:27:02 2022 @@ -278,7 +278,8 @@ svn_error_t * svn_wc__db_close(svn_wc__db_t *db); -/* Initialize the SDB for LOCAL_ABSPATH, which should be a working copy path. +/* Initialize the SDB with format TARGET_FORMAT for LOCAL_ABSPATH, which should + be a working copy path. A REPOSITORY row will be constructed for the repository identified by REPOS_ROOT_URL and REPOS_UUID. Neither of these may be NULL. @@ -296,10 +297,13 @@ svn_wc__db_close(svn_wc__db_t *db); DEPTH is the initial depth of the working copy; it must be a definite depth, not svn_depth_unknown. + Create the working copy with the given TARGET_FORMAT. + Use SCRATCH_POOL for temporary allocations. */ svn_error_t * svn_wc__db_init(svn_wc__db_t *db, +int target_format, const char *local_abspath, const char *repos_relpath, const char *repos_root_url, @@ -308,6 +312,15 @@ svn_wc__db_init(svn_wc__db_t *db, svn_depth_t depth, apr_pool_t *scratch_pool); +/* Return the working copy format for LOCAL_ABSPATH in DB in *FORMAT. + + Use SCRATCH_POOL for temporary allocations. +*/ +svn_error_t * +svn_wc__db_get_format(int *format, + svn_wc__db_t *db, + const char *local_abspath, + apr_pool_t *scratch_pool); /* Compute the LOCAL_RELPATH for the given LOCAL_ABSPATH, relative from wri_abspath. @@ -2962,6 +2975,7 @@ svn_wc__db_upgrade_begin(svn_sqlite__db_ apr_int64_t *repos_id, apr_int64_t *wc_id, svn_wc__db_t *wc_db, + int target_format, const char *local_dir_abspath, const char *repos_root_url, const char *repos_uuid, @@ -2982,7 +2996,7 @@ svn_wc__db_upgrade_insert_external(svn_w apr_pool_t *scratch_pool); /* Upgrade the metadata concerning the WC at WCROOT_ABSPATH, in DB, - * to the SVN_WC__VERSION format. + * to the TARGET_FORMAT metadata format version. * * This function is used for upgrading wc-ng working copies to a newer * wc-ng format. If a pre-1.7 working copy is found, this function @@ -3000,6 +3014,7 @@ svn_wc__db_bump_format(int *result_forma svn_boolean_t *bumped_format, svn_wc__db_t *db, const char *wcroot_abspath, + int target_format, apr_pool_t *scratch_pool); /* @} */ Modified: subversion/trunk/subversion/libsvn_wc/wc_db_private.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db_private.h?rev=1898187=1898186=1898187=diff == --- subversion/trunk/subversion/libsvn_wc/wc_db_private.h (original) +++ subversion/trunk/subversion/libsvn_wc/wc_db_private.h Fri Feb 18 15:27:02 2022 @@ -155,7 +155,8 @@ svn_wc__db_verify_no_work(svn_sqlite__db /* Assert that the given WCROOT is usable. NOTE: the expression is multiply-evaluated!! */ #define VERIFY_USABLE_WCROOT(wcroot) SVN_ERR_ASSERT( \ -(wcroot) != NULL && (wcroot)->format == SVN_WC__VERSION) +(wcroot) != NULL && (wcroot)->format <= SVN_WC__VERSION \ +&& (wcroot)->format >= SVN_WC__SUPPORTED_VERSION) /* Check if the WCROOT is usable for light db operations such as path calculations */ Modified: subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c?rev=1898187=1898186=1898187=diff == --- subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c (original) +++ subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c Fri Feb 18 15:27:02 2022 @@ -31,6 +31,8 @@ #include "svn_pools.h" #include "svn_version.h" +#include "private/svn_sorts_private.h" + #include "wc.h" #include "adm_files.h" #include "wc_db_private.h" @@ -337,7 +339,7 @@ svn_wc__db_pdh_create_wcroot(svn_wc__db_ /* Verify that no work items exists. If they do, then our integrity is suspect and, thus, we cannot upgrade this database. */ if (format >= SVN_WC__HAS_WORK_QUEUE && - format < SVN_WC__VERSION && verify_format) + format < SVN_WC__SUPPORTED_VERSION && verify_format) { svn_error_t *err = svn_wc__db_verify_no_work(sdb); if (err) @@ -345,7 +347,7 @@
svn commit: r1898186 - /subversion/trunk/subversion/tests/cmdline/svntest/verify.py
Author: julianfoad Date: Fri Feb 18 15:12:57 2022 New Revision: 1898186 URL: http://svn.apache.org/viewvc?rev=1898186=rev Log: * subversion/tests/cmdline/svntest/verify.py (RegexListOutput): Improve consistency of the display of differences. Modified: subversion/trunk/subversion/tests/cmdline/svntest/verify.py Modified: subversion/trunk/subversion/tests/cmdline/svntest/verify.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/verify.py?rev=1898186=1898185=1898186=diff == --- subversion/trunk/subversion/tests/cmdline/svntest/verify.py (original) +++ subversion/trunk/subversion/tests/cmdline/svntest/verify.py Fri Feb 18 15:12:57 2022 @@ -298,7 +298,7 @@ class RegexListOutput(ExpectedOutput): (len(self.expected), len(actual))) for e, a in itertools.zip_longest(self.expected_res, actual): if e is not None and a is not None and regex_fullmatch(e, a): - logger.warn("| " + a.rstrip()) + logger.warn("| " + repr(a)) else: if e is not None: logger.warn("| -" + repr(e.pattern))
svn commit: r1898185 - /subversion/trunk/subversion/tests/cmdline/svntest/verify.py
Author: julianfoad Date: Fri Feb 18 15:11:45 2022 New Revision: 1898185 URL: http://svn.apache.org/viewvc?rev=1898185=rev Log: Fix a Python2-ism in the test suite. This code broke under Python3 when trying to display test failure diagnostics. * subversion/tests/cmdline/svntest/verify.py (RegexListOutput): s/map(None,)/itertools.zip_longest()/ Modified: subversion/trunk/subversion/tests/cmdline/svntest/verify.py Modified: subversion/trunk/subversion/tests/cmdline/svntest/verify.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/verify.py?rev=1898185=1898184=1898185=diff == --- subversion/trunk/subversion/tests/cmdline/svntest/verify.py (original) +++ subversion/trunk/subversion/tests/cmdline/svntest/verify.py Fri Feb 18 15:11:45 2022 @@ -28,6 +28,7 @@ import re, sys from difflib import unified_diff, ndiff import pprint import logging +import itertools import svntest @@ -295,7 +296,7 @@ class RegexListOutput(ExpectedOutput): if len(self.expected) != len(actual): logger.warn('# Expected %d lines; actual %d lines' % (len(self.expected), len(actual))) - for e, a in map(None, self.expected_res, actual): + for e, a in itertools.zip_longest(self.expected_res, actual): if e is not None and a is not None and regex_fullmatch(e, a): logger.warn("| " + a.rstrip()) else:
svn commit: r1898184 - in /subversion/branches/pristines-on-demand-on-mwf/subversion: libsvn_wc/wc_db_textbase.c tests/cmdline/authz_tests.py
Author: julianfoad Date: Fri Feb 18 15:03:18 2022 New Revision: 1898184 URL: http://svn.apache.org/viewvc?rev=1898184=rev Log: On the 'pristines-on-demand-on-mwf' branch: fix authz_tests.py 31. This test runs an 'update' after read access permission has been removed from a repository path. The text base sync code errored out when it tried to download this text base. We fix it by making the text base sync code ignore authorization errors, leaving any such base unfetched and continuing to try the others. * subversion/tests/cmdline/authz_tests.py (remove_access_after_commit): Re-enable. * subversion/libsvn_wc/wc_db_textbase.c (svn_wc__db_textbase_sync): If read access is unauthorized, ignore the error and continue even though we failed to fetch the textbase. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c?rev=1898184=1898183=1898184=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c Fri Feb 18 15:03:18 2022 @@ -330,6 +330,13 @@ svn_wc__db_textbase_sync(svn_wc__db_t *d hydrate_baton, cancel_func, cancel_baton, checksum, repos_root_url, repos_relpath, revision, iterpool); + /* If read access is unauthorized, for some operations we need + * to continue even though we failed to fetch the textbase. */ + if (err && err->apr_err == SVN_ERR_RA_NOT_AUTHORIZED) +{ + svn_error_clear(err); + err = SVN_NO_ERROR; +} if (err) return svn_error_compose_create(err, svn_sqlite__reset(stmt)); } Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py?rev=1898184=1898183=1898184=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py Fri Feb 18 15:03:18 2022 @@ -1613,7 +1613,6 @@ def authz_log_censor_revprops(sbox): '-r1', sbox.repo_url]) @Skip(svntest.main.is_ra_type_file) -@Wimp("Applying delta to a local mod needs access to the text base") def remove_access_after_commit(sbox): "remove a subdir with authz file"
svn commit: r1898002 - /subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c
Author: julianfoad Date: Sat Feb 12 13:16:00 2022 New Revision: 1898002 URL: http://svn.apache.org/viewvc?rev=1898002=rev Log: On the 'pristines-on-demand-on-mwf' branch: fix a broken test. Fix wc-queries-test 3 "test query expectations" when testing against WC format 31 ('--wc-format-version=1.8'). Thanks to danielsh for diagnosing the problem. * subversion/tests/libsvn_wc/wc-queries-test.c (slow_statements_f31): New, list of statements that are slow in format 31 in addition to those in the current list. (is_slow_statement): Take the WC format as a parameter and look in the additional list for format 31. (test_query_expectations): Pass the desired WC format to is_slow_statement(). Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c?rev=1898002=1898001=1898002=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c Sat Feb 12 13:16:00 2022 @@ -118,6 +118,16 @@ static const int slow_statements[] = -1 /* final marker */ }; +/* These statements are slow in WC format 31, but not in latest format. */ +static const int slow_statements_f31[] = +{ + /* Format 31: "designed as slow to avoid penalty on other queries" + * Format 32: now indexed. */ + STMT_SELECT_UNREFERENCED_PRISTINES, + + -1 /* final marker */ +}; + /* Statements that just read the first record from a table, using the primary key. Specialized as different sqlite versions produce different results */ @@ -146,7 +156,9 @@ in_list(const int list[], int stmt_idx) } /* Helpers to determine if a statement is in a common list */ -#define is_slow_statement(stmt_idx) in_list(slow_statements, stmt_idx) +#define is_slow_statement(stmt_idx, wc_format) \ +(in_list(slow_statements, stmt_idx) \ + || (wc_format == 31 && in_list(slow_statements_f31, stmt_idx))) #define is_schema_statement(stmt_idx) \ ((stmt_idx >= STMT_SCHEMA_FIRST) || in_list(schema_statements, stmt_idx)) @@ -687,6 +699,10 @@ test_query_expectations(const svn_test_o apr_pool_t *iterpool = svn_pool_create(scratch_pool); svn_error_t *warnings = NULL; svn_boolean_t supports_query_info; + int wc_format; + + SVN_ERR(svn_wc__format_from_version(_format, opts->wc_format_version, + scratch_pool)); SVN_ERR(create_memory_db(, opts, scratch_pool)); @@ -773,7 +789,7 @@ test_query_expectations(const svn_test_o && item->automatic_index) { warned = TRUE; - if (!is_slow_statement(i)) + if (!is_slow_statement(i, wc_format)) { warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings, "%s: " @@ -800,7 +816,7 @@ test_query_expectations(const svn_test_o statements is not our concern here. */ /* "Slow" statements do expect to see a warning, however. */ - if (is_slow_statement(i)) + if (is_slow_statement(i, wc_format)) warned = TRUE; } else if (in_list(primary_key_statements, i)) @@ -809,7 +825,7 @@ test_query_expectations(const svn_test_o as table scan in 3.8+, while the execution plan is identical: read first record from table */ } - else if (!is_slow_statement(i)) + else if (!is_slow_statement(i, wc_format)) { warned = TRUE; warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings, @@ -825,7 +841,7 @@ test_query_expectations(const svn_test_o else if (item->search && !item->index) { warned = TRUE; - if (!is_slow_statement(i)) + if (!is_slow_statement(i, wc_format)) warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings, "%s: " "Query on %s doesn't use an index:\n%s", @@ -834,7 +850,7 @@ test_query_expectations(const svn_test_o else if (item->scan && !is_result_table(item->table)) { warned = TRUE; - if (!is_slow_statement(i)) + if (!is_slow_statement(i, wc_format)) warnings = svn_error_createf(SVN_ERR_TEST_FAILED, warnings,
svn commit: r1897977 - in /subversion/branches/pristines-on-demand-on-mwf/subversion: libsvn_wc/ tests/libsvn_wc/
Author: julianfoad Date: Fri Feb 11 14:24:47 2022 New Revision: 1897977 URL: http://svn.apache.org/viewvc?rev=1897977=rev Log: On the 'pristines-on-demand-on-mwf' branch: be compatible with older WCs. This makes the behaviour conditional on the WC format alone, with no further configuration option: - pristines-on-demand when WC format is 32; - all pristines assumed present when WC format is 31. This is incomplete. - With 'make check WC_FORMAT_VERSION=1.15': test suite still passes. - With 'make check [WC_FORMAT_VERSION=1.8]': some tests FAIL or XPASS: XPASS: authz_tests.py 31: remove a subdir with authz file XPASS: basic_tests.py 8: basic corruption detection on commit [[Relies on wc.text_base_path()]] XPASS: revert_tests.py 2: revert reexpands manually contracted keyword XPASS: trans_tests.py 1: commit new files with keywords active from birth [[Relies on wc.text_base_path()]] XPASS: trans_tests.py 3: committing eol-style change forces text send [[Relies on wc.text_base_path()]] XPASS: update_tests.py 83: missing tmp update caused segfault [[The error message has changed]] XPASS: upgrade_tests.py 16: upgrade with base and working replaced files [[Can't fetch pristines: the working copy points to file:///tmp/repo]] XPASS: upgrade_tests.py 34: automatic SQLite ANALYZE FAIL: wc-queries-test 3: test query expectations * subversion/libsvn_wc/textbase.c (svn_wc__textbase_sync): Skip the sync when WC format is too low. * subversion/libsvn_wc/upgrade.c (migrate_text_bases): Use schema format 31, as further upgrade is handled elsewhere. * subversion/libsvn_wc/wc.h (SVN_WC__PRISTINES_ON_DEMAND_VERSION): New constant. * subversion/libsvn_wc/wc_db.h, subversion/libsvn_wc/wc_db_pristine.c (svn_wc__db_pristine_prepare_install): Never omit prisine in old schema. (stmt_select_pristine): New function, factored out from four call sites. Use old or new schema as appropriate. (maybe_transfer_one_pristine, pristine_transfer_txn): Use old or new schema as appropriate. * subversion/libsvn_wc/wc_db.h, subversion/libsvn_wc/wc_db_wcroot.c (svn_wc__db_pristines_mode): New. * subversion/libsvn_wc/wc_db_private.h, subversion/libsvn_wc/wc_db_wcroot.c (svn_wc__db_wcroot_t): Add a 'pristines_mode' field, ... (svn_wc__db_pdh_create_wcroot): ... and set it based on the WC format. * subversion/libsvn_wc/wc-queries.sql (STMT_INSERT_OR_IGNORE_PRISTINE, STMT_UPSERT_PRISTINE, STMT_SELECT_PRISTINE, STMT_SELECT_COPY_PRISTINES): Split each query into a '*_F31' version to match the old schema and a '*_F32' version to match the new schema. * subversion/tests/libsvn_wc/db-test.c, subversion/tests/libsvn_wc/entries-compat.c (TESTING_DATA): Split into a '*_F31' version to match the old schema and a '*_F32' version to match the new schema. (testing_wc_format_32): New. (create_open, create_fake_wc): Use old or new schema as appropriate. * subversion/tests/libsvn_wc/op-depth-test.c (stmt_for_f31_or_f32): New. (insert_actual): Use old or new schema as appropriate. * subversion/tests/libsvn_wc/pristine-store-test.c (testing_wc_format_32): New. (pristine_install_dehydrated): Adjust expectations according to WC format. (pristine_dehydrate): Skip if testing against the old WC format. * subversion/tests/libsvn_wc/wc-queries-test.c (stmt_matches_wc_format): New. (test_parsable, test_query_expectations): Skip statements that do not match the WC format under test. * subversion/tests/libsvn_wc/wc-test-queries.sql (STMT_ENSURE_EMPTY_PRISTINE): Split into a '*_F31' version to match the old schema and a '*_F32' version to match the new schema. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/textbase.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/upgrade.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc-queries.sql subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_pristine.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_private.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_wcroot.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/db-test.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/entries-compat.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/op-depth-test.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/pristine-store-test.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests
svn commit: r1897974 - /subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db.c
Author: julianfoad Date: Fri Feb 11 14:12:39 2022 New Revision: 1897974 URL: http://svn.apache.org/viewvc?rev=1897974=rev Log: On the 'pristines-on-demand-on-mwf' branch: remove debug code. * subversion/libsvn_wc/wc_db.c Remove debug code accidentally committed in r1897968. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db.c Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db.c?rev=1897974=1897973=1897974=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db.c Fri Feb 11 14:12:39 2022 @@ -1506,13 +1506,6 @@ svn_wc__db_init(svn_wc__db_t *db, FALSE /* auto-upgrade */, db->state_pool, scratch_pool)); -#define FORMAT_EXPECTED 32 - if (wcroot->format != FORMAT_EXPECTED) -{ - SVN_DBG(("### format is %d; expected %d", wcroot->format, FORMAT_EXPECTED)); - SVN_ERR_MALFUNCTION_NO_RETURN(); -} - /* Any previously cached children may now have a new WCROOT, most likely that of the new WCROOT, but there might be descendant directories that are their own working copy, in which case setting WCROOT to our new WCROOT might @@ -13469,12 +13462,6 @@ svn_wc__db_upgrade_begin(svn_sqlite__db_ FALSE /* auto-upgrade */, wc_db->state_pool, scratch_pool)); - if (wcroot->format != FORMAT_EXPECTED) -{ - SVN_DBG(("### format is %d; expected %d", wcroot->format, FORMAT_EXPECTED)); - SVN_ERR_MALFUNCTION_NO_RETURN(); -} - /* The WCROOT is complete. Stash it into DB. */ svn_hash_sets(wc_db->dir_data, wcroot->abspath, wcroot);
svn commit: r1897968 - in /subversion/branches/pristines-on-demand-on-mwf: ./ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_wc/ subversion/tests/libsvn_wc/
Author: julianfoad Date: Fri Feb 11 11:21:01 2022 New Revision: 1897968 URL: http://svn.apache.org/viewvc?rev=1897968=rev Log: On the 'pristines-on-demand-on-mwf' branch: sync with ^/subversion/branches/multi-wc-format@1897967. Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/checkout.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/client.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/upgrade.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/deprecated.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/upgrade.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_wcroot.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/entries-compat.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/utils.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- Merged /subversion/branches/multi-wc-format:r1897945-1897967 Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h?rev=1897968=1897967=1897968=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h Fri Feb 11 11:21:01 2022 @@ -2183,6 +2183,8 @@ svn_wc__working_file_writer_close(svn_wc * Convert @a version to that version's characteristic working copy * format, returned in @a format. * + * A NULL @a version translates to the library's default version. + * * Use @a scratch_pool for temporary allocations. * * @since New in 1.15. @@ -2231,7 +2233,7 @@ svn_wc__min_supported_format_version(voi /** * Set @a format to the format of the nearest parent working copy root of * @a local_abspath in @a wc_ctx, or to the oldest format of any root stored - * there. If @a wc_ctx is empty, return the newset supported format. + * there. If @a wc_ctx is empty, return the library's default format. * * Use @a scratch_pool for temporary allocations. * Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/checkout.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/checkout.c?rev=1897968=1897967=1897968=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/checkout.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/checkout.c Fri Feb 11 11:21:01 2022 @@ -98,6 +98,8 @@ svn_client__checkout_internal(svn_revnum && (revision->kind != svn_opt_revision_head)) return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL); + /* Here the default for wc_format_version is determined from WC context, + * rather than the library's default version. */ if (wc_format_version) SVN_ERR(svn_wc__format_from_version(_format, wc_format_version, scratch_pool)); Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/client.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/client.h?rev=1897968=1897967=1897968=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/client.h (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/client.h Fri Feb 11 11:21:01 2022 @@ -541,9 +541,8 @@ svn_client__update_internal(svn_revnum_t A new working copy, if needed, will be created in the format corresponding to the WC_FORMAT_VERSION of the client. If this parameter is NULL, the - format from CTX->WC_CTX will be and an error will be returned if the format - cannot be determined. The format of any existing working copy will remain - unchanged. + format will be determined from context (see svn_wc__format_from_context). + The format of any existing working copy will remain unchanged. If RA_SESSION is NOT NULL,
svn commit: r1897967 - in /subversion/branches/multi-wc-format/subversion: include/private/ libsvn_client/ libsvn_wc/ tests/libsvn_wc/
Author: julianfoad Date: Fri Feb 11 11:12:39 2022 New Revision: 1897967 URL: http://svn.apache.org/viewvc?rev=1897967=rev Log: On the 'multi-wc-format' branch: fix and clarify use of default WC version. Fix up some places where we were still using the latest version and should be using the default version. Introduce an explicit definition 'SVN_WC__DEFAULT_VERSION' and use it where this is the intended meaning. Move the defaulting down a layer, into 'svn_wc__format_from_version', except where the client layer needs to care or do something different. * subversion/include/private/svn_wc_private.h, subversion/libsvn_wc/upgrade.c, subversion/libsvn_wc/wc_db_wcroot.c (svn_wc__format_from_version, svn_wc__format_from_context): Use default version rather than latest. * subversion/libsvn_client/checkout.c (svn_client__checkout_internal): Add a comment. * subversion/libsvn_client/upgrade.c (svn_client_upgrade2): Don't handle the defaulting here; let 'svn_wc__format_from_version' handle it. * subversion/libsvn_wc/deprecated.c (svn_wc_ensure_adm4, svn_wc_upgrade): Use default version rather than latest. * subversion/libsvn_wc/wc.h (SVN_WC__DEFAULT_VERSION): New. * subversion/tests/libsvn_wc/entries-compat.c (test_access_baton_like_locking): Don't handle the defaulting here; let 'svn_wc__format_from_version' handle it. * subversion/tests/libsvn_wc/utils.c (svn_test__create_fake_wc): Don't handle the defaulting here; let 'svn_wc__format_from_version' handle it. * subversion/tests/libsvn_wc/wc-queries-test.c (create_memory_db): Don't handle the defaulting here; let 'svn_wc__format_from_version' handle it. Modified: subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h subversion/branches/multi-wc-format/subversion/libsvn_client/checkout.c subversion/branches/multi-wc-format/subversion/libsvn_client/client.h subversion/branches/multi-wc-format/subversion/libsvn_client/upgrade.c subversion/branches/multi-wc-format/subversion/libsvn_wc/deprecated.c subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c subversion/branches/multi-wc-format/subversion/libsvn_wc/wc.h subversion/branches/multi-wc-format/subversion/libsvn_wc/wc_db_wcroot.c subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/entries-compat.c subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/utils.c subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/wc-queries-test.c Modified: subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h?rev=1897967=1897966=1897967=diff == --- subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h (original) +++ subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h Fri Feb 11 11:12:39 2022 @@ -2183,6 +2183,8 @@ svn_wc__working_file_writer_close(svn_wc * Convert @a version to that version's characteristic working copy * format, returned in @a format. * + * A NULL @a version translates to the library's default version. + * * Use @a scratch_pool for temporary allocations. * * @since New in 1.15. @@ -2231,7 +2233,7 @@ svn_wc__min_supported_format_version(voi /** * Set @a format to the format of the nearest parent working copy root of * @a local_abspath in @a wc_ctx, or to the oldest format of any root stored - * there. If @a wc_ctx is empty, return the newset supported format. + * there. If @a wc_ctx is empty, return the library's default format. * * Use @a scratch_pool for temporary allocations. * Modified: subversion/branches/multi-wc-format/subversion/libsvn_client/checkout.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_client/checkout.c?rev=1897967=1897966=1897967=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_client/checkout.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_client/checkout.c Fri Feb 11 11:12:39 2022 @@ -98,6 +98,8 @@ svn_client__checkout_internal(svn_revnum && (revision->kind != svn_opt_revision_head)) return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL, NULL); + /* Here the default for wc_format_version is determined from WC context, + * rather than the library's default version. */ if (wc_format_version) SVN_ERR(svn_wc__format_from_version(_format, wc_format_version, scratch_pool)); Modified: subversion/branches/multi-wc-format/subversion/libsvn_client/client.h URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_client/client.h?rev=1897967=1897966=1
svn commit: r1897946 [3/3] - in /subversion/branches/pristines-on-demand-on-mwf: ./ build/ subversion/bindings/swig/python/tests/ subversion/include/private/ subversion/libsvn_client/ subversion/libsv
Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_update_move.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_update_move.c?rev=1897946=1897945=1897946=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_update_move.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_update_move.c Thu Feb 10 20:04:43 2022 @@ -154,6 +154,7 @@ #include "conflicts.h" #include "workqueue.h" #include "token-map.h" +#include "textbase.h" /* Helper functions */ /* Return the absolute path, in local path style, of LOCAL_RELPATH @@ -970,15 +971,28 @@ tc_editor_add_file(node_move_baton_t *nm } else { + const char *src_abspath; + const char *install_from; + svn_skel_t *cleanup_work_item; + + src_abspath = svn_dirent_join(b->wcroot->abspath, nmb->src_relpath, +scratch_pool); + /* Update working file. */ + SVN_ERR(svn_wc__textbase_setaside_wq(_from, + _work_item, + b->db, src_abspath, NULL, + b->cancel_func, b->cancel_baton, + scratch_pool, scratch_pool)); SVN_ERR(svn_wc__wq_build_file_install(_item, b->db, svn_dirent_join(b->wcroot->abspath, relpath, scratch_pool), -NULL, +install_from, FALSE /*FIXME: use_commit_times?*/, TRUE /* record_file_info */, scratch_pool, scratch_pool)); + work_item = svn_wc__wq_merge(work_item, cleanup_work_item, scratch_pool); } SVN_ERR(update_move_list_add(b->wcroot, relpath, b->db, @@ -1369,33 +1383,56 @@ tc_editor_alter_file(node_move_baton_t * scratch_pool)); if (!is_locally_modified) { + const char *src_abspath; + const char *install_from; + svn_skel_t *cleanup_work_item; + + src_abspath = svn_dirent_join(b->wcroot->abspath, nmb->src_relpath, +scratch_pool); + + SVN_ERR(svn_wc__textbase_setaside_wq(_from, + _work_item, + b->db, src_abspath, NULL, + b->cancel_func, b->cancel_baton, + scratch_pool, scratch_pool)); SVN_ERR(svn_wc__wq_build_file_install(_item, b->db, local_abspath, -NULL, +install_from, FALSE /* FIXME: use_commit_times? */, TRUE /* record_file_info */, scratch_pool, scratch_pool)); work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool); + work_items = svn_wc__wq_merge(work_items, cleanup_work_item, scratch_pool); content_state = svn_wc_notify_state_changed; } else { + svn_skel_t *cleanup_queue = NULL; + /* * Run a 3-way merge to update the file, using the pre-update * pristine text as the merge base, the post-update pristine * text as the merge-left version, and the current content of the * moved-here working file as the merge-right version. */ - SVN_ERR(svn_wc__db_pristine_get_path(_pristine_abspath, - b->db, b->wcroot->abspath, + SVN_ERR(svn_wc__textbase_setaside_wq(_pristine_abspath, + _item, b->db, + local_abspath, old_version.checksum, + b->cancel_func, b->cancel_baton, scratch_pool, scratch_pool)); - SVN_ERR(svn_wc__db_pristine_get_path(_pristine_abspath, - b->db, b->wcroot->abspath, + cleanup_queue = svn_wc__wq_merge(cleanup_queue, work_item, scratch_pool); + + SVN_ERR(svn_wc__textbase_setaside_wq(_pristine_abspath, +
svn commit: r1897946 [2/3] - in /subversion/branches/pristines-on-demand-on-mwf: ./ build/ subversion/bindings/swig/python/tests/ subversion/include/private/ subversion/libsvn_client/ subversion/libsv
Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/diff_editor.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/diff_editor.c?rev=1897946=1897945=1897946=diff == --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/diff_editor.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/diff_editor.c Thu Feb 10 20:04:43 2022 @@ -75,6 +75,7 @@ #include "adm_files.h" #include "translate.h" #include "diff.h" +#include "textbase.h" #include "svn_private_config.h" @@ -476,15 +477,17 @@ svn_wc__diff_base_working_diff(svn_wc__d if (skip) return SVN_NO_ERROR; - SVN_ERR(svn_wc__db_pristine_get_path(_file, - db, local_abspath, checksum, - scratch_pool, scratch_pool)); + SVN_ERR(svn_wc__textbase_setaside(_file, +db, local_abspath, checksum, +cancel_func, cancel_baton, +scratch_pool, scratch_pool)); if (diff_pristine) -SVN_ERR(svn_wc__db_pristine_get_path(_file, - db, local_abspath, - working_checksum, - scratch_pool, scratch_pool)); +SVN_ERR(svn_wc__textbase_setaside(_file, + db, local_abspath, + working_checksum, + cancel_func, cancel_baton, + scratch_pool, scratch_pool)); else if (! (had_props || props_mod)) local_file = local_abspath; else if (files_same) @@ -1019,8 +1022,9 @@ svn_wc__diff_local_only_file(svn_wc__db_ right_props = svn_prop_hash_dup(pristine_props, scratch_pool); if (checksum) -SVN_ERR(svn_wc__db_pristine_get_path(_file, db, local_abspath, - checksum, scratch_pool, scratch_pool)); +SVN_ERR(svn_wc__textbase_setaside(_file, db, local_abspath, + checksum, cancel_func, cancel_baton, + scratch_pool, scratch_pool)); else pristine_file = NULL; @@ -1415,9 +1419,10 @@ svn_wc__diff_base_only_file(svn_wc__db_t if (skip) return SVN_NO_ERROR; - SVN_ERR(svn_wc__db_pristine_get_path(_file, - db, local_abspath, checksum, - scratch_pool, scratch_pool)); + SVN_ERR(svn_wc__textbase_setaside(_file, +db, local_abspath, checksum, +NULL, NULL, +scratch_pool, scratch_pool)); SVN_ERR(processor->file_deleted(relpath, left_src, @@ -2111,17 +2116,17 @@ apply_textdelta(void *file_baton, pool)); } - SVN_ERR(svn_wc__db_pristine_read(, NULL, - eb->db, fb->local_abspath, - fb->base_checksum, - pool, pool)); + SVN_ERR(svn_wc__textbase_get_contents(, +eb->db, fb->local_abspath, +fb->base_checksum, FALSE, +pool, pool)); } else if (fb->base_checksum) { - SVN_ERR(svn_wc__db_pristine_read(, NULL, - eb->db, fb->local_abspath, - fb->base_checksum, - pool, pool)); + SVN_ERR(svn_wc__textbase_get_contents(, +eb->db, fb->local_abspath, +fb->base_checksum, FALSE, +pool, pool)); } else source = svn_stream_empty(pool); @@ -2215,10 +2220,11 @@ close_file(void *file_baton, if (! repos_file) { assert(fb->base_checksum); -SVN_ERR(svn_wc__db_pristine_get_path(_file, - eb->db, eb->anchor_abspath, - fb->base_checksum, - scratch_pool, scratch_pool)); +SVN_ERR(svn_wc__textbase_setaside(_file, + eb->db, fb->local_abspath, + fb->base_checksum, + eb->cancel_func, eb->cancel_baton, + scratch_pool, scratch_pool)); } } @@ -2251,10 +2257,11 @@ close_file(void *file_baton,
svn commit: r1897946 [1/3] - in /subversion/branches/pristines-on-demand-on-mwf: ./ build/ subversion/bindings/swig/python/tests/ subversion/include/private/ subversion/libsvn_client/ subversion/libsv
Author: julianfoad Date: Thu Feb 10 20:04:43 2022 New Revision: 1897946 URL: http://svn.apache.org/viewvc?rev=1897946=rev Log: On the 'pristines-on-demand-on-mwf' branch: merge 'pristines-on-demand' here. Added: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/textbase.c - copied unchanged from r1897945, subversion/branches/pristines-on-demand/subversion/libsvn_client/textbase.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/textbase.c - copied unchanged from r1897945, subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/textbase.h - copied unchanged from r1897945, subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_textbase.c - copied unchanged from r1897945, subversion/branches/pristines-on-demand/subversion/libsvn_wc/wc_db_textbase.c Modified: subversion/branches/pristines-on-demand-on-mwf/ (props changed) subversion/branches/pristines-on-demand-on-mwf/BRANCH-README subversion/branches/pristines-on-demand-on-mwf/build/run_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/bindings/swig/python/tests/fs.py subversion/branches/pristines-on-demand-on-mwf/subversion/include/private/svn_wc_private.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/cat.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/client.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/commit.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/conflicts.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/diff.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/resolved.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/revert.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/switch.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/update.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_client/upgrade.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/adm_crawler.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/adm_files.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/adm_files.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/adm_ops.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/copy.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/diff_editor.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/externals.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/questions.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/revert.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/update_editor.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/upgrade.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/util.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc-metadata.sql subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc-queries.sql subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_pristine.c subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_update_move.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/basic_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/externals_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/log_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pegrev_parse_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/revert_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/db-test.c subversion/branches/pristines-on-demand
svn commit: r1897945 - /subversion/branches/pristines-on-demand-on-mwf/
Author: julianfoad Date: Thu Feb 10 19:27:17 2022 New Revision: 1897945 URL: http://svn.apache.org/viewvc?rev=1897945=rev Log: New branch 'pristines-on-demand-on-mwf': for rebasing 'pristines-on-demand' on top of 'multi-wc-format'. Added: subversion/branches/pristines-on-demand-on-mwf/ (props changed) - copied from r1897944, subversion/branches/multi-wc-format/ Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- --- svn:auto-props (added) +++ svn:auto-props Thu Feb 10 19:27:17 2022 @@ -0,0 +1,14 @@ +*.c = svn:eol-style=native +*.cpp = svn:eol-style=native +*.h = svn:eol-style=native +*.hpp = svn:eol-style=native +*.java = svn:eol-style=native +*.m4 = svn:eol-style=native +*.py = svn:eol-style=native +*.pl = svn:eol-style=native +*.rb = svn:eol-style=native +*.sql = svn:eol-style=native +*.txt = svn:eol-style=native +README = svn:eol-style=native +BRANCH-README = svn:eol-style=native +STATUS = svn:eol-style=native Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- --- svn:ignore (added) +++ svn:ignore Thu Feb 10 19:27:17 2022 @@ -0,0 +1,65 @@ +ChangeLog* +Makefile +config.cache +config.log +config.nice +config.status +configure +libtool +.gdb_history +.swig_checked +*.orig +*.rej +TAGS +tags +neon +build-outputs.mk +aclocal.m4 +autogen-standalone.mk +autom4te.cache +gen-make.opts +tests.log* +fails.log* +db4-win32 +db +*.o +*~ +.*~ +apr +apr-util +apr-iconv +Release +release_win32 +release_win32_static +release_x64 +Debug +debug_win32 +debug_win32_static +debug_x64 +ipch +subversion_msvc.dsw +subversion_msvc.ncb +subversion_msvc.opt +subversion_msvc.plg +subversion_vcnet.* +mkmf.log +.project +.classpath +.cdtproject +.settings +.cproject +py3c +zlib +sqlite-amalgamation +serf +googlemock +.git +.gitignore +.idea +compile_commands.json +.kdev4 +*.kdev4 +.vs +.swig_pl_checked +.swig_py_checked +.swig_rb_checked Propchange: subversion/branches/pristines-on-demand-on-mwf/ -- --- svn:mergeinfo (added) +++ svn:mergeinfo Thu Feb 10 19:27:17 2022 @@ -0,0 +1,109 @@ +/subversion/branches/1.10-cache-improvements:1669168-1694487 +/subversion/branches/1.11.x:1841316,1841548 +/subversion/branches/1.5.x-r30215:870312 +/subversion/branches/1.7.x-fs-verify:1146708,1161180 +/subversion/branches/1.9-cache-improvements:1678948-1679863 +/subversion/branches/1.9.x:1735680 +/subversion/branches/10Gb:1388102,1388163-1388190,1388195,1388202,1388205,1388211,1388276,1388362,1388375,1388394,1388636,1388639-1388640,1388643-1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388807,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390209,1390216,1390407,1390409,1390414,1390419,1390955 +/subversion/branches/atomic-revprop:965046-1000689 +/subversion/branches/authzperf:1613053-1776831 +/subversion/branches/auto-props-sdc:1384106-1401643 +/subversion/branches/bdb-reverse-deltas:872050-872529 +/subversion/branches/cache-server:1458643-1476567 +/subversion/branches/decouple-shelving-cli:1874630-1875035 +/subversion/branches/diff-callbacks3:870059-870761 +/subversion/branches/diff-optimizations:1031270-1037352 +/subversion/branches/diff-optimizations-bytes:1037353-1067789 +/subversion/branches/dont-save-plaintext-passwords-by-default:870728-871118 +/subversion/branches/double-delete:870511-872970 +/subversion/branches/dump-load-cross-check:1654853-1657295 +/subversion/branches/ev2-export:1325914,1332738,1413107 +/subversion/branches/explore-wc:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997 +/subversion/branches/file-externals:871779-873302 +/subversion/branches/fs-rep-sharing:869036-873803 +/subversion/branches/fsfs-format7:1426304,1430673,1433848,1438408,1438982,1441129,1442051,1442068,1442504,1442910,1443171,1443803,1444690,1444693,1444695,1445040,1445080,1446103,1451129,1453590,1454307,1460579,1461851,1461865,1462837,1462904,1463120,1467362,1467382,1469487,1471208,1477166,1478055,1481447,1489817,1489949,1490673-1490674,1491784,1493042,1498029,1498103,1498155,1500054,1507729-1507731,1507735-1507736 +/subversion/branches/fsfs-improvements:1499981-1547039 +/subversion/branches/fsfs-lock-many:1571740-1577217 +/subversion/branches/fsfs-pack:873717-874575 +/subversion/branches/fsx:1507845-1509914 +/subversion/branches/fsx-1.10:1658219-1694500 +/subversion/branches/fsx-id:1645603-1649011 +/subversion/branches/gnome-keyring:870558-871410 +/subversion/branches/gpg-agent-password-store:1005036-1150766 +/subversion
svn commit: r1897944 - /subversion/branches/multi-wc-format/CHANGES
Author: julianfoad Date: Thu Feb 10 16:09:11 2022 New Revision: 1897944 URL: http://svn.apache.org/viewvc?rev=1897944=rev Log: On the 'multi-wc-format' branch: add a CHANGES log entry. Modified: subversion/branches/multi-wc-format/CHANGES Modified: subversion/branches/multi-wc-format/CHANGES URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/CHANGES?rev=1897944=1897943=1897944=diff == --- subversion/branches/multi-wc-format/CHANGES (original) +++ subversion/branches/multi-wc-format/CHANGES Thu Feb 10 16:09:11 2022 @@ -7,6 +7,9 @@ Version 1.15.0 (?? ??? 20XX, from /branches/1.15.x) https://svn.apache.org/repos/asf/subversion/tags/1.15.0 + User-visible changes: + - Client-side improvements and bugfixes: +* Support multiple working copy formats (1.8-onward, 1.15) (issue #) Version 1.14.1 (10 Feb 2021, from /branches/1.14.x)
svn commit: r1897943 - in /subversion/branches/multi-wc-format/subversion: include/svn_client.h libsvn_client/checkout.c libsvn_client/upgrade.c tests/cmdline/svntest/main.py tests/svn_test_main.c
Author: julianfoad Date: Thu Feb 10 15:46:27 2022 New Revision: 1897943 URL: http://svn.apache.org/viewvc?rev=1897943=rev Log: On the 'multi-wc-format' branch: default to the oldest supported WC version. * subversion/include/svn_client.h, subversion/libsvn_client/checkout.c, subversion/libsvn_client/upgrade.c (svn_client_checkout4, svn_client_upgrade2): Default to the oldest supported WC version. * subversion/tests/cmdline/svntest/main.py (DEFAULT_COMPATIBLE_VERSION): New. (wc_format): Default to the oldest supported WC version. * subversion/tests/svn_test_main.c (svn_test_main): Default to the oldest supported WC version. Modified: subversion/branches/multi-wc-format/subversion/include/svn_client.h subversion/branches/multi-wc-format/subversion/libsvn_client/checkout.c subversion/branches/multi-wc-format/subversion/libsvn_client/upgrade.c subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py subversion/branches/multi-wc-format/subversion/tests/svn_test_main.c Modified: subversion/branches/multi-wc-format/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/include/svn_client.h?rev=1897943=1897942=1897943=diff == --- subversion/branches/multi-wc-format/subversion/include/svn_client.h (original) +++ subversion/branches/multi-wc-format/subversion/include/svn_client.h Thu Feb 10 15:46:27 2022 @@ -1242,9 +1242,9 @@ svn_client_args_to_target_array(apr_arra * obstructing items. * @param[in] wc_format_version is the version number of the Subversion * client that supports the metadata format of the - * created working copy; @c NULL means the newest - * supported format. The earliest supported version is - * returned by svn_client_supported_wc_version(). + * created working copy; @c NULL means the library's default + * format. The earliest supported version is returned by + * svn_client_supported_wc_version(). * @param[in] ctx The standard client context, used for authentication and * notification. * @param[in] pool Used for any temporary allocation. @@ -4400,8 +4400,8 @@ svn_client_cleanup(const char *dir, * format. @a wcroot_dir is the path to the WC root. * * @a wc_format_version is the version number of the Subversion client - * that supports a given WC metadata format; @c NULL means the newest - * supported format. The earliest supported version is returned by + * that supports a given WC metadata format; @c NULL means the library's + * default format. The earliest supported version is returned by * svn_client_supported_wc_version(). * * Use @a scratch_pool for any temporary allocations. Modified: subversion/branches/multi-wc-format/subversion/libsvn_client/checkout.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_client/checkout.c?rev=1897943=1897942=1897943=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_client/checkout.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_client/checkout.c Thu Feb 10 15:46:27 2022 @@ -235,9 +235,9 @@ svn_client_checkout4(svn_revnum_t *resul SVN_ERR(svn_dirent_get_absolute(_abspath, path, pool)); - /* A NULL wc_format_version translates to the current version. */ + /* A NULL wc_format_version translates to the default version. */ if (!wc_format_version) -wc_format_version = svn_client_version(); +wc_format_version = svn_client_supported_wc_version(); err = svn_client__checkout_internal(result_rev, _here, URL, local_abspath, Modified: subversion/branches/multi-wc-format/subversion/libsvn_client/upgrade.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_client/upgrade.c?rev=1897943=1897942=1897943=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_client/upgrade.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_client/upgrade.c Thu Feb 10 15:46:27 2022 @@ -192,9 +192,9 @@ svn_client_upgrade2(const char *path, { int wc_format; - /* A NULL wc_format_version translates to the current version. */ + /* A NULL wc_format_version translates to the default version. */ if (!wc_format_version) -wc_format_version = svn_client_version(); +wc_format_version = svn_client_supported_wc_version(); SVN_ERR(svn_wc__format_from_version(_format, wc_format_version, Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format
svn commit: r1897920 - in /subversion/branches/multi-wc-format/subversion/tests: cmdline/basic_tests.py cmdline/svntest/main.py libsvn_wc/entries-compat.c libsvn_wc/utils.c libsvn_wc/wc-queries-test.c
Author: julianfoad Date: Wed Feb 9 21:20:00 2022 New Revision: 1897920 URL: http://svn.apache.org/viewvc?rev=1897920=rev Log: On the 'multi-wc-format' branch: no default for '--wc-format-version'. This patch avoids defaulting the '--wc-format-version' option value, and instead when omitted will let the called 'svn' programs or APIs use their own defaults. * subversion/tests/cmdline/basic_tests.py (basic_auth_test): Use no '--compatible-version' if not specified. * subversion/tests/cmdline/svntest/main.py (_with_wc_format_version): Use no '--compatible-version' if not specified. (wc_format): Return current format if not specified. (_create_parser): Remove default value. (parse_options): Don't check value if no value specified. * subversion/tests/libsvn_wc/entries-compat.c (test_access_baton_like_locking): Use current format if not specified. * subversion/tests/libsvn_wc/utils.c (svn_test__create_fake_wc): Use current format if not specified. * subversion/tests/libsvn_wc/wc-queries-test.c (create_memory_db): Use current format if not specified. Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/basic_tests.py subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/entries-compat.c subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/utils.c subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/wc-queries-test.c Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/basic_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/cmdline/basic_tests.py?rev=1897920=1897919=1897920=diff == --- subversion/branches/multi-wc-format/subversion/tests/cmdline/basic_tests.py (original) +++ subversion/branches/multi-wc-format/subversion/tests/cmdline/basic_tests.py Wed Feb 9 21:20:00 2022 @@ -2541,8 +2541,10 @@ def basic_auth_test(sbox): # Set up a custom config directory config_dir = sbox.create_config_dir() - common_opts = ('--config-dir', config_dir, - '--compatible-version', svntest.main.options.wc_format_version) + common_opts = ('--config-dir', config_dir) + if svntest.main.options.wc_format_version: +common_opts += ('--compatible-version', +svntest.main.options.wc_format_version) # Checkout with jrandom exit_code, output, errput = svntest.main.run_command( Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py?rev=1897920=1897919=1897920=diff == --- subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py (original) +++ subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py Wed Feb 9 21:20:00 2022 @@ -794,7 +794,7 @@ def copy_trust(dst_cfgdir, src_cfgdir): shutil.copy(os.path.join(src_ssl_dir, f), os.path.join(dst_ssl_dir, f)) def _with_wc_format_version(args): - if '--wc-format-version' in args: + if '--wc-format-version' in args or options.wc_format_version is None: return args non_opt_args = [a for a in args if not str(a).startswith('-')] if non_opt_args: @@ -1740,9 +1740,13 @@ def is_remote_http_connection_allowed(): return options.allow_remote_http_connection def wc_format(): - minor = int(options.wc_format_version.split('.')[1]) - if minor >= 15 and minor <= SVN_VER_MINOR: return 32 - if minor >= 8 and minor <= 14: return 31 + minor = (int(options.wc_format_version.split('.')[1]) + if options.wc_format_version + else SVN_VER_MINOR) + if minor >= 15 and minor <= SVN_VER_MINOR: +return 32 + if minor >= 8 and minor <= 14: +return 31 raise Exception("Unrecognized wc_format_version '%s'" % options.wc_format_version) @@ -2276,7 +2280,6 @@ def _create_parser(usage=None): # most of the defaults are None, but some are other values, set them here parser.set_defaults( server_minor_version=SVN_VER_MINOR, -wc_format_version=svn_wc__max_supported_format_version(), url=file_scheme_prefix + \ svntest.wc.svn_uri_quote( os.path.abspath( @@ -2345,7 +2348,8 @@ def parse_options(arglist=sys.argv[1:], parser.error("test harness only supports server minor versions 3-%d" % SVN_VER_MINOR) - if not svn_wc__is_supported_format_version(options.wc_format_version): + if not (options.wc_format_version is None or + svn_wc__is_supported_format_version(options.wc_format_version)): parser.error("test harness only supports WC formats %s to %s, not '%s'"
svn commit: r1897919 - in /subversion/branches/multi-wc-format/subversion/tests/cmdline: basic_tests.py svntest/main.py upgrade_tests.py
Author: julianfoad Date: Wed Feb 9 20:53:05 2022 New Revision: 1897919 URL: http://svn.apache.org/viewvc?rev=1897919=rev Log: On the 'multi-wc-format' branch: Py tests use '--wc-format-version' option. This patch uses the passed in '--wc-format-version' option value when creating working copies, throughout the Python tests. * subversion/tests/cmdline/basic_tests.py (basic_auth_test): Append a '--compatible-version' option to checkout commands. * subversion/tests/cmdline/svntest/main.py (_with_wc_format_version): New. (run_svn): Append a '--compatible-version' option to checkout and upgrade commands, if absent and needed. (wc_format): New. * subversion/tests/cmdline/upgrade_tests.py (get_current_format): Get the expected format from the test framework. Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/basic_tests.py subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py subversion/branches/multi-wc-format/subversion/tests/cmdline/upgrade_tests.py Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/basic_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/cmdline/basic_tests.py?rev=1897919=1897918=1897919=diff == --- subversion/branches/multi-wc-format/subversion/tests/cmdline/basic_tests.py (original) +++ subversion/branches/multi-wc-format/subversion/tests/cmdline/basic_tests.py Wed Feb 9 20:53:05 2022 @@ -2541,33 +2541,33 @@ def basic_auth_test(sbox): # Set up a custom config directory config_dir = sbox.create_config_dir() + common_opts = ('--config-dir', config_dir, + '--compatible-version', svntest.main.options.wc_format_version) + # Checkout with jrandom exit_code, output, errput = svntest.main.run_command( svntest.main.svn_binary, None, True, 'co', sbox.repo_url, wc_dir, -'--username', 'jrandom', '--password', 'rayjandom', -'--config-dir', config_dir) +'--username', 'jrandom', '--password', 'rayjandom', *common_opts) exit_code, output, errput = svntest.main.run_command( svntest.main.svn_binary, None, True, 'co', sbox.repo_url, wc_dir, -'--username', 'jrandom', '--non-interactive', '--config-dir', config_dir) +'--username', 'jrandom', '--non-interactive', *common_opts) # Checkout with jconstant exit_code, output, errput = svntest.main.run_command( svntest.main.svn_binary, None, True, 'co', sbox.repo_url, wc_dir, -'--username', 'jconstant', '--password', 'rayjandom', -'--config-dir', config_dir) +'--username', 'jconstant', '--password', 'rayjandom', *common_opts) exit_code, output, errput = svntest.main.run_command( svntest.main.svn_binary, None, True, 'co', sbox.repo_url, wc_dir, -'--username', 'jconstant', '--non-interactive', -'--config-dir', config_dir) +'--username', 'jconstant', '--non-interactive', *common_opts) # Checkout with jrandom which should fail since we do not provide # a password and the above cached password belongs to jconstant expected_err = ["authorization failed: Could not authenticate to server:"] exit_code, output, errput = svntest.main.run_command( svntest.main.svn_binary, expected_err, True, 'co', sbox.repo_url, wc_dir, -'--username', 'jrandom', '--non-interactive', '--config-dir', config_dir) +'--username', 'jrandom', '--non-interactive', *common_opts) def basic_add_svn_format_file(sbox): 'test add --parents .svn/format' Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py?rev=1897919=1897918=1897919=diff == --- subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py (original) +++ subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py Wed Feb 9 20:53:05 2022 @@ -793,6 +793,16 @@ def copy_trust(dst_cfgdir, src_cfgdir): for f in os.listdir(src_ssl_dir): shutil.copy(os.path.join(src_ssl_dir, f), os.path.join(dst_ssl_dir, f)) +def _with_wc_format_version(args): + if '--wc-format-version' in args: +return args + non_opt_args = [a for a in args if not str(a).startswith('-')] + if non_opt_args: +subcommand = non_opt_args[0] +if subcommand in ['co', 'checkout', 'upgrade']: + return args + ('--compatible-version', options.wc_format_version) + return args + def _with_config_dir(args): if '--config-dir' in args: return args @@ -828,7 +838,7 @@ def run_svn(error_expected, *varargs): you're just checking that something does/doesn't come out of stdout/stderr, you might want to use actions.run_and_verify_svn().""" return run_command(svn_binary, error_expected, False, -
svn commit: r1897907 - in /subversion/branches/multi-wc-format/subversion/tests: libsvn_client/client-test.c libsvn_client/conflicts-test.c libsvn_wc/db-test.c libsvn_wc/entries-compat.c libsvn_wc/uti
Author: julianfoad Date: Wed Feb 9 14:47:59 2022 New Revision: 1897907 URL: http://svn.apache.org/viewvc?rev=1897907=rev Log: On the 'multi-wc-format' branch: C tests use '--wc-format-version' option. This patch uses the passed in '--wc-format-version' option value when creating working copies, throughout the C tests. * subversion/tests/libsvn_client/client-test.c, subversion/tests/libsvn_client/conflicts-test.c, subversion/tests/libsvn_wc/db-test.c, subversion/tests/libsvn_wc/entries-compat.c, subversion/tests/libsvn_wc/wc-queries-test.c (create_*, test_*, test_funcs): Pass wc-format-version from test opts through to WC creation. * subversion/tests/libsvn_wc/utils.h, subversion/tests/libsvn_wc/utils.c (svn_test__create_fake_wc): Pass wc-format-version through to WC creation. Modified: subversion/branches/multi-wc-format/subversion/tests/libsvn_client/client-test.c subversion/branches/multi-wc-format/subversion/tests/libsvn_client/conflicts-test.c subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/db-test.c subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/entries-compat.c subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/utils.c subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/utils.h subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/wc-queries-test.c Modified: subversion/branches/multi-wc-format/subversion/tests/libsvn_client/client-test.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/libsvn_client/client-test.c?rev=1897907=1897906=1897907=diff == --- subversion/branches/multi-wc-format/subversion/tests/libsvn_client/client-test.c (original) +++ subversion/branches/multi-wc-format/subversion/tests/libsvn_client/client-test.c Wed Feb 9 14:47:59 2022 @@ -389,9 +389,10 @@ test_patch(const svn_test_opts_t *opts, rev.kind = svn_opt_revision_head; peg_rev.kind = svn_opt_revision_unspecified; SVN_ERR(svn_client_create_context(, pool)); - SVN_ERR(svn_client_checkout3(NULL, repos_url, wc_path, + SVN_ERR(svn_client_checkout4(NULL, repos_url, wc_path, _rev, , svn_depth_infinity, - TRUE, FALSE, ctx, pool)); + TRUE, FALSE, + opts->wc_format_version, ctx, pool)); /* Create the patch file. */ patch_file_path = svn_dirent_join_many( @@ -463,14 +464,15 @@ test_wc_add_scenarios(const svn_test_opt peg_rev.kind = svn_opt_revision_unspecified; SVN_ERR(svn_client_create_context(, pool)); /* Checkout greek tree as wc_path */ - SVN_ERR(svn_client_checkout3(NULL, repos_url, wc_path, _rev, , - svn_depth_infinity, FALSE, FALSE, ctx, pool)); + SVN_ERR(svn_client_checkout4(NULL, repos_url, wc_path, _rev, , + svn_depth_infinity, FALSE, FALSE, + opts->wc_format_version, ctx, pool)); /* Now checkout again as wc_path/NEW */ new_dir_path = svn_dirent_join(wc_path, "NEW", pool); - SVN_ERR(svn_client_checkout3(NULL, repos_url, new_dir_path, _rev, , + SVN_ERR(svn_client_checkout4(NULL, repos_url, new_dir_path, _rev, , svn_depth_infinity, FALSE, FALSE, - ctx, pool)); + opts->wc_format_version, ctx, pool)); ex_dir_path = svn_dirent_join(wc_path, "NEW_add", pool); ex2_dir_path = svn_dirent_join(wc_path, "NEW_add2", pool); @@ -627,9 +629,10 @@ test_16k_add(const svn_test_opts_t *opts rev.kind = svn_opt_revision_head; peg_rev.kind = svn_opt_revision_unspecified; SVN_ERR(svn_client_create_context(, pool)); - SVN_ERR(svn_client_checkout3(NULL, repos_url, wc_path, + SVN_ERR(svn_client_checkout4(NULL, repos_url, wc_path, _rev, , svn_depth_infinity, - TRUE, FALSE, ctx, pool)); + TRUE, FALSE, + opts->wc_format_version, ctx, pool)); for (i = 0; i < 16384; i++) { @@ -757,8 +760,10 @@ test_foreign_repos_copy(const svn_test_o peg_rev.kind = svn_opt_revision_unspecified; SVN_ERR(svn_client_create_context(, pool)); /* Checkout greek tree as wc_path */ - SVN_ERR(svn_client_checkout3(NULL, repos_url, wc_path, _rev, , - svn_depth_infinity, FALSE, FALSE, ctx, pool)); + SVN_ERR(svn_client_checkout4(NULL, repos_url, wc_path, _rev, , + svn_depth_infinity, + FALSE, FALSE, + opts->wc_format_version, ctx, pool)); SVN_ERR(svn_client__ra_session_from_path2(_session, , repos2_url, NULL, _rev, , @@ -822,12 +82
svn commit: r1897906 - in /subversion/branches/multi-wc-format: ./ build/ subversion/include/private/ subversion/libsvn_wc/ subversion/tests/ subversion/tests/cmdline/svntest/
Author: julianfoad Date: Wed Feb 9 13:28:39 2022 New Revision: 1897906 URL: http://svn.apache.org/viewvc?rev=1897906=rev Log: On the 'multi-wc-format' branch: test suite now takes '--wc-format-version'. This patch changes the test suite option from '--wc-format' accepting a WC format number (such as 31), to a'--wc-format-version' accepting a version string like '1.14.0'. * subversion/include/private/svn_wc_private.h, subversion/libsvn_wc/upgrade.c (svn_wc__is_supported_format_version, svn_wc__max_supported_format_version, svn_wc__min_supported_format_version): New functions. * build/run_tests.py (TestHarness): Update accordingly. * Makefile.in (check): Update accordingly. * subversion/tests/cmdline/svntest/main.py (SVN_WC__VERSION, SVN_WC__SUPPORTED_VERSION): Delete. (svn_wc__is_supported_format_version, svn_wc__max_supported_format_version, svn_wc__min_supported_format_version): New functions. (TestSpawningThread.run_one, _create_parser, parse_options): Update accordingly. * subversion/tests/svn_test.h, subversion/tests/svn_test_main.c (svn_test_opts_t, test_options_e, apr_getopt_option_t, svn_test_main): Update accordingly. Modified: subversion/branches/multi-wc-format/Makefile.in subversion/branches/multi-wc-format/build/run_tests.py subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py subversion/branches/multi-wc-format/subversion/tests/svn_test.h subversion/branches/multi-wc-format/subversion/tests/svn_test_main.c Modified: subversion/branches/multi-wc-format/Makefile.in URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/Makefile.in?rev=1897906=1897905=1897906=diff == --- subversion/branches/multi-wc-format/Makefile.in (original) +++ subversion/branches/multi-wc-format/Makefile.in Wed Feb 9 13:28:39 2022 @@ -576,8 +576,8 @@ check: bin @TRANSFORM_LIBTOOL_SCRIPTS@ $ if test "$(SERVER_MINOR_VERSION)" != ""; then \ flags="--server-minor-version $(SERVER_MINOR_VERSION) $$flags"; \ fi;\ - if test "$(WC_FORMAT)" != ""; then \ - flags="--wc-format $(WC_FORMAT) $$flags";\ + if test "$(WC_FORMAT_VERSION)" != ""; then \ + flags="--wc-format-version $(WC_FORMAT_VERSION) $$flags";\ fi;\ if test "$(ENABLE_SASL)" != ""; then \ flags="--enable-sasl $$flags"; \ Modified: subversion/branches/multi-wc-format/build/run_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build/run_tests.py?rev=1897906=1897905=1897906=diff == --- subversion/branches/multi-wc-format/build/run_tests.py (original) +++ subversion/branches/multi-wc-format/build/run_tests.py Wed Feb 9 13:28:39 2022 @@ -29,7 +29,7 @@ [--url=] [--http-library=] [--enable-sasl] [--fs-type=] [--fsfs-packing] [--fsfs-sharding=] [--list] [--milestone-filter=] [--mode-filter=] -[--server-minor-version=] [--wc-format=] +[--server-minor-version=] [--wc-format-version=] [--http-proxy=:] [--httpd-version=] [--httpd-whitelist=] [--config-file=] [--ssl-cert=] @@ -258,8 +258,8 @@ class TestHarness: if self.opts.server_minor_version is not None: cmdline.append('--server-minor-version=%d' % self.opts.server_minor_version) -if self.opts.wc_format is not None: - cmdline.append('--wc-format=%d' % self.opts.wc_format) +if self.opts.wc_format_version is not None: + cmdline.append('--wc-format-version=%s' % self.opts.wc_format_version) if self.opts.mode_filter is not None: cmdline.append('--mode-filter=' + self.opts.mode_filter) if self.opts.parallel is not None: @@ -295,8 +295,8 @@ class TestHarness: cmdline.append('--fsfs-version=%d' % self.opts.fsfs_version) if self.opts.server_minor_version is not None: cmdline.append('--server-minor-version=%d' % self.opts.server_minor_version) -if self.opts.wc_format is not None: - cmdline.append('--wc-format=%d' % self.opts.wc_format) +if self.opts.wc_format_version is not None: + cmdline.append('--wc-format-version=%s' % self.opts.wc_format_version) if self.opts.dump_
svn commit: r1897893 - in /subversion/branches/multi-wc-format: Makefile.in build.conf build/run_tests.py subversion/tests/cmdline/svntest/main.py subversion/tests/svn_test.h subversion/tests/svn_test
Author: julianfoad Date: Wed Feb 9 10:16:50 2022 New Revision: 1897893 URL: http://svn.apache.org/viewvc?rev=1897893=rev Log: On the 'multi-wc-format' branch: add test suite '--wc-format' option. This patch just adds the option parsing; it does not yet use the option value when creating working copies. The '--wc-format' option accepts a WC format number (such as 31), rather than a version string like '1.14.0', in this implementation. * build.conf Link all C tests with libsvn_wc, so the option parser can read the minimum and maximum supported formats. * build/run_tests.py (TestHarness): Add '--wc-format' option and pass it through to the test programs. * Makefile.in (check): Add 'WC_FORMAT' variable and pass it to test suite '--wc-format' option. * subversion/tests/cmdline/svntest/main.py (SVN_WC__VERSION, SVN_WC__SUPPORTED_VERSION): New constants. (TestSpawningThread.run_one): Pass through the wc-format option. (_create_parser, parse_options): Add the '--wc-format' option. * subversion/tests/svn_test.h, subversion/tests/svn_test_main.c (svn_test_opts_t, test_options_e, apr_getopt_option_t, svn_test_main): Add the '--wc-format' option. Modified: subversion/branches/multi-wc-format/Makefile.in subversion/branches/multi-wc-format/build.conf subversion/branches/multi-wc-format/build/run_tests.py subversion/branches/multi-wc-format/subversion/tests/cmdline/svntest/main.py subversion/branches/multi-wc-format/subversion/tests/svn_test.h subversion/branches/multi-wc-format/subversion/tests/svn_test_main.c Modified: subversion/branches/multi-wc-format/Makefile.in URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/Makefile.in?rev=1897893=1897892=1897893=diff == --- subversion/branches/multi-wc-format/Makefile.in (original) +++ subversion/branches/multi-wc-format/Makefile.in Wed Feb 9 10:16:50 2022 @@ -576,6 +576,9 @@ check: bin @TRANSFORM_LIBTOOL_SCRIPTS@ $ if test "$(SERVER_MINOR_VERSION)" != ""; then \ flags="--server-minor-version $(SERVER_MINOR_VERSION) $$flags"; \ fi;\ + if test "$(WC_FORMAT)" != ""; then \ + flags="--wc-format $(WC_FORMAT) $$flags";\ + fi;\ if test "$(ENABLE_SASL)" != ""; then \ flags="--enable-sasl $$flags"; \ fi;\ Modified: subversion/branches/multi-wc-format/build.conf URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/build.conf?rev=1897893=1897892=1897893=diff == --- subversion/branches/multi-wc-format/build.conf (original) +++ subversion/branches/multi-wc-format/build.conf Wed Feb 9 10:16:50 2022 @@ -768,7 +768,7 @@ link-cmd = $(LINK_SVNXX_TEST) type = lib path = subversion/tests install = test -libs = libsvn_repos libsvn_fs libsvn_delta libsvn_subr aprutil apriconv apr +libs = libsvn_repos libsvn_fs libsvn_delta libsvn_wc libsvn_subr aprutil apriconv apr msvc-static = yes undefined-lib-symbols = yes @@ -781,7 +781,7 @@ type = exe path = subversion/tests/libsvn_fs_base sources = fs-base-test.c install = bdb-test -libs = libsvn_test libsvn_fs libsvn_fs_base libsvn_delta +libs = libsvn_test libsvn_wc libsvn_fs libsvn_fs_base libsvn_delta libsvn_fs_util libsvn_subr apriconv apr msvc-force-static = yes @@ -791,7 +791,7 @@ type = exe path = subversion/tests/libsvn_fs_base sources = strings-reps-test.c install = bdb-test -libs = libsvn_test libsvn_fs libsvn_fs_base libsvn_delta +libs = libsvn_test libsvn_wc libsvn_fs libsvn_fs_base libsvn_delta libsvn_subr apriconv apr msvc-force-static = yes @@ -801,7 +801,7 @@ type = exe path = subversion/tests/libsvn_fs_base sources = changes-test.c install = bdb-test -libs = libsvn_test libsvn_fs libsvn_fs_base libsvn_delta +libs = libsvn_test libsvn_wc libsvn_fs libsvn_fs_base libsvn_delta libsvn_subr apriconv apr msvc-force-static = yes @@ -813,7 +813,7 @@ type = exe path = subversion/tests/libsvn_fs_fs sources = fs-fs-pack-test.c install = test -libs = libsvn_test libsvn_fs libsvn_fs_fs libsvn_delta +libs = libsvn_test libsvn_wc libsvn_fs libsvn_fs_fs libsvn_delta libsvn_subr apriconv apr msvc-force-static = yes @@ -823,7 +823,7 @@ type = exe path = subversion/tests/libsvn_fs_fs sources = fs-fs-fuzzy-test.c install = sub-test -libs = libsvn_test libsvn_fs libsvn_fs_fs libsvn_delta +libs = libsvn_test libsvn_wc lib
svn commit: r1897891 - in /subversion/branches/multi-wc-format/subversion: include/private/svn_wc_private.h libsvn_wc/upgrade.c
Author: julianfoad Date: Wed Feb 9 09:55:07 2022 New Revision: 1897891 URL: http://svn.apache.org/viewvc?rev=1897891=rev Log: On the 'multi-wc-format' branch: add supported-format query functions. * subversion/include/private/svn_wc_private.h, subversion/libsvn_wc/upgrade.c (svn_wc__is_supported_format, svn_wc__max_supported_format, svn_wc__min_supported_format): New. Modified: subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c Modified: subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h?rev=1897891=1897890=1897891=diff == --- subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h (original) +++ subversion/branches/multi-wc-format/subversion/include/private/svn_wc_private.h Wed Feb 9 09:55:07 2022 @@ -2193,6 +2193,24 @@ svn_wc__format_from_version(int *format, apr_pool_t *scratch_pool); /** + * Return true iff @a format is a supported format. + */ +svn_boolean_t +svn_wc__is_supported_format(int format); + +/** + * Return the highest WC format supported by this client. + */ +int +svn_wc__max_supported_format(void); + +/** + * Return the lowest WC format supported by this client. + */ +int +svn_wc__min_supported_format(void); + +/** * Set @a format to the format of the nearest parent working copy root of * @a local_abspath in @a wc_ctx, or to the oldest format of any root stored * there. If @a wc_ctx is empty, return the newset supported format. Modified: subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c?rev=1897891=1897890=1897891=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c Wed Feb 9 09:55:07 2022 @@ -1680,6 +1680,24 @@ svn_wc__format_from_version(int *format, return SVN_NO_ERROR; } +svn_boolean_t +svn_wc__is_supported_format(int format) +{ + return format >= SVN_WC__SUPPORTED_VERSION && format <= SVN_WC__VERSION; +} + +int +svn_wc__max_supported_format(void) +{ + return SVN_WC__VERSION; +} + +int +svn_wc__min_supported_format(void) +{ + return SVN_WC__SUPPORTED_VERSION; +} + svn_error_t * svn_wc__upgrade_sdb(int *result_format, const char *wcroot_abspath,
svn commit: r1897766 - /subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/wc-queries-test.c
Author: julianfoad Date: Fri Feb 4 13:43:07 2022 New Revision: 1897766 URL: http://svn.apache.org/viewvc?rev=1897766=rev Log: On the 'multi-wc-format' branch: correct a test, to create current WC format. * subversion/tests/libsvn_wc/wc-queries-test.c (schema_statements): Include STMT_UPGRADE_TO_32. Modified: subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/wc-queries-test.c Modified: subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/wc-queries-test.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/wc-queries-test.c?rev=1897766=1897765=1897766=diff == --- subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/wc-queries-test.c (original) +++ subversion/branches/multi-wc-format/subversion/tests/libsvn_wc/wc-queries-test.c Fri Feb 4 13:43:07 2022 @@ -70,6 +70,7 @@ static const int schema_statements[] = { /* Usual tables */ STMT_CREATE_SCHEMA, + STMT_UPGRADE_TO_32, STMT_INSTALL_SCHEMA_STATISTICS, /* Memory tables */ STMT_CREATE_TARGETS_LIST,
svn commit: r1897714 - /subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql
Author: julianfoad Date: Thu Feb 3 10:00:41 2022 New Revision: 1897714 URL: http://svn.apache.org/viewvc?rev=1897714=rev Log: On the 'multi-wc-format' branch: improve comments. * subversion/libsvn_wc/wc-metadata.sql (STMT_CREATE_SCHEMA): improve comments. Modified: subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql Modified: subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql?rev=1897714=1897713=1897714=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql Thu Feb 3 10:00:41 2022 @@ -39,7 +39,16 @@ * "base-deleted" -- node represents a delete of a BASE node */ -/* One big list of statements to create our (current) schema. */ +/* One big list of statements to create our initial schema. + + STMT_CREATE_SCHEMA creates the schema for the minimum WC format + supported by the client (SVN_WC__SUPPORTED_VERSION). + + When we're creating a new working copy, we first execute + STMT_CREATE_SCHEMA, and then use the normal WC upgrade code (using + STMT_UPGRADE_TO_xx) to bring the schema up to any higher requested + format. + */ -- STMT_CREATE_SCHEMA /* - */ @@ -562,9 +571,7 @@ CREATE UNIQUE INDEX I_EXTERNALS_DEFINED local_relpath); -/* When we're creating a new working copy, the default schema creates - the earliest supported format. The normal WC upgrade code is used - to bring the format up to SVN_WC__VERSION. */ +/* Identify the WC format corresponding to the schema we have created. */ PRAGMA user_version = -- define: SVN_WC__SUPPORTED_VERSION ;
svn commit: r1897698 - in /subversion/branches/multi-wc-format/subversion/libsvn_wc: upgrade.c wc-metadata.sql wc.h
Author: julianfoad Date: Wed Feb 2 14:09:07 2022 New Revision: 1897698 URL: http://svn.apache.org/viewvc?rev=1897698=rev Log: On the 'multi-wc-format' branch: include a place-holder format bump. This patch merely removes the compile-time conditional around the format bump. This resolves a compilation error and also makes it easier to merge with a branch that includes a format bump (such as the 'pristines-on-demand' branch). The format bump now included is a no-op. The format number increases from 31 to 32 but nothing about the format is changed, and the client can work with a WC in either of those formats. This format bump is intended as a place-holder for some real format change that will be made afterwards. * subversion/libsvn_wc/wc.h (SVN_WC__VERSION): Remove '#ifdef SVN_TEST_MULTI_WC_FORMAT'; bump to 32 unconditionally. * subversion/libsvn_wc/upgrade.c (bump_to_32, svn_wc__version_string_from_format, svn_wc__update_schema): Remove '#ifdef SVN_TEST_MULTI_WC_FORMAT'. * subversion/libsvn_wc/wc-metadata.sql Remove '#ifdef SVN_TEST_MULTI_WC_FORMAT', resolving a compile error. Modified: subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql subversion/branches/multi-wc-format/subversion/libsvn_wc/wc.h Modified: subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c?rev=1897698=1897697=1897698=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_wc/upgrade.c Wed Feb 2 14:09:07 2022 @@ -1426,7 +1426,6 @@ bump_to_31(void *baton, return SVN_NO_ERROR; } -#ifdef SVN_TEST_MULTI_WC_FORMAT static svn_error_t * bump_to_32(void *baton, svn_sqlite__db_t *sdb, @@ -1435,7 +1434,6 @@ bump_to_32(void *baton, SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_UPGRADE_TO_32)); return SVN_NO_ERROR; } -#endif static svn_error_t * upgrade_apply_dav_cache(svn_sqlite__db_t *sdb, @@ -1638,9 +1636,7 @@ svn_wc__version_string_from_format(int w case SVN_WC__WC_NG_VERSION: return "1.7"; case 29: return "1.7"; case 31: return "1.8"; -#ifdef SVN_TEST_MULTI_WC_FORMAT case 32: return "1.15"; -#endif } return _("(unreleased development version)"); } @@ -1802,9 +1798,7 @@ svn_wc__update_schema(int *result_format { UPDATE_TO_FORMAT(30); UPDATE_TO_FORMAT(31); -#ifdef SVN_TEST_MULTI_WC_FORMAT UPDATE_TO_FORMAT(32); -#endif /* ### future bumps go here. */ #if 0 Modified: subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql?rev=1897698=1897697=1897698=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_wc/wc-metadata.sql Wed Feb 2 14:09:07 2022 @@ -702,10 +702,8 @@ WHERE l.op_depth = 0 /* - */ /* Format 32 */ -#ifdef SVN_TEST_MULTI_WC_FORMAT -- STMT_UPGRADE_TO_32 PRAGMA user_version = 32; -#endif /* - */ Modified: subversion/branches/multi-wc-format/subversion/libsvn_wc/wc.h URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_wc/wc.h?rev=1897698=1897697=1897698=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_wc/wc.h (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_wc/wc.h Wed Feb 2 14:09:07 2022 @@ -166,11 +166,7 @@ extern "C" { */ /* The default WC version created by the client. */ -#ifdef SVN_TEST_MULTI_WC_FORMAT -# define SVN_WC__VERSION 32 -#else -# define SVN_WC__VERSION 31 -#endif +#define SVN_WC__VERSION 32 /* The minimum WC version supported by the client. IMPORTANT: Update the implementation of svn_client_supported_wc_version()
svn commit: r1897695 - in /subversion/branches/pristines-on-demand: ./ build/ subversion/bindings/swig/python/tests/ subversion/libsvn_client/ subversion/libsvn_ra_svn/ subversion/libsvn_repos/ subver
Author: julianfoad Date: Wed Feb 2 13:04:31 2022 New Revision: 1897695 URL: http://svn.apache.org/viewvc?rev=1897695=rev Log: On the 'pristines-on-demand' branch: sync with trunk@1897694. Modified: subversion/branches/pristines-on-demand/ (props changed) subversion/branches/pristines-on-demand/INSTALL subversion/branches/pristines-on-demand/NOTICE subversion/branches/pristines-on-demand/build/run_tests.py subversion/branches/pristines-on-demand/subversion/bindings/swig/python/tests/fs.py subversion/branches/pristines-on-demand/subversion/libsvn_client/conflicts.c subversion/branches/pristines-on-demand/subversion/libsvn_client/merge.c subversion/branches/pristines-on-demand/subversion/libsvn_ra_svn/marshal.c subversion/branches/pristines-on-demand/subversion/libsvn_repos/authz.c subversion/branches/pristines-on-demand/subversion/libsvn_repos/reporter.c subversion/branches/pristines-on-demand/subversion/libsvn_subr/version.c subversion/branches/pristines-on-demand/subversion/libsvn_wc/update_editor.c subversion/branches/pristines-on-demand/subversion/po/it.po subversion/branches/pristines-on-demand/subversion/svn/info-cmd.c subversion/branches/pristines-on-demand/subversion/svn/shelf-cmd.c subversion/branches/pristines-on-demand/subversion/svn/shelf2-cmd.c subversion/branches/pristines-on-demand/subversion/svnadmin/svnadmin.c subversion/branches/pristines-on-demand/subversion/tests/cmdline/basic_tests.py subversion/branches/pristines-on-demand/subversion/tests/cmdline/log_tests.py subversion/branches/pristines-on-demand/subversion/tests/cmdline/pegrev_parse_tests.py subversion/branches/pristines-on-demand/subversion/tests/cmdline/svntest/actions.py subversion/branches/pristines-on-demand/subversion/tests/cmdline/svntest/main.py subversion/branches/pristines-on-demand/subversion/tests/libsvn_diff/diff-diff3-test.c subversion/branches/pristines-on-demand/tools/client-side/bash_completion subversion/branches/pristines-on-demand/tools/dev/unix-build/Makefile.svn Propchange: subversion/branches/pristines-on-demand/ -- Merged /subversion/trunk:r1892643-1897694 Modified: subversion/branches/pristines-on-demand/INSTALL URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand/INSTALL?rev=1897695=1897694=1897695=diff == --- subversion/branches/pristines-on-demand/INSTALL (original) +++ subversion/branches/pristines-on-demand/INSTALL Wed Feb 2 13:04:31 2022 @@ -1034,6 +1034,12 @@ II. INSTALLATION Note that you'd make sure to define ZLIB_WINAPI in the ZLib config header and move the lib-file into the zlib root-directory. + Please note that you MUST NOT build ZLib with the included assembler + optimized code. It is known to be buggy, see for example the discussion + https://svn.haxx.se/dev/archive-2013-10/0109.shtml. + This means that you must not define ASMV or ASMINF. Note that the VS + projects in contrib\visualstudio define these in the Debug configuration. + Apache Serf ### Section about Apache Serf might be required/useful to add. @@ -1445,7 +1451,7 @@ IV. PLATFORM-SPECIFIC ISSUES And there's an item about this in the Subversion FAQ: - https://subversion.apache.org/faq.html#windows-xp-server + https://subversion.apache.org/faq.html#windows-xp-server The only known workaround for now is to update to Windows XP SP1 (or higher). Modified: subversion/branches/pristines-on-demand/NOTICE URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand/NOTICE?rev=1897695=1897694=1897695=diff == --- subversion/branches/pristines-on-demand/NOTICE (original) +++ subversion/branches/pristines-on-demand/NOTICE Wed Feb 2 13:04:31 2022 @@ -1,5 +1,5 @@ Apache Subversion -Copyright 2021 The Apache Software Foundation +Copyright 2022 The Apache Software Foundation This product includes software developed by many people, and distributed under Contributor License Agreements to The Apache Software Foundation Modified: subversion/branches/pristines-on-demand/build/run_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand/build/run_tests.py?rev=1897695=1897694=1897695=diff == --- subversion/branches/pristines-on-demand/build/run_tests.py (original) +++ subversion/branches/pristines-on-demand/build/run_tests.py Wed Feb 2 13:04:31 2022 @@ -798,10 +798,12 @@ class TestHarness: # ### Even if failure==1 it could be that the test didn't run at all. if test_failed and test_failed != 1: if self.log: -log.write('FAIL: %s: Unknown test
svn commit: r1897294 - /subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c
Author: julianfoad Date: Fri Jan 21 12:02:53 2022 New Revision: 1897294 URL: http://svn.apache.org/viewvc?rev=1897294=rev Log: On the 'pristines-on-demand' branch: (textbase_walk_cb): Add a doc string. Modified: subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c Modified: subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c?rev=1897294=1897293=1897294=diff == --- subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c (original) +++ subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c Fri Jan 21 12:02:53 2022 @@ -452,7 +452,14 @@ typedef struct textbase_sync_baton_t void *hydrate_baton; } textbase_sync_baton_t; -/* Implements svn_wc__db_textbase_walk_cb_t. */ +/* Decide whether the text base should be referenced (or "pinned") + * for the WC node {LOCAL_ABSPATH, OP_DEPTH}. + * + * The node's text base should be referenced if either + * - the node is locally deleted or replaced + * - the node's text is locally modified + * + * Implements svn_wc__db_textbase_walk_cb_t. */ static svn_error_t * textbase_walk_cb(svn_boolean_t *referenced_p, void *baton,
svn commit: r1897292 - /subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c
Author: julianfoad Date: Fri Jan 21 11:41:32 2022 New Revision: 1897292 URL: http://svn.apache.org/viewvc?rev=1897292=rev Log: On the 'pristines-on-demand' branch: source code hygiene. (compare_and_verify): Correct misleading source code indentation. Modified: subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c Modified: subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c?rev=1897292=1897291=1897292=diff == --- subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c (original) +++ subversion/branches/pristines-on-demand/subversion/libsvn_wc/textbase.c Fri Jan 21 11:41:32 2022 @@ -117,14 +117,14 @@ compare_and_verify(svn_boolean_t *modifi else pristine_eol_str = eol_str; -/* Wrap file stream to detranslate into normal form, - * "repairing" the EOL style if it is inconsistent. */ -v_stream = svn_subst_stream_translated(v_stream, - pristine_eol_str, - TRUE /* repair */, - keywords, - FALSE /* expand */, - scratch_pool); + /* Wrap file stream to detranslate into normal form, + * "repairing" the EOL style if it is inconsistent. */ + v_stream = svn_subst_stream_translated(v_stream, + pristine_eol_str, + TRUE /* repair */, + keywords, + FALSE /* expand */, + scratch_pool); } }
svn commit: r1897291 - /subversion/branches/pristines-on-demand/subversion/libsvn_client/commit.c
Author: julianfoad Date: Fri Jan 21 11:37:02 2022 New Revision: 1897291 URL: http://svn.apache.org/viewvc?rev=1897291=rev Log: On the 'pristines-on-demand' branch: on commit, send full text if pristine missing. (svn_client_commit6): Don't hydrate the pristines before commit. Modified: subversion/branches/pristines-on-demand/subversion/libsvn_client/commit.c Modified: subversion/branches/pristines-on-demand/subversion/libsvn_client/commit.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand/subversion/libsvn_client/commit.c?rev=1897291=1897290=1897291=diff == --- subversion/branches/pristines-on-demand/subversion/libsvn_client/commit.c (original) +++ subversion/branches/pristines-on-demand/subversion/libsvn_client/commit.c Fri Jan 21 11:37:02 2022 @@ -729,7 +729,7 @@ svn_client_commit6(const apr_array_heade goto cleanup; cmt_err = svn_error_trace( -svn_client__textbase_sync(lock_root, TRUE, TRUE, +svn_client__textbase_sync(lock_root, FALSE, TRUE, ctx, iterpool)); if (cmt_err) goto cleanup;
svn commit: r1897035 - in /subversion/branches/multi-wc-format/subversion: libsvn_wc/adm_files.c tests/cmdline/upgrade_tests.py
Author: julianfoad Date: Fri Jan 14 14:16:28 2022 New Revision: 1897035 URL: http://svn.apache.org/viewvc?rev=1897035=rev Log: On the 'multi-wc-format' branch: fix two simple errors. * subversion/libsvn_wc/adm_files.c (svn_wc__internal_ensure_adm): fix bad error message parameters. * subversion/tests/cmdline/upgrade_tests.py (get_current_format): fix regex for matching '#define SVN_WC__VERSION'. Modified: subversion/branches/multi-wc-format/subversion/libsvn_wc/adm_files.c subversion/branches/multi-wc-format/subversion/tests/cmdline/upgrade_tests.py Modified: subversion/branches/multi-wc-format/subversion/libsvn_wc/adm_files.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_wc/adm_files.c?rev=1897035=1897034=1897035=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_wc/adm_files.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_wc/adm_files.c Fri Jan 14 14:16:28 2022 @@ -435,7 +435,7 @@ svn_wc__internal_ensure_adm(svn_wc__db_t return svn_error_createf( SVN_ERR_WC_OBSTRUCTED_UPDATE, NULL, _("Format %d doesn't match existing format %d in '%s'"), -target_format, present_format, db_revision, local_abspath); +target_format, present_format, local_abspath); /* ### Should we match copyfrom_revision? */ if (db_revision != revision) Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/cmdline/upgrade_tests.py?rev=1897035=1897034=1897035=diff == --- subversion/branches/multi-wc-format/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/branches/multi-wc-format/subversion/tests/cmdline/upgrade_tests.py Fri Jan 14 14:16:28 2022 @@ -57,7 +57,7 @@ wc_is_too_old_regex = (".*is too old \(f def get_current_format(): # Get current format from subversion/libsvn_wc/wc.h format_file = open(os.path.join(os.path.dirname(__file__), "..", "..", "libsvn_wc", "wc.h")).read() - return int(re.search("\n#define SVN_WC__VERSION (\d+)\n", format_file).group(1)) + return int(re.search("\n *# *define +SVN_WC__VERSION +(\d+)\n", format_file).group(1)) def replace_sbox_with_tarfile(sbox, tar_filename,
svn commit: r1897034 [7/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client-
Modified: subversion/branches/multi-wc-format/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original) +++ subversion/branches/multi-wc-format/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Fri Jan 14 14:01:45 2022 @@ -22,7 +22,10 @@ */ package org.apache.subversion.javahl; +import static org.junit.Assert.*; + import org.apache.subversion.javahl.callback.*; +import org.apache.subversion.javahl.remote.*; import org.apache.subversion.javahl.types.*; import java.io.File; @@ -34,6 +37,7 @@ import java.io.PrintWriter; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; +import java.nio.channels.ClosedChannelException; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; import java.text.ParseException; @@ -2736,7 +2740,7 @@ public class BasicTests extends SVNTests public void singleMessage(Set changedPaths, long revision, Map revprops, boolean hasChildren) -{ revList.add(new Long(revision)); } +{ revList.add(Long.valueOf(revision)); } }); long[] revisions = new long[revList.size()]; @@ -4093,6 +4097,7 @@ public class BasicTests extends SVNTests * @throws Throwable * @since 1.5 */ +@SuppressWarnings("deprecation") public void testBasicBlame() throws Throwable { OneTest thisTest = new OneTest(); @@ -4122,6 +4127,7 @@ public class BasicTests extends SVNTests * Test blame with diff options. * @since 1.9 */ +@SuppressWarnings("deprecation") public void testBlameWithDiffOptions() throws Throwable { OneTest thisTest = new OneTest(); @@ -4155,6 +4161,49 @@ public class BasicTests extends SVNTests } /** + * Test the new 1.12 blame interface on a file with null bytes. + * @throws Throwable + * @since 1.12 + */ +public void testBinaryBlame() throws Throwable +{ +final byte[] lineIn = {0x0, 0x0, 0x0, 0xa}; +final byte[] lineOut = {0x0, 0x0, 0x0}; + +OneTest thisTest = new OneTest(); +// Modify the file iota, adding null bytes. +File iota = new File(thisTest.getWorkingCopy(), "iota"); +FileOutputStream stream = new FileOutputStream(iota, false); +stream.write(lineIn); +stream.close(); +Set srcPaths = new HashSet(1); +srcPaths.add(thisTest.getWCPath()); +try { +client.username("rayjandom"); +client.commit(srcPaths, Depth.infinity, false, false, null, null, + new ConstMsg("NUL bytes written to /iota"), null); +} finally { +client.username("jrandom"); +} + +// Test the current interface +BlameRangeCallbackImpl rangeCallback = new BlameRangeCallbackImpl(); +BlameLineCallbackImpl lineCallback = new BlameLineCallbackImpl(); +client.blame(thisTest.getWCPath() + "/iota", Revision.HEAD, + Revision.getInstance(0), Revision.HEAD, + false, false, null, rangeCallback, lineCallback); +assertEquals(0, rangeCallback.startRevnum); +assertEquals(2, rangeCallback.endRevnum); +assertEquals(1, lineCallback.numberOfLines()); + +BlameLineCallbackImpl.BlameLine line = lineCallback.getBlameLine(0); +assertNotNull(line); +assertEquals(2, line.getRevision()); +assertEquals("rayjandom", line.getAuthor()); +assertArrayEquals(lineOut, line.getLine()); +} + +/** * Test commit of arbitrary revprops. * @throws Throwable * @since 1.5 @@ -4370,6 +4419,320 @@ public class BasicTests extends SVNTests assertEquals("fake", new String(revprop)); } +public static int FLAG_ECHO = 0x0001; +public static int FLAG_THROW_IN_OPEN = 0x0002; + +public enum Actions +{ +READ_CLIENT,// Read a request from SVN client +EMUL_SERVER,// Emulate server response +WAIT_TUNNEL,// Wait for tunnel to be closed +}; + +public static class ScriptItem +{ +Actions action; +String value; + +ScriptItem(Actions action, String value) +{ +this.action = action; +this.value = value; +} +} + +private static class TestTunnelAgent extends Thread +implements TunnelAgent +{ +ScriptItem[] script; +int flags; +
svn commit: r1897034 [34/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svncheck-bindings.sh URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svncheck-bindings.sh?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svncheck-bindings.sh (original) +++ subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svncheck-bindings.sh Fri Jan 14 14:01:45 2022 @@ -27,6 +27,7 @@ branch="${url##*/}" export MALLOC_OPTIONS=S (cd .. && gmake BRANCH="$branch" THREADING="no" JAVA="no" svn-check-bindings) grep -q "^Result: PASS$" tests.log.bindings.pl || exit 1 -grep -q "^OK$" tests.log.bindings.py || exit 1 +grep -q "^OK$" tests.log.bindings.py || \ + grep -q "^OK (skipped=[0-9]" tests.log.bindings.py || exit 1 grep -q ", 0 failures, 0 errors" tests.log.bindings.rb || exit 1 exit 0 Modified: subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svncheck.sh URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svncheck.sh?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svncheck.sh (original) +++ subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svncheck.sh Fri Jan 14 14:01:45 2022 @@ -26,7 +26,7 @@ url="$(svn info --show-item url)" branch="${url##*/}" export MALLOC_OPTIONS=S (cd .. && gmake BRANCH="$branch" PARALLEL="4" THREADING="no" JAVA="no" \ -EXCLUSIVE_WC_LOCKS=1 \ +EXCLUSIVE_WC_LOCKS=1 SVN_CHECK_FS_BACKENDS=fsfs \ svn-check-local \ svn-check-svn \ svn-check-neon \ Modified: subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svnclean.sh URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svnclean.sh?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svnclean.sh (original) +++ subversion/branches/multi-wc-format/tools/buildbot/slaves/bb-openbsd/svnclean.sh Fri Jan 14 14:01:45 2022 @@ -22,20 +22,33 @@ set -e set -x -url="$(svn info --show-item url)" -branch="${url##*/}" +if [ -d ../build/.svn ]; then + svn cleanup ../build +fi (test -h ../svn-trunk || ln -s build ../svn-trunk) for i in $(jot - 6 12); do (test -h ../svn-1.${i}.x || ln -s build ../svn-1.${i}.x) done lastchangedrev="$(svn info --show-item=last-changed-revision ../../unix-build/Makefile.svn)" +svn cleanup ../../unix-build svn update ../../unix-build newlastchangedrev="$(svn info --show-item=last-changed-revision ../../unix-build/Makefile.svn)" (test -h ../GNUmakefile || ln -s ../unix-build/Makefile.svn ../GNUmakefile) -# always rebuild svn, but only rebuild dependencies if Makefile.svn has changed -if [ "$lastchangedrev" != "$newlastchangedrev" ]; then - (cd .. && gmake BRANCH="$branch" reset clean) +if [ -d .svn ]; then + # always rebuild svn, but only rebuild deps if Makefile.svn has changed + url="$(svn info --show-item url)" + branch="${url##*/}" + if [ "$lastchangedrev" != "$newlastchangedrev" ]; then +(cd .. && gmake BRANCH="$branch" reset clean) +rm -f ../prefix/httpd/conf/httpd-svn-check-*.conf +rm -f ../prefix/httpd/conf/httpd-svn-proxy-*.conf +rm -f ../prefix/httpd/conf/httpd-svn-check-users +rm -f ../prefix/httpd/conf/httpd-svn-check-groups +rm -f ../prefix/httpd/conf/dontdothat + else +(cd .. && gmake BRANCH="$branch" svn-reset svn-bindings-reset svn-clean) + fi else - (cd .. && gmake BRANCH="$branch" svn-reset svn-bindings-reset svn-clean) + (cd .. && gmake reset clean) fi rm -f tests.log* fails.log* Modified: subversion/branches/multi-wc-format/tools/buildbot/slaves/svn-x64-macosx/setenv.sh URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/tools/buildbot/slaves/svn-x64-macosx/setenv.sh?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/tools/buildbot/slaves/svn-x64-macosx/setenv.sh (original) +++ subversion/branches/multi-wc-format/tools/buildbot/slaves/svn-x64-macosx/setenv.sh Fri Jan 14 14:01:45 2022 @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -## This script calls a helper that provides the folloing environemnt +## This script calls a helper that provides the following environment ## variables: ## ## PATH The search path Modified:
svn commit: r1897034 [32/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/tests/libsvn_client/conflicts-test.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/libsvn_client/conflicts-test.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/tests/libsvn_client/conflicts-test.c (original) +++ subversion/branches/multi-wc-format/subversion/tests/libsvn_client/conflicts-test.c Fri Jan 14 14:01:45 2022 @@ -154,7 +154,7 @@ assert_text_conflict_options(svn_client_ return SVN_NO_ERROR; } -/* +/* * The following tests verify resolution of "incoming file add vs. * local file obstruction upon merge" tree conflicts. */ @@ -170,6 +170,7 @@ static const char *deleted_file_name = " static const char *deleted_dir_name = "B"; static const char *deleted_dir_child = "lambda"; static const char *new_dir_name = "newdir"; +static const char *unversioned_file_name = "unversioned.txt"; /* File property content. */ static const char *propval_trunk = "This is a property on the trunk."; @@ -177,6 +178,8 @@ static const char *propval_branch = "Thi static const char *propval_different = "This is a different property value."; /* File content. */ +static const char *new_file_content = +"This is a new file\n"; static const char *modified_file_content = "This is a modified file\n"; static const char *modified_file_on_branch_content = @@ -185,6 +188,8 @@ static const char *added_file_on_branch_ "This is a file added on the branch\n"; static const char *modified_file_in_working_copy_content = "This is a modified file in the working copy\n"; +static const char *unversioned_file_content = +"This is an unversioned file\n"; /* A helper function which prepares a working copy for the tests below. */ static svn_error_t * @@ -477,7 +482,7 @@ test_merge_incoming_added_file_replace_a return SVN_NO_ERROR; } -/* +/* * The following tests verify resolution of "incoming dir add vs. * local dir obstruction upon merge" tree conflicts. */ @@ -1357,7 +1362,7 @@ create_wc_with_incoming_delete_file_merg } else { - /* Commit modifcation and run a merge from the trunk to the branch. */ + /* Commit modification and run a merge from the trunk to the branch. */ SVN_ERR(sbox_wc_commit(b, "")); SVN_ERR(sbox_wc_update(b, "", SVN_INVALID_REVNUM)); /* This should raise an "incoming delete vs local edit" tree conflict. */ @@ -1448,7 +1453,7 @@ test_merge_incoming_delete_file_ignore(c SVN_TEST_ASSERT(!status->file_external); SVN_TEST_ASSERT(status->moved_from_abspath == NULL); SVN_TEST_ASSERT(status->moved_to_abspath == NULL); - + SVN_ERR(svn_client_conflict_get(, sbox_wc_path(b, deleted_path), ctx, b->pool, b->pool)); @@ -1801,7 +1806,7 @@ test_update_incoming_delete_file_ignore( SVN_TEST_ASSERT(!status->file_external); SVN_TEST_ASSERT(status->moved_from_abspath == NULL); SVN_TEST_ASSERT(status->moved_to_abspath == NULL); - + SVN_ERR(svn_client_conflict_get(, sbox_wc_path(b, deleted_path), ctx, b->pool, b->pool)); @@ -2111,7 +2116,7 @@ create_wc_with_incoming_delete_dir_confl if (local_add) { const char *new_child_path; - + new_child_path = svn_relpath_join(branch_path, svn_relpath_join(deleted_dir_name, new_file_name_branch, @@ -2621,6 +2626,7 @@ test_merge_incoming_delete_vs_local_dele svn_client_conflict_option_id_t expected_opts[] = { svn_client_conflict_option_postpone, svn_client_conflict_option_accept_current_wc_state, + svn_client_conflict_option_incoming_delete_ignore, svn_client_conflict_option_incoming_delete_accept, -1 /* end of list */ }; @@ -2634,6 +2640,7 @@ test_merge_incoming_delete_vs_local_dele svn_client_conflict_option_id_t expected_opts[] = { svn_client_conflict_option_postpone, svn_client_conflict_option_accept_current_wc_state, + svn_client_conflict_option_incoming_delete_ignore, svn_client_conflict_option_incoming_delete_accept, -1 /* end of list */ }; @@ -4120,7 +4127,7 @@ create_wc_with_dir_add_vs_dir_add_update SVN_ERR(svn_io_dir_make(sbox_wc_path(b, new_file_child_path), APR_OS_DEFAULT, b->pool)); - /* Update to the HEAD revision. + /* Update to the HEAD revision. * This should raise an "incoming add vs local add" tree conflict. */ SVN_ERR(sbox_wc_update(b, "", SVN_INVALID_REVNUM)); @@ -5019,7 +5026,7 @@ test_cherry_pick_post_move_edit(const sv /* And "A1/mu" should have expected contents. */ SVN_ERR(svn_stringbuf_from_file2(,
svn commit: r1897034 [28/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/svnserve/serve.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/svnserve/serve.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/svnserve/serve.c (original) +++ subversion/branches/multi-wc-format/subversion/svnserve/serve.c Fri Jan 14 14:01:45 2022 @@ -107,15 +107,22 @@ typedef struct authz_baton_t { svn_ra_svn_conn_t *conn; } authz_baton_t; -/* svn_error_create() a new error, log_server_error() it, and - return it. */ +/* Log an error. */ static void -log_error(svn_error_t *err, server_baton_t *server) +log_error(const svn_error_t *err, server_baton_t *server) { logger__log_error(server->logger, err, server->repository, server->client_info); } +/* Log a warning. */ +static void +log_warning(const svn_error_t *err, server_baton_t *server) +{ + logger__log_warning(server->logger, err, server->repository, + server->client_info); +} + /* svn_error_create() a new error, log_server_error() it, and return it. */ static svn_error_t * @@ -264,17 +271,23 @@ canonicalize_access_file(const char **ac { if (svn_path_is_url(*access_file)) { - *access_file = svn_uri_canonicalize(*access_file, pool); + const char *canonical_url; + SVN_ERR(svn_uri_canonicalize_safe(_url, NULL, *access_file, +pool, pool)); + *access_file = canonical_url; } else if (svn_path_is_repos_relative_url(*access_file)) { const char *repos_root_url; + const char *canonical_url; SVN_ERR(svn_uri_get_file_url_from_dirent(_root_url, repos_root, pool)); SVN_ERR(svn_path_resolve_repos_relative_url(access_file, *access_file, repos_root_url, pool)); - *access_file = svn_uri_canonicalize(*access_file, pool); + SVN_ERR(svn_uri_canonicalize_safe(_url, NULL, *access_file, +pool, pool)); + *access_file = canonical_url; } else { @@ -294,7 +307,10 @@ static svn_error_t * load_authz_config(repository_t *repository, const char *repos_root, svn_config_t *cfg, - apr_pool_t *pool) + svn_repos_authz_warning_func_t warning_func, + void *warning_baton, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool) { const char *authzdb_path; const char *groupsdb_path; @@ -313,17 +329,18 @@ load_authz_config(repository_t *reposito /* Canonicalize and add the base onto the authzdb_path (if needed). */ err = canonicalize_access_file(_path, repository, - repos_root, pool); + repos_root, scratch_pool); /* Same for the groupsdb_path if it is present. */ if (groupsdb_path && !err) err = canonicalize_access_file(_path, repository, - repos_root, pool); + repos_root, scratch_pool); if (!err) -err = svn_repos_authz_read3(>authzdb, authzdb_path, +err = svn_repos_authz_read4(>authzdb, authzdb_path, groupsdb_path, TRUE, repository->repos, -pool, pool); +warning_func, warning_baton, +result_pool, scratch_pool); if (err) return svn_error_create(SVN_ERR_AUTHZ_INVALID_CONFIG, err, NULL); @@ -834,7 +851,7 @@ static svn_error_t *must_have_access(svn /* --- REPORTER COMMAND SET --- */ -/* To allow for pipelining, reporter commands have no reponses. If we +/* To allow for pipelining, reporter commands have no responses. If we * get an error, we ignore all subsequent reporter commands and return * the error finish_report, to be handled by the calling command. */ @@ -843,7 +860,7 @@ static svn_error_t *set_path(svn_ra_svn_ svn_ra_svn__list_t *params, void *baton) { report_driver_baton_t *b = baton; - const char *path, *lock_token, *depth_word; + const char *path, *lock_token, *depth_word, *canonical_relpath; svn_revnum_t rev; /* Default to infinity, for old clients that don't send depth. */ svn_depth_t depth = svn_depth_infinity; @@ -854,7 +871,9 @@ static svn_error_t *set_path(svn_ra_svn_ _word)); if (depth_word) depth = svn_depth_from_word(depth_word); - path = svn_relpath_canonicalize(path, pool); + SVN_ERR(svn_relpath_canonicalize_safe(_relpath, NULL, path, +pool, pool)); + path = canonical_relpath; if (b->from_rev
svn commit: r1897034 [36/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/tools/dist/release.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/tools/dist/release.py?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/tools/dist/release.py (original) +++ subversion/branches/multi-wc-format/tools/dist/release.py Fri Jan 14 14:01:45 2022 @@ -41,7 +41,10 @@ import sys import glob import fnmatch import shutil -import urllib2 +try: + from urllib.request import urlopen # Python 3 +except: + from urllib2 import urlopen # Python 2 import hashlib import tarfile import logging @@ -52,6 +55,7 @@ import itertools import subprocess import argparse # standard in Python 2.7 import io +import yaml import backport.status @@ -67,62 +71,33 @@ except ImportError: sys.path.remove(ezt_path) +def get_dist_metadata_file_path(): +return os.path.join(os.path.abspath(sys.path[0]), 'release-lines.yaml') + +# Read the dist metadata (about release lines) +with open(get_dist_metadata_file_path(), 'r') as stream: +dist_metadata = yaml.safe_load(stream) + # Our required / recommended release tool versions by release branch -tool_versions = { - 'trunk' : { -'autoconf' : ['2.69', - '954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969'], -'libtool' : ['2.4.6', - 'e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3'], -'swig' : ['3.0.12', - '7cf9f447ae7ed1c51722efc45e7f14418d15d7a1e143ac9f09a668999f4fc94d'], - }, - '1.11' : { -'autoconf' : ['2.69', - '954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969'], -'libtool' : ['2.4.6', - 'e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3'], -'swig' : ['3.0.12', - '7cf9f447ae7ed1c51722efc45e7f14418d15d7a1e143ac9f09a668999f4fc94d'], - }, - '1.10' : { -'autoconf' : ['2.69', - '954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969'], -'libtool' : ['2.4.6', - 'e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3'], -'swig' : ['3.0.12', - '7cf9f447ae7ed1c51722efc45e7f14418d15d7a1e143ac9f09a668999f4fc94d'], - }, - '1.9' : { -'autoconf' : ['2.69', - '954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969'], -'libtool' : ['2.4.6', - 'e3bd4d5d3d025a36c21dd6af7ea818a2afcd4dfc1ea5a17b39d7854bcd0c06e3'], -'swig' : ['2.0.12', - '65e13f22a60cecd7279c59882ff8ebe1ffe34078e85c602821a541817a4317f7'], - }, - '1.8' : { -'autoconf' : ['2.69', - '954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969'], -'libtool' : ['2.4.3', - '36b4881c1843d7585de9c66c4c3d9a067ed3a3f792bc670beba21f5a4960acdf'], -'swig' : ['2.0.9', - '586954000d297fafd7e91d1ad31089cc7e249f658889d11a44605d3662569539'], - }, -} +tool_versions = dist_metadata['tool_versions'] # The version that is our current recommended release -# ### TODO: derive this from svn_version.h; see ../../build/getversion.py -recommended_release = '1.11' +recommended_release = dist_metadata['recommended_release'] # For clean-dist, a whitelist of artifacts to keep, by version. -supported_release_lines = frozenset({"1.9", "1.10", "1.11", "1.12"}) +supported_release_lines = frozenset(dist_metadata['supported_release_lines']) +# Long-Term Support (LTS) versions +lts_release_lines = frozenset(dist_metadata['lts_release_lines']) # Some constants -repos = 'https://svn.apache.org/repos/asf/subversion' -secure_repos = 'https://svn.apache.org/repos/asf/subversion' -dist_repos = 'https://dist.apache.org/repos/dist' +svn_repos = os.getenv('SVN_RELEASE_SVN_REPOS', + 'https://svn.apache.org/repos/asf/subversion') +dist_repos = os.getenv('SVN_RELEASE_DIST_REPOS', + 'https://dist.apache.org/repos/dist') dist_dev_url = dist_repos + '/dev/subversion' dist_release_url = dist_repos + '/release/subversion' +dist_archive_url = 'https://archive.apache.org/dist/subversion' +buildbot_repos = os.getenv('SVN_RELEASE_BUILDBOT_REPOS', + 'https://svn.apache.org/repos/infra/infrastructure/buildbot/aegis/buildmaster') KEYS = 'https://people.apache.org/keys/group/subversion.asc' extns = ['zip', 'tar.gz', 'tar.bz2'] @@ -167,18 +142,6 @@ class Version(object): def is_prerelease(self): return self.pre != None -def is_recommended(self): -return self.branch == recommended_release - -def get_download_anchor(self): -if self.is_prerelease(): -return 'pre-releases' -else: -if self.is_recommended(): -return 'recommended-release' -
svn commit: r1897034 [37/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/tools/hook-scripts/mailer/mailer.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/tools/hook-scripts/mailer/mailer.py?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/tools/hook-scripts/mailer/mailer.py (original) +++ subversion/branches/multi-wc-format/tools/hook-scripts/mailer/mailer.py Fri Jan 14 14:01:45 2022 @@ -46,25 +46,21 @@ import os import sys -try: - # Python >=3.0 +if sys.hexversion >= 0x300: + PY3 = True import configparser - from urllib.parse import quote as urllib_parse_quote -except ImportError: - # Python <3.0 + from urllib.parse import quote as _url_quote +else: + PY3 = False import ConfigParser as configparser - from urllib import quote as urllib_parse_quote + from urllib import quote as _url_quote import time import subprocess -if sys.version_info[0] >= 3: - # Python >=3.0 - from io import StringIO -else: - # Python <3.0 - from cStringIO import StringIO +from io import BytesIO import smtplib import re import tempfile +import codecs # Minimal version of Subversion's bindings required _MIN_SVN_VERSION = [1, 5, 0] @@ -83,6 +79,28 @@ if _MIN_SVN_VERSION > [svn.core.SVN_VER_ % ".".join([str(x) for x in _MIN_SVN_VERSION])) sys.exit(1) +# Absorb difference between Python 2 and Python >= 3 +if PY3: + def to_bytes(x): +return x.encode('utf-8') + + def to_str(x): +return x.decode('utf-8') + + # We never use sys.stdin nor sys.stdout TextIOwrapper. + _stdin = sys.stdin.buffer + _stdout = sys.stdout.buffer +else: + # Python 2 + def to_bytes(x): +return x + + def to_str(x): +return x + + _stdin = sys.stdin + _stdout = sys.stdout + SEPARATOR = '=' * 78 @@ -101,7 +119,10 @@ def main(pool, cmd, config_fname, repos_ revision = int(cmd_args[0]) author = cmd_args[1] propname = cmd_args[2] -action = (cmd == 'propchange2' and cmd_args[3] or 'A') +if cmd == 'propchange2' and cmd_args[3]: + action = cmd_args[3] +else: + action = 'A' repos = Repository(repos_dir, revision, pool) # Override the repos revision author with the author of the propchange repos.author = author @@ -123,11 +144,11 @@ def main(pool, cmd, config_fname, repos_ else: raise UnknownSubcommand(cmd) - messenger.generate() + return messenger.generate() def remove_leading_slashes(path): - while path and path[0] == '/': + while path and path[0:1] == b'/': path = path[1:] return path @@ -158,8 +179,16 @@ class OutputBase: except ValueError: truncate_subject = 0 -if truncate_subject and len(subject) > truncate_subject: - subject = subject[:(truncate_subject - 3)] + "..." +# truncate subject as UTF-8 string. +# Note: there still exists an issue on combining characters. +if truncate_subject: + bsubject = to_bytes(subject) + if len(bsubject) > truncate_subject: +idx = truncate_subject - 2 +while b'\x80' <= bsubject[idx-1:idx] <= b'\xbf': + idx -= 1 +subject = to_str(bsubject[:idx-1]) + "..." + return subject def start(self, group, params): @@ -177,11 +206,15 @@ class OutputBase: representation.""" raise NotImplementedError - def write(self, output): + def write_binary(self, output): """Override this method. -Append the literal text string OUTPUT to the output representation.""" +Append the binary data OUTPUT to the output representation.""" raise NotImplementedError + def write(self, output): +"""Append the literal text string OUTPUT to the output representation.""" +return self.write_binary(to_bytes(output)) + def run(self, cmd): """Override this method, if the default implementation is not sufficient. Execute CMD, writing the stdout produced to the output representation.""" @@ -192,7 +225,7 @@ class OutputBase: buf = pipe_ob.stdout.read(self._CHUNKSIZE) while buf: - self.write(buf) + self.write_binary(buf) buf = pipe_ob.stdout.read(self._CHUNKSIZE) # wait on the child so we don't end up with a billion zombies @@ -234,7 +267,7 @@ class MailedOutput(OutputBase): # Return the result of splitting HDR into tokens (on space # characters), encoding (per RFC2047) each token as necessary, and # slapping 'em back to together again. -from email.Header import Header +from email.header import Header def _maybe_encode_header(hdr_token): try: @@ -246,7 +279,7 @@ class MailedOutput(OutputBase): return ' '.join(map(_maybe_encode_header, hdr.split())) def mail_headers(self, group, params): -from email import Utils +from email import utils subject = self._rfc2047_encode(self.make_subject(group, params)) from_hdr = self._rfc2047_encode(self.from_addr) @@ -265,7 +298,7 @@ class
svn commit: r1897034 [29/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/entries-dump.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/cmdline/entries-dump.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/tests/cmdline/entries-dump.c (original) +++ subversion/branches/multi-wc-format/subversion/tests/cmdline/entries-dump.c Fri Jan 14 14:01:45 2022 @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -34,6 +35,7 @@ #include "svn_pools.h" #include "svn_wc.h" #include "svn_dirent_uri.h" +#include "svn_xml.h" #include "private/svn_wc_private.h" @@ -41,14 +43,61 @@ #include "../../libsvn_wc/lock.h" static void -str_value(const char *name, const char *value) +print_prefix(void) +{ + puts("if b'' == '':\n" + " def _to_str(s):\n" + "return s\n" + "else:\n" + " def _to_str(s):\n" + "return s.decode('utf-8', 'surrogateescape')\n" + "\n" + "class Entry(object):\n" + " \"\"\"An Entry object represents one node's entry in a pre-1.6" + " .svn/entries file.\n\n" + "Similar to #svn_wc_entry_t, but not all fields are populated.\n\n" + "Entry objects are generated by the 'entries-dump'" + " test helper tool.\"\"\"\n\n" + " if b'' == '':\n" + "def set_strval(self, name, val):\n" + " self.__setattr__(name, val)\n" + " else:\n" + "def set_strval(self, name, val):\n" + " global _to_str\n" + " self.__setattr__(name, _to_str(val))\n"); +} + +static void +print_as_bytes(const char *val) +{ + printf("b'"); + while(*val) +{ + printf("\\x%02x", (unsigned int)(unsigned char)*val++); +} + printf("'"); +} + +static void +str_value(const char *name, const char *value, apr_pool_t *pool) { if (value == NULL) printf("e.%s = None\n", name); else -printf("e.%s = '%s'\n", name, value); -} +{ + svn_stringbuf_t *escaped_value = NULL; + svn_xml_escape_attr_cstring(_value, value, pool); + /* Print the human-readable value. */ + assert(NULL == strchr(escaped_value->data, '\n')); + printf("# e.%s = '%s'\n", name, escaped_value->data); + + /* Print the machine-readable value. */ + printf("e.set_strval('%s', ", name); + print_as_bytes(value); + printf(")\n"); +} +} static void int_value(const char *name, long int value) @@ -76,6 +125,7 @@ entries_dump(const char *dir_path, svn_w svn_error_t *err; svn_wc_context_t *wc_ctx = NULL; const char *dir_abspath; + apr_pool_t *iterpool = svn_pool_create(pool); SVN_ERR(svn_dirent_get_absolute(_abspath, dir_path, pool)); @@ -124,44 +174,45 @@ entries_dump(const char *dir_path, svn_w for (hi = apr_hash_first(pool, entries); hi; hi = apr_hash_next(hi)) { + svn_stringbuf_t *escaped_key; const char *key = apr_hash_this_key(hi); const svn_wc_entry_t *entry = apr_hash_this_val(hi); + svn_pool_clear(iterpool); SVN_ERR_ASSERT(strcmp(key, entry->name) == 0); - printf("e = Entry()\n"); - str_value("name", entry->name); + str_value("name", entry->name, iterpool); int_value("revision", entry->revision); - str_value("url", entry->url); - str_value("repos", entry->repos); - str_value("uuid", entry->uuid); + str_value("url", entry->url, iterpool); + str_value("repos", entry->repos, iterpool); + str_value("uuid", entry->uuid, iterpool); int_value("kind", entry->kind); int_value("schedule", entry->schedule); bool_value("copied", entry->copied); bool_value("deleted", entry->deleted); bool_value("absent", entry->absent); bool_value("incomplete", entry->incomplete); - str_value("copyfrom_url", entry->copyfrom_url); + str_value("copyfrom_url", entry->copyfrom_url, iterpool); int_value("copyfrom_rev", entry->copyfrom_rev); - str_value("conflict_old", entry->conflict_old); - str_value("conflict_new", entry->conflict_new); - str_value("conflict_wrk", entry->conflict_wrk); - str_value("prejfile", entry->prejfile); + str_value("conflict_old", entry->conflict_old, iterpool); + str_value("conflict_new", entry->conflict_new, iterpool); + str_value("conflict_wrk", entry->conflict_wrk, iterpool); + str_value("prejfile", entry->prejfile, iterpool); /* skip: text_time */ /* skip: prop_time */ /* skip: checksum */ int_value("cmt_rev", entry->cmt_rev); /* skip: cmt_date */ - str_value("cmt_author", entry->cmt_author); - str_value("lock_token", entry->lock_token); - str_value("lock_owner", entry->lock_owner); - str_value("lock_comment", entry->lock_comment); + str_value("cmt_author", entry->cmt_author, iterpool); + str_value("lock_token",
svn commit: r1897034 [26/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/mod_authz_svn/mod_authz_svn.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/mod_authz_svn/mod_authz_svn.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/mod_authz_svn/mod_authz_svn.c (original) +++ subversion/branches/multi-wc-format/subversion/mod_authz_svn/mod_authz_svn.c Fri Jan 14 14:01:45 2022 @@ -92,7 +92,7 @@ typedef struct authz_svn_config_rec { #define USE_FORCE_AUTHN 1 #define IN_SOME_AUTHN_NOTE "authz_svn-in-some-authn" #define FORCE_AUTHN_NOTE "authz_svn-force-authn" -# else +# else /* ap_some_auth_required() is busted and no viable alternative exists */ #ifndef SVN_ALLOW_BROKEN_HTTPD_AUTH # error This Apache httpd has broken auth (CVE-2015-3184) @@ -327,16 +327,17 @@ log_access_verdict(LOG_ARGS_SIGNATURE, } } -/* Log a message indiciating the ERR encountered during the request R. +/* Log a message at LOG_LEVEL indicating the ERR encountered during + * the request R. * LOG_ARGS_SIGNATURE expands as in log_access_verdict() above. * PREFIX is inserted at the start of the message. The rest of the * message is generated by combining the message for each error in the * chain of ERR, excluding for trace errors. ERR will be cleared * when finished. */ static void -log_svn_error(LOG_ARGS_SIGNATURE, - request_rec *r, const char *prefix, - svn_error_t *err, apr_pool_t *scratch_pool) +log_svn_message(LOG_ARGS_SIGNATURE, int log_level, +request_rec *r, const char *prefix, +svn_error_t *err, apr_pool_t *scratch_pool) { svn_error_t *err_pos = svn_error_purge_tracing(err); svn_stringbuf_t *buff = svn_stringbuf_create(prefix, scratch_pool); @@ -360,7 +361,7 @@ log_svn_error(LOG_ARGS_SIGNATURE, err_pos = err_pos->child; } - ap_log_rerror(LOG_ARGS_CASCADE, APLOG_ERR, + ap_log_rerror(LOG_ARGS_CASCADE, log_level, /* If it is an error code that APR can make sense of, then show it, otherwise, pass zero to avoid putting "APR does not understand this error code" in the error log. */ @@ -372,6 +373,40 @@ log_svn_error(LOG_ARGS_SIGNATURE, svn_error_clear(err); } +/* Log the error error ERR encountered during the request R. + * LOG_ARGS_SIGNATURE expands as in log_access_verdict() above. + * PREFIX is inserted at the start of the message. The rest of the + * message is generated by combining the message for each error in the + * chain of ERR, excluding for trace errors. ERR will be cleared + * when finished. */ +static APR_INLINE void +log_svn_error(LOG_ARGS_SIGNATURE, + request_rec *r, const char *prefix, + svn_error_t *err, apr_pool_t *scratch_pool) +{ + log_svn_message(LOG_ARGS_CASCADE, APLOG_ERR, + r, prefix, err, scratch_pool); +} + +/* Baton for log_authz_warning. */ +typedef struct authz_warning_baton_t +{ + request_rec *r; + const char *prefix; +} authz_warning_baton_t; + +/* Handle an authz parser warning. ERR will *not* be cleared.*/ +static APR_INLINE void +log_authz_warning(void *baton, + const svn_error_t *err, + apr_pool_t *scratch_pool) +{ + const authz_warning_baton_t *const warning_baton = baton; + log_svn_message(APLOG_MARK, APLOG_WARNING, + warning_baton->r, warning_baton->prefix, + svn_error_dup(err), scratch_pool); +} + /* Resolve *PATH into an absolute canonical URL iff *PATH is a repos-relative * URL. If *REPOS_URL is NULL convert REPOS_PATH into a file URL stored * in *REPOS_URL, if *REPOS_URL is not null REPOS_PATH is ignored. The @@ -472,8 +507,13 @@ get_access_conf(request_rec *r, authz_sv access_conf = user_data; if (access_conf == NULL) { - svn_err = svn_repos_authz_read3(_conf, access_file, + authz_warning_baton_t warning_baton; + warning_baton.r = r; + warning_baton.prefix = "mod_authz_svn: warning:"; + + svn_err = svn_repos_authz_read4(_conf, access_file, groups_file, TRUE, NULL, + log_authz_warning, _baton, r->connection->pool, scratch_pool); @@ -714,9 +754,9 @@ req_check_access(request_rec *r, * * However, if repos_path == NULL and the request requires write * access, then perform a global authz lookup. The request is - * denied if the user commiting isn't granted any access anywhere + * denied if the user committing isn't granted any access anywhere * in the repository. This is to avoid operations that involve no - * paths (commiting an empty revision, leaving a dangling + * paths (committing an empty revision, leaving a dangling *
svn commit: r1897034 [33/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/tests/libsvn_repos/authz-test.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/libsvn_repos/authz-test.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/tests/libsvn_repos/authz-test.c (original) +++ subversion/branches/multi-wc-format/subversion/tests/libsvn_repos/authz-test.c Fri Jan 14 14:01:45 2022 @@ -212,7 +212,7 @@ test_authz_parse(const svn_test_opts_t * APR_READ, APR_OS_DEFAULT, pool)); groups = svn_stream_from_aprfile2(groups_file, FALSE, pool); - SVN_ERR(svn_authz__parse(, rules, groups, pool, pool)); + SVN_ERR(svn_authz__parse(, rules, groups, NULL, NULL, pool, pool)); printf("Access check for ('%s', '%s')\n", check_user, check_repo); @@ -304,7 +304,7 @@ run_global_rights_tests(const char *cont svn_stringbuf_t *buffer = svn_stringbuf_create(contents, pool); svn_stream_t *stream = svn_stream_from_stringbuf(buffer, pool); - SVN_ERR(svn_repos_authz_parse(, stream, NULL, pool)); + SVN_ERR(svn_repos_authz_parse2(, stream, NULL, NULL, NULL, pool, pool)); for (; test_cases->repos; ++test_cases) { @@ -463,7 +463,7 @@ issue_4741_groups(apr_pool_t *pool) svn_authz_t *authz; svn_boolean_t access_granted; - SVN_ERR(svn_repos_authz_parse(, stream, NULL, pool)); + SVN_ERR(svn_repos_authz_parse2(, stream, NULL, NULL, NULL, pool, pool)); SVN_ERR(svn_repos_authz_check_access(authz, "repo", "/", "userA", svn_authz_write, _granted, @@ -481,7 +481,7 @@ issue_4741_groups(apr_pool_t *pool) static svn_error_t * reposful_reposless_stanzas_inherit(apr_pool_t *pool) { - const char rules[] = + const char rules[] = "[groups]" NL "company = user1, user2, user3" NL "customer = customer1, customer2"NL @@ -500,7 +500,7 @@ reposful_reposless_stanzas_inherit(apr_p svn_authz_t *authz; svn_boolean_t access_granted; - SVN_ERR(svn_repos_authz_parse(, stream, NULL, pool)); + SVN_ERR(svn_repos_authz_parse2(, stream, NULL, NULL, NULL, pool, pool)); SVN_ERR(svn_repos_authz_check_access(authz, "project1", "/foo", "user1", svn_authz_write | svn_authz_recursive, @@ -522,7 +522,7 @@ static struct svn_test_descriptor_t test "test svn_authz__get_global_rights"), SVN_TEST_PASS2(issue_4741_groups, "issue 4741 groups"), -SVN_TEST_XFAIL2(reposful_reposless_stanzas_inherit, +SVN_TEST_PASS2(reposful_reposless_stanzas_inherit, "[foo:/] inherits [/]"), SVN_TEST_NULL }; Modified: subversion/branches/multi-wc-format/subversion/tests/libsvn_repos/repos-test.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/libsvn_repos/repos-test.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/tests/libsvn_repos/repos-test.c (original) +++ subversion/branches/multi-wc-format/subversion/tests/libsvn_repos/repos-test.c Fri Jan 14 14:01:45 2022 @@ -1181,6 +1181,7 @@ struct check_access_tests { * as defined in TESTS. */ static svn_error_t * authz_check_access(svn_authz_t *authz_cfg, + const char *authz_contents, const struct check_access_tests *tests, apr_pool_t *pool) { @@ -1202,7 +1203,7 @@ authz_check_access(svn_authz_t *authz_cf { return svn_error_createf(SVN_ERR_TEST_FAILED, NULL, "Authz incorrectly %s %s%s access " - "to %s%s%s for user %s", + "to %s%s%s for user %s\n%s", access_granted ? "grants" : "denies", tests[i].required @@ -1217,7 +1218,8 @@ authz_check_access(svn_authz_t *authz_cf ":" : "", tests[i].path, tests[i].user ? - tests[i].user : "-"); + tests[i].user : "-", + authz_contents); } } @@ -1312,11 +1314,11 @@ authz(apr_pool_t *pool) SVN_ERR(authz_get_handle(_cfg, contents, FALSE, subpool)); /* Loop over the test array and test each case. */ - SVN_ERR(authz_check_access(authz_cfg, test_set, subpool)); + SVN_ERR(authz_check_access(authz_cfg, contents, test_set, subpool)); /* Repeat the previous test on disk */ SVN_ERR(authz_get_handle(_cfg, contents, TRUE, subpool)); -
svn commit: r1897034 [13/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/include/svn_client.h?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/include/svn_client.h (original) +++ subversion/branches/multi-wc-format/subversion/include/svn_client.h Fri Jan 14 14:01:45 2022 @@ -736,16 +736,11 @@ typedef svn_error_t *(*svn_client_get_co * @{ */ -/** Callback type used by svn_client_blame5() to notify the caller +/** Callback type used by svn_client_blame6() to notify the caller * that line @a line_no of the blamed file was last changed in @a revision * which has the revision properties @a rev_props, and that the contents were * @a line. * - * @a start_revnum and @a end_revnum contain the start and end revision - * number of the entire blame operation, as determined from the repository - * inside svn_client_blame5(). This can be useful for the blame receiver - * to format the blame output. - * * If svn_client_blame5() was called with @a include_merged_revisions set to * TRUE, @a merged_revision, @a merged_rev_props and @a merged_path will be * set, otherwise they will be NULL. @a merged_path will be set to the @@ -758,6 +753,49 @@ typedef svn_error_t *(*svn_client_get_co * will be true if the reason there is no blame information is that the line * was modified locally. In all other cases @a local_change will be false. * + * Character Encoding and Line Splitting: + * + * It is up to the client to determine the character encoding. The @a line + * content is delivered without any encoding conversion. The line splitting + * is designed to work with ASCII-compatible encodings including UTF-8. Any + * of the byte sequences LF ("\n"), CR ("\n"), CR LF ("\r\n") ends a line + * and is not included in @a line. The @a line content can include all other + * byte values including zero (ASCII NUL). + * + * @note That is how line splitting is done on the final file content, from + * which this callback is driven. It is not entirely clear whether the line + * splitting used to calculate diffs between each revision and assign a + * revision number to each line is exactly compatible with this in all cases. + * + * Blaming files that have svn:mime-type set to something other + * than text/... requires the @a ignore_mime_type flag to be set to + * true when calling the svn_client_blame6 function. + * + * @since New in 1.12. + */ +typedef svn_error_t *(*svn_client_blame_receiver4_t)( + void *baton, + apr_int64_t line_no, + svn_revnum_t revision, + apr_hash_t *rev_props, + svn_revnum_t merged_revision, + apr_hash_t *merged_rev_props, + const char *merged_path, + const svn_string_t *line, + svn_boolean_t local_change, + apr_pool_t *pool); + +/** + * Similar to #svn_client_blame_receiver4_t, but with the @a line parameter + * as a (const char*) instead of an svn_string_t, and the parameters + * @a start_revnum and @a end_revnum contain the start and end revision + * number of the entire blame operation, as resolved from the repository + * inside svn_client_blame6(). + * + * @deprecated Provided for backward compatibility with the 1.11 API. + * To replace @a start_revnum and @a end_revnum, see the corresponding + * output parameters in svn_client_blame6(). + * * @since New in 1.7. */ typedef svn_error_t *(*svn_client_blame_receiver3_t)( @@ -1221,7 +1259,7 @@ svn_client_args_to_target_array(apr_arra * #svn_opt_revision_date. * If no error occurred, return #SVN_NO_ERROR. * - * @since New in 1.12. + * @since New in 1.15. * * @see #svn_depth_t #svn_client_ctx_t @ref clnt_revisions for * a discussion of operative and peg revisions. @@ -2945,6 +2983,12 @@ svn_client_log(const apr_array_header_t * #SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE) and the client is 1.9.0 or * newer. * + * Before the first call to @a receiver, set @a *start_revnum_p and + * @a *end_revnum_p to the start and end revision number of the entire + * blame operation, as resolved from the repository. This can be useful + * for the blame receiver to format the blame output. Any or both of these + * arguments may be @c NULL. + * * Use @a diff_options to determine how to compare different revisions of the * target. * @@ -2953,8 +2997,33 @@ svn_client_log(const apr_array_header_t * * Use @a pool for any temporary allocation. * + * @since New in 1.12. + */ +svn_error_t * +svn_client_blame6(svn_revnum_t *start_revnum_p, + svn_revnum_t *end_revnum_p, + const char *path_or_url, + const svn_opt_revision_t *peg_revision, + const svn_opt_revision_t *start, + const svn_opt_revision_t *end, + const svn_diff_file_options_t *diff_options, + svn_boolean_t ignore_mime_type, +
svn commit: r1897034 [22/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/libsvn_subr/io.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_subr/io.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_subr/io.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_subr/io.c Fri Jan 14 14:01:45 2022 @@ -144,6 +144,14 @@ #ifdef WIN32 #if _WIN32_WINNT < 0x600 /* Does the SDK assume Windows Vista+? */ +typedef struct _FILE_BASIC_INFO { + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + DWORD FileAttributes; +} FILE_BASIC_INFO, *PFILE_BASIC_INFO; + typedef struct _FILE_RENAME_INFO { BOOL ReplaceIfExists; HANDLE RootDirectory; @@ -155,8 +163,15 @@ typedef struct _FILE_DISPOSITION_INFO { BOOL DeleteFile; } FILE_DISPOSITION_INFO, *PFILE_DISPOSITION_INFO; +typedef struct _FILE_ATTRIBUTE_TAG_INFO { + DWORD FileAttributes; + DWORD ReparseTag; +} FILE_ATTRIBUTE_TAG_INFO, *PFILE_ATTRIBUTE_TAG_INFO; + +#define FileBasicInfo 0 #define FileRenameInfo 3 #define FileDispositionInfo 4 +#define FileAttributeTagInfo 9 #endif /* WIN32 < Vista */ /* One-time initialization of the late bound Windows API functions. */ @@ -169,19 +184,30 @@ typedef DWORD (WINAPI *GETFINALPATHNAMEB DWORD cchFilePath, DWORD dwFlags); +typedef BOOL (WINAPI *GetFileInformationByHandleEx_t)(HANDLE hFile, + int FileInformationClass, + LPVOID lpFileInformation, + DWORD dwBufferSize); + typedef BOOL (WINAPI *SetFileInformationByHandle_t)(HANDLE hFile, int FileInformationClass, LPVOID lpFileInformation, DWORD dwBufferSize); static GETFINALPATHNAMEBYHANDLE get_final_path_name_by_handle_proc = NULL; +static GetFileInformationByHandleEx_t get_file_information_by_handle_ex_proc = NULL; static SetFileInformationByHandle_t set_file_information_by_handle_proc = NULL; -/* Forward declaration. */ +/* Forward declarations. */ static svn_error_t * io_win_read_link(svn_string_t **dest, const char *path, apr_pool_t *pool); +static svn_error_t * io_win_check_path(svn_node_kind_t *kind_p, + svn_boolean_t *is_symlink_p, + const char *path, + apr_pool_t *pool); + #endif /* Forward declaration */ @@ -342,13 +368,7 @@ io_check_path(const char *path, /* Not using svn_io_stat() here because we want to check the apr_err return explicitly. */ SVN_ERR(cstring_from_utf8(_apr, path, pool)); -#ifdef WIN32 - /* on Windows, svn does not handle reparse points or hard links. - So ignore the 'resolve_symlinks' flag. */ - flags = APR_FINFO_MIN; -#else flags = resolve_symlinks ? APR_FINFO_MIN : (APR_FINFO_MIN | APR_FINFO_LINK); -#endif apr_err = apr_stat(, path_apr, flags, pool); if (APR_STATUS_IS_ENOENT(apr_err)) @@ -410,8 +430,12 @@ svn_io_check_resolved_path(const char *p svn_node_kind_t *kind, apr_pool_t *pool) { +#if WIN32 + return io_win_check_path(kind, NULL, path, pool); +#else svn_boolean_t ignored; return io_check_path(path, TRUE, , kind, pool); +#endif } svn_error_t * @@ -419,8 +443,19 @@ svn_io_check_path(const char *path, svn_node_kind_t *kind, apr_pool_t *pool) { +#if WIN32 + svn_boolean_t is_symlink; + + SVN_ERR(io_win_check_path(kind, _symlink, path, pool)); + + if (is_symlink) +*kind = svn_node_file; + + return SVN_NO_ERROR; +#else svn_boolean_t ignored; return io_check_path(path, FALSE, , kind, pool); +#endif } svn_error_t * @@ -429,7 +464,23 @@ svn_io_check_special_path(const char *pa svn_boolean_t *is_special, apr_pool_t *pool) { +#ifdef WIN32 + svn_boolean_t is_symlink; + + SVN_ERR(io_win_check_path(kind, _symlink, path, pool)); + + if (is_symlink) +{ + *is_special = TRUE; + *kind = svn_node_file; +} + else +*is_special = FALSE; + + return SVN_NO_ERROR; +#else return io_check_path(path, FALSE, is_special, kind, pool); +#endif } struct temp_file_cleanup_s @@ -1532,7 +1583,7 @@ reown_file(const char *path, } /* Determine what the PERMS for a new file should be by looking at the - permissions of a temporary file that we create in DIRECTORY. + permissions of a temporary file that we create in DIRECTORY. DIRECTORY
svn commit: r1897034 [8/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client-
Modified: subversion/branches/multi-wc-format/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (original) +++ subversion/branches/multi-wc-format/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c Fri Jan 14 14:01:45 2022 @@ -23,9 +23,18 @@ /* Tell swigutil_py.h that we're inside the implementation */ #define SVN_SWIG_SWIGUTIL_PY_C +/* Avoid deprecation warnings about PY_SSIZE_T_CLEAN since Python 3.8 */ +#define PY_SSIZE_T_CLEAN + +#if defined(_MSC_VER) +/* Prevent "non-constant aggregate initializer" errors from Python.h in + * Python 3.9 */ +# pragma warning(default : 4204) +#endif #include + #include #include #include @@ -46,10 +55,23 @@ #include "svn_mergeinfo.h" #include "svn_types.h" -#include "svn_private_config.h" /* for SVN_APR_INT64_T_PYCFMT */ +#include "svn_private_config.h" #include "swig_python_external_runtime.swg" #include "swigutil_py.h" +#include "swigutil_py3c.h" + +#if IS_PY3 + +/* In Python 3 use the bytes format character for raw data */ +#define SVN_SWIG_BYTES_FMT "y" + +#else + +/* In Python 2 use the string format character for raw data */ +#define SVN_SWIG_BYTES_FMT "s" + +#endif /* Py_ssize_t for old Pythons */ /* This code is as recommended by: */ @@ -142,6 +164,35 @@ apr_status_t svn_swig_py_initialize(void return APR_SUCCESS; } +FILE *svn_swig_py_as_file(PyObject *pyfile) +{ +#if IS_PY3 + FILE *fp = NULL; + int fd = PyObject_AsFileDescriptor(pyfile); + if (fd >= 0) +{ + PyObject *mode_obj; + PyObject *mode_byte_obj = NULL; + char *mode = NULL; + + /* If any Python API returns NULL, then the Python exception is set and + this function will return NULL signifying to the caller that an error + occurred. */ + if ( NULL != (mode_obj = PyObject_GetAttrString(pyfile, "mode")) + && NULL != (mode_byte_obj = PyUnicode_AsUTF8String(mode_obj)) + && NULL != (mode = PyBytes_AsString(mode_byte_obj))) +fp = fdopen(fd, mode); + + Py_XDECREF(mode_obj); + Py_XDECREF(mode_byte_obj); +} + + return fp; +#else + return PyFile_AsFile(pyfile); +#endif +} + int svn_swig_py_get_pool_arg(PyObject *args, swig_type_info *type, PyObject **py_pool, apr_pool_t **pool) { @@ -150,14 +201,25 @@ int svn_swig_py_get_pool_arg(PyObject *a if (argnum >= 0) { PyObject *input = PyTuple_GET_ITEM(args, argnum); - if (input != Py_None && PyObject_HasAttrString(input, markValid)) + if (input != Py_None) { - *pool = svn_swig_py_must_get_ptr(input, type, argnum+1); - if (*pool == NULL) -return 1; - *py_pool = input; - Py_INCREF(input); - return 0; + PyObject *fn; + if (NULL != (fn = PyObject_GetAttrString(input, markValid))) +{ + Py_DECREF(fn); + + *pool = svn_swig_py_must_get_ptr(input, type, argnum+1); + if (*pool == NULL) +return 1; + *py_pool = input; + Py_INCREF(input); + return 0; +} + else +{ + /* Clear any getattr() error, it isn't needed. */ + PyErr_Clear(); +} } } @@ -221,13 +283,20 @@ static int proxy_set_pool(PyObject **pro { if (pool == NULL) { - if (PyObject_HasAttrString(*proxy, setParentPool)) + PyObject *setFn; + if (NULL != (setFn = PyObject_GetAttrString(*proxy, setParentPool))) { - result = PyObject_CallMethod(*proxy, setParentPool, emptyTuple); + result = PyObject_CallObject(setFn, NULL); + Py_DECREF(setFn); if (result == NULL) return 1; Py_DECREF(result); } + else +{ + /* Clear any getattr() error, it isn't needed. */ + PyErr_Clear(); +} } else { @@ -285,23 +354,45 @@ static PyObject *svn_swig_NewPointerObjS return svn_swig_py_new_pointer_obj(ptr, typeinfo, py_pool, NULL); } -/** Wrapper for SWIG_ConvertPtr */ -int svn_swig_py_convert_ptr(PyObject *input, void **obj, swig_type_info *type) +static int svn_swig_ensure_valid_swig_wrapper(PyObject *input) { - if (PyObject_HasAttrString(input, assertValid)) + PyObject *assertFn; + PyObject *unwrapFn; + if (NULL != (assertFn = PyObject_GetAttrString(input, assertValid))) { - PyObject *result = PyObject_CallMethod(input, assertValid, emptyTuple); + PyObject *result = PyObject_CallObject(assertFn,
svn commit: r1897034 [30/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/move_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/cmdline/move_tests.py?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/tests/cmdline/move_tests.py (original) +++ subversion/branches/multi-wc-format/subversion/tests/cmdline/move_tests.py Fri Jan 14 14:01:45 2022 @@ -125,7 +125,7 @@ def move_file_test(sbox, source, dest, m start_disk: validate the on disk state after the start update against this. start_status: validate the wc status after the start update against this. end_rev: revision to update to, bringing in some update you want to test. - up_output: validate the output of the end update agianst this. + up_output: validate the output of the end update against this. up_disk: validate the on disk state after the end update against this. up_status: validate the wc status after the end update against this. revert_paths: validate the paths reverted. @@ -793,7 +793,7 @@ def build_simple_file_move_tests(sbox, s # move and update with incoming identical move (r16-17) # XXX: It'd be really nice if we actually recognized this and the wc - # showed no conflict at all on udpate. + # showed no conflict at all on update. test = {} test['start_rev'] = 16 test['end_rev'] = 17 @@ -883,7 +883,7 @@ def build_simple_file_move_func(sbox, so # # Each test must return on success or raise on failure. # -# See http://wiki.apache.org/subversion/LocalMoves +# See https://cwiki.apache.org/confluence/display/SVN/LocalMoves def lateral_move_file_test(sbox): "lateral (rename) move of a file test" @@ -1755,7 +1755,7 @@ def move_conflict_markers(sbox): }) expected_disk.remove('iota', 'iota.prej', 'A/B/E', 'A/B/E/alpha', 'A/B/E/beta', - 'A/B/E/dir_conflicts.prej', + 'A/B/E/dir_conflicts.prej', 'A/B/E/beta.prej') expected_disk.add({ 'A/iotb' : Item(contents="This is the file 'iota'.\n"), Modified: subversion/branches/multi-wc-format/subversion/tests/cmdline/patch_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/tests/cmdline/patch_tests.py?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/tests/cmdline/patch_tests.py (original) +++ subversion/branches/multi-wc-format/subversion/tests/cmdline/patch_tests.py Fri Jan 14 14:01:45 2022 @@ -1574,15 +1574,7 @@ def patch_no_svn_eol_style(sbox): patch_file_path = sbox.get_tempname('my.patch') mu_path = sbox.ospath('A/mu') - # CRLF is a string that will match a CRLF sequence read from a text file. - # ### On Windows, we assume CRLF will be read as LF, so it's a poor test. - if os.name == 'nt': -crlf = '\n' - else: -crlf = '\r\n' - - # Strict EOL style matching breaks Windows tests at least with Python 2 - keep_eol_style = not svntest.main.is_os_windows() + crlf = '\r\n' eols = [crlf, '\015', '\n', '\012'] for target_eol in eols: @@ -1603,7 +1595,7 @@ def patch_no_svn_eol_style(sbox): ] # Set mu contents - svntest.main.file_write(mu_path, ''.join(mu_contents)) + svntest.main.file_write(mu_path, ''.join(mu_contents), mode='wb') unidiff_patch = [ "Index: mu", @@ -1647,7 +1639,8 @@ def patch_no_svn_eol_style(sbox): target_eol, ] - svntest.main.file_write(patch_file_path, ''.join(unidiff_patch)) + svntest.main.file_write(patch_file_path, ''.join(unidiff_patch), + mode='wb') expected_output = wc.State(wc_dir, { 'A/mu' : Item(status='U '), @@ -1666,7 +1659,8 @@ def patch_no_svn_eol_style(sbox): expected_disk, expected_status, expected_skip, -[], True, True, keep_eol_style) +[], True, True, +keep_eol_style=True) expected_output = ["Reverted '" + mu_path + "'\n"] svntest.actions.run_and_verify_svn(expected_output, [], @@ -1681,17 +1675,13 @@ def patch_with_svn_eol_style(sbox): patch_file_path = sbox.get_tempname('my.patch') mu_path = sbox.ospath('A/mu') - # CRLF is a string that will match a CRLF sequence read from a text file. - # ### On Windows, we assume CRLF will be read as LF, so it's a poor test. if os.name == 'nt': -crlf = '\n' +native_nl = '\r\n' else: -crlf = '\r\n' - - # Strict EOL style matching breaks Windows tests at least with Python 2 - keep_eol_style = not svntest.main.is_os_windows() +
svn commit: r1897034 [15/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/libsvn_client/conflicts.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_client/conflicts.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_client/conflicts.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_client/conflicts.c Fri Jan 14 14:01:45 2022 @@ -383,7 +383,7 @@ add_new_move(struct repos_move_info **ne const char *author, apr_hash_t *moved_paths, svn_ra_session_t *ra_session, - const char *repos_root_url, + const char *repos_root_url, apr_pool_t *result_pool, apr_pool_t *scratch_pool) { @@ -661,7 +661,7 @@ match_copies_to_deletion(const char *del TRUE, iterpool)); if (!related) continue; - + /* Remember details of this move. */ SVN_ERR(add_new_move(, deleted_repos_relpath, copy->copyto_path, copy->copyfrom_rev, @@ -669,7 +669,7 @@ match_copies_to_deletion(const char *del moved_paths, ra_session, repos_root_url, result_pool, iterpool)); push_move(move, moves_table, result_pool); -} +} } else { @@ -782,7 +782,7 @@ map_deleted_path_to_move(const char *del { const char *relpath; struct repos_move_info *move; - + move = APR_ARRAY_IDX(moves, i, struct repos_move_info *); if (strcmp(move->moved_from_repos_relpath, deleted_relpath) == 0) return move; @@ -806,7 +806,7 @@ map_deleted_path_to_move(const char *del if (closest_move) { const char *relpath; - + /* See if we can find an even closer move for this moved-along path. */ relpath = svn_relpath_skip_ancestor(closest_move->moved_to_repos_relpath, deleted_relpath); @@ -967,7 +967,7 @@ cache_copied_item(apr_hash_t *copies, co * This function answers the same question as svn_ra_get_deleted_rev() but * works in cases where we do not already know a revision in which the deleted * node once used to exist. - * + * * If the node was moved, rather than deleted, return move information * in BATON->MOVE. */ @@ -1098,7 +1098,7 @@ find_deleted_rev(void *baton, b->deleted_rev_author = apr_pstrdup(b->result_pool, author->data); else b->deleted_rev_author = _("unknown author"); - + b->replacing_node_kind = replacing_node_kind; /* We're done. Abort the log operation. */ @@ -1173,7 +1173,7 @@ describe_local_file_node_change(const ch const char *moved_to_abspath; svn_error_t *err; - err = svn_wc__node_was_moved_away(_to_abspath, NULL, + err = svn_wc__node_was_moved_away(_to_abspath, NULL, ctx->wc_ctx, conflict->local_abspath, scratch_pool, @@ -1257,7 +1257,7 @@ describe_local_file_node_change(const ch { const char *moved_from_abspath; - SVN_ERR(svn_wc__node_was_moved_here(_from_abspath, NULL, + SVN_ERR(svn_wc__node_was_moved_here(_from_abspath, NULL, ctx->wc_ctx, conflict->local_abspath, scratch_pool, @@ -1398,7 +1398,7 @@ describe_local_dir_node_change(const cha const char *moved_to_abspath; svn_error_t *err; - err = svn_wc__node_was_moved_away(_to_abspath, NULL, + err = svn_wc__node_was_moved_away(_to_abspath, NULL, ctx->wc_ctx, conflict->local_abspath, scratch_pool, @@ -1483,7 +1483,7 @@ describe_local_dir_node_change(const cha { const char *moved_from_abspath; - SVN_ERR(svn_wc__node_was_moved_here(_from_abspath, NULL, + SVN_ERR(svn_wc__node_was_moved_here(_from_abspath, NULL, ctx->wc_ctx, conflict->local_abspath, scratch_pool, @@ -1581,7 +1581,7 @@ struct find_moves_baton * rB: mv b->c * rC: mv c->d * we map each revision number to all the moves which happened in the - * revision, which looks as follows: + * revision, which looks as follows: * rA : [(x->z), (a->b)] * rB : [(b->c)] * rC : [(c->d)] @@ -1700,7
svn commit: r1897034 [14/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/libsvn_client/blame.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_client/blame.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_client/blame.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_client/blame.c Fri Jan 14 14:01:45 2022 @@ -456,7 +456,7 @@ file_rev_handler(void *baton, const char SVN_ERR_CLIENT_IS_BINARY_FILE, NULL, _("Cannot calculate blame information for binary file '%s'"), (svn_path_is_url(frb->target) - ? frb->target + ? frb->target : svn_dirent_local_style(frb->target, pool))); } } @@ -553,7 +553,7 @@ file_rev_handler(void *baton, const char || frb->include_merged_revisions); /* The file existed before start_rev; generate no blame info for - lines from this revision (or before). + lines from this revision (or before). This revision specifies the state as it was at the start revision */ @@ -656,14 +656,16 @@ normalize_blames(struct blame_chain *cha } svn_error_t * -svn_client_blame5(const char *target, +svn_client_blame6(svn_revnum_t *start_revnum_p, + svn_revnum_t *end_revnum_p, + const char *target, const svn_opt_revision_t *peg_revision, const svn_opt_revision_t *start, const svn_opt_revision_t *end, const svn_diff_file_options_t *diff_options, svn_boolean_t ignore_mime_type, svn_boolean_t include_merged_revisions, - svn_client_blame_receiver3_t receiver, + svn_client_blame_receiver4_t receiver, void *receiver_baton, svn_client_ctx_t *ctx, apr_pool_t *pool) @@ -696,10 +698,13 @@ svn_client_blame5(const char *target, SVN_ERR(svn_client__get_revision_number(_revnum, NULL, ctx->wc_ctx, target_abspath_or_url, ra_session, start, pool)); - + if (start_revnum_p) +*start_revnum_p = start_revnum; SVN_ERR(svn_client__get_revision_number(_revnum, NULL, ctx->wc_ctx, target_abspath_or_url, ra_session, end, pool)); + if (end_revnum_p) +*end_revnum_p = end_revnum; { svn_client__pathrev_t *loc; @@ -734,7 +739,7 @@ svn_client_blame5(const char *target, mime_type = svn_prop_get_value(props, SVN_PROP_MIME_TYPE); } - else + else { const svn_string_t *value; @@ -897,9 +902,9 @@ svn_client_blame5(const char *target, /* If we never created any blame for the original chain, create it now, with the most recent changed revision. This could occur if a file was created on a branch and them merged to another branch. This is - semanticly a copy, and we want to use the revision on the branch as + semantically a copy, and we want to use the revision on the branch as the most recently changed revision. ### Is this really what we want - to do here? Do the sematics of copy change? */ + to do here? Do the semantics of copy change? */ if (!frb.chain->blame) frb.chain->blame = blame_create(frb.chain, frb.last_rev, 0); @@ -941,18 +946,21 @@ svn_client_blame5(const char *target, SVN_ERR(ctx->cancel_func(ctx->cancel_baton)); if (!eof || sb->len) { + svn_string_t line; + line.data = sb->data; + line.len = sb->len; if (walk->rev) -SVN_ERR(receiver(receiver_baton, start_revnum, end_revnum, +SVN_ERR(receiver(receiver_baton, line_no, walk->rev->revision, walk->rev->rev_props, merged_rev, merged_rev_props, merged_path, - sb->data, FALSE, iterpool)); + , FALSE, iterpool)); else -SVN_ERR(receiver(receiver_baton, start_revnum, end_revnum, +SVN_ERR(receiver(receiver_baton, line_no, SVN_INVALID_REVNUM, NULL, SVN_INVALID_REVNUM, NULL, NULL, - sb->data, TRUE, iterpool)); + , TRUE, iterpool)); } if (eof) break; } Modified: subversion/branches/multi-wc-format/subversion/libsvn_client/client.h URL:
svn commit: r1897034 [23/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/libsvn_subr/stream.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_subr/stream.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_subr/stream.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_subr/stream.c Fri Jan 14 14:01:45 2022 @@ -922,7 +922,7 @@ readline_apr_lf(apr_file_t *file, } /* Otherwise, prepare to read the next chunk. */ -svn_stringbuf_ensure(buf, buf->blocksize + SVN__LINE_CHUNK_SIZE); +svn_stringbuf_ensure(buf, buf->len + SVN__LINE_CHUNK_SIZE); } } @@ -982,7 +982,7 @@ readline_apr_generic(apr_file_t *file, } /* Prepare to read the next chunk. */ - svn_stringbuf_ensure(buf, buf->blocksize + SVN__LINE_CHUNK_SIZE); + svn_stringbuf_ensure(buf, buf->len + SVN__LINE_CHUNK_SIZE); } } @@ -2172,6 +2172,9 @@ struct install_baton_t { struct baton_apr baton_apr; const char *tmp_path; + svn_boolean_t set_read_only; + svn_boolean_t set_executable; + apr_time_t set_mtime; }; #ifdef WIN32 @@ -2313,6 +2316,9 @@ svn_stream__create_for_install(svn_strea (*install_stream)->baton = ib; ib->tmp_path = tmp_path; + ib->set_read_only = FALSE; + ib->set_executable = FALSE; + ib->set_mtime = -1; /* Don't close the file on stream close; flush instead */ svn_stream_set_close(*install_stream, install_close); @@ -2320,6 +2326,178 @@ svn_stream__create_for_install(svn_strea return SVN_NO_ERROR; } +void +svn_stream__install_set_read_only(svn_stream_t *install_stream, + svn_boolean_t read_only) +{ + struct install_baton_t *ib = install_stream->baton; + + ib->set_read_only = read_only; +} + +void +svn_stream__install_set_executable(svn_stream_t *install_stream, + svn_boolean_t executable) +{ + struct install_baton_t *ib = install_stream->baton; + + ib->set_executable = executable; +} + +void +svn_stream__install_set_affected_time(svn_stream_t *install_stream, + apr_time_t mtime) +{ + struct install_baton_t *ib = install_stream->baton; + + ib->set_mtime = mtime; +} + +/* Helper function that closes the underlying file of the install stream + and update the state in the baton. */ +static svn_error_t * +install_stream_close_file(struct install_baton_t *ib, + apr_pool_t *scratch_pool) +{ + if (ib->baton_apr.file) +{ + SVN_ERR(svn_io_file_close(ib->baton_apr.file, scratch_pool)); + ib->baton_apr.file = NULL; +} + + return SVN_NO_ERROR; +} + +svn_error_t * +svn_stream__install_finalize(apr_time_t *mtime_p, + apr_off_t *size_p, + svn_stream_t *install_stream, + apr_pool_t *scratch_pool) +{ + struct install_baton_t *ib = install_stream->baton; + svn_boolean_t finalized = FALSE; + apr_finfo_t finfo; + apr_int32_t wanted; + +#ifdef WIN32 + /* If the caller asked us for the timestamp with a non-null MTIME_P, + ensure that subsequent I/O operations won't change it; see below. + */ + if (ib->set_mtime >= 0 || ib->set_read_only || mtime_p) +{ + apr_time_t set_mtime; + svn_error_t *err; + + /* On Windows, the file systems may defer processing of timestamps until + the file handle is closed, as specified in [1]. Since we peek and + return the current timestamp, we MUST ensure that the timestamp does + not change after the call to finalize(). + + Luckily, there are two options that guarantee that the file will keep + its current timestamp after close. We can either explicitly set a new + timestamp, or use a special option that instructs the file system to + suspend updates for timestamp values for all subsequent I/O operations. + Both of these options guarantee [2, 3] that no other operation will + change the final timestamp. So we use both of them, depending on + whether the caller wants us to set a specific timestamp, or not. + + [1: MS-FSA, 2.1.4.17, Note <42>] + File systems may choose to defer processing for a file that has been + modified to a later time, favoring performance over accuracy. The NTFS + file system on versions prior to Windows 10 v1809 operating system, + Windows Server v1809 operating system, and Windows Server 2019, and + non-NTFS file systems on all versions of Windows, defer this processing + until the Open gets closed. + https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-fsa/4e3695bd-7574-4f24-a223-b4679c065b63#Appendix_A_42 + + [2: MS-FSA 2.1.5.14.2] + If InputBuffer.LastWriteTime != 0: + If InputBuffer.LastWriteTime !=
svn commit: r1897034 [24/37] - in /subversion/branches/multi-wc-format: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ contrib/client-side/ contrib/client
Modified: subversion/branches/multi-wc-format/subversion/libsvn_subr/utf8proc/utf8proc_data.c URL: http://svn.apache.org/viewvc/subversion/branches/multi-wc-format/subversion/libsvn_subr/utf8proc/utf8proc_data.c?rev=1897034=1897033=1897034=diff == --- subversion/branches/multi-wc-format/subversion/libsvn_subr/utf8proc/utf8proc_data.c (original) +++ subversion/branches/multi-wc-format/subversion/libsvn_subr/utf8proc/utf8proc_data.c Fri Jan 14 14:01:45 2022 @@ -1,6596 +1,6596 @@ UTF8PROC_DATA const utf8proc_uint16_t utf8proc_sequences[] = { - 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 32, 32, 776, 32, 772, - 50, 51, 32, 769, 956, 32, 807, 49, - 49, 8260, 52, 49, 8260, 50, 51, 8260, - 52, 65, 768, 224, 65, 769, 225, 65, - 770, 226, 65, 771, 227, 65, 776, 228, - 65, 778, 229, 230, 67, 807, 231, 69, - 768, 232, 69, 769, 233, 69, 770, 234, - 69, 776, 235, 73, 768, 236, 73, 769, - 237, 73, 770, 238, 73, 776, 239, 240, - 78, 771, 241, 79, 768, 242, 79, 769, - 243, 79, 770, 244, 79, 771, 245, 79, - 776, 246, 248, 85, 768, 249, 85, 769, - 250, 85, 770, 251, 85, 776, 252, 89, - 769, 253, 254, 115, 115, 97, 768, 97, - 769, 97, 770, 97, 771, 97, 776, 97, - 778, 99, 807, 101, 768, 101, 769, 101, - 770, 101, 776, 105, 768, 105, 769, 105, - 770, 105, 776, 110, 771, 111, 768, 111, - 769, 111, 770, 111, 771, 111, 776, 117, - 768, 117, 769, 117, 770, 117, 776, 121, - 769, 121, 776, 65, 772, 257, 97, 772, - 65, 774, 259, 97, 774, 65, 808, 261, - 97, 808, 67, 769, 263, 99, 769, 67, - 770, 265, 99, 770, 67, 775, 267, 99, - 775, 67, 780, 269, 99, 780, 68, 780, - 271, 100, 780, 273, 69, 772, 275, 101, - 772, 69, 774, 277, 101, 774, 69, 775, - 279, 101, 775, 69, 808, 281, 101, 808, - 69, 780, 283, 101, 780, 71, 770, 285, - 103, 770, 71, 774, 287, 103, 774, 71, - 775, 289, 103, 775, 71, 807, 291, 103, - 807, 72, 770, 293, 104, 770, 295, 73, - 771, 297, 105, 771, 73, 772, 299, 105, - 772, 73, 774, 301, 105, 774, 73, 808, - 303, 105, 808, 73, 775, 105, 775, 73, - 74, 307, 105, 106, 74, 770, 309, 106, - 770, 75, 807, 311, 107, 807, 76, 769, - 314, 108, 769, 76, 807, 316, 108, 807, - 76, 780, 318, 108, 780, 76, 183, 320, - 108, 183, 322, 78, 769, 324, 110, 769, - 78, 807, 326, 110, 807, 78, 780, 328, - 110, 780, 700, 110, 331, 79, 772, 333, - 111, 772, 79, 774, 335, 111, 774, 79, - 779, 337, 111, 779, 339, 82, 769, 341, - 114, 769, 82, 807, 343, 114, 807, 82, - 780, 345, 114, 780, 83, 769, 347, 115, - 769, 83, 770, 349, 115, 770, 83, 807, - 351, 115, 807, 83, 780, 353, 115, 780, - 84, 807, 355, 116, 807, 84, 780, 357, - 116, 780, 359, 85, 771, 361, 117, 771, - 85, 772, 363, 117, 772, 85, 774, 365, - 117, 774, 85, 778, 367, 117, 778, 85, - 779, 369, 117, 779, 85, 808, 371, 117, - 808, 87, 770, 373, 119, 770, 89, 770, - 375, 121, 770, 89, 776, 255, 90, 769, - 378, 122, 769, 90, 775, 380, 122, 775, - 90, 780, 382, 122, 780, 595, 387, 389, - 596, 392, 598, 599, 396, 477, 601, 603, - 402, 608, 611, 617, 616, 409, 623, 626, - 629, 79, 795, 417, 111, 795, 419, 421, - 640, 424, 643, 429, 648, 85, 795, 432, - 117, 795, 650, 651, 436, 438, 658, 441, - 445, 68, 381, 454, 68, 382, 100, 382, - 76, 74, 457, 76, 106, 108, 106, 78, - 74, 460, 78, 106, 110, 106, 65, 780, - 462, 97, 780, 73, 780, 464, 105, 780, - 79, 780, 466, 111, 780, 85, 780, 468, - 117, 780, 220, 772, 470, 252, 772, 220, - 769, 472, 252, 769, 220, 780, 474, 252, - 780, 220, 768, 476, 252, 768, 196, 772, - 479, 228, 772, 550, 772, 481, 551, 772, - 198, 772, 483, 230, 772, 485, 71, 780, - 487, 103, 780, 75, 780, 489, 107, 780, - 79, 808, 491, 111, 808, 490, 772, 493, - 491, 772, 439, 780, 495, 658, 780, 106, - 780, 68, 90, 499, 68, 122, 100, 122, - 71, 769, 501, 103, 769, 405, 447, 78, - 768, 505, 110, 768, 197, 769, 507, 229, - 769, 198, 769, 509, 230, 769, 216, 769, - 511, 248, 769, 65, 783, 513, 97, 783, - 65, 785, 515, 97, 785, 69, 783, 517, - 101, 783, 69, 785, 519, 101, 785, 73, - 783, 521, 105, 783, 73, 785, 523, 105, - 785, 79, 783, 525, 111, 783, 79, 785, - 527, 111, 785, 82, 783, 529, 114, 783, - 82, 785, 531, 114, 785, 85, 783, 533, - 117, 783, 85, 785, 535, 117, 785, 83, - 806, 537, 115, 806, 84, 806, 539, 116, - 806, 541, 72, 780, 543, 104, 780, 414, - 547, 549, 65, 775, 551, 97, 775, 69, - 807, 553, 101, 807, 214, 772, 555, 246, - 772, 213, 772, 557, 245, 772, 79, 775, - 559, 111, 775, 558, 772, 561, 559, 772, - 89, 772, 563, 121, 772, 11365, 572, 410, - 11366, 578, 384, 649, 652, 583, 585, 587, - 589, 591, 614, 633, 635, 641, 32, 774, - 32, 775, 32, 778, 32, 808, 32, 771, - 32, 779, 661, 768, 769, 787, 776, 769, - 953, 881, 883, 697, 887, 32, 837, 59, - 1011, 168, 769, 913, 769, 940, 183, 917, -