You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2017/12/06 21:36:57 UTC

svn commit: r1817320 - in /subversion/branches/shelve-checkpoint/subversion: include/svn_client.h libsvn_client/shelve.c svn/shelve-cmd.c

Author: julianfoad
Date: Wed Dec  6 21:36:57 2017
New Revision: 1817320

URL: http://svn.apache.org/viewvc?rev=1817320&view=rev
Log:
On the 'shelve-checkpoint' branch: Add an API to get the affected paths.
Use it in 'svn shelves' to print how many paths are affected.

* subversion/include/svn_client.h,
  subversion/libsvn_client/shelve.c
  (svn_client_shelf_version_get_info,
   svn_client_shelves_list): Minor fixes to doc-strings.
  (svn_client_shelf_get_paths): New.

* subversion/svn/shelve-cmd.c
  (shelves_list): Use it.

Modified:
    subversion/branches/shelve-checkpoint/subversion/include/svn_client.h
    subversion/branches/shelve-checkpoint/subversion/libsvn_client/shelve.c
    subversion/branches/shelve-checkpoint/subversion/svn/shelve-cmd.c

Modified: subversion/branches/shelve-checkpoint/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/include/svn_client.h?rev=1817320&r1=1817319&r2=1817320&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/include/svn_client.h (original)
+++ subversion/branches/shelve-checkpoint/subversion/include/svn_client.h Wed Dec  6 21:36:57 2017
@@ -6839,7 +6839,7 @@ typedef struct svn_client_shelf_version_
   apr_time_t mtime;  /* mtime of the patch file */
 } svn_client_shelf_version_info_t;
 
-/** Set @a *info to the files affected by the current version of SHELF.
+/** Set @a *info to the files affected by the current version of @a shelf.
  *
  * @since New in 1.X.
  */
@@ -6851,7 +6851,21 @@ svn_client_shelf_version_get_info(svn_cl
                                   apr_pool_t *result_pool,
                                   apr_pool_t *scratch_pool);
 
-/** Set the log message in SHELF, using the log message callbacks in
+/** Set @a *affected_paths to a hash with one entry for each path affected
+ * by the @a shelf @a version. The hash key is the old path and value is
+ * the new path, both relative to the WC root. The key and value are the
+ * same except when a path is moved or copied.
+ *
+ * @since New in 1.X.
+ */
+svn_error_t *
+svn_client_shelf_get_paths(apr_hash_t **affected_paths,
+                           svn_client_shelf_t *shelf,
+                           int version,
+                           apr_pool_t *result_pool,
+                           apr_pool_t *scratch_pool);
+
+/** Set the log message in @a shelf, using the log message callbacks in
  * the client context.
  *
  * @since New in 1.X.
@@ -6871,7 +6885,7 @@ typedef struct svn_client_shelf_info_t
   apr_time_t mtime;  /* mtime of the latest change */
 } svn_client_shelf_info_t;
 
-/** Set *shelved_patches to a hash, keyed by shelf name, of pointers to
+/** Set @a *shelved_patch_infos to a hash, keyed by shelf name, of pointers to
  * @c svn_client_shelf_info_t structures.
  *
  * @a local_abspath is any path in the WC and is used to find the WC root.

Modified: subversion/branches/shelve-checkpoint/subversion/libsvn_client/shelve.c
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/libsvn_client/shelve.c?rev=1817320&r1=1817319&r2=1817320&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/libsvn_client/shelve.c (original)
+++ subversion/branches/shelve-checkpoint/subversion/libsvn_client/shelve.c Wed Dec  6 21:36:57 2017
@@ -361,6 +361,44 @@ svn_client_shelf_delete(const char *name
 }
 
 svn_error_t *
+svn_client_shelf_get_paths(apr_hash_t **affected_paths,
+                           svn_client_shelf_t *shelf,
+                           int version,
+                           apr_pool_t *result_pool,
+                           apr_pool_t *scratch_pool)
+{
+  const char *patch_abspath;
+  svn_patch_file_t *patch_file;
+  apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+  apr_hash_t *paths = apr_hash_make(result_pool);
+
+  SVN_ERR(get_existing_patch_abspath(&patch_abspath, shelf, version,
+                                     result_pool, result_pool));
+  SVN_ERR(svn_diff_open_patch_file(&patch_file, patch_abspath, result_pool));
+
+  while (1)
+    {
+      svn_patch_t *patch;
+
+      svn_pool_clear(iterpool);
+      SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file,
+                                        FALSE /*reverse*/,
+                                        FALSE /*ignore_whitespace*/,
+                                        iterpool, iterpool));
+      if (! patch)
+        break;
+      svn_hash_sets(paths,
+                    apr_pstrdup(result_pool, patch->old_filename),
+                    apr_pstrdup(result_pool, patch->new_filename));
+    }
+  SVN_ERR(svn_diff_close_patch_file(patch_file, iterpool));
+  svn_pool_destroy(iterpool);
+
+  *affected_paths = paths;
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
 svn_client_shelf_apply(svn_client_shelf_t *shelf,
                        int version,
                        svn_boolean_t dry_run,

Modified: subversion/branches/shelve-checkpoint/subversion/svn/shelve-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/svn/shelve-cmd.c?rev=1817320&r1=1817319&r2=1817320&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/svn/shelve-cmd.c (original)
+++ subversion/branches/shelve-checkpoint/subversion/svn/shelve-cmd.c Wed Dec  6 21:36:57 2017
@@ -123,6 +123,7 @@ shelves_list(const char *local_abspath,
       svn_client_shelf_version_info_t *info;
       int age_mins;
       char *age_str;
+      apr_hash_t *paths;
 
       SVN_ERR(svn_client_shelf_open(&shelf,
                                     name, local_abspath, ctx, scratch_pool));
@@ -132,9 +133,14 @@ shelves_list(const char *local_abspath,
       age_mins = (apr_time_now() - info->mtime) / 1000000 / 60;
       age_str = friendly_duration_str(age_mins, scratch_pool);
 
+      SVN_ERR(svn_client_shelf_get_paths(&paths,
+                                         shelf, shelf->max_version,
+                                         scratch_pool, scratch_pool));
+
       SVN_ERR(svn_cmdline_printf(scratch_pool,
-                                 _("%-30s %s ago,  %d versions\n"),
-                                 name, age_str, shelf->max_version));
+                                 _("%-30s %s ago,  %d versions,  %d paths changed\n"),
+                                 name, age_str, shelf->max_version,
+                                 apr_hash_count(paths)));
       if (with_logmsg)
         {
           SVN_ERR(svn_cmdline_printf(scratch_pool,