While I'm browsing faillog on svn-windows-ra buildbot, I found
another failure not to be reported here, on Windows with Python 3

>From 
>https://ci.apache.org/builders/svn-windows-ra/builds/2935/steps/Test%20fsfs%2Bserf/logs/faillog:
[[[
W: CWD: E:\svn-ra\tests\subversion\tests\cmdline
Traceback (most recent call last):
  File "D:\ra\svn-ra\build\subversion\tests\cmdline\svntest\main.py", line 
1931, in run
    rc = self.pred.run(sandbox)
  File "D:\ra\svn-ra\build\subversion\tests\cmdline\svntest\testcase.py", line 
258, in run
    return self._delegate.run(sandbox)
  File "D:\ra\svn-ra\build\subversion\tests\cmdline\svntest\testcase.py", line 
178, in run
    result = self.func(sandbox)
  File "D:\ra\svn-ra\build\subversion\tests\cmdline\update_tests.py", line 
6393, in windows_update_backslash
    svntest.actions.run_and_verify_status(wc_dir, expected_status)
  File "D:\ra\svn-ra\build\subversion\tests\cmdline\svntest\actions.py", line 
1605, in run_and_verify_status
    actual_entries = wc.State.from_entries(wc_dir_name)
  File "D:\ra\svn-ra\build\subversion\tests\cmdline\svntest\wc.py", line 735, 
in from_entries
    dump_data = svntest.main.run_entriesdump_tree(base)
  File "D:\ra\svn-ra\build\subversion\tests\cmdline\svntest\main.py", line 933, 
in run_entriesdump_tree
    exec(''.join(filter_dbg(stdout_lines)))
  File "<string>", line 201
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in 
position 10-11: truncated \uXXXX escape
FAIL:  update_tests.py 76: test filename with backslashes inside
]]]

It seems this is caused by evaluation of "e.name = 'completely\unusable\dir'"
line generated by subversion/tests/cmdline/entries-dump. This is acceptable
by Python 2.7, but not acceptable by Python 3.7.

e.g.
[[[
$ python2.7 -c "print(repr('completely\unusable\dir'))"
'completely\\unusable\\dir'
$ python3.7 -c "print(repr('completely\unusable\dir'))"
  File "<string>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in 
position 10-11: truncated \uXXXX escape
]]]

I think it is need to escape characters in char *value when we print
them as Python's str value. The patch below may work for this purpose,
but I want someone to write more nice code :)
[[[
Index: subversion/tests/cmdline/entries-dump.c
===================================================================
--- subversion/tests/cmdline/entries-dump.c     (revision 1877407)
+++ subversion/tests/cmdline/entries-dump.c     (working copy)
@@ -46,7 +46,15 @@
   if (value == NULL)
     printf("e.%s = None\n", name);
   else
-    printf("e.%s = '%s'\n", name, value);
+    {
+      printf("e.%s = (lambda x: x if isinstance(x, str) else "
+             "x.decode('utf-8', 'surrogateescape'))(b'", name);
+      while(*value)
+        {
+          printf("\\x%02x", (int)*value++);
+        }      
+      printf("')\n");
+    }
 }


]]]

Cheers,
-- 
Yasuhito FUTATSUKI <futat...@poem.co.jp>/<futat...@yf.bsdclub.org>

Reply via email to