svn commit: r1915904 - /subversion/branches/move-tracking-3/BRANCH-README

2024-02-20 Thread julianfoad
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

2024-02-20 Thread julianfoad
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/

2024-02-20 Thread julianfoad
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

2022-04-21 Thread julianfoad
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

2022-04-21 Thread julianfoad
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

2022-04-07 Thread julianfoad
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

2022-04-07 Thread julianfoad
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

2022-04-07 Thread julianfoad
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

2022-04-06 Thread julianfoad
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

2022-04-06 Thread julianfoad
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

2022-04-06 Thread julianfoad
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

2022-04-06 Thread julianfoad
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/

2022-04-06 Thread julianfoad
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

2022-04-03 Thread julianfoad
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

2022-03-30 Thread julianfoad
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

2022-03-30 Thread julianfoad
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/

2022-03-24 Thread julianfoad
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/

2022-03-15 Thread julianfoad
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

2022-03-11 Thread julianfoad
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

2022-03-11 Thread julianfoad
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

2022-03-11 Thread julianfoad
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

2022-03-10 Thread julianfoad
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

2022-03-10 Thread julianfoad
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

2022-03-10 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-02 Thread julianfoad
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

2022-03-01 Thread julianfoad
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

2022-02-28 Thread julianfoad
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

2022-02-24 Thread julianfoad
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

2022-02-24 Thread julianfoad
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

2022-02-24 Thread julianfoad
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

2022-02-24 Thread julianfoad
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

2022-02-24 Thread julianfoad
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/

2022-02-24 Thread julianfoad
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

2022-02-24 Thread julianfoad
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

2022-02-24 Thread julianfoad
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

2022-02-18 Thread julianfoad
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

2022-02-18 Thread julianfoad
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/

2022-02-18 Thread julianfoad
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

2022-02-18 Thread julianfoad
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

2022-02-18 Thread julianfoad
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

2022-02-18 Thread julianfoad
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

2022-02-18 Thread julianfoad
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

2022-02-18 Thread julianfoad
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

2022-02-12 Thread julianfoad
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/

2022-02-11 Thread julianfoad
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

2022-02-11 Thread julianfoad
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/

2022-02-11 Thread julianfoad
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/

2022-02-11 Thread julianfoad
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

2022-02-10 Thread julianfoad
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

2022-02-10 Thread julianfoad
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

2022-02-10 Thread julianfoad
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/

2022-02-10 Thread julianfoad
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

2022-02-10 Thread julianfoad
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

2022-02-10 Thread julianfoad
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

2022-02-09 Thread julianfoad
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

2022-02-09 Thread julianfoad
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

2022-02-09 Thread julianfoad
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/

2022-02-09 Thread julianfoad
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

2022-02-09 Thread julianfoad
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

2022-02-09 Thread julianfoad
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

2022-02-04 Thread julianfoad
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

2022-02-03 Thread julianfoad
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

2022-02-02 Thread julianfoad
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

2022-02-02 Thread julianfoad
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

2022-01-21 Thread julianfoad
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

2022-01-21 Thread julianfoad
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

2022-01-21 Thread julianfoad
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

2022-01-14 Thread julianfoad
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-

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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-

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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

2022-01-14 Thread julianfoad
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, 
-  

  1   2   3   4   5   6   7   8   9   10   >