Added: 
subversion/trunk/tools/hook-scripts/mailer/tests/t2-reference/output.1912632
URL: 
http://svn.apache.org/viewvc/subversion/trunk/tools/hook-scripts/mailer/tests/t2-reference/output.1912632?rev=1914650&view=auto
==============================================================================
--- 
subversion/trunk/tools/hook-scripts/mailer/tests/t2-reference/output.1912632 
(added)
+++ 
subversion/trunk/tools/hook-scripts/mailer/tests/t2-reference/output.1912632 
Thu Dec 14 07:42:34 2023
@@ -0,0 +1,1538 @@
+Group: defaults
+Subject: r2 - in subversion/trunk: build build/generator build/generator/swig 
subversion/tests/cmdline subversion/tests/cmdline/legacy 
subversion/tests/cmdline/svntest tools/dist
+
+Author: dsahlberg
+Date: Sat Sep 30 13:13:16 2023
+New Revision: 2
+
+Log:
+Fix `invalid escape sequence` in Python scripts to prevent many
+`SyntaxWarning`s since Python 3.12.
+
+* build/generator/gen_win.py
+* build/generator/gen_win_dependencies.py
+* build/generator/swig/__init__.py
+* build/transform_sql.py
+* subversion/tests/cmdline/basic_tests.py
+* subversion/tests/cmdline/changelist_tests.py
+* subversion/tests/cmdline/checkout_tests.py
+* subversion/tests/cmdline/copy_tests.py
+* subversion/tests/cmdline/diff_tests.py
+* subversion/tests/cmdline/getopt_tests.py
+* subversion/tests/cmdline/info_tests.py
+* subversion/tests/cmdline/legacy/utf8_tests.py
+* subversion/tests/cmdline/lock_tests.py
+* subversion/tests/cmdline/log_tests.py
+* subversion/tests/cmdline/merge_authz_tests.py
+* subversion/tests/cmdline/merge_automatic_tests.py
+* subversion/tests/cmdline/merge_tests.py
+* subversion/tests/cmdline/merge_tree_conflict_tests.py
+* subversion/tests/cmdline/patch_tests.py
+* subversion/tests/cmdline/prop_tests.py
+* subversion/tests/cmdline/special_tests.py
+* subversion/tests/cmdline/stat_tests.py
+* subversion/tests/cmdline/svnadmin_tests.py
+* subversion/tests/cmdline/svnfsfs_tests.py
+* subversion/tests/cmdline/svnmover_tests.py
+* subversion/tests/cmdline/svnmucc_tests.py
+* subversion/tests/cmdline/svntest/actions.py
+* subversion/tests/cmdline/svntest/main.py
+* subversion/tests/cmdline/svntest/verify.py
+* subversion/tests/cmdline/svntest/wc.py
+* subversion/tests/cmdline/trans_tests.py
+* subversion/tests/cmdline/update_tests.py
+* subversion/tests/cmdline/upgrade_tests.py
+* subversion/tests/manual/tree-conflicts-add-vs-add.py
+* tools/dist/release.py
+  Use raw literals or correct escape sequences.
+
+Patch by: jun66j5
+Review by: futatuki
+
+Discussed: https://lists.apache.org/thread/m5s9zpj2jvsmtof07c0vvpjlwnwpdwsl
+
+Modified:
+   subversion/trunk/build/generator/gen_win.py
+   subversion/trunk/build/generator/gen_win_dependencies.py
+   subversion/trunk/build/generator/swig/__init__.py
+   subversion/trunk/build/transform_sql.py
+   subversion/trunk/subversion/tests/cmdline/basic_tests.py
+   subversion/trunk/subversion/tests/cmdline/changelist_tests.py
+   subversion/trunk/subversion/tests/cmdline/checkout_tests.py
+   subversion/trunk/subversion/tests/cmdline/copy_tests.py
+   subversion/trunk/subversion/tests/cmdline/diff_tests.py
+   subversion/trunk/subversion/tests/cmdline/getopt_tests.py
+   subversion/trunk/subversion/tests/cmdline/info_tests.py
+   subversion/trunk/subversion/tests/cmdline/legacy/utf8_tests.py
+   subversion/trunk/subversion/tests/cmdline/lock_tests.py
+   subversion/trunk/subversion/tests/cmdline/log_tests.py
+   subversion/trunk/subversion/tests/cmdline/merge_authz_tests.py
+   subversion/trunk/subversion/tests/cmdline/merge_automatic_tests.py
+   subversion/trunk/subversion/tests/cmdline/merge_tests.py
+   subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py
+   subversion/trunk/subversion/tests/cmdline/patch_tests.py
+   subversion/trunk/subversion/tests/cmdline/prop_tests.py
+   subversion/trunk/subversion/tests/cmdline/special_tests.py
+   subversion/trunk/subversion/tests/cmdline/stat_tests.py
+   subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py
+   subversion/trunk/subversion/tests/cmdline/svnfsfs_tests.py
+   subversion/trunk/subversion/tests/cmdline/svnmover_tests.py
+   subversion/trunk/subversion/tests/cmdline/svnmucc_tests.py
+   subversion/trunk/subversion/tests/cmdline/svntest/actions.py
+   subversion/trunk/subversion/tests/cmdline/svntest/main.py
+   subversion/trunk/subversion/tests/cmdline/svntest/verify.py
+   subversion/trunk/subversion/tests/cmdline/svntest/wc.py
+   subversion/trunk/subversion/tests/cmdline/trans_tests.py
+   subversion/trunk/subversion/tests/cmdline/update_tests.py
+   subversion/trunk/subversion/tests/cmdline/upgrade_tests.py
+   subversion/trunk/tools/dist/release.py
+
+Modified: subversion/trunk/build/generator/gen_win.py
+==============================================================================
+--- subversion/trunk/build/generator/gen_win.py        Sat Sep 30 11:00:27 
2023        (r1)
++++ subversion/trunk/build/generator/gen_win.py        Sat Sep 30 13:13:16 
2023        (r2)
+@@ -574,7 +574,7 @@
+     # This section parses those dependencies and adds them to the dependency 
list
+     # for this target.
+     if name.startswith('javahl') or name == 'libsvnjavahl':
+-      for dep in re.findall('\$\(([^\)]*)_DEPS\)', target.add_deps):
++      for dep in re.findall(r'\$\(([^\)]*)_DEPS\)', target.add_deps):
+         dep = dep.replace('_', '-')
+         depends.extend(self.sections[dep].get_targets())
+ 
+@@ -728,7 +728,7 @@
+ 
+     for dep in self.get_win_depends(target, FILTER_EXTERNALLIBS):
+       if dep.external_lib:
+-        for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
++        for elib in re.findall(r'\$\(SVN_([^)]*)_LIBS\)', dep.external_lib):
+           external_lib = elib.lower()
+ 
+         if external_lib in self._libraries:
+@@ -758,7 +758,7 @@
+ 
+     for dep in self.get_win_depends(target, FILTER_EXTERNALLIBS):
+       if dep.external_lib:
+-        for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
++        for elib in re.findall(r'\$\(SVN_([^)]*)_LIBS\)', dep.external_lib):
+           external_lib = elib.lower()
+ 
+         if external_lib in self._libraries:
+@@ -833,7 +833,7 @@
+ 
+     for dep in self.get_win_depends(target, FILTER_LIBS):
+       if dep.external_lib:
+-        for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
++        for elib in re.findall(r'\$\(SVN_([^)]*)_LIBS\)', dep.external_lib):
+           external_lib = elib.lower()
+ 
+           if external_lib not in self._libraries:
+@@ -887,7 +887,7 @@
+       nondeplibs.extend(dep.msvc_libs)
+ 
+       if dep.external_lib:
+-        for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
++        for elib in re.findall(r'\$\(SVN_([^)]*)_LIBS\)', dep.external_lib):
+ 
+           external_lib = elib.lower()
+ 
+@@ -938,7 +938,7 @@
+ 
+     for dep in self.get_win_depends(target, FILTER_EXTERNALLIBS):
+       if dep.external_lib:
+-        for elib in re.findall('\$\(SVN_([^\)]*)_LIBS\)', dep.external_lib):
++        for elib in re.findall(r'\$\(SVN_([^)]*)_LIBS\)', dep.external_lib):
+           external_lib = elib.lower()
+ 
+         if external_lib in self._libraries:
+
+Modified: subversion/trunk/build/generator/gen_win_dependencies.py
+==============================================================================
+--- subversion/trunk/build/generator/gen_win_dependencies.py   Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/build/generator/gen_win_dependencies.py   Sat Sep 30 
13:13:16 2023        (r2)
+@@ -235,22 +235,22 @@
+       elif opt == '-D':
+         self.cpp_defines.append(val)
+       elif opt == '--vsnet-version':
+-        if val == '2002' or re.match('^7(\.\d+)?$', val):
++        if val == '2002' or re.match(r'^7(\.\d+)?$', val):
+           self.vs_version = '2002'
+           self.sln_version = '7.00'
+           self.vcproj_version = '7.00'
+           self.vcproj_extension = '.vcproj'
+-        elif val == '2003' or re.match('^8(\.\d+)?$', val):
++        elif val == '2003' or re.match(r'^8(\.\d+)?$', val):
+           self.vs_version = '2003'
+           self.sln_version = '8.00'
+           self.vcproj_version = '7.10'
+           self.vcproj_extension = '.vcproj'
+-        elif val == '2005' or re.match('^9(\.\d+)?$', val):
++        elif val == '2005' or re.match(r'^9(\.\d+)?$', val):
+           self.vs_version = '2005'
+           self.sln_version = '9.00'
+           self.vcproj_version = '8.00'
+           self.vcproj_extension = '.vcproj'
+-        elif val == '2008' or re.match('^10(\.\d+)?$', val):
++        elif val == '2008' or re.match(r'^10(\.\d+)?$', val):
+           self.vs_version = '2008'
+           self.sln_version = '10.00'
+           self.vcproj_version = '9.00'
+@@ -290,14 +290,14 @@
+           self.sln_version = '12.00'
+           self.vcproj_version = '14.3'
+           self.vcproj_extension = '.vcxproj'
+-        elif re.match('^20\d+$', val):
++        elif re.match(r'^20\d+$', val):
+           print('WARNING: Unknown VS.NET version "%s",'
+                 ' assuming VS2012. Your VS can probably upgrade')
+           self.vs_version = '2012'
+           self.sln_version = '12.00'
+           self.vcproj_version = '11.0'
+           self.vcproj_extension = '.vcxproj'
+-        elif re.match('^1\d+$', val):
++        elif re.match(r'^1\d+$', val):
+           self.vs_version = val
+           self.sln_version = '12.00'
+           self.vcproj_version = val + '.0'
+
+Modified: subversion/trunk/build/generator/swig/__init__.py
+==============================================================================
+--- subversion/trunk/build/generator/swig/__init__.py  Sat Sep 30 11:00:27 
2023        (r1)
++++ subversion/trunk/build/generator/swig/__init__.py  Sat Sep 30 13:13:16 
2023        (r2)
+@@ -72,7 +72,7 @@
+ 
+     if not self._swigVersion:
+       swig_version = subprocess.check_output([self.swig_path, 
"-version"]).decode('utf8')
+-      m = re.search("Version (\d+).(\d+).(\d+)", swig_version)
++      m = re.search(r"Version (\d+).(\d+).(\d+)", swig_version)
+       if m:
+         self._swigVersion = tuple(map(int, m.groups()))
+       else:
+
+Modified: subversion/trunk/build/transform_sql.py
+==============================================================================
+--- subversion/trunk/build/transform_sql.py    Sat Sep 30 11:00:27 2023        
(r1)
++++ subversion/trunk/build/transform_sql.py    Sat Sep 30 13:13:16 2023        
(r2)
+@@ -50,7 +50,7 @@
+ 
+   # a few SQL comments that act as directives for this transform system
+   re_format = re.compile('-- *format: *([0-9]+)')
+-  re_statement = re.compile('-- *STMT_([A-Z_0-9]+)( +\(([^\)]*)\))?')
++  re_statement = re.compile(r'-- *STMT_([A-Z_0-9]+)( +\(([^)]*)\))?')
+   re_include = re.compile('-- *include: *([-a-z]+)')
+   re_define = re.compile('-- *define: *([A-Z_0-9]+)')
+ 
+
+Modified: subversion/trunk/subversion/tests/cmdline/basic_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/basic_tests.py   Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/basic_tests.py   Sat Sep 30 
13:13:16 2023        (r2)
+@@ -705,8 +705,8 @@
+ 
+   # "Extra" files that we expect to result from the conflicts.
+   # These are expressed as list of regexps.  What a cool system!  :-)
+-  extra_files = ['mu.*\.r1', 'mu.*\.r2', 'mu.*\.mine',
+-                 'rho.*\.r1', 'rho.*\.r2', 'rho.*\.mine',]
++  extra_files = [r'mu.*\.r1', r'mu.*\.r2', r'mu.*\.mine',
++                 r'rho.*\.r1', r'rho.*\.r2', r'rho.*\.mine',]
+ 
+   # Do the update and check the results in three ways.
+   # All "extra" files are passed to detect_conflict_files().
+@@ -2267,11 +2267,11 @@
+ 
+   # "Extra" files that we expect to result from the conflicts.
+   # These are expressed as list of regexps.  What a cool system!  :-)
+-  extra_files = ['mu.*\.r1', 'mu.*\.r2', 'mu.*\.mine',
+-                 'lambda.*\.r1', 'lambda.*\.r2', 'lambda.*\.mine',
+-                 'omega.*\.r1', 'omega.*\.r2', 'omega.*\.mine',
+-                 'rho.*\.r1', 'rho.*\.r2', 'rho.*\.mine',
+-                 'tau.*\.r1', 'tau.*\.r2', 'tau.*\.mine',
++  extra_files = [r'mu.*\.r1', r'mu.*\.r2', r'mu.*\.mine',
++                 r'lambda.*\.r1', r'lambda.*\.r2', r'lambda.*\.mine',
++                 r'omega.*\.r1', r'omega.*\.r2', r'omega.*\.mine',
++                 r'rho.*\.r1', r'rho.*\.r2', r'rho.*\.mine',
++                 r'tau.*\.r1', r'tau.*\.r2', r'tau.*\.mine',
+                  ]
+ 
+   # Do the update and check the results in three ways.
+@@ -2347,7 +2347,7 @@
+                                           ""]))
+ 
+   # Set the expected extra files for the test
+-  extra_files = ['omega.*\.r1', 'omega.*\.r2', 'omega.*\.mine',]
++  extra_files = [r'omega.*\.r1', r'omega.*\.r2', r'omega.*\.mine',]
+ 
+   # Set the expected status for the test
+   expected_status = svntest.actions.get_virginal_state(wc_backup, 2)
+
+Modified: subversion/trunk/subversion/tests/cmdline/changelist_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/changelist_tests.py      Sat Sep 
30 11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/changelist_tests.py      Sat Sep 
30 13:13:16 2023        (r2)
+@@ -130,9 +130,9 @@
+ 
+ 
+ # Regular expressions for 'svn changelist' output.
+-_re_cl_rem_pattern = "^D \[(.*)\] (.*)"
+-_re_cl_skip = re.compile("Skipped '(.*)'")
+-_re_cl_add  = re.compile("^A \[(.*)\] (.*)")
++_re_cl_rem_pattern = r"^D \[(.*)\] (.*)"
++_re_cl_skip = re.compile(r"Skipped '(.*)'")
++_re_cl_add  = re.compile(r"^A \[(.*)\] (.*)")
+ _re_cl_rem  = re.compile(_re_cl_rem_pattern)
+ 
+ def verify_changelist_output(output, expected_adds=None,
+
+Modified: subversion/trunk/subversion/tests/cmdline/checkout_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/checkout_tests.py        Sat Sep 
30 11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/checkout_tests.py        Sat Sep 
30 13:13:16 2023        (r2)
+@@ -882,8 +882,8 @@
+     })
+ 
+   # "Extra" files that we expect to result from the conflicts.
+-  extra_files = ['eta\.r0', 'eta\.r2', 'eta\.mine',
+-                 'kappa\.r0', 'kappa\.r2', 'kappa\.mine']
++  extra_files = [r'eta\.r0', r'eta\.r2', r'eta\.mine',
++                 r'kappa\.r0', r'kappa\.r2', r'kappa\.mine']
+ 
+   # Perform the checkout and check the results in three ways.
+   # We use --force here because run_and_verify_checkout() will delete
+
+Modified: subversion/trunk/subversion/tests/cmdline/copy_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/copy_tests.py    Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/copy_tests.py    Sat Sep 30 
13:13:16 2023        (r2)
+@@ -1419,7 +1419,7 @@
+   if re.match(b'[^\\r]\\n', raw_contents):
+     raise svntest.Failure
+ 
+-  if not re.match(b'.*\$LastChangedRevision:\s*\d+\s*\$', line_contents[3]):
++  if not re.match(b'.*\\$LastChangedRevision:\\s*\\d+\\s*\\$', 
line_contents[3]):
+     raise svntest.Failure
+ 
+ #-------------------------------------------------------------
+
+Modified: subversion/trunk/subversion/tests/cmdline/diff_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/diff_tests.py    Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/diff_tests.py    Sat Sep 30 
13:13:16 2023        (r2)
+@@ -833,7 +833,7 @@
+     ' This is the file \'mu\'.\n',
+     '+\n',
+     '+Actually, it\'s a new mu.\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+   ]
+ 
+   svntest.actions.run_and_verify_svn(expected_output, [],
+@@ -1024,7 +1024,7 @@
+     None, [], 'diff', '-r', 'BASE:2', wc_dir)
+ 
+   # to do the comparison, remove all output lines starting with +++ or ---
+-  re_infoline = re.compile('^(\+\+\+|---).*$')
++  re_infoline = re.compile(r'^(\+\+\+|---).*$')
+   list1 = []
+   list2 = []
+ 
+@@ -4256,7 +4256,7 @@
+     '+++ %s\t(working copy)\n' % sbox.path('A/B/E'),
+     '@@ -0,0 +1 @@\n',
+     '+text\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+   ]
+ 
+   svntest.actions.run_and_verify_svn(expected_output, [],
+@@ -4464,7 +4464,7 @@
+     'Added: K\n',
+     '## -0,0 +1 ##\n',
+     '+V\n',
+-    '\ No newline at end of property\n',
++    '\\ No newline at end of property\n',
+     'Index: %s\n' % (sbox.path('iota'),),
+     '===================================================================\n',
+     '--- %s\t(revision 1)\n' % (sbox.path('iota'),),
+@@ -4475,7 +4475,7 @@
+     'Added: K\n',
+     '## -0,0 +1 ##\n',
+     '+V\n',
+-    '\ No newline at end of property\n',
++    '\\ No newline at end of property\n',
+   ]
+   svntest.actions.run_and_verify_svn(expected_output, [], 'diff', wc_dir)
+ 
+@@ -4639,7 +4639,7 @@
+                         'Deleted: svn:mime-type\n',
+                         '## -1 +0,0 ##\n',
+                         '-text/plain\n',
+-                        '\ No newline at end of property\n']
++                        '\\ No newline at end of property\n']
+     svntest.actions.run_and_verify_svn(expected_output, [], 'diff',
+                                        '-r2:1', newfile)
+ 
+@@ -4661,7 +4661,7 @@
+     '@@ -1 +1,2 @@\n',
+     ' This is the file \'mu\'.\n',
+     '+Mu????\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+   ]
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'diff', '-r', '1', sbox.ospath('iota'))
+@@ -4676,7 +4676,7 @@
+     '-This is the file \'iota\'.\n',
+     '+This is the file \'mu\'.\n',
+     '+Mu????\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+   ]
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'diff', '-r', '1', sbox.ospath(''))
+@@ -4709,7 +4709,7 @@
+       'Deleted: A\n',
+       '## -1 +0,0 ##\n',
+       '-B\n',
+-      '\ No newline at end of property\n',
++      '\\ No newline at end of property\n',
+     ]
+ 
+     svntest.actions.run_and_verify_svn(expected_output, [],
+@@ -4726,7 +4726,7 @@
+       'Deleted: A\n',
+       '## -1 +0,0 ##\n',
+       '-B\n',
+-      '\ No newline at end of property\n',
++      '\\ No newline at end of property\n',
+     ]
+ 
+     svntest.actions.run_and_verify_svn(expected_output, [],
+@@ -4823,7 +4823,7 @@
+       'Added: p2\n',
+       '## -0,0 +1 ##\n',
+       '+v2\n',
+-      '\ No newline at end of property\n',
++      '\\ No newline at end of property\n',
+     ]
+ 
+     svntest.actions.run_and_verify_svn(expected_output_C2, [],
+@@ -5036,14 +5036,14 @@
+     '+++ %s\t(working copy)\n' % sbox.path('to-iota'),
+     '@@ -0,0 +1 @@\n',
+     '+link iota\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+     '\n',
+     'Property changes on: %s\n' % sbox.path('to-iota'),
+     '___________________________________________________________________\n',
+     'Added: svn:special\n',
+     '## -0,0 +1 ##\n',
+     '+*\n',
+-    '\ No newline at end of property\n',
++    '\\ No newline at end of property\n',
+   ], [], 'diff', wc_dir)
+ 
+   svntest.actions.run_and_verify_svn([
+@@ -5055,14 +5055,14 @@
+     '+++ b/to-iota\t(working copy)\n',
+     '@@ -0,0 +1 @@\n',
+     '+iota\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+     '\n',
+     'Property changes on: to-iota\n',
+     '___________________________________________________________________\n',
+     'Added: svn:special\n',
+     '## -0,0 +1 ##\n',
+     '+*\n',
+-    '\ No newline at end of property\n',
++    '\\ No newline at end of property\n',
+   ], [], 'diff', wc_dir, '--git')
+ 
+   sbox.simple_commit()
+@@ -5076,9 +5076,9 @@
+     '+++ %s\t(working copy)\n' % sbox.path('to-iota'),
+     '@@ -1 +1 @@\n',
+     '-link iota\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+     '+link A/B/E/alpha\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+   ], [], 'diff', wc_dir)
+ 
+   svntest.actions.run_and_verify_svn([
+@@ -5090,9 +5090,9 @@
+     '+++ b/to-iota\t(working copy)\n',
+     '@@ -1 +1 @@\n',
+     '-iota\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+     '+A/B/E/alpha\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+   ], [], 'diff', wc_dir, '--git')
+ 
+ 
+
+Modified: subversion/trunk/subversion/tests/cmdline/getopt_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/getopt_tests.py  Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/getopt_tests.py  Sat Sep 30 
13:13:16 2023        (r2)
+@@ -94,7 +94,7 @@
+                   'version X.Y.Z '),
+                  # The copyright end date keeps changing; fix forever.
+                  (re.compile(r'Copyright \(C\) 20\d\d The Apache '
+-                              'Software Foundation\.'),
++                             r'Software Foundation\.'),
+                   'Copyright (C) YYYY The Apache Software Foundation'),
+                  # In 'svn --version --quiet', we print only the version
+                  # number in a single line.
+@@ -120,7 +120,7 @@
+ # seen switch_res_line.
+ switched_rep_lines_res = [
+                           # We don't care about the actual canonical host
+-                          (re.compile('^\* running on.*$'), '* running on'),
++                          (re.compile(r'^\* running on.*$'), '* running on'),
+                          ]
+ 
+ def process_lines(lines):
+
+Modified: subversion/trunk/subversion/tests/cmdline/info_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/info_tests.py    Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/info_tests.py    Sat Sep 30 
13:13:16 2023        (r2)
+@@ -96,7 +96,7 @@
+   atttribute_re = re.compile(
+                  r"\s+(?P<key>[\w-]+)\s*=\s*(['\"])(?P<val>[^'\"]*)\2", re.M)
+   self_closing_re = re.compile(r"\s*/>", re.M)
+-  content_re_str = "\\s*>(?P<content>.*?)</%s\s*>"
++  content_re_str = r"\s*>(?P<content>.*?)</%s\s*>"
+ 
+   m = start_tag_re.match(str)
+   if not m:
+@@ -402,7 +402,7 @@
+         'Path'              : re.escape(os.path.basename(sbox.repo_dir)),
+         'Repository Root'   : re.escape(sbox.repo_url),
+         'URL'               : re.escape(sbox.repo_url),
+-        'Relative URL'      : '\^/', # escape ^ -- this isn't a regexp
++        'Relative URL'      : r'\^/', # escape ^ -- this isn't a regexp
+         'Revision'          : '1',
+         'Node Kind'         : 'directory',
+         'Last Changed Rev'  : '1',
+@@ -412,7 +412,7 @@
+         'Name'              : 'iota',
+         'Repository Root'   : re.escape(sbox.repo_url),
+         'URL'               : re.escape(sbox.repo_url + '/iota'),
+-        'Relative URL'      : '\^/iota', # escape ^ -- this isn't a regexp
++        'Relative URL'      : r'\^/iota', # escape ^ -- this isn't a regexp
+         'Revision'          : '1',
+         'Node Kind'         : 'file',
+         'Last Changed Rev'  : '1',
+
+Modified: subversion/trunk/subversion/tests/cmdline/legacy/utf8_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/legacy/utf8_tests.py     Sat Sep 
30 11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/legacy/utf8_tests.py     Sat Sep 
30 13:13:16 2023        (r2)
+@@ -143,7 +143,7 @@
+ # Also check that the environment contains the expected locale settings
+ # either by default, or because we set them above.
+ if localematch:
+-  localeregex = re.compile('^en_US\.ISO-?8859-1$', re.I)
++  localeregex = re.compile(r'^en_US\.ISO-?8859-1$', re.I)
+   for env in [ 'LC_ALL', 'LC_CTYPE', 'LANG' ]:
+     env_value = os.getenv(env)
+     if env_value:
+
+Modified: subversion/trunk/subversion/tests/cmdline/lock_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/lock_tests.py    Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/lock_tests.py    Sat Sep 30 
13:13:16 2023        (r2)
+@@ -91,8 +91,8 @@
+                                      '-m', '', file_path)
+ 
+   # --- Meanwhile, in our other working copy... ---
+-  err_re = "(svn\: E195022\: File '.*iota' is locked in another)|" + \
+-           "(svn\: E160039: User '?jconstant'? does not own lock on 
path.*iota')"
++  err_re = r"(svn\: E195022\: File '.*iota' is locked in another)|" + \
++           r"(svn\: E160039: User '?jconstant'? does not own lock on 
path.*iota')"
+ 
+   svntest.main.run_svn(None, 'update', wc_b)
+   # -- Try to change a file --
+@@ -112,8 +112,8 @@
+   # change the locked file's properties
+   svntest.main.run_svn(None, 'propset', 'sneakyuser', 'Sally', file_path_b)
+ 
+-  err_re = "(svn\: E195022\: File '.*iota' is locked in another)|" + \
+-           "(svn\: E160039\: User '?jconstant'? does not own lock on path)"
++  err_re = r"(svn\: E195022\: File '.*iota' is locked in another)|" + \
++           r"(svn\: E160039\: User '?jconstant'? does not own lock on path)"
+ 
+   # attempt (and fail) to commit as user Sally
+   svntest.actions.run_and_verify_commit(wc_b, None, None, err_re,
+@@ -1275,8 +1275,8 @@
+                                      [], "lock", fname)
+ 
+   # Make sure ls shows it being locked.
+-  expected_output = " +2 " + re.escape(svntest.main.wc_author) + " +O .+f|" \
+-                    " +2 " + re.escape(svntest.main.wc_author) + "    .+\./"
++  expected_output = r" +2 %(author)s +O .+f| +2 %(author)s    .+\./" % \
++                    {'author': re.escape(svntest.main.wc_author)}
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      "list", "-v", dirname)
+ 
+
+Modified: subversion/trunk/subversion/tests/cmdline/log_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/log_tests.py     Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/log_tests.py     Sat Sep 30 
13:13:16 2023        (r2)
+@@ -471,8 +471,7 @@
+ 
+   # Regular expression to match the header line of a log message, with
+   # these groups: (revision number), (author), (date), (num lines).
+-  header_re = re.compile('^r([0-9]+) \| ' \
+-                         + '([^|]*) \| ([^|]*) \| ([0-9]+) lines?')
++  header_re = re.compile(r'^r([0-9]+) \| ([^|]*) \| ([^|]*) \| ([0-9]+) 
lines?')
+ 
+   # The log chain to return.
+   chain = []
+@@ -984,10 +983,10 @@
+ 
+   # Verify the output contains either the expected fuzzy escape
+   # sequence, or the literal control char.
+-  match_unescaped_ctrl_re = "This msg contains a Ctrl-T \(.\) " \
+-                            "and a Ctrl-I \(\t\)\."
+-  match_escaped_ctrl_re = "^This msg contains a Ctrl-T \(\?\\\\020\) " \
+-                          "and a Ctrl-I \(\t\)\."
++  match_unescaped_ctrl_re = r"This msg contains a Ctrl-T \(.\) " \
++                            r"and a Ctrl-I \(\t\)\."
++  match_escaped_ctrl_re = r"^This msg contains a Ctrl-T \(\?\\020\) " \
++                          r"and a Ctrl-I \(\t\)\."
+   matched = None
+   for line in output:
+     if re.match(match_unescaped_ctrl_re, line) \
+@@ -1490,8 +1489,8 @@
+ 
+   # Can't set revprops with log.
+   svntest.actions.run_and_verify_log_xml(
+-    expected_stderr=(".*cannot assign with 'with-revprop' option"
+-                     " \(drop the '='\)"),
++    expected_stderr=(r".*cannot assign with 'with-revprop' option"
++                     r" \(drop the '='\)"),
+     args=['--with-revprop=foo=bar'])
+ 
+   # basic test without revprop options
+@@ -2670,8 +2669,8 @@
+                                      '-r2')
+ 
+   expected_output = svntest.verify.RegexListOutput([
+-    '-+\\n',
+-    'r3\ .*\n',
++    r'-+\n',
++    r'r3 .*\n',
+     re.escape('Changed paths:\n'),
+     re.escape('   D /A/B/E\n'),
+     re.escape('   A /E (from /A/B/E:2)\n'), # Patched - Direct move
+@@ -2680,7 +2679,7 @@
+     re.escape('   D /iota\n'),
+     re.escape('   A /iotb (from /iota:2)\n'), # Patched - Direct move
+     re.escape('   A /mutb (from /A/mu:1)\n'), # Copy (always r1)
+-    '-+\\n'
++    r'-+\n',
+   ])
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'log', '-v', '-q', sbox.wc_dir,
+
+Modified: subversion/trunk/subversion/tests/cmdline/merge_authz_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/merge_authz_tests.py     Sat Sep 
30 11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/merge_authz_tests.py     Sat Sep 
30 13:13:16 2023        (r2)
+@@ -773,7 +773,7 @@
+     'Added: k\n',
+     '## -0,0 +1 ##\n',
+     '+v\n',
+-    '\ No newline at end of property\n'
++    '\\ No newline at end of property\n'
+   ]
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'diff', sbox.repo_url + '/A', '-c', '2')
+@@ -830,9 +830,9 @@
+       'Modified: this-is\n',
+       '## -1 +1 ##\n',
+       '-E\n',
+-      '\ No newline at end of property\n',
++      '\\ No newline at end of property\n',
+       '+G\n',
+-      '\ No newline at end of property\n',
++      '\\ No newline at end of property\n',
+     ]
+   else:
+     # ### We should also see a property deletion here!
+@@ -847,7 +847,7 @@
+     'Deleted: this-is\n',
+     '## -1 +0,0 ##\n',
+     '-E\n',
+-    '\ No newline at end of property\n',
++    '\\ No newline at end of property\n',
+     'Index: .\n',
+     '===================================================================\n',
+     '--- .\t(nonexistent)\n',
+@@ -858,7 +858,7 @@
+       'Added: this-is\n',
+       '## -0,0 +1 ##\n',
+       '+G\n',
+-      '\ No newline at end of property\n',
++      '\\ No newline at end of property\n',
+     ]
+ 
+   # Use two url diff, because 'svn diff url -c' uses copyfrom to diff against
+
+Modified: subversion/trunk/subversion/tests/cmdline/merge_automatic_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/merge_automatic_tests.py Sat Sep 
30 11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/merge_automatic_tests.py Sat Sep 
30 13:13:16 2023        (r2)
+@@ -1361,9 +1361,9 @@
+ 
+   # Let commit fix the eols
+   sbox.simple_add_text('with\rCRLF\rhere!', 'A/crlf')
+-  sbox.simple_add_text('with\rnative\r\eol', 'A/native')
+-  sbox.simple_add_text('with\rCR\r\eol', 'A/cr')
+-  sbox.simple_add_text('with\rLF\r\eol', 'A/lf')
++  sbox.simple_add_text('with\rnative\r\\eol', 'A/native')
++  sbox.simple_add_text('with\rCR\r\\eol', 'A/cr')
++  sbox.simple_add_text('with\rLF\r\\eol', 'A/lf')
+ 
+   # And apply the magic property
+   sbox.simple_propset('svn:eol-style', 'CRLF',   'A/crlf')
+
+Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/merge_tests.py   Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/merge_tests.py   Sat Sep 30 
13:13:16 2023        (r2)
+@@ -247,9 +247,9 @@
+ 
+   expected_skip = wc.State('', { })
+ 
+-  tau_conflict_support_files = ["tau\.working",
+-                                "tau\.merge-right\.r3",
+-                                "tau\.merge-left\.r1"]
++  tau_conflict_support_files = [r"tau\.working",
++                                r"tau\.merge-right\.r3",
++                                r"tau\.merge-left\.r1"]
+ 
+   svntest.actions.run_and_verify_merge(other_wc, '1', '3',
+                                        sbox.repo_url, None,
+@@ -2629,7 +2629,7 @@
+   expected_skip = wc.State('', { })
+ 
+   # should have 3 'prej' files left behind, describing prop conflicts:
+-  extra_files = ['alpha.*\.prej', 'beta.*\.prej', 'dir_conflicts.*\.prej']
++  extra_files = [r'alpha.*\.prej', r'beta.*\.prej', r'dir_conflicts.*\.prej']
+ 
+   svntest.actions.run_and_verify_merge(B2_path, '3', '4', B_url, None,
+                                        expected_output,
+@@ -2752,7 +2752,7 @@
+   expected_skip = wc.State('', { })
+ 
+   # should have 2 'prej' files left behind, describing prop conflicts:
+-  extra_files = ['alpha.*\.prej', 'dir_conflicts.*\.prej']
++  extra_files = [r'alpha.*\.prej', r'dir_conflicts.*\.prej']
+ 
+   svntest.actions.run_and_verify_merge(B2_path, '3', '4', B_url, None,
+                                        expected_output,
+@@ -2952,9 +2952,9 @@
+                                        expected_skip,
+                                        expected_error,
+                                        extra_files=
+-                                       ["mu\.working",
+-                                        "mu\.merge-right\.r4",
+-                                        "mu\.merge-left\.r3"])
++                                       [r"mu\.working",
++                                        r"mu\.merge-right\.r4",
++                                        r"mu\.merge-left\.r3"])
+ 
+ #----------------------------------------------------------------------
+ # Test for issue 2135
+@@ -14517,9 +14517,9 @@
+                       "=======\n"
+                       "New content>>>>>>> .merge-right.r3\n")
+   expected_status.tweak('D/H/psi', status='C ')
+-  psi_conflict_support_files = ["psi\.working",
+-                                "psi\.merge-right\.r3",
+-                                "psi\.merge-left\.r2"]
++  psi_conflict_support_files = [r"psi\.working",
++                                r"psi\.merge-right\.r3",
++                                r"psi\.merge-left\.r2"]
+   svntest.actions.run_and_verify_merge(A_COPY_path, '2', '3',
+                                        sbox.repo_url + '/A', None,
+                                        expected_output,
+@@ -17301,7 +17301,7 @@
+ 
+   # r4
+   svntest.main.file_write(sbox.ospath('dir/binary-file'),
+-                          '\9\8\7\6\5\4\3\2\1')
++                          '\x09\x08\7\6\5\4\3\2\1')
+   sbox.simple_commit()
+ 
+   sbox.simple_update()
+
+Modified: 
subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py     
Sat Sep 30 11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/merge_tree_conflict_tests.py     
Sat Sep 30 13:13:16 2023        (r2)
+@@ -1856,9 +1856,9 @@
+   actions.run_and_verify_status(wc_dir, expected_status)
+ 
+   # Check the tree conflict types:
+-  expected_stdout = '(R.*)|(Summary of conflicts.*)|(  Tree conflicts.*)' \
+-                    '|(.*local delete, incoming replace upon merge.*)' \
+-                    '|(      \>.*)'
++  expected_stdout = r'(R.*)|(Summary of conflicts.*)|(  Tree conflicts.*)' \
++                    r'|(.*local delete, incoming replace upon merge.*)' \
++                    r'|(      \>.*)'
+   tree_conflicted_path = [A_B_E, A_mu, A_D_G_pi, A_D_H]
+   for path in tree_conflicted_path:
+     actions.run_and_verify_svn2(expected_stdout, [], 0, 'st',
+
+Modified: subversion/trunk/subversion/tests/cmdline/patch_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/patch_tests.py   Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/patch_tests.py   Sat Sep 30 
13:13:16 2023        (r2)
+@@ -3433,7 +3433,7 @@
+     value = "v\n"
+   else:
+     value = "v"
+-    unidiff_patch += ['\ No newline at end of property\n']
++    unidiff_patch += ['\\ No newline at end of property\n']
+ 
+   svntest.main.file_write(patch_file_path, ''.join(unidiff_patch), 'wb')
+ 
+@@ -5807,7 +5807,7 @@
+     'Added: svn:mime-type\n',
+     '## -0,0 +1 ##\n',
+     '+application/binary\n',
+-    '\ No newline at end of property\n',
++    '\\ No newline at end of property\n',
+   ]
+ 
+   _, diff_output, _ = svntest.actions.run_and_verify_svn(expected_output, [],
+@@ -6005,7 +6005,7 @@
+    '@@ -1 +1 @@\n',
+    '-This is the file \'mu\'.\n',
+    '+This is the file \'mu\'.\n',
+-   '\ No newline at end of file\n',
++   '\\ No newline at end of file\n',
+    'Index: iota\n',
+    '===================================================================\n',
+    '--- iota\t(revision 1)\n',
+@@ -6013,7 +6013,7 @@
+    '@@ -1 +1 @@\n',
+    '-This is the file \'iota\'.\n',
+    '+This is the file \'iota\'.\n',
+-   '\ No newline at end of file' # Missing EOL
++   '\\ No newline at end of file' # Missing EOL
+   ]
+ 
+   patch = sbox.get_tempname('patch')
+@@ -6073,7 +6073,7 @@
+     '+++ A/mu\t(working copy)\n',
+     '@@ -1 +1 @@\n',
+     '-This is the file \'mu\'.\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+     '+This is the file \'mu\'.\n',
+     'Index: iota\n',
+     '===================================================================\n',
+@@ -6081,7 +6081,7 @@
+     '+++ iota\t(working copy)\n',
+     '@@ -1 +1 @@\n',
+     '-This is the file \'iota\'.\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+     '+This is the file \'iota\'.' # Missing eol
+   ]
+ 
+@@ -6746,9 +6746,9 @@
+   sbox.build()
+   wc_dir = sbox.wc_dir
+ 
+-  eicar_data = 'X5O!P%@AP[4\PZX54(P^)7CC)7}$' \
++  eicar_data = 'X5O!P%@AP[4\\PZX54(P^)7CC)7}$' \
+                'EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*\0'
+-  other_data = 'X5O!P%@AP[4\PZX54(P^)7CC)7}$' \
++  other_data = 'X5O!P%@AP[4\\PZX54(P^)7CC)7}$' \
+                'SOME-LESS-INTERESTING-OTHER-TEXT!!!$H+H*\0' \
+                '\0\0\0\0\0\0\0\0'
+ 
+@@ -6912,7 +6912,7 @@
+     '+++ b/link-to-iota\n',
+     '@@ -0,0 +1 @@\n',
+     '+iota\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+   ]
+ 
+   patch_edit = [
+@@ -6922,9 +6922,9 @@
+     '+++ b/link-to-iota\n',
+     '@@ -1 +1 @@\n',
+     '-iota\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+     '+A/mu\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+   ]
+ 
+   patch_to_file = [
+@@ -6935,7 +6935,7 @@
+     '+++ /dev/null\n',
+     '@@ -1 +0,0 @@\n',
+     '-A/mu\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+     'diff --git a/link-to-iota b/link-to-iota\n',
+     'new file mode 100644\n',
+     'index 0000000..1b130bf\n',
+@@ -7039,7 +7039,7 @@
+     '+++ b/link-to-iota\n',
+     '@@ -0,0 +1 @@\n',
+     '+iota\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+   ]
+ 
+   patch_edit = [
+@@ -7049,9 +7049,9 @@
+     '+++ b/link-to-iota\n',
+     '@@ -1 +1 @@\n',
+     '-iota\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+     '+A/mu\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+   ]
+ 
+   patch_to_file = [
+@@ -7062,7 +7062,7 @@
+     '+++ /dev/null\n',
+     '@@ -1 +0,0 @@\n',
+     '-A/mu\n',
+-    '\ No newline at end of file\n',
++    '\\ No newline at end of file\n',
+     'diff --git a/link-to-iota b/link-to-iota\n',
+     'new file mode 100644\n',
+     'index 0000000..1b130bf\n',
+@@ -7709,7 +7709,7 @@
+       ' J\n'
+       ' K\n'
+       ' L\n'
+-      '\ No newline at end of file', mode='wb')
++      '\\ No newline at end of file', mode='wb')
+ 
+   expected_skip = wc.State('', { })
+   expected_output = wc.State(wc_dir, {
+@@ -7735,7 +7735,7 @@
+       ' J\n'
+       ' K\n'
+       ' L\n'
+-      '\ No newline at end of file', mode='wb')
++      '\\ No newline at end of file', mode='wb')
+ 
+   svntest.actions.run_and_verify_patch(wc_dir, local_patch,
+                                        expected_output, None,
+@@ -7871,7 +7871,7 @@
+     value = "v\n"
+   else:
+     value = "v"
+-    unidiff_patch += ['\ No newline at end of property\n']
++    unidiff_patch += ['\\ No newline at end of property\n']
+ 
+   patch_file_path = sbox.get_tempname('my.patch')
+   svntest.main.file_write(patch_file_path, ''.join(unidiff_patch), 'wb')
+
+Modified: subversion/trunk/subversion/tests/cmdline/prop_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/prop_tests.py    Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/prop_tests.py    Sat Sep 30 
13:13:16 2023        (r2)
+@@ -349,7 +349,7 @@
+   expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+   expected_status.tweak('A/mu', 'A', status=' C')
+ 
+-  extra_files = ['mu.*\.prej', 'dir_conflicts.*\.prej']
++  extra_files = [r'mu.*\.prej', r'dir_conflicts.*\.prej']
+   # Do the update and check the results in three ways... INCLUDING PROPS
+   svntest.actions.run_and_verify_update(wc_dir,
+                                         expected_output,
+
+Modified: subversion/trunk/subversion/tests/cmdline/special_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/special_tests.py Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/special_tests.py Sat Sep 30 
13:13:16 2023        (r2)
+@@ -71,7 +71,7 @@
+   exit_code, stdout_lines, stderr_lines = svntest.main.run_svn(1, 'diff',
+                                                                wc_dir)
+ 
+-  regex = '^\+link linktarget'
++  regex = r'^\+link linktarget'
+   for line in stdout_lines:
+     if re.match(regex, line):
+       break
+
+Modified: subversion/trunk/subversion/tests/cmdline/stat_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/stat_tests.py    Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/stat_tests.py    Sat Sep 30 
13:13:16 2023        (r2)
+@@ -559,7 +559,7 @@
+ 
+   for line in out:
+     # The "/?" is just to allow for an optional trailing slash.
+-    if re.match("\\s+\\*.*\.other/?$", line):
++    if re.match(r"\s+\*.*\.other/?$", line):
+       raise svntest.Failure
+ 
+ @Issue(1289)
+
+Modified: subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py        Sat Sep 
30 11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py        Sat Sep 
30 13:13:16 2023        (r2)
+@@ -1790,7 +1790,7 @@
+       "Owner: jrandom",
+       "Created:.*",
+       "Expires:.*",
+-      "Comment \(1 line\):",
++      r"Comment \(1 line\):",
+       "Locking files",
+       "\n", # empty line
+       ]
+@@ -3514,8 +3514,8 @@
+ 
+   # Check log.
+   expected_output = svntest.verify.RegexListOutput([
+-    '-+\\n',
+-    'r1\ .*\n',
++    r'-+\n',
++    r'r1 .*\n',
+     # '/A/D/H' and '/A/B/E' is not added.
+     re.escape('Changed paths:\n'),
+     re.escape('   A /A\n'),
+@@ -3531,7 +3531,7 @@
+     re.escape('   A /A/D/gamma\n'),
+     re.escape('   A /A/mu\n'),
+     re.escape('   A /iota\n'),
+-    '-+\\n'
++    r'-+\n',
+   ])
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'log', '-v', '-q', sbox2.repo_url)
+@@ -3567,18 +3567,18 @@
+ 
+   # Check log.
+   expected_output = svntest.verify.RegexListOutput([
+-    '-+\\n',
+-    'r2\ .*\n',
++    r'-+\n',
++    r'r2 .*\n',
+     re.escape('Changed paths:\n'),
+     # Simple add, not copy.
+     re.escape('   A /branches/branch1\n'),
+-    '-+\\n',
+-    'r1\ .*\n',
++    r'-+\n',
++    r'r1 .*\n',
+     # '/trunk' is not added.
+     re.escape('Changed paths:\n'),
+     re.escape('   A /branches\n'),
+     re.escape('   A /tags\n'),
+-    '-+\\n'
++    r'-+\n',
+   ])
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'log', '-v', '-q', sbox2.repo_url)
+@@ -3612,13 +3612,13 @@
+ 
+   # Check log.
+   expected_output = svntest.verify.RegexListOutput([
+-    '-+\\n',
+-    'r1\ .*\n',
++    r'-+\n',
++    r'r1 .*\n',
+     # '/B' is not added.
+     re.escape('Changed paths:\n'),
+     re.escape('   A /A\n'),
+     re.escape('   A /C\n'),
+-    '-+\\n'
++    r'-+\n',
+   ])
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'log', '-v', '-q', sbox2.repo_url)
+@@ -3654,17 +3654,17 @@
+ 
+   # Check log.
+   expected_output = svntest.verify.RegexListOutput([
+-    '-+\\n',
+-    'r2\ .*\n',
++    r'-+\n',
++    r'r2 .*\n',
+     re.escape('Changed paths:\n'),
+     # Simple add, not copy.
+     re.escape('   A /branches/branch1\n'),
+-    '-+\\n',
+-    'r1\ .*\n',
++    r'-+\n',
++    r'r1 .*\n',
+     # Only '/branches' is added in r1.
+     re.escape('Changed paths:\n'),
+     re.escape('   A /branches\n'),
+-    '-+\\n'
++    r'-+\n',
+   ])
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'log', '-v', '-q', sbox2.repo_url)
+@@ -3696,12 +3696,12 @@
+ 
+   # Check log.
+   expected_output = svntest.verify.RegexListOutput([
+-    '-+\\n',
+-    'r1\ .*\n',
++    r'-+\n',
++    r'r1 .*\n',
+     re.escape('Changed paths:\n'),
+     # Only '/bbc' is added in r1.
+     re.escape('   A /bbc\n'),
+-    '-+\\n'
++    r'-+\n',
+   ])
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'log', '-v', '-q', sbox2.repo_url)
+@@ -3733,14 +3733,14 @@
+ 
+   # Check log.
+   expected_output = svntest.verify.RegexListOutput([
+-    '-+\\n',
+-    'r1\ .*\n',
++    r'-+\n',
++    r'r1 .*\n',
+     # '/bbc' is not added.
+     re.escape('Changed paths:\n'),
+     re.escape('   A /aaa\n'),
+     re.escape('   A /aab\n'),
+     re.escape('   A /aac\n'),
+-    '-+\\n'
++    r'-+\n',
+   ])
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'log', '-v', '-q', sbox2.repo_url)
+@@ -3785,27 +3785,27 @@
+ 
+   # Check log. Revision properties ('svn:log' etc.) should be empty for r2.
+   expected_output = svntest.verify.RegexListOutput([
+-    '-+\\n',
+-    'r3 | jrandom | .* | 1 line\\n',
++    r'-+\n',
++    r'r3 \| jrandom \| .* \| 1 line\n',
+     re.escape('Changed paths:'),
+     re.escape('   A /r3a'),
+     re.escape('   A /r3b'),
+     re.escape('   A /r3c'),
+     '',
+     re.escape('Revision 3.'),
+-    '-+\\n',
++    r'-+\n',
+     re.escape('r2 | (no author) | (no date) | 1 line'),
+     '',
+     '',
+-    '-+\\n',
+-    'r1 | jrandom | .* | 1 line\\n',
++    r'-+\n',
++    r'r1 | jrandom | .* | 1 line\n',
+     re.escape('Changed paths:'),
+     re.escape('   A /r1a'),
+     re.escape('   A /r1b'),
+     re.escape('   A /r1c'),
+     '',
+     re.escape('Revision 1.'),
+-    '-+\\n',
++    r'-+\n',
+   ])
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'log', '-v',  sbox2.repo_url)
+@@ -3947,8 +3947,8 @@
+ 
+   # Check log.
+   expected_output = svntest.verify.RegexListOutput([
+-    '-+\\n',
+-    'r2\ .*\n',
++    r'-+\n',
++    r'r2 .*\n',
+     # Only '/COPY' is added
+     re.escape('Changed paths:\n'),
+     re.escape('   A /COPY'),
+@@ -3961,9 +3961,9 @@
+     re.escape('   A /COPY/H/omega'),
+     re.escape('   A /COPY/H/psi'),
+     re.escape('   A /COPY/gamma'),
+-    '-+\\n',
+-    'r1\ .*\n',
+-    '-+\\n'
++    r'-+\n',
++    r'r1 .*\n',
++    r'-+\n',
+   ])
+   svntest.actions.run_and_verify_svn(expected_output, [],
+                                      'log', '-v', '-q', sbox2.repo_url)
+
+Modified: subversion/trunk/subversion/tests/cmdline/svnfsfs_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/svnfsfs_tests.py Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/svnfsfs_tests.py Sat Sep 30 
13:13:16 2023        (r2)
+@@ -167,38 +167,38 @@
+                       'Histogram of directory property sizes:',
+                       'Histogram of directory property representation sizes:']
+   patterns_to_find = {
+-    'Reading revisions' : ['\s+ 0[ 0-9]*'],
+-    'Global .*'         : ['.*\d+ bytes in .*\d+ revisions',
+-                           '.*\d+ bytes in .*\d+ changes',
+-                           '.*\d+ bytes in .*\d+ node revision records',
+-                           '.*\d+ bytes in .*\d+ representations',
+-                           '.*\d+ bytes expanded representation size',
+-                           '.*\d+ bytes with rep-sharing off' ],
+-    'Noderev .*'        : ['.*\d+ bytes in .*\d+ nodes total',
+-                           '.*\d+ bytes in .*\d+ directory noderevs',
+-                           '.*\d+ bytes in .*\d+ file noderevs' ],
+-    'Representation .*' : ['.*\d+ bytes in .*\d+ representations total',
+-                           '.*\d+ bytes in .*\d+ directory representations',
+-                           '.*\d+ bytes in .*\d+ file representations',
+-                           '.*\d+ bytes in .*\d+ representations of added 
file nodes',
+-                           '.*\d+ bytes in .*\d+ directory property 
representations',
+-                           '.*\d+ bytes in .*\d+ file property 
representations',
+-                           '.*\d+ average delta chain length',
+-                           '.*\d+ bytes in header & footer overhead' ],
++    'Reading revisions' : [r'\s+ 0[ 0-9]*'],
++    'Global .*'         : [r'.*\d+ bytes in .*\d+ revisions',
++                           r'.*\d+ bytes in .*\d+ changes',
++                           r'.*\d+ bytes in .*\d+ node revision records',
++                           r'.*\d+ bytes in .*\d+ representations',
++                           r'.*\d+ bytes expanded representation size',
++                           r'.*\d+ bytes with rep-sharing off' ],
++    'Noderev .*'        : [r'.*\d+ bytes in .*\d+ nodes total',
++                           r'.*\d+ bytes in .*\d+ directory noderevs',
++                           r'.*\d+ bytes in .*\d+ file noderevs' ],
++    'Representation .*' : [r'.*\d+ bytes in .*\d+ representations total',
++                           r'.*\d+ bytes in .*\d+ directory representations',
++                           r'.*\d+ bytes in .*\d+ file representations',
++                           r'.*\d+ bytes in .*\d+ representations of added 
file nodes',
++                           r'.*\d+ bytes in .*\d+ directory property 
representations',
++                           r'.*\d+ bytes in .*\d+ file property 
representations',
++                           r'.*\d+ average delta chain length',
++                           r'.*\d+ bytes in header & footer overhead' ],
+     '.* representation statistics:' :
+-                          ['.*\d+ bytes in .*\d+ reps',
+-                           '.*\d+ bytes in .*\d+ shared reps',
+-                           '.*\d+ bytes expanded size',
+-                           '.*\d+ bytes expanded shared size',
+-                           '.*\d+ bytes with rep-sharing off',
+-                           '.*\d+ shared references',
+-                           '.*\d+ average delta chain length'],
+-    'Largest.*:'        : ['.*\d+ r\d+ */\S*'],
++                          [r'.*\d+ bytes in .*\d+ reps',
++                           r'.*\d+ bytes in .*\d+ shared reps',
++                           r'.*\d+ bytes expanded size',
++                           r'.*\d+ bytes expanded shared size',
++                           r'.*\d+ bytes with rep-sharing off',
++                           r'.*\d+ shared references',
++                           r'.*\d+ average delta chain length'],
++    'Largest.*:'        : [r'.*\d+ r\d+ */\S*'],
+     'Extensions by number .*:' :
+-                          ['.*\d+ \( ?\d+%\) representations'],
++                          [r'.*\d+ \( ?\d+%\) representations'],
+     'Extensions by size .*:' :
+-                          ['.*\d+ \( ?\d+%\) bytes'],
+-    'Histogram of .*:'  : ['.*\d+ \.\. < \d+.*\d+ \( ?\d+%\) bytes in *\d+ \( 
?\d+%\) items']
++                          [r'.*\d+ \( ?\d+%\) bytes'],
++    'Histogram of .*:'  : [r'.*\d+ \.\. < \d+.*\d+ \( ?\d+%\) bytes in *\d+ 
\( ?\d+%\) items']
+   }
+ 
+   # check that the output contains all sections
+
+Modified: subversion/trunk/subversion/tests/cmdline/svnmover_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/svnmover_tests.py        Sat Sep 
30 11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/svnmover_tests.py        Sat Sep 
30 13:13:16 2023        (r2)
+@@ -35,7 +35,7 @@
+ ######################################################################
+ 
+ _commit_re = re.compile('^Committed r([0-9]+)')
+-_log_re = re.compile('^   ([ADRM] /[^\(]+($| \(from .*:[0-9]+\)$))')
++_log_re = re.compile(r'^   ([ADRM] /[^\(]+($| \(from .*:[0-9]+\)$))')
+ _err_re = re.compile('^svnmover: (.*)$')
+ 
+ def mk_file(sbox, file_name):
+
+Modified: subversion/trunk/subversion/tests/cmdline/svnmucc_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/svnmucc_tests.py Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/svnmucc_tests.py Sat Sep 30 
13:13:16 2023        (r2)
+@@ -49,7 +49,7 @@
+                                          sbox.repo_url + '/A')
+ 
+ _svnmucc_re = re.compile(b'^(r[0-9]+) committed by jrandom at (.*)$')
+-_log_re = re.compile('^   ([ADRM] /[^\(]+($| \(from .*:[0-9]+\)$))')
++_log_re = re.compile(r'^   ([ADRM] /[^\(]+($| \(from .*:[0-9]+\)$))')
+ _err_re = re.compile('^svnmucc: (.*)$')
+ 
+ def test_svnmucc(repo_url, expected_path_changes, *varargs):
+
+Modified: subversion/trunk/subversion/tests/cmdline/svntest/actions.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/svntest/actions.py       Sat Sep 
30 11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/svntest/actions.py       Sat Sep 
30 13:13:16 2023        (r2)
+@@ -1046,9 +1046,9 @@
+       # normal line
+       key, value = line.split(':', 1)
+ 
+-      if re.search(' \(\d+ lines?\)$', key):
++      if re.search(r' \(\d+ lines?\)$', key):
+         # numbered continuation lines
+-        match = re.match('^(.*) \((\d+) lines?\)$', key)
++        match = re.match(r'^(.*) \((\d+) lines?\)$', key)
+         key = match.group(1)
+         lock_comment_lines = int(match.group(2))
+       elif len(value) > 1:
+
+Modified: subversion/trunk/subversion/tests/cmdline/svntest/main.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/svntest/main.py  Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/svntest/main.py  Sat Sep 30 
13:13:16 2023        (r2)
+@@ -1511,7 +1511,7 @@
+   merge operation on revisions REVSTART through REVEND.  Omit both
+   REVSTART and REVEND for the case where the left and right sides of
+   the merge are from different URLs."""
+-  from_foreign_phrase = foreign and "\(from foreign repository\) " or ""
++  from_foreign_phrase = foreign and r"\(from foreign repository\) " or ""
+   if target:
+     target_re = re.escape(target)
+   else:
+
+Modified: subversion/trunk/subversion/tests/cmdline/svntest/verify.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/svntest/verify.py        Sat Sep 
30 11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/svntest/verify.py        Sat Sep 
30 13:13:16 2023        (r2)
+@@ -1024,7 +1024,7 @@
+   ] + make_diff_prop_val("+", pval)
+ 
+ def make_diff_prop_modified(pname, pval1, pval2):
+-  """Return a property diff for modification of property PNAME, old value
++  r"""Return a property diff for modification of property PNAME, old value
+      PVAL1, new value PVAL2.
+ 
+      PVAL is a single string with no embedded newlines.  A newline at the
+
+Modified: subversion/trunk/subversion/tests/cmdline/svntest/wc.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/svntest/wc.py    Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/svntest/wc.py    Sat Sep 30 
13:13:16 2023        (r2)
+@@ -93,30 +93,30 @@
+                               '([KOBT ])'
+                               '([C ]) '
+                               '([* ]) +'
+-                              '((?P<wc_rev>\d+|-|\?) +(\d|-|\?)+ +(\S+) +)?'
++                              r'((?P<wc_rev>\d+|-|\?) +(\d|-|\?)+ +(\S+) +)?'
+                               '(?P<path>.+)$')
+ 
+ _re_parse_status_ex = re.compile('^      ('
+-               '(  \> moved (from (?P<moved_from>.+)|to (?P<moved_to>.*)))'
+-              '|(  \> swapped places with (?P<swapped_with>.+).*)'
+-              '|(\>   (?P<tc>.+))'
++               r'(  \> moved (from (?P<moved_from>.+)|to (?P<moved_to>.*)))'
++              r'|(  \> swapped places with (?P<swapped_with>.+).*)'
++              r'|(\>   (?P<tc>.+))'
+   ')$')
+ 
+ _re_parse_skipped = re.compile("^(Skipped[^']*) '(.+)'( --.*)?\n")
+ 
+ _re_parse_summarize = re.compile("^([MAD ][M ])      (.+)\n")
+ 
+-_re_parse_checkout = re.compile('^([RMAGCUDE_ B][MAGCUDE_ ])'
+-                                '([B ])'
+-                                '([CAUD ])\s+'
+-                                '(.+)')
+-_re_parse_co_skipped = re.compile('^(Restored|Skipped|Removed external)'
+-                                  '\s+\'(.+)\'(( --|: ).*)?')
+-_re_parse_co_restored = re.compile('^(Restored)\s+\'(.+)\'')
++_re_parse_checkout = re.compile(r'^([RMAGCUDE_ B][MAGCUDE_ ])'
++                                r'([B ])'
++                                r'([CAUD ])\s+'
++                                r'(.+)')
++_re_parse_co_skipped = re.compile(r'^(Restored|Skipped|Removed external)'
++                                  r'\s+\'(.+)\'(( --|: ).*)?')
++_re_parse_co_restored = re.compile(r'^(Restored)\s+\'(.+)\'')
+ 
+ # Lines typically have a verb followed by whitespace then a path.
+-_re_parse_commit_ext = re.compile('^(([A-Za-z]+( [a-z]+)*)) \'(.+)\'( --.*)?')
+-_re_parse_commit = re.compile('^(\w+(  \(bin\))?)\s+(.+)')
++_re_parse_commit_ext = re.compile("^(([A-Za-z]+( [a-z]+)*)) '(.+)'( --.*)?")
++_re_parse_commit = re.compile(r'^(\w+(  \(bin\))?)\s+(.+)')
+ 
+ #rN: eids 0 15 branches 4
+ _re_parse_eid_header = re.compile('^r(-1|[0-9]+): eids ([0-9]+) ([0-9]+) '
+
+Modified: subversion/trunk/subversion/tests/cmdline/trans_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/trans_tests.py   Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/trans_tests.py   Sat Sep 30 
13:13:16 2023        (r2)
+@@ -304,7 +304,7 @@
+   fp = open(url_unexp_path, 'r')
+   lines = fp.readlines()
+   if not ((len(lines) == 1)
+-          and (re.match("\$URL: (http|https|file|svn|svn\\+ssh)://",
++          and (re.match(r"\$URL: (http|https|file|svn|svn\+ssh)://",
+                         lines[0]))):
+     logger.warn("URL expansion failed for %s", url_unexp_path)
+     raise svntest.Failure
+@@ -314,7 +314,7 @@
+   fp = open(url_exp_path, 'r')
+   lines = fp.readlines()
+   if not ((len(lines) == 1)
+-          and (re.match("\$URL: (http|https|file|svn|svn\\+ssh)://",
++          and (re.match(r"\$URL: (http|https|file|svn|svn\+ssh)://",
+                         lines[0]))):
+     logger.warn("URL expansion failed for %s", url_exp_path)
+     raise svntest.Failure
+@@ -324,7 +324,7 @@
+   fp = open(id_unexp_path, 'r')
+   lines = fp.readlines()
+   if not ((len(lines) == 1)
+-          and (re.match("\$Id: id_unexp", lines[0]))):
++          and (re.match(r"\$Id: id_unexp", lines[0]))):
+     logger.warn("Id expansion failed for %s", id_exp_path)
+     raise svntest.Failure
+   fp.close()
+@@ -333,7 +333,7 @@
+   fp = open(id_exp_path, 'r')
+   lines = fp.readlines()
+   if not ((len(lines) == 1)
+-          and (re.match("\$Id: id_exp", lines[0]))):
++          and (re.match(r"\$Id: id_exp", lines[0]))):
+     logger.warn("Id expansion failed for %s", id_exp_path)
+     raise svntest.Failure
+   fp.close()
+@@ -342,7 +342,7 @@
+   fp = open(header_unexp_path, 'r')
+   lines = fp.readlines()
+   if not ((len(lines) == 1)
+-          and (re.match("\$Header: (https?|file|svn|svn\\+ssh)://.* jrandom",
++          and (re.match(r"\$Header: (https?|file|svn|svn\+ssh)://.* jrandom",
+                         lines[0]))):
+     logger.warn("Header expansion failed for %s", header_unexp_path)
+     raise svntest.Failure
+@@ -352,7 +352,7 @@
+   fp = open(header_exp_path, 'r')
+   lines = fp.readlines()
+   if not ((len(lines) == 1)
+-          and (re.match("\$Header: (https?|file|svn|svn\\+ssh)://.* jrandom",
++          and (re.match(r"\$Header: (https?|file|svn|svn\+ssh)://.* jrandom",
+                         lines[0]))):
+     logger.warn("Header expansion failed for %s", header_exp_path)
+     raise svntest.Failure
+@@ -409,7 +409,7 @@
+   fp = open(id_with_space_path, 'r')
+   lines = fp.readlines()
+   if not ((len(lines) == 1)
+-          and (re.match("\$Id: .*id with space", lines[0]))):
++          and (re.match(r"\$Id: .*id with space", lines[0]))):
+     logger.warn("Id expansion failed for %s", id_with_space_path)
+     raise svntest.Failure
+   fp.close()
+@@ -418,7 +418,7 @@
+   fp = open(id_exp_with_dollar_path, 'r')
+   lines = fp.readlines()
+   if not ((len(lines) == 1)
+-          and (re.match("\$Id: .*id_exp with_\$_sign [^$]* jrandom \$",
++          and (re.match(r"\$Id: .*id_exp with_\$_sign [^$]* jrandom \$",
+                         lines[0]))):
+     logger.warn("Id expansion failed for %s", id_exp_with_dollar_path)
+ 
+@@ -645,7 +645,7 @@
+   fp = open(other_url_path, 'r')
+   lines = fp.readlines()
+   if not ((len(lines) == 1)
+-          and (re.match("\$URL: (http|https|file|svn|svn\\+ssh)://",
++          and (re.match(r"\$URL: (http|https|file|svn|svn\+ssh)://",
+                         lines[0]))):
+     logger.warn("URL expansion failed for %s", other_url_path)
+     raise svntest.Failure
+
+Modified: subversion/trunk/subversion/tests/cmdline/update_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/update_tests.py  Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/update_tests.py  Sat Sep 30 
13:13:16 2023        (r2)
+@@ -620,8 +620,8 @@
+ 
+   # "Extra" files that we expect to result from the conflicts.
+   # These are expressed as list of regexps.  What a cool system!  :-)
+-  extra_files = ['mu.*\.r1', 'mu.*\.r2', 'mu.*\.mine',
+-                 'rho.*\.r1', 'rho.*\.r2', 'rho.*\.mine', 'rho.*\.prej']
++  extra_files = [r'mu.*\.r1', r'mu.*\.r2', r'mu.*\.mine',
++                 r'rho.*\.r1', r'rho.*\.r2', r'rho.*\.mine', r'rho.*\.prej']
+ 
+   # Do the update and check the results in three ways.
+   # All "extra" files are passed to detect_conflict_files().
+@@ -2700,10 +2700,10 @@
+     })
+ 
+   # "Extra" files that we expect to result from the conflicts.
+-  extra_files = ['eta\.r0', 'eta\.r2', 'eta\.mine',
+-                 'kappa\.r0', 'kappa\.r2', 'kappa\.mine',
+-                 'epsilon\.r0', 'epsilon\.r2', 'epsilon\.mine',
+-                 'kappa.prej', 'zeta.prej', 'dir_conflicts.prej']
++  extra_files = [r'eta\.r0', r'eta\.r2', r'eta\.mine',
++                 r'kappa\.r0', r'kappa\.r2', r'kappa\.mine',
++                 r'epsilon\.r0', r'epsilon\.r2', r'epsilon\.mine',
++                 r'kappa.prej', r'zeta.prej', r'dir_conflicts.prej']
+ 
+   # Perform forced update and check the results in three
+   # ways (including props).
+@@ -3826,9 +3826,9 @@
+                                              'foo\n'))
+ 
+   # Set the expected extra files for the test
+-  extra_files = ['iota.*\.r2', 'iota.*\.r3', 'iota.*\.mine',
+-                 'lambda.*\.r2', 'lambda.*\.r3', 'lambda.*\.mine',
+-                 'rho.*\.r2', 'rho.*\.r3', 'rho.*\.mine']
++  extra_files = [r'iota.*\.r2', r'iota.*\.r3', r'iota.*\.mine',
++                 r'lambda.*\.r2', r'lambda.*\.r3', r'lambda.*\.mine',
++                 r'rho.*\.r2', r'rho.*\.r3', r'rho.*\.mine']
+ 
+   # Set the expected status for the test
+   expected_status = svntest.actions.get_virginal_state(wc_backup, 3)
+
+Modified: subversion/trunk/subversion/tests/cmdline/upgrade_tests.py
+==============================================================================
+--- subversion/trunk/subversion/tests/cmdline/upgrade_tests.py Sat Sep 30 
11:00:27 2023        (r1)
++++ subversion/trunk/subversion/tests/cmdline/upgrade_tests.py Sat Sep 30 
13:13:16 2023        (r2)
+@@ -51,7 +51,7 @@
+ Issue = svntest.testcase.Issue_deco
+ Wimp = svntest.testcase.Wimp_deco
+ 
+-wc_is_too_old_regex = (".*is too old \(format \d+.*\).*")
++wc_is_too_old_regex = (r".*is too old \(format \d+.*\).*")
+ 
+ 
+ def get_current_format():
+
+Modified: subversion/trunk/tools/dist/release.py
+==============================================================================
+--- subversion/trunk/tools/dist/release.py     Sat Sep 30 11:00:27 2023        
(r1)
++++ subversion/trunk/tools/dist/release.py     Sat Sep 30 13:13:16 2023        
(r2)
+@@ -1567,7 +1567,7 @@
+     mergeinfo = mergeinfo.splitlines()
+ 
+     separator_pattern = re.compile('^-{72}$')
+-    revline_pattern = re.compile('^r(\d+) \| [^\|]+ \| [^\|]+ \| \d+ lines?$')
++    revline_pattern = re.compile(r'^r(\d+) \| [^|]+ \| [^|]+ \| \d+ lines?$')
+     changes_prefix_pattern = re.compile(r'^\[(U|D)?:?([^\]]+)?\](.+)$')
+     changes_suffix_pattern = re.compile(r'^(.+)\[(U|D)?:?([^\]]+)?\]$')
+     # TODO: push this into backport.status as a library function


Reply via email to