On Wed, Oct 12, 2016 at 04:28:05PM +0200, Patrick Steinhardt wrote:
> Hi,
> 
> attached is a patch to reject checkouts to already existing
> directories when `--force` is not given. This is according to
> `svn co --help`.
> 
> [[
> Reject checkout to existing paths without force
> 
> * subversion/svn/checkout-cmd.c:
>   - (svn_cl__checkout): Reject checkout to existing directory
>     without --force
> ]]

Nice catch.
It's odd that the actual behaviour and help string don't line up.

> diff --git a/subversion/svn/checkout-cmd.c b/subversion/svn/checkout-cmd.c
> index 56fd02b..5fda44a 100644
> --- a/subversion/svn/checkout-cmd.c
> +++ b/subversion/svn/checkout-cmd.c
> @@ -155,6 +155,20 @@ svn_cl__checkout(apr_getopt_t *os,
>                                         subpool);
>          }
>  
> +      if (! opt_state->force)
> +        {
> +          svn_node_kind_t kind;
> +
> +          SVN_ERR(svn_io_check_path(target_dir, &kind, subpool));
> +
> +          if (kind != svn_node_none)
> +            {
> +              return svn_error_createf
> +                (SVN_ERR_ILLEGAL_TARGET, NULL,
> +                 _("Rejecting checkout to existing directory '%s'"), 
> target_dir);

At this poing the node kind could be svn_node_file as well.
Perhaps make it say something like "%s already exists" instead?

Does this patch pass 'make check'?

> +            }
> +        }
> +
>        /* Checkout doesn't accept an unspecified revision, so default to
>           the peg revision, or to HEAD if there wasn't a peg. */
>        if (revision.kind == svn_opt_revision_unspecified)

Reply via email to