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);
             }
         }
     }

Reply via email to