[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [PATCH] Fix for issue 3620 - revert command

From: Stefan Sperling <stsp_at_elego.de>
Date: Wed, 3 Nov 2010 14:46:59 +0100

On Wed, Nov 03, 2010 at 03:32:25PM +0530, Noorul Islam K M wrote:
>
> Stefan Sperling <stsp_at_elego.de> writes:
> >
> > Noorul, if you're looking for more tasks, you could take a look at
> > issue #3620 which is about a similar problem:
> > http://subversion.tigris.org/issues/show_bug.cgi?id=3620
> > I'll happily review and commit patches for issue #3620.
> >
> > Thanks,
> > Stefan
>
> Here is the patch for revert command. I will look into other commands as
> and when time permits.
>
> Log
>
> [[[
> Make 'svn revert' verify that none of its targets are URLs.
>
> * subversion/libsvn_client/revert.c,
> subversion/svn/revert-cmd.c
> (svn_client_revert2, svn_cl__revert): Raise an error if any targets
> look like URLs.
>
> * subversion/tests/cmdline/input_validation_tests.py
> (invalid_revert_targets, test_list): New test.
>
> Patch by: Noorul Islam K M <noorul{_AT_}collab.net>
> ]]]
>
> Thanks and Regards
> Noorul
>

> Index: subversion/tests/cmdline/input_validation_tests.py
> ===================================================================
> --- subversion/tests/cmdline/input_validation_tests.py (revision 1030340)
> +++ subversion/tests/cmdline/input_validation_tests.py (working copy)
> @@ -173,6 +173,12 @@
> run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'upgrade',
> target, target)
>
> +def invalid_revert_targets(sbox):
> + "non-working copy paths for 'revert'"
> + sbox.build(read_only=True)
> + for target in _invalid_wc_path_targets:
> + run_and_verify_svn_in_wc(sbox, "svn:.*is not a local path", 'revert',
> + target)
>
> ########################################################################
> # Run the tests
> @@ -192,6 +198,7 @@
> invalid_log_targets,
> invalid_merge_args,
> invalid_wcpath_upgrade,
> + invalid_revert_targets,
> ]
>
> if __name__ == '__main__':
> Index: subversion/svn/revert-cmd.c
> ===================================================================
> --- subversion/svn/revert-cmd.c (revision 1030340)
> +++ subversion/svn/revert-cmd.c (working copy)
> @@ -27,6 +27,7 @@
>
> /*** Includes. ***/
>
> +#include "svn_path.h"
> #include "svn_client.h"
> #include "svn_error_codes.h"
> #include "svn_error.h"
> @@ -47,6 +48,7 @@
> svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
> apr_array_header_t *targets = NULL;
> svn_error_t *err;
> + int i;
>
> SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
> opt_state->targets,
> @@ -63,6 +65,19 @@
>
> SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, scratch_pool));
>
> + /* Don't even attempt to modify the working copy if any of the
> + * targets look like URLs. URLs are invalid input. */
> + for (i = 0; i < targets->nelts; i++)
> + {
> + const char *target = APR_ARRAY_IDX(targets, i, const char *);
> +
> + if (svn_path_is_url(target))
> + return svn_error_return(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR,
> + NULL,
> + _("'%s' is not a local path"),
> + target));
> + }
> +
> err = svn_client_revert2(targets, opt_state->depth,
> opt_state->changelists, ctx, scratch_pool);
>
> Index: subversion/libsvn_client/revert.c
> ===================================================================
> --- subversion/libsvn_client/revert.c (revision 1030340)
> +++ subversion/libsvn_client/revert.c (working copy)
> @@ -27,6 +27,7 @@
>
> /*** Includes. ***/
>
> +#include "svn_path.h"
> #include "svn_wc.h"
> #include "svn_client.h"
> #include "svn_dirent_uri.h"
> @@ -37,6 +38,7 @@
> #include "client.h"
> #include "private/svn_wc_private.h"
>
> +#include "svn_private_config.h"
>
>
> /*** Code. ***/
> @@ -121,6 +123,19 @@
> svn_boolean_t use_commit_times;
> struct revert_with_write_lock_baton baton;
>
> + /* Don't even attempt to modify the working copy if any of the
> + * targets look like URLs. URLs are invalid input. */
> + for (i = 0; i < paths->nelts; i++)
> + {
> + const char *path = APR_ARRAY_IDX(paths, i, const char *);
> +
> + if (svn_path_is_url(path))
> + return svn_error_return(svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR,

The SVN_ERR_CL_* codes are for use by the command line client, I think.
So I've used SVN_ERR_ILLEGAL_TARGET for errors thrown from libsvn_client.
But I can fix the error code locally, you don't need to send another patch.

Looks great otherwise. I will test and quite likely commit this later today.

Thanks,
Stefan

> + NULL,
> + _("'%s' is not a local path"),
> + path));
> + }
> +
> cfg = ctx->config ? apr_hash_get(ctx->config, SVN_CONFIG_CATEGORY_CONFIG,
> APR_HASH_KEY_STRING) : NULL;
>
Received on 2010-11-03 14:47:53 CET

This is an archived mail posted to the Subversion Dev mailing list.