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)


Reply via email to