Patch + log message attached. It changes the expected output, and I'm not sure how strictly compatible we want to be about that, hence posting here first.
If I don't hear anything I'll go ahead and commit. (It seems that the code being changed is passing an APR-encoded path to a printing function that expects a UTF-8 argument? This might even be user-visible as mangled output in non-UTF-8 environments, I suppose, but I don't have such an environment to test with.) Cheers, Daniel
[[[ svnadmin: Print LOCK_PATH's correctly. * subversion/svnadmin/svnadmin.c (subcommand_lock, subcommand_unlock, subcommand_rmlocks): Print the UTF-8, canonical version of the path. Using UTF-8 is a requirement of the API; using the canonical version is consistent with the cmdline client. * subversion/tests/cmdline/svnadmin_tests.py (locking): Add leading slash to expected outputs. ]]] [[[ Index: subversion/svnadmin/svnadmin.c =================================================================== --- subversion/svnadmin/svnadmin.c (revision 1796426) +++ subversion/svnadmin/svnadmin.c (working copy) @@ -2357,7 +2357,7 @@ subcommand_lock(apr_getopt_t *os, void *baton, apr if (! opt_state->quiet) SVN_ERR(svn_cmdline_printf(pool, _("'%s' locked by user '%s'.\n"), - lock_path, username)); + lock_path_utf8, username)); return SVN_NO_ERROR; } @@ -2486,9 +2486,10 @@ subcommand_rmlocks(apr_getopt_t *os, void *baton, if (! opt_state->quiet) SVN_ERR(svn_cmdline_printf(subpool, _("Path '%s' isn't locked.\n"), - lock_path)); + lock_path_utf8)); continue; } + lock = NULL; /* Don't access LOCK after this point. */ /* Now forcibly destroy the lock. */ err = svn_fs_unlock(fs, lock_path_utf8, @@ -2498,7 +2499,8 @@ subcommand_rmlocks(apr_getopt_t *os, void *baton, if (! opt_state->quiet) SVN_ERR(svn_cmdline_printf(subpool, - _("Removed lock on '%s'.\n"), lock->path)); + _("Removed lock on '%s'.\n"), + lock_path_utf8)); move_on: if (err) @@ -2553,7 +2555,7 @@ subcommand_unlock(apr_getopt_t *os, void *baton, a if (! opt_state->quiet) SVN_ERR(svn_cmdline_printf(pool, _("'%s' unlocked by user '%s'.\n"), - lock_path, username)); + lock_path_utf8, username)); return SVN_NO_ERROR; } Index: subversion/tests/cmdline/svnadmin_tests.py =================================================================== --- subversion/tests/cmdline/svnadmin_tests.py (revision 1796405) +++ subversion/tests/cmdline/svnadmin_tests.py (working copy) @@ -1901,7 +1901,7 @@ def locking(sbox): invalid_comment_path) # Test locking path with --bypass-hooks - expected_output = "'iota' locked by user 'jrandom'." + expected_output = "'/iota' locked by user 'jrandom'." svntest.actions.run_and_verify_svnadmin(expected_output, None, "lock", sbox.repo_dir, @@ -1915,7 +1915,7 @@ def locking(sbox): sbox.repo_dir, "iota") # Test locking path without --bypass-hooks - expected_output = "'iota' locked by user 'jrandom'." + expected_output = "'/iota' locked by user 'jrandom'." svntest.actions.run_and_verify_svnadmin(expected_output, None, "lock", sbox.repo_dir, @@ -1939,7 +1939,7 @@ def locking(sbox): comment_path) # Test locking a path while specifying a lock token. - expected_output = "'A/D/G/rho' locked by user 'jrandom'." + expected_output = "'/A/D/G/rho' locked by user 'jrandom'." lock_token = "opaquelocktoken:01234567-89ab-cdef-89ab-cdef01234567" svntest.actions.run_and_verify_svnadmin(expected_output, None, "lock", @@ -1958,7 +1958,7 @@ def locking(sbox): # Test unlocking the path again, but this time provide the correct # lock token. - expected_output = "'A/D/G/rho' unlocked." + expected_output = "'/A/D/G/rho' unlocked." svntest.actions.run_and_verify_svnadmin(expected_output, None, "unlock", sbox.repo_dir, @@ -2004,7 +2004,7 @@ def locking(sbox): # Finally, use --bypass-hooks to unlock the path (again using the # correct lock token). - expected_output = "'iota' unlocked." + expected_output = "'/iota' unlocked." svntest.actions.run_and_verify_svnadmin(expected_output, None, "unlock", "--bypass-hooks", ]]]