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[\w-]+)\s*=\s*(['\"])(?P[^'\"]*)\2", re.M) self_closing_re = re.compile(r"\s*/>", re.M) - content_re_str = "\\s*>(?P.*?)" + content_re_str = r"\s*>(?P.*?)" 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\d+|-|\?) +(\d|-|\?)+ +(\S+) +)?' + r'((?P\d+|-|\?) +(\d|-|\?)+ +(\S+) +)?' '(?P.+)$') _re_parse_status_ex = re.compile('^ (' - '( \> moved (from (?P.+)|to (?P.*)))' - '|( \> swapped places with (?P.+).*)' - '|(\> (?P.+))' + r'( \> moved (from (?P.+)|to (?P.*)))' + r'|( \> swapped places with (?P.+).*)' + r'|(\> (?P.+))' ')$') _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