Author: rinrab
Date: Thu Mar 19 20:57:55 2026
New Revision: 1932394
Log:
Use svn_io_stat() instead of apr_stat() when checking if --message is a file
(in this case we should show a warning because user might have intendent to
used it as a log message, i.e. [svn ci -F svn-commit.tmp]).
1. svn_io_stat, unlike apr_stat uses svn_error error handling which are more
convenient to use.
2. It works in UTF8 encoding. This change will act as a groundwork change for
switching the command-line to a canonical encoding entirely.
Don't forget to convert encoding to UTF8. As svn_io_stat actually does a
conversion back to cstring, they basically "cancel out".
Please refer to a small discussion on [email protected] about this change [1].
* subversion/svn/svn.c
(sub_main): Use new function.
[1] https://lists.apache.org/thread/mlht6fwy62jr598p8kqx5q5gjwfl0ccl
Modified:
subversion/trunk/subversion/svn/svn.c
Modified: subversion/trunk/subversion/svn/svn.c
==============================================================================
--- subversion/trunk/subversion/svn/svn.c Thu Mar 19 16:42:14 2026
(r1932393)
+++ subversion/trunk/subversion/svn/svn.c Thu Mar 19 20:57:55 2026
(r1932394)
@@ -3179,23 +3179,37 @@ sub_main(int *exit_code,
if (opt_state.message)
{
apr_finfo_t finfo;
- if (apr_stat(&finfo, opt_state.message /* not converted to UTF-8 */,
- APR_FINFO_MIN, pool) == APR_SUCCESS)
+ const char *utf8_message;
+
+ SVN_ERR(svn_utf_cstring_to_utf8(&utf8_message, opt_state.message,
+ pool));
+
+ /* We don't want to warn for '' */
+ if (opt_state.message[0] != '\0')
{
- if (subcommand->cmd_func != svn_cl__lock)
+ err = svn_io_stat(&finfo, opt_state.message,
+ APR_FINFO_MIN, pool);
+
+ if (!err)
{
- return svn_error_create
- (SVN_ERR_CL_LOG_MESSAGE_IS_PATHNAME, NULL,
- _("The log message is a pathname "
- "(was -F intended?); use '--force-log' to override"));
- }
- else
- {
- return svn_error_create
- (SVN_ERR_CL_LOG_MESSAGE_IS_PATHNAME, NULL,
- _("The lock comment is a pathname "
- "(was -F intended?); use '--force-log' to override"));
+ if (subcommand->cmd_func != svn_cl__lock)
+ {
+ return svn_error_create(
+ SVN_ERR_CL_LOG_MESSAGE_IS_PATHNAME, NULL,
+ _("The log message is a pathname "
+ "(was -F intended?); use '--force-log' to "
+ "override"));
+ }
+ else
+ {
+ return svn_error_create(
+ SVN_ERR_CL_LOG_MESSAGE_IS_PATHNAME, NULL,
+ _("The lock comment is a pathname "
+ "(was -F intended?); use '--force-log' to "
+ "override"));
+ }
}
+ svn_error_clear(err);
}
}
}