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,