diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-08-05 16:22:51 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-08-05 16:22:51 +0000 |
commit | cf46733632c7279a9fd0fe6ce26f9185a4ae82a9 (patch) | |
tree | da27775a2161723ef342e91af41a8b51fedef405 /subversion/svn/cleanup-cmd.c | |
parent | bb0ef45f7c46b0ae221b26265ef98a768c33f820 (diff) | |
download | subversion-tarball-master.tar.gz |
subversion-1.9.7HEADsubversion-1.9.7master
Diffstat (limited to 'subversion/svn/cleanup-cmd.c')
-rw-r--r-- | subversion/svn/cleanup-cmd.c | 66 |
1 files changed, 48 insertions, 18 deletions
diff --git a/subversion/svn/cleanup-cmd.c b/subversion/svn/cleanup-cmd.c index 64fa400..6b0b62e 100644 --- a/subversion/svn/cleanup-cmd.c +++ b/subversion/svn/cleanup-cmd.c @@ -47,7 +47,7 @@ svn_cl__cleanup(apr_getopt_t *os, svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state; svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx; apr_array_header_t *targets; - apr_pool_t *subpool; + apr_pool_t *iterpool; int i; SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os, @@ -61,30 +61,60 @@ svn_cl__cleanup(apr_getopt_t *os, SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool)); - subpool = svn_pool_create(pool); + iterpool = svn_pool_create(pool); for (i = 0; i < targets->nelts; i++) { const char *target = APR_ARRAY_IDX(targets, i, const char *); - svn_error_t *err; + const char *target_abspath; - svn_pool_clear(subpool); + svn_pool_clear(iterpool); SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton)); - err = svn_client_cleanup(target, ctx, subpool); - if (err && err->apr_err == SVN_ERR_WC_LOCKED) + + SVN_ERR(svn_dirent_get_absolute(&target_abspath, target, iterpool)); + + if (opt_state->remove_unversioned || opt_state->remove_ignored) { - const char *target_abspath; - svn_error_t *err2 = svn_dirent_get_absolute(&target_abspath, - target, subpool); - if (err2) - { - err = svn_error_compose_create(err, err2); - } - else + svn_error_t *err = svn_client_vacuum(target_abspath, + opt_state->remove_unversioned, + opt_state->remove_ignored, + TRUE /* fix_timestamps */, + FALSE /* vacuum_pristines */, + opt_state->include_externals, + ctx, iterpool); + + if (err && err->apr_err == SVN_ERR_WC_LOCKED) + err = svn_error_create(SVN_ERR_WC_LOCKED, err, + _("Working copy locked; if no other " + "Subversion client is currently " + "using the working copy, try running " + "'svn cleanup' without the " + "--remove-unversioned and " + "--remove-ignored options first.")); + else if (err && err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY) + err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, err, + _("Cannot remove unversioned or ignored " + "items from something that is not a " + "working copy")); + + SVN_ERR(err); + } + else + { + svn_error_t *err = svn_client_cleanup2(target_abspath, + TRUE /* break_locks */, + TRUE /* fix_timestamps */, + TRUE /* clear_dav_cache */, + TRUE /* vacuum_pristines */, + opt_state->include_externals, + ctx, iterpool); + + if (err && err->apr_err == SVN_ERR_WC_LOCKED) { const char *wcroot_abspath; + svn_error_t *err2; err2 = svn_client_get_wc_root(&wcroot_abspath, target_abspath, - ctx, subpool, subpool); + ctx, iterpool, iterpool); if (err2) err = svn_error_compose_create(err, err2); else @@ -93,12 +123,12 @@ svn_cl__cleanup(apr_getopt_t *os, "'svn cleanup' on the root of the " "working copy ('%s') instead."), svn_dirent_local_style(wcroot_abspath, - subpool)); + iterpool)); } + SVN_ERR(err); } - SVN_ERR(err); } - svn_pool_destroy(subpool); + svn_pool_destroy(iterpool); return SVN_NO_ERROR; } |