Author: rinrab
Date: Wed Jul 24 20:40:56 2024
New Revision: 1919505
URL: http://svn.apache.org/viewvc?rev=1919505&view=rev
Log:
Support finding svnserve from install layout for ra-test.
This is implemented by adding a function for finding svnserve binary
and checking both files for existing. Firstly, check for the svnserve,
located in the ../../svnserve/svnserve[.exe] and finally will try just
svnserve[.exe].
Adding a preprocessor definition for executable extension on the current
platform as a little refactoring, required for this change.
Additionally, change the error message if the binary not found a bit,
because it needs to write both possible paths of svnserve binary.
This will be needed for running the test correctly with CMake due to the
different build layout.
[in subversion/tests]
* libsvn_ra/ra-test.c
(EXE_EXTENSION): Define it.
(find_svnserve): New function that finds svnserve binary.
(open_tunnel): Use find_svnserve() function for svnserve binary and remove
the previous code for finding it.
Modified:
subversion/trunk/subversion/tests/libsvn_ra/ra-test.c
Modified: subversion/trunk/subversion/tests/libsvn_ra/ra-test.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_ra/ra-test.c?rev=1919505&r1=1919504&r2=1919505&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_ra/ra-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_ra/ra-test.c Wed Jul 24 20:40:56
2024
@@ -208,6 +208,50 @@ check_tunnel(void *tunnel_baton, const c
static void
close_tunnel(void *tunnel_context, void *tunnel_baton);
+#ifdef WIN32
+#define EXE_EXTENSION ".exe"
+#else
+#define EXE_EXTENSION ""
+#endif
+
+static svn_error_t *
+find_svnserve(const char **svnserve, apr_pool_t *pool)
+{
+ const char *abspath_build_layout;
+ const char *abspath_install_layout;
+ svn_node_kind_t kind;
+
+ /* try build layout first */
+ SVN_ERR(svn_dirent_get_absolute(&abspath_build_layout,
+ "../../svnserve/svnserve" EXE_EXTENSION,
+ pool));
+
+ SVN_ERR(svn_io_check_path(abspath_build_layout, &kind, pool));
+ if (kind == svn_node_file)
+ {
+ *svnserve = abspath_build_layout;
+ return SVN_NO_ERROR;
+ }
+
+ /* otherwise, try install layout */
+ SVN_ERR(svn_dirent_get_absolute(&abspath_install_layout,
+ "svnserve" EXE_EXTENSION, pool));
+
+ SVN_ERR(svn_io_check_path(abspath_install_layout, &kind, pool));
+ if (kind == svn_node_file)
+ {
+ *svnserve = abspath_install_layout;
+ return SVN_NO_ERROR;
+ }
+
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Could not find svnserve. Checked paths:\n"
+ " %s\n"
+ " %s",
+ svn_dirent_local_style(abspath_build_layout, pool),
+ svn_dirent_local_style(abspath_install_layout,
pool));
+}
+
static svn_error_t *
open_tunnel(svn_stream_t **request, svn_stream_t **response,
svn_ra_close_tunnel_func_t *close_func, void **close_baton,
@@ -217,7 +261,6 @@ open_tunnel(svn_stream_t **request, svn_
svn_cancel_func_t cancel_func, void *cancel_baton,
apr_pool_t *pool)
{
- svn_node_kind_t kind;
apr_proc_t *proc;
apr_procattr_t *attr;
apr_status_t status;
@@ -228,15 +271,7 @@ open_tunnel(svn_stream_t **request, svn_
SVN_TEST_ASSERT(b->magic == TUNNEL_MAGIC);
- SVN_ERR(svn_dirent_get_absolute(&svnserve, "../../svnserve/svnserve", pool));
-#ifdef WIN32
- svnserve = apr_pstrcat(pool, svnserve, ".exe", SVN_VA_NULL);
-#endif
- SVN_ERR(svn_io_check_path(svnserve, &kind, pool));
- if (kind != svn_node_file)
- return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
- "Could not find svnserve at %s",
- svn_dirent_local_style(svnserve, pool));
+ SVN_ERR(find_svnserve(&svnserve, pool));
status = apr_procattr_create(&attr, pool);
if (status == APR_SUCCESS)