Return-Path: X-Original-To: apmail-subversion-commits-archive@minotaur.apache.org Delivered-To: apmail-subversion-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 98E0ADB45 for ; Thu, 21 Jun 2012 16:25:51 +0000 (UTC) Received: (qmail 62058 invoked by uid 500); 21 Jun 2012 16:25:51 -0000 Delivered-To: apmail-subversion-commits-archive@subversion.apache.org Received: (qmail 62018 invoked by uid 500); 21 Jun 2012 16:25:51 -0000 Mailing-List: contact commits-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@subversion.apache.org Delivered-To: mailing list commits@subversion.apache.org Received: (qmail 62011 invoked by uid 99); 21 Jun 2012 16:25:51 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Jun 2012 16:25:51 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Jun 2012 16:25:49 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id C53BB238890B; Thu, 21 Jun 2012 16:25:29 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1352598 - /subversion/trunk/subversion/libsvn_client/externals.c Date: Thu, 21 Jun 2012 16:25:29 -0000 To: commits@subversion.apache.org From: gstein@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120621162529.C53BB238890B@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: gstein Date: Thu Jun 21 16:25:29 2012 New Revision: 1352598 URL: http://svn.apache.org/viewvc?rev=1352598&view=rev Log: Stop constructing a baton, and just pass parameters. There are no callbacks here where the baton is needed. * subversion/libsvn_client/externals.c: (struct external_change_baton_t): removed. (switch_file_external): remove unused TIMESTAMP_SLEEP param (handle_external_item_removal): take a CTX rather than a baton. adjust internals. (handle_external_item_change): take a CTX, REPOS_ROOT_URL, and TIMESTAMP_SLEEP params rather than a baton. adjust internals. (wrap_external_error): take a CTX rather than a baton. (handle_externals_change): take CTX, REPOS_ROOT_URL, and TIMESTAMP_SLEEP params rather than a baton. (svn_client__handle_externals): stop constructing a baton, and just pass the parameters as appropriate. (svn_client__export_externals): stop constructing a baton, and just pass CTX to the error wrapper. Modified: subversion/trunk/subversion/libsvn_client/externals.c Modified: subversion/trunk/subversion/libsvn_client/externals.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/externals.c?rev=1352598&r1=1352597&r2=1352598&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_client/externals.c (original) +++ subversion/trunk/subversion/libsvn_client/externals.c Thu Jun 21 16:25:29 2012 @@ -42,17 +42,6 @@ #include "svn_private_config.h" #include "private/svn_wc_private.h" -/* Closure for handle_external_item_change. */ -struct external_change_baton_t -{ - /* The URL for the repository root. */ - const char *repos_root_url; - - /* Passed through to svn_client_* functions. */ - svn_client_ctx_t *ctx; - - svn_boolean_t *timestamp_sleep; -}; /* Remove the directory at LOCAL_ABSPATH from revision control, and do the * same to any revision controlled directories underneath LOCAL_ABSPATH @@ -313,7 +302,6 @@ switch_file_external(const char *local_a const svn_opt_revision_t *revision, const char *def_dir_abspath, svn_ra_session_t *ra_session, - svn_boolean_t *timestamp_sleep, svn_client_ctx_t *ctx, apr_pool_t *scratch_pool) { @@ -507,7 +495,7 @@ cleanup: } static svn_error_t * -handle_external_item_removal(const struct external_change_baton_t *eb, +handle_external_item_removal(const svn_client_ctx_t *ctx, const char *defining_abspath, const char *local_abspath, apr_pool_t *scratch_pool) @@ -521,19 +509,19 @@ handle_external_item_removal(const struc const char *lock_root_abspath = NULL; /* local_abspath should be a wcroot or a file external */ - SVN_ERR(svn_wc_read_kind(&kind, eb->ctx->wc_ctx, local_abspath, FALSE, + SVN_ERR(svn_wc_read_kind(&kind, ctx->wc_ctx, local_abspath, FALSE, scratch_pool)); if (kind == svn_node_none) return SVN_NO_ERROR; /* It's neither... Nothing to remove */ - SVN_ERR(svn_wc_locked2(&lock_existed, NULL, eb->ctx->wc_ctx, + SVN_ERR(svn_wc_locked2(&lock_existed, NULL, ctx->wc_ctx, local_abspath, scratch_pool)); if (! lock_existed) { SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, - eb->ctx->wc_ctx, local_abspath, + ctx->wc_ctx, local_abspath, FALSE, scratch_pool, scratch_pool)); @@ -543,12 +531,12 @@ handle_external_item_removal(const struc nothing else in this externals description (at least) is going to need this directory, and therefore it's better to leave stuff where the user expects it. */ - err = svn_wc__external_remove(eb->ctx->wc_ctx, defining_abspath, + err = svn_wc__external_remove(ctx->wc_ctx, defining_abspath, local_abspath, - eb->ctx->cancel_func, eb->ctx->cancel_baton, + ctx->cancel_func, ctx->cancel_baton, scratch_pool); - if (eb->ctx->notify_func2) + if (ctx->notify_func2) { svn_wc_notify_t *notify = svn_wc_create_notify(local_abspath, @@ -558,8 +546,7 @@ handle_external_item_removal(const struc notify->kind = kind; notify->err = err; - (eb->ctx->notify_func2)(eb->ctx->notify_baton2, - notify, scratch_pool); + (ctx->notify_func2)(ctx->notify_baton2, notify, scratch_pool); } if (err && err->apr_err == SVN_ERR_WC_LEFT_LOCAL_MOD) @@ -572,7 +559,7 @@ handle_external_item_removal(const struc /* Unlock if we acquired the lock */ if (lock_root_abspath != NULL) { - svn_error_t *err2 = svn_wc__release_write_lock(eb->ctx->wc_ctx, + svn_error_t *err2 = svn_wc__release_write_lock(ctx->wc_ctx, lock_root_abspath, scratch_pool); @@ -589,12 +576,14 @@ handle_external_item_removal(const struc } static svn_error_t * -handle_external_item_change(const struct external_change_baton_t *eb, +handle_external_item_change(svn_client_ctx_t *ctx, + const char *repos_root_url, const char *parent_dir_abspath, const char *parent_dir_url, const char *local_abspath, const char *old_defining_abspath, const svn_wc_external_item2_t *new_item, + svn_boolean_t *timestamp_sleep, apr_pool_t *scratch_pool) { svn_ra_session_t *ra_session; @@ -602,7 +591,7 @@ handle_external_item_change(const struct const char *new_url; svn_node_kind_t ext_kind; - SVN_ERR_ASSERT(eb->repos_root_url && parent_dir_url); + SVN_ERR_ASSERT(repos_root_url && parent_dir_url); SVN_ERR_ASSERT(new_item != NULL); /* Don't bother to check status, since we'll get that for free by @@ -613,7 +602,7 @@ handle_external_item_change(const struct any pointers they have should also outlive the iterpool. */ SVN_ERR(svn_wc__resolve_relative_external_url(&new_url, - new_item, eb->repos_root_url, + new_item, repos_root_url, parent_dir_url, scratch_pool, scratch_pool)); @@ -622,7 +611,7 @@ handle_external_item_change(const struct SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &new_loc, new_url, NULL, &(new_item->peg_revision), - &(new_item->revision), eb->ctx, + &(new_item->revision), ctx, scratch_pool)); SVN_ERR(svn_ra_check_path(ra_session, "", new_loc->rev, &ext_kind, @@ -645,10 +634,10 @@ handle_external_item_change(const struct user when it happens. Worst case: your disk fills up :-). */ /* First notify that we're about to handle an external. */ - if (eb->ctx->notify_func2) + if (ctx->notify_func2) { - (*eb->ctx->notify_func2)( - eb->ctx->notify_baton2, + (*ctx->notify_func2)( + ctx->notify_baton2, svn_wc_create_notify(local_abspath, svn_wc_notify_update_external, scratch_pool), @@ -671,11 +660,11 @@ handle_external_item_change(const struct &(new_item->peg_revision), &(new_item->revision), parent_dir_abspath, - eb->timestamp_sleep, eb->ctx, + timestamp_sleep, ctx, scratch_pool)); break; case svn_node_file: - if (strcmp(eb->repos_root_url, new_loc->repos_root_url)) + if (strcmp(repos_root_url, new_loc->repos_root_url)) { const char *local_repos_root_url; const char *local_repos_uuid; @@ -692,7 +681,7 @@ handle_external_item_change(const struct SVN_ERR(svn_wc__node_get_repos_info(&local_repos_root_url, &local_repos_uuid, - eb->ctx->wc_ctx, + ctx->wc_ctx, parent_dir_abspath, scratch_pool, scratch_pool)); ext_repos_relpath = svn_uri_skip_ancestor(new_loc->repos_root_url, @@ -703,7 +692,7 @@ handle_external_item_change(const struct return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL, _("Unsupported external: URL of file external '%s' " "is not in repository '%s'"), - new_url, eb->repos_root_url); + new_url, repos_root_url); new_url = svn_path_url_add_component2(local_repos_root_url, ext_repos_relpath, @@ -713,7 +702,7 @@ handle_external_item_change(const struct NULL, &(new_item->peg_revision), &(new_item->revision), - eb->ctx, scratch_pool)); + ctx, scratch_pool)); } SVN_ERR(switch_file_external(local_abspath, @@ -722,9 +711,10 @@ handle_external_item_change(const struct &new_item->revision, parent_dir_abspath, ra_session, - eb->timestamp_sleep, eb->ctx, + ctx, scratch_pool)); break; + default: SVN_ERR_MALFUNCTION(); break; @@ -734,22 +724,21 @@ handle_external_item_change(const struct } static svn_error_t * -wrap_external_error(const struct external_change_baton_t *eb, +wrap_external_error(const svn_client_ctx_t *ctx, const char *target_abspath, svn_error_t *err, apr_pool_t *scratch_pool) { if (err && err->apr_err != SVN_ERR_CANCELLED) { - if (eb->ctx->notify_func2) + if (ctx->notify_func2) { svn_wc_notify_t *notifier = svn_wc_create_notify( target_abspath, svn_wc_notify_failed_external, scratch_pool); notifier->err = err; - eb->ctx->notify_func2(eb->ctx->notify_baton2, notifier, - scratch_pool); + ctx->notify_func2(ctx->notify_baton2, notifier, scratch_pool); } svn_error_clear(err); return SVN_NO_ERROR; @@ -759,7 +748,9 @@ wrap_external_error(const struct externa } static svn_error_t * -handle_externals_change(const struct external_change_baton_t *eb, +handle_externals_change(svn_client_ctx_t *ctx, + const char *repos_root_url, + svn_boolean_t *timestamp_sleep, const char *local_abspath, const char *new_desc_text, apr_hash_t *old_externals, @@ -790,7 +781,7 @@ handle_externals_change(const struct ext else new_desc = NULL; - SVN_ERR(svn_wc__node_get_url(&url, eb->ctx->wc_ctx, local_abspath, + SVN_ERR(svn_wc__node_get_url(&url, ctx->wc_ctx, local_abspath, scratch_pool, iterpool)); SVN_ERR_ASSERT(url); @@ -805,8 +796,8 @@ handle_externals_change(const struct ext svn_pool_clear(iterpool); - if (eb->ctx->cancel_func) - SVN_ERR(eb->ctx->cancel_func(eb->ctx->cancel_baton)); + if (ctx->cancel_func) + SVN_ERR(ctx->cancel_func(ctx->cancel_baton)); target_abspath = svn_dirent_join(local_abspath, new_item->target_dir, iterpool); @@ -815,11 +806,14 @@ handle_externals_change(const struct ext APR_HASH_KEY_STRING); SVN_ERR(wrap_external_error( - eb, target_abspath, - handle_external_item_change(eb, local_abspath, url, + ctx, target_abspath, + handle_external_item_change(ctx, + repos_root_url, + local_abspath, url, target_abspath, old_defining_abspath, new_item, + timestamp_sleep, iterpool), iterpool)); @@ -847,15 +841,9 @@ svn_client__handle_externals(apr_hash_t apr_hash_t *old_external_defs; apr_hash_index_t *hi; apr_pool_t *iterpool; - struct external_change_baton_t eb; SVN_ERR_ASSERT(repos_root_url); - eb.repos_root_url = repos_root_url; - eb.ctx = ctx; - eb.timestamp_sleep = timestamp_sleep; - - iterpool = svn_pool_create(scratch_pool); /* Parse the old externals. This part will be replaced by reading EXTERNALS @@ -894,7 +882,8 @@ svn_client__handle_externals(apr_hash_t } } - SVN_ERR(handle_externals_change(&eb, local_abspath, + SVN_ERR(handle_externals_change(ctx, repos_root_url, timestamp_sleep, + local_abspath, desc_text, old_external_defs, ambient_depth, requested_depth, iterpool)); @@ -912,8 +901,8 @@ svn_client__handle_externals(apr_hash_t svn_pool_clear(iterpool); SVN_ERR(wrap_external_error( - &eb, item_abspath, - handle_external_item_removal(&eb, defining_abspath, + ctx, item_abspath, + handle_external_item_removal(ctx, defining_abspath, item_abspath, iterpool), iterpool)); @@ -960,17 +949,12 @@ svn_client__export_externals(apr_hash_t svn_client_ctx_t *ctx, apr_pool_t *scratch_pool) { - struct external_change_baton_t eb = { 0 }; apr_pool_t *iterpool = svn_pool_create(scratch_pool); apr_pool_t *sub_iterpool = svn_pool_create(scratch_pool); apr_hash_index_t *hi; SVN_ERR_ASSERT(svn_dirent_is_absolute(to_abspath)); - eb.repos_root_url = repos_root_url; - eb.ctx = ctx; - eb.timestamp_sleep = timestamp_sleep; - for (hi = apr_hash_first(scratch_pool, externals); hi; hi = apr_hash_next(hi)) @@ -1020,7 +1004,7 @@ svn_client__export_externals(apr_hash_t sub_iterpool)); SVN_ERR(wrap_external_error( - &eb, item_abspath, + ctx, item_abspath, svn_client_export5(NULL, new_url, item_abspath, &item->peg_revision, &item->revision,