Author: julianfoad
Date: Thu Feb 24 20:06:32 2022
New Revision: 1898389

URL: http://svn.apache.org/viewvc?rev=1898389&view=rev
Log:
Multi-WC-format, issue #4884: add svn info --show-item=wc-compatible-version.

* subversion/include/svn_client.h,
  subversion/libsvn_client/upgrade.c
  (svn_client__wc_version_from_format): New.

* subversion/svn/info-cmd.c
  (info_item_t, info_item_map): Add the new option.
  (print_info_item): Obey the new option.

* subversion/svn/svn.c
  (svn_cl__cmd_table_main): Add the corresponding help text.

Modified:
    subversion/trunk/subversion/include/svn_client.h
    subversion/trunk/subversion/libsvn_client/upgrade.c
    subversion/trunk/subversion/svn/info-cmd.c
    subversion/trunk/subversion/svn/svn.c

Modified: subversion/trunk/subversion/include/svn_client.h
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1898389&r1=1898388&r2=1898389&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_client.h (original)
+++ subversion/trunk/subversion/include/svn_client.h Thu Feb 24 20:06:32 2022
@@ -4451,6 +4451,14 @@ typedef struct svn_client_wc_format_t {
     int wc_format;
 } svn_client_wc_format_t;
 
+/** Return the version of the Subversion library that first supported
+ * the given WC format, @a wc_format.
+ */
+const svn_version_t *
+svn_client__wc_version_from_format(int wc_format,
+                                   apr_pool_t *result_pool,
+                                   apr_pool_t *scratch_pool);
+
 /**
  * Returns a list of the WC formats supported by the client library.
  *

Modified: subversion/trunk/subversion/libsvn_client/upgrade.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/upgrade.c?rev=1898389&r1=1898388&r2=1898389&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/upgrade.c (original)
+++ subversion/trunk/subversion/libsvn_client/upgrade.c Thu Feb 24 20:06:32 2022
@@ -200,6 +200,34 @@ svn_client_upgrade2(const char *path,
   return SVN_NO_ERROR;
 }
 
+const svn_version_t *
+svn_client__wc_version_from_format(int wc_format,
+                                   apr_pool_t *result_pool,
+                                   apr_pool_t *scratch_pool)
+{
+  static const svn_version_t
+    version_1_0  = { 1, 0, 0, NULL },
+    version_1_4  = { 1, 4, 0, NULL },
+    version_1_5  = { 1, 5, 0, NULL },
+    version_1_6  = { 1, 6, 0, NULL },
+    version_1_7  = { 1, 7, 0, NULL },
+    version_1_8  = { 1, 8, 0, NULL },
+    version_1_15 = { 1, 15, 0, NULL };
+
+  switch (wc_format)
+    {
+      case  4: return &version_1_0;
+      case  8: return &version_1_4;
+      case  9: return &version_1_5;
+      case 10: return &version_1_6;
+      case SVN_WC__WC_NG_VERSION: return &version_1_7;
+      case 29: return &version_1_7;
+      case 31: return &version_1_8;
+      case 32: return &version_1_15;
+    }
+  return NULL;
+}
+
 const svn_client_wc_format_t *
 svn_client_supported_wc_formats(apr_pool_t *result_pool,
                                 apr_pool_t *scratch_pool)

Modified: subversion/trunk/subversion/svn/info-cmd.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/info-cmd.c?rev=1898389&r1=1898388&r2=1898389&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/info-cmd.c (original)
+++ subversion/trunk/subversion/svn/info-cmd.c Thu Feb 24 20:06:32 2022
@@ -40,6 +40,7 @@
 #include "svn_dirent_uri.h"
 #include "svn_path.h"
 #include "svn_time.h"
+#include "svn_version.h"
 #include "svn_xml.h"
 #include "cl.h"
 
@@ -369,7 +370,8 @@ typedef enum
   info_item_schedule,
   info_item_depth,
   info_item_changelist,
-  info_item_wc_format
+  info_item_wc_format,
+  info_item_wc_compatible_version
 } info_item_t;
 
 /* Mapping between option keywords and info_item_t. */
@@ -397,6 +399,8 @@ static const info_item_map_t info_item_m
     { SVN__STATIC_STRING("depth"),               info_item_depth },
     { SVN__STATIC_STRING("changelist"),          info_item_changelist },
     { SVN__STATIC_STRING("wc-format"),           info_item_wc_format },
+    { SVN__STATIC_STRING("wc-compatible-version"),
+                                                 
info_item_wc_compatible_version },
   };
 
 static const apr_size_t info_item_map_len =
@@ -1247,6 +1251,18 @@ print_info_item(void *baton,
                                   target_path, pool));
       break;
 
+    case info_item_wc_compatible_version:
+      {
+        const svn_version_t *wc_ver
+          = svn_client__wc_version_from_format(info->wc_info->wc_format,
+                                               pool, pool);
+        const char *s = apr_psprintf(pool, "%d.%d",
+                                     wc_ver->major,
+                                     wc_ver->minor);
+        SVN_ERR(print_info_item_string(s, target_path, pool));
+      }
+      break;
+
     case info_item_changelist:
       SVN_ERR(print_info_item_string(
                   ((info->wc_info && info->wc_info->changelist)

Modified: subversion/trunk/subversion/svn/svn.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/svn.c?rev=1898389&r1=1898388&r2=1898389&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/svn.c (original)
+++ subversion/trunk/subversion/svn/svn.c Thu Feb 24 20:06:32 2022
@@ -790,6 +790,10 @@ svn_cl__cmd_table_main[] =
                         "                             "
                         "   'wc-format'  TARGET's working copy format\n"
                         "                             "
+                        "   'wc-compatible-version'\n"
+                        "                             "
+                        "                first version supporting TARGET WC\n"
+                        "                             "
                         "   'changelist' changelist of TARGET in WC")}},
   },
 


Reply via email to