You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2014/03/24 15:46:57 UTC

svn commit: r1580866 - in /subversion/trunk/subversion/svnrdump: load_editor.c svnrdump.c svnrdump.h

Author: rhuijben
Date: Mon Mar 24 14:46:56 2014
New Revision: 1580866

URL: http://svn.apache.org/r1580866
Log:
Add a '--skip-revprop' option to 'svnrdump load' to allow loading dumps to
a repository that allows changing most revprops, but not svn:author and
svn:date.

* subversion/svnrdump/load_editor.c
  (parse_baton): Add variable.
  (set_revision_property): Filter read revprops.
  (close_revision): Don't set svn:date and svn:author when filtered.
  (svn_rdump__load_dumpstream): Add argument.

* subversion/svnrdump/svnrdump.c
  (svn_svnrdump__longopt_t): Add option.
  (svnrdump__cmd_table): Enable option on "load"
  (svnrdump__options): Document option.
  (opt_baton_t): Add variable.
  (load_revisions,
   load_cmd): Update caller. Add argument.
  (sub_main): Parse new argument. Set new baton variable.
* subversion/svnrdump/svnrdump.h
  (svn_rdump__load_dumpstream): Add argument.

Modified:
    subversion/trunk/subversion/svnrdump/load_editor.c
    subversion/trunk/subversion/svnrdump/svnrdump.c
    subversion/trunk/subversion/svnrdump/svnrdump.h

Modified: subversion/trunk/subversion/svnrdump/load_editor.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnrdump/load_editor.c?rev=1580866&r1=1580865&r2=1580866&view=diff
==============================================================================
--- subversion/trunk/subversion/svnrdump/load_editor.c (original)
+++ subversion/trunk/subversion/svnrdump/load_editor.c Mon Mar 24 14:46:56 2014
@@ -91,6 +91,10 @@ struct parse_baton
   /* The oldest revision loaded from the dump stream, or
      SVN_INVALID_REVNUM if none have been loaded. */
   svn_revnum_t oldest_dumpstream_rev;
+
+  /* An hash containing specific revision properties to skip while
+     loading. */
+  apr_hash_t *skip_revprops;
 };
 
 /**
@@ -858,11 +862,13 @@ set_revision_property(void *baton,
 
   if (rb->rev > 0)
     {
-      svn_hash_sets(rb->revprop_table,
-                    apr_pstrdup(rb->pool, name),
-                    svn_string_dup(value, rb->pool));
+      if (! svn_hash_gets(rb->pb->skip_revprops, name))
+        svn_hash_sets(rb->revprop_table,
+                      apr_pstrdup(rb->pool, name),
+                      svn_string_dup(value, rb->pool));
     }
-  else if (rb->rev_offset == -1)
+  else if (rb->rev_offset == -1
+           && ! svn_hash_gets(rb->pb->skip_revprops, name))
     {
       /* Special case: set revision 0 properties directly (which is
          safe because the commit_editor hasn't been created yet), but
@@ -1131,16 +1137,22 @@ close_revision(void *baton)
 
   if (SVN_IS_VALID_REVNUM(committed_rev))
     {
-      SVN_ERR(svn_repos__validate_prop(SVN_PROP_REVISION_DATE,
-                                       rb->datestamp, rb->pool));
-      SVN_ERR(svn_ra_change_rev_prop2(rb->pb->session, committed_rev,
-                                      SVN_PROP_REVISION_DATE,
-                                      NULL, rb->datestamp, rb->pool));
-      SVN_ERR(svn_repos__validate_prop(SVN_PROP_REVISION_AUTHOR,
-                                       rb->author, rb->pool));
-      SVN_ERR(svn_ra_change_rev_prop2(rb->pb->session, committed_rev,
-                                      SVN_PROP_REVISION_AUTHOR,
-                                      NULL, rb->author, rb->pool));
+      if (!svn_hash_gets(rb->pb->skip_revprops, SVN_PROP_REVISION_DATE))
+        {
+          SVN_ERR(svn_repos__validate_prop(SVN_PROP_REVISION_DATE,
+                                           rb->datestamp, rb->pool));
+          SVN_ERR(svn_ra_change_rev_prop2(rb->pb->session, committed_rev,
+                                          SVN_PROP_REVISION_DATE,
+                                          NULL, rb->datestamp, rb->pool));
+        }
+      if (!svn_hash_gets(rb->pb->skip_revprops, SVN_PROP_REVISION_AUTHOR))
+        {
+          SVN_ERR(svn_repos__validate_prop(SVN_PROP_REVISION_AUTHOR,
+                                           rb->author, rb->pool));
+          SVN_ERR(svn_ra_change_rev_prop2(rb->pb->session, committed_rev,
+                                          SVN_PROP_REVISION_AUTHOR,
+                                          NULL, rb->author, rb->pool));
+        }
     }
 
   svn_pool_destroy(rb->pool);
@@ -1153,6 +1165,7 @@ svn_rdump__load_dumpstream(svn_stream_t 
                            svn_ra_session_t *session,
                            svn_ra_session_t *aux_session,
                            svn_boolean_t quiet,
+                           apr_hash_t *skip_revprops,
                            svn_cancel_func_t cancel_func,
                            void *cancel_baton,
                            apr_pool_t *pool)
@@ -1196,6 +1209,7 @@ svn_rdump__load_dumpstream(svn_stream_t 
   parse_baton->rev_map = apr_hash_make(pool);
   parse_baton->last_rev_mapped = SVN_INVALID_REVNUM;
   parse_baton->oldest_dumpstream_rev = SVN_INVALID_REVNUM;
+  parse_baton->skip_revprops = skip_revprops;
 
   err = svn_repos_parse_dumpstream3(stream, parser, parse_baton, FALSE,
                                     cancel_func, cancel_baton, pool);

Modified: subversion/trunk/subversion/svnrdump/svnrdump.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnrdump/svnrdump.c?rev=1580866&r1=1580865&r2=1580866&view=diff
==============================================================================
--- subversion/trunk/subversion/svnrdump/svnrdump.c (original)
+++ subversion/trunk/subversion/svnrdump/svnrdump.c Mon Mar 24 14:46:56 2014
@@ -80,6 +80,7 @@ enum svn_svnrdump__longopt_t
     opt_auth_password,
     opt_auth_nocache,
     opt_non_interactive,
+    opt_skip_revprop,
     opt_force_interactive,
     opt_incremental,
     opt_trust_server_cert,
@@ -106,7 +107,7 @@ static const svn_opt_subcommand_desc2_t 
   { "load", load_cmd, { 0 },
     N_("usage: svnrdump load URL\n\n"
        "Load a 'dumpfile' given on stdin to a repository at remote URL.\n"),
-    { 'q', SVN_SVNRDUMP__BASE_OPTIONS } },
+    { 'q', opt_skip_revprop, SVN_SVNRDUMP__BASE_OPTIONS } },
   { "help", 0, { "?", "h" },
     N_("usage: svnrdump help [SUBCOMMAND...]\n\n"
        "Describe the usage of this program or its subcommands.\n"),
@@ -122,6 +123,8 @@ static const apr_getopt_option_t svnrdum
                       N_("no progress (only errors) to stderr")},
     {"incremental",   opt_incremental, 0,
                       N_("dump incrementally")},
+    {"skip-revprop",  opt_skip_revprop, 1,
+                      N_("skip revision property (E.g. svn:date, svn:author)")},
     {"config-dir",    opt_config_dir, 1,
                       N_("read user configuration files from directory ARG")},
     {"username",      opt_auth_username, 1,
@@ -182,6 +185,7 @@ typedef struct opt_baton_t {
   svn_opt_revision_t end_revision;
   svn_boolean_t quiet;
   svn_boolean_t incremental;
+  apr_hash_t *skip_revprops;
 } opt_baton_t;
 
 /* Print dumpstream-formatted information about REVISION.
@@ -608,6 +612,7 @@ load_revisions(svn_ra_session_t *session
                svn_ra_session_t *aux_session,
                const char *url,
                svn_boolean_t quiet,
+               apr_hash_t *skip_revprops,
                apr_pool_t *pool)
 {
   apr_file_t *stdin_file;
@@ -617,7 +622,8 @@ load_revisions(svn_ra_session_t *session
   stdin_stream = svn_stream_from_aprfile2(stdin_file, FALSE, pool);
 
   SVN_ERR(svn_rdump__load_dumpstream(stdin_stream, session, aux_session,
-                                     quiet, check_cancel, NULL, pool));
+                                     quiet, skip_revprops,
+                                     check_cancel, NULL, pool));
 
   SVN_ERR(svn_stream_close(stdin_stream));
 
@@ -701,7 +707,7 @@ load_cmd(apr_getopt_t *os,
   SVN_ERR(svn_client_open_ra_session2(&aux_session, opt_baton->url, NULL,
                                       opt_baton->ctx, pool, pool));
   return load_revisions(opt_baton->session, aux_session, opt_baton->url,
-                        opt_baton->quiet, pool);
+                        opt_baton->quiet, opt_baton->skip_revprops, pool);
 }
 
 /* Handle the "help" subcommand.  Implements `svn_opt_subcommand_t'.  */
@@ -844,6 +850,7 @@ sub_main(int *exit_code, int argc, const
   opt_baton->start_revision.kind = svn_opt_revision_unspecified;
   opt_baton->end_revision.kind = svn_opt_revision_unspecified;
   opt_baton->url = NULL;
+  opt_baton->skip_revprops = apr_hash_make(pool);
 
   SVN_ERR(svn_cmdline__getopt_init(&os, argc, argv, pool));
 
@@ -948,6 +955,10 @@ sub_main(int *exit_code, int argc, const
         case opt_incremental:
           opt_baton->incremental = TRUE;
           break;
+        case opt_skip_revprop:
+          SVN_ERR(svn_utf_cstring_to_utf8(&opt_arg, opt_arg, pool));
+          svn_hash_sets(opt_baton->skip_revprops, opt_arg, opt_arg);
+          break;
         case opt_trust_server_cert:
           trust_server_cert = TRUE;
           break;

Modified: subversion/trunk/subversion/svnrdump/svnrdump.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnrdump/svnrdump.h?rev=1580866&r1=1580865&r2=1580866&view=diff
==============================================================================
--- subversion/trunk/subversion/svnrdump/svnrdump.h (original)
+++ subversion/trunk/subversion/svnrdump/svnrdump.h Mon Mar 24 14:46:56 2014
@@ -89,6 +89,7 @@ svn_rdump__load_dumpstream(svn_stream_t 
                            svn_ra_session_t *session,
                            svn_ra_session_t *aux_session,
                            svn_boolean_t quiet,
+                           apr_hash_t *skip_revprops,
                            svn_cancel_func_t cancel_func,
                            void *cancel_baton,
                            apr_pool_t *pool);



RE: svn commit: r1580866 - in /subversion/trunk/subversion/svnrdump: load_editor.c svnrdump.c svnrdump.h

Posted by Bert Huijben <be...@qqmail.nl>.

> -----Original Message-----
> From: Daniel Shahaf [mailto:d.s@daniel.shahaf.name]
> Sent: woensdag 26 maart 2014 04:21
> To: dev@subversion.apache.org
> Cc: commits@subversion.apache.org
> Subject: Re: svn commit: r1580866 - in
> /subversion/trunk/subversion/svnrdump: load_editor.c svnrdump.c
> svnrdump.h
> 
> rhuijben@apache.org wrote on Mon, Mar 24, 2014 at 14:46:57 -0000:
> > +    {"skip-revprop",  opt_skip_revprop, 1,
> > +                      N_("skip revision property (E.g. svn:date,
svn:author)")},
> 
> How about this? ---
> 
> Index: svnrdump.c
> ==========================================================
> =========
> --- svnrdump.c  (revision 1581669)
> +++ svnrdump.c  (working copy)
> @@ -124,7 +124,7 @@
>      {"incremental",   opt_incremental, 0,
>                        N_("dump incrementally")},
>      {"skip-revprop",  opt_skip_revprop, 1,
> -                      N_("skip revision property (E.g. svn:date,
svn:author)")},
> +                      N_("skip revision property ARG (e.g.,
\"svn:author\")")},
>      {"config-dir",    opt_config_dir, 1,
>                        N_("read user configuration files from directory
ARG")},
>      {"username",      opt_auth_username, 1,

+1

	Bert


Re: svn commit: r1580866 - in /subversion/trunk/subversion/svnrdump: load_editor.c svnrdump.c svnrdump.h

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
rhuijben@apache.org wrote on Mon, Mar 24, 2014 at 14:46:57 -0000:
> +    {"skip-revprop",  opt_skip_revprop, 1,
> +                      N_("skip revision property (E.g. svn:date, svn:author)")},

How about this? ---

Index: svnrdump.c
===================================================================
--- svnrdump.c  (revision 1581669)
+++ svnrdump.c  (working copy)
@@ -124,7 +124,7 @@
     {"incremental",   opt_incremental, 0,
                       N_("dump incrementally")},
     {"skip-revprop",  opt_skip_revprop, 1,
-                      N_("skip revision property (E.g. svn:date, svn:author)")},
+                      N_("skip revision property ARG (e.g., \"svn:author\")")},
     {"config-dir",    opt_config_dir, 1,
                       N_("read user configuration files from directory ARG")},
     {"username",      opt_auth_username, 1,


Re: svn commit: r1580866 - in /subversion/trunk/subversion/svnrdump: load_editor.c svnrdump.c svnrdump.h

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
rhuijben@apache.org wrote on Mon, Mar 24, 2014 at 14:46:57 -0000:
> +    {"skip-revprop",  opt_skip_revprop, 1,
> +                      N_("skip revision property (E.g. svn:date, svn:author)")},

How about this? ---

Index: svnrdump.c
===================================================================
--- svnrdump.c  (revision 1581669)
+++ svnrdump.c  (working copy)
@@ -124,7 +124,7 @@
     {"incremental",   opt_incremental, 0,
                       N_("dump incrementally")},
     {"skip-revprop",  opt_skip_revprop, 1,
-                      N_("skip revision property (E.g. svn:date, svn:author)")},
+                      N_("skip revision property ARG (e.g., \"svn:author\")")},
     {"config-dir",    opt_config_dir, 1,
                       N_("read user configuration files from directory ARG")},
     {"username",      opt_auth_username, 1,