You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/06/02 03:39:15 UTC

svn commit: r950332 - /subversion/trunk/subversion/svnadmin/main.c

Author: hwright
Date: Wed Jun  2 01:39:14 2010
New Revision: 950332

URL: http://svn.apache.org/viewvc?rev=950332&view=rev
Log:
Update 'svnadmin' to use the latest repos pack API, and allow consolidation
of the notification functions used for pack, dump, and verify.  Additionally,
teach 'svnadmin pack' to accept the '-q' option.

* subversion/svnadmin/main.c
  (cmd_table): Add '-q' for 'pack'.
  (repos_notify_handler): Handle the pack start and end notifications.
  (pack_notify): Remove.
  (subcommand_pack): Use a stream for feedback, and the stock notification
    handler.

Modified:
    subversion/trunk/subversion/svnadmin/main.c

Modified: subversion/trunk/subversion/svnadmin/main.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnadmin/main.c?rev=950332&r1=950331&r2=950332&view=diff
==============================================================================
--- subversion/trunk/subversion/svnadmin/main.c (original)
+++ subversion/trunk/subversion/svnadmin/main.c Wed Jun  2 01:39:14 2010
@@ -413,7 +413,7 @@ static const svn_opt_subcommand_desc2_t 
    ("usage: svnadmin pack REPOS_PATH\n\n"
     "Possibly compact the repository into a more efficient storage model.\n"
     "This may not apply to all repositories, in which case, exit.\n"),
-   {0} },
+   {'q'} },
 
   {"recover", subcommand_recover, {0}, N_
    ("usage: svnadmin recover REPOS_PATH\n\n"
@@ -681,6 +681,22 @@ repos_notify_handler(void *baton,
                                         notify->revision));
       return;
 
+    case svn_repos_notify_pack_shard_start:
+      {
+        const char *shardstr = apr_psprintf(scratch_pool,
+                                            "%" APR_INT64_T_FMT,
+                                            notify->shard);
+        svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+                                          _("Packing shard %s..."),
+                                          shardstr));
+      }
+      return;
+
+    case svn_repos_notify_pack_shard_end:
+      svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+                                        _("done.\n")));
+      return;
+
     default:
       return;
   }
@@ -1177,33 +1193,6 @@ subcommand_setlog(apr_getopt_t *os, void
                      opt_state, pool);
 }
 
-/* This implements svn_fs_pack_notify_t */
-static svn_error_t *
-pack_notify(void *baton,
-            apr_int64_t shard,
-            svn_fs_pack_notify_action_t action,
-            apr_pool_t *pool)
-{
-  switch (action)
-    {
-      case svn_fs_pack_notify_start:
-        {
-          const char *shardstr = apr_psprintf(pool, "%" APR_INT64_T_FMT, shard);
-          SVN_ERR(svn_cmdline_printf(pool, _("Packing shard %s..."), shardstr));
-        }
-        break;
-
-      case svn_fs_pack_notify_end:
-        SVN_ERR(svn_cmdline_printf(pool, _("done.\n")));
-        break;
-
-      default:
-        return SVN_NO_ERROR;
-    }
-
-  return svn_cmdline_fflush(stdout);
-}
-
 
 /* This implements 'svn_opt_subcommand_t'. */
 static svn_error_t *
@@ -1211,10 +1200,17 @@ subcommand_pack(apr_getopt_t *os, void *
 {
   struct svnadmin_opt_state *opt_state = baton;
   svn_repos_t *repos;
+  svn_stream_t *progress_stream = NULL;
 
   SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
 
-  return svn_repos_fs_pack(repos, pack_notify, NULL, check_cancel, NULL, pool);
+  /* Progress feedback goes to STDOUT, unless they asked to suppress it. */
+  if (! opt_state->quiet)
+    progress_stream = recode_stream_create(stderr, pool);
+
+  return svn_error_return(
+    svn_repos_fs_pack2(repos, !opt_state->quiet ? repos_notify_handler : NULL,
+                       progress_stream, check_cancel, NULL, pool));
 }