On Sun, Apr 24, 2011 at 6:09 AM, <rhuij...@apache.org> wrote: > Author: rhuijben > Date: Sun Apr 24 11:09:29 2011 > New Revision: 1096306 > > URL: http://svn.apache.org/viewvc?rev=1096306&view=rev > Log: > At popular request: allow api users to choose whether they want to apply local > property changes when updating and switching. > > This doesn't change the 'svn' behavior (yet), but it allows tools like TSVN to > take advantage of this feature. > > This mostly reverts r1095130. > > * subversion/bindings/javahl/native/SVNClient.cpp > (SVNClient::update): Update caller.
There was also a change to SVNClient::doSwitch(). > > * subversion/include/svn_client.h > (svn_client_update4, > svn_client_switch3): Add argument. Update documentation. > > * subversion/libsvn_client/checkout.c > (svn_client__checkout_internal): Update caller. > > * subversion/libsvn_client/client.h > (svn_client__update_internal, > svn_client__switch_internal): Add argument. Reorder arguments to regain > some sense. > (svn_client__gather_local_external_changes): New function, copied from > pre r1095130. > > * subversion/libsvn_client/deprecated.c > (svn_client_update3, > svn_client_switch2, > svn_client_switch): Update callers. > > * subversion/libsvn_client/externals.c > (switch_dir_external. > switch_file_external): Update caller. > (svn_client__gather_local_external_changes): New function. > > * subversion/libsvn_client/switch.c > (switch_internal): Update arguments. Gather local externals changes. > (svn_client__switch_internal): Update arguments. Update caller. > (svn_client_switch3): Update arguments. Update caller. > > * subversion/libsvn_client/update.c > (update_internal): Update arguments. Gather local externals changes. > (svn_client__update_internal): Update arguments. Update caller. > (svn_client_update4): Update arguments. Update caller. > > * subversion/svn/switch-cmd.c > (svn_cl__switch): Update caller. > > * subversion/svn/update-cmd.c > (svn_cl__update): Update caller. > > * subversion/tests/cmdline/externals_tests.py > (update_external_on_locally_added_dir): New function; XFail. (Brought back) > > * subversion/tests/libsvn_wc/op-depth-test.c > (wc_update): Update caller. > > Modified: > subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp > subversion/trunk/subversion/include/svn_client.h > subversion/trunk/subversion/libsvn_client/checkout.c > subversion/trunk/subversion/libsvn_client/client.h > subversion/trunk/subversion/libsvn_client/deprecated.c > subversion/trunk/subversion/libsvn_client/externals.c > subversion/trunk/subversion/libsvn_client/switch.c > subversion/trunk/subversion/libsvn_client/update.c > subversion/trunk/subversion/svn/switch-cmd.c > subversion/trunk/subversion/svn/update-cmd.c > subversion/trunk/subversion/tests/cmdline/externals_tests.py > subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c > > Modified: subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp > (original) > +++ subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp Sun Apr > 24 11:09:29 2011 > @@ -341,7 +341,7 @@ jlongArray SVNClient::update(Targets &ta > ignoreExternals, > allowUnverObstructions, > TRUE /* adds_as_modification */, > - makeParents, > + FALSE, makeParents, > ctx, requestPool.pool()), > NULL); > > @@ -543,6 +543,7 @@ jlong SVNClient::doSwitch(const char *pa > ignoreExternals, > allowUnverObstructions, > ignoreAncestry, > + FALSE, > ctx, > requestPool.pool()), > -1); > > Modified: subversion/trunk/subversion/include/svn_client.h > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/include/svn_client.h (original) > +++ subversion/trunk/subversion/include/svn_client.h Sun Apr 24 11:09:29 2011 > @@ -1205,6 +1205,10 @@ svn_client_checkout(svn_revnum_t *result > * files restored from text-base. If @a ctx->cancel_func is non-NULL, invoke > * it passing @a ctx->cancel_baton at various places during the update. > * > + * If @a apply_local_external_modifications is TRUE, local versions of the > + * svn:externals property are processed during update instead of their > + * committed version. > + * > * Use @a pool for any temporary allocation. > * > * @todo Multiple Targets > @@ -1229,6 +1233,7 @@ svn_client_update4(apr_array_header_t ** > svn_boolean_t ignore_externals, > svn_boolean_t allow_unver_obstructions, > svn_boolean_t adds_as_modification, > + svn_boolean_t apply_local_external_modifications, > svn_boolean_t make_parents, > svn_client_ctx_t *ctx, > apr_pool_t *pool); > @@ -1337,6 +1342,11 @@ svn_client_update(svn_revnum_t *result_r > * combination of @a url, @a peg_revision, and @a revision), > * and returning #SVN_ERR_CLIENT_UNRELATED_RESOURCES if they > * do not. If @c TRUE, no such sanity checks are performed. > + * > + * @param [in] a apply_local_external_modifications If @c TRUE, local > versions > + * of the svn:externals property are processed during switch > + * instead of their committed version. > + * > * @param[in] ctx The standard client context, used for authentication and > * notification. The notifier is invoked for paths affected by > * the switch, and also for files which may be restored from the > @@ -1367,6 +1377,7 @@ svn_client_switch3(svn_revnum_t *result_ > svn_boolean_t ignore_externals, > svn_boolean_t allow_unver_obstructions, > svn_boolean_t ignore_ancestry, > + svn_boolean_t apply_local_external_modifications, > svn_client_ctx_t *ctx, > apr_pool_t *pool); > > > Modified: subversion/trunk/subversion/libsvn_client/checkout.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/checkout.c?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_client/checkout.c (original) > +++ subversion/trunk/subversion/libsvn_client/checkout.c Sun Apr 24 11:09:29 > 2011 > @@ -218,8 +218,8 @@ svn_client__checkout_internal(svn_revnum > ignore_externals, > allow_unver_obstructions, > TRUE /* adds_as_modification */, > - use_sleep, innercheckout, FALSE, > - ctx, pool); > + FALSE, FALSE, > + FALSE, use_sleep, ctx, pool); > } > > if (err) > > Modified: subversion/trunk/subversion/libsvn_client/client.h > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/client.h?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_client/client.h (original) > +++ subversion/trunk/subversion/libsvn_client/client.h Sun Apr 24 11:09:29 > 2011 > @@ -492,9 +492,10 @@ svn_client__update_internal(svn_revnum_t > svn_boolean_t ignore_externals, > svn_boolean_t allow_unver_obstructions, > svn_boolean_t adds_as_modification, > - svn_boolean_t *timestamp_sleep, > - svn_boolean_t innerupdate, > svn_boolean_t make_parents, > + svn_boolean_t apply_local_external_modifications, > + svn_boolean_t innerupdate, > + svn_boolean_t *timestamp_sleep, > svn_client_ctx_t *ctx, > apr_pool_t *pool); > > @@ -609,11 +610,12 @@ svn_client__switch_internal(svn_revnum_t > const svn_opt_revision_t *revision, > svn_depth_t depth, > svn_boolean_t depth_is_sticky, > - svn_boolean_t *timestamp_sleep, > svn_boolean_t ignore_externals, > svn_boolean_t allow_unver_obstructions, > - svn_boolean_t innerswitch, > + svn_boolean_t apply_local_external_modifications, > svn_boolean_t ignore_ancestry, > + svn_boolean_t innerswitch, > + svn_boolean_t *timestamp_sleep, > svn_client_ctx_t *ctx, > apr_pool_t *pool); > > @@ -1007,6 +1009,24 @@ svn_client__crawl_for_externals(apr_hash > apr_pool_t *result_pool, > apr_pool_t *scratch_pool); > > +/* Helper function to fix issue #2267, > + * "support svn:externals on locally added directories". > + * > + * Crawl all externals beneath ANCHOR_ABSPATH (this is cheap because we're > + * only crawling the WC DB itself). If there are externals within the > + * REQUESTED_DEPTH that weren't already picked up while we were crawling > + * the BASE tree, add them to the EXTERNALS_NEW hash with ambient depth > + * infinity. Facilitates populating externals in locally added directories. > + * > + * ### This is a bit of a hack. We should try to find a better solution > + * ### to this problem. */ > +svn_error_t * > +svn_client__gather_local_external_changes(apr_hash_t *externals_new, > + apr_hash_t *ambient_depths, > + const char *anchor_abspath, > + svn_depth_t requested_depth, > + svn_client_ctx_t *ctx, > + apr_pool_t *scratch_pool); > > /* Baton type for svn_wc__external_info_gatherer(). */ > typedef struct svn_client__external_func_baton_t > > Modified: subversion/trunk/subversion/libsvn_client/deprecated.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/deprecated.c?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_client/deprecated.c (original) > +++ subversion/trunk/subversion/libsvn_client/deprecated.c Sun Apr 24 > 11:09:29 2011 > @@ -1876,7 +1876,8 @@ svn_client_update3(apr_array_header_t ** > { > return svn_client_update4(result_revs, paths, revision, > depth, depth_is_sticky, ignore_externals, > - allow_unver_obstructions, TRUE, FALSE, ctx, > pool); > + allow_unver_obstructions, TRUE, FALSE, FALSE, > + ctx, pool); > } > > svn_error_t * > @@ -1930,7 +1931,7 @@ svn_client_switch2(svn_revnum_t *result_ > { > return svn_client_switch3(result_rev, path, switch_url, peg_revision, > revision, depth, depth_is_sticky, > ignore_externals, > - allow_unver_obstructions, TRUE, ctx, pool); > + allow_unver_obstructions, TRUE, FALSE, ctx, > pool); > } > > svn_error_t * > @@ -1944,11 +1945,10 @@ svn_client_switch(svn_revnum_t *result_r > { > svn_opt_revision_t peg_revision; > peg_revision.kind = svn_opt_revision_unspecified; > - return svn_client__switch_internal(result_rev, path, switch_url, > - &peg_revision, revision, > - SVN_DEPTH_INFINITY_OR_FILES(recurse), > - FALSE, NULL, FALSE, FALSE, FALSE, TRUE, > - ctx, pool); > + return svn_client_switch2(result_rev, path, switch_url, > + &peg_revision, revision, > + SVN_DEPTH_INFINITY_OR_FILES(recurse), > + FALSE, FALSE, FALSE, ctx, pool); > } > > /*** From cat.c ***/ > > Modified: subversion/trunk/subversion/libsvn_client/externals.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/externals.c?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_client/externals.c (original) > +++ subversion/trunk/subversion/libsvn_client/externals.c Sun Apr 24 11:09:29 > 2011 > @@ -206,7 +206,8 @@ switch_dir_external(const char *path, > SVN_ERR(svn_client__update_internal(NULL, local_abspath, > revision, svn_depth_unknown, > FALSE, FALSE, FALSE, TRUE, > - timestamp_sleep, TRUE, > FALSE, > + FALSE, FALSE, TRUE, > + timestamp_sleep, > ctx, subpool)); > svn_pool_destroy(subpool); > return SVN_NO_ERROR; > @@ -251,8 +252,9 @@ switch_dir_external(const char *path, > SVN_ERR(svn_client__switch_internal(NULL, path, url, > peg_revision, revision, > svn_depth_infinity, > - TRUE, timestamp_sleep, > - FALSE, FALSE, TRUE, TRUE, > + TRUE, FALSE, FALSE, > + FALSE, TRUE, TRUE, > + timestamp_sleep, > ctx, subpool)); > > svn_pool_destroy(subpool); > @@ -448,11 +450,12 @@ switch_file_external(const char *path, > err = svn_client__switch_internal(NULL, path, url, peg_revision, revision, > svn_depth_empty, > FALSE, /* depth_is_sticky */ > - timestamp_sleep, > TRUE, /* ignore_externals */ > FALSE, /* allow_unver_obstructions */ > - FALSE, /* innerswitch */ > + FALSE, /* apply_local_external_mods */ > TRUE, /* ignore_ancestry */ > + FALSE, /* innerswitch */ > + timestamp_sleep, > ctx, > pool); > if (err) > @@ -1458,3 +1461,45 @@ svn_client__crawl_for_externals(apr_hash > *externals_p = externals_hash; > return SVN_NO_ERROR; > } > + > +svn_error_t * > +svn_client__gather_local_external_changes(apr_hash_t *externals_new, > + apr_hash_t *ambient_depths, > + const char *anchor_abspath, > + svn_depth_t requested_depth, > + svn_client_ctx_t *ctx, > + apr_pool_t *scratch_pool) > +{ > + apr_hash_t *all_externals; > + apr_hash_index_t *hi; > + > + /* If there was no requested depth for this operation, use infinity. > + * svn_client__crawl_for_externals() doesn't like depth 'unknown'. */ > + if (requested_depth == svn_depth_unknown) > + requested_depth = svn_depth_infinity; > + > + SVN_ERR(svn_client__crawl_for_externals(&all_externals, anchor_abspath, > + requested_depth, ctx, scratch_pool, > + scratch_pool)); > + > + for (hi = apr_hash_first(scratch_pool, all_externals); > + hi; > + hi = apr_hash_next(hi)) > + { > + const char *local_abspath = svn__apr_hash_index_key(hi); > + > + if (! apr_hash_get(externals_new, local_abspath, APR_HASH_KEY_STRING)) > + { > + apr_pool_t *hash_pool = apr_hash_pool_get(externals_new); > + svn_string_t *propval = svn__apr_hash_index_val(hi); > + > + apr_hash_set(externals_new, local_abspath, APR_HASH_KEY_STRING, > + apr_pstrdup(hash_pool, propval->data)); > + apr_hash_set(ambient_depths, local_abspath, APR_HASH_KEY_STRING, > + svn_depth_to_word(svn_depth_infinity)); > + } > + } > + > + return SVN_NO_ERROR; > +} > + > > Modified: subversion/trunk/subversion/libsvn_client/switch.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/switch.c?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_client/switch.c (original) > +++ subversion/trunk/subversion/libsvn_client/switch.c Sun Apr 24 11:09:29 > 2011 > @@ -64,11 +64,12 @@ switch_internal(svn_revnum_t *result_rev > const svn_opt_revision_t *revision, > svn_depth_t depth, > svn_boolean_t depth_is_sticky, > - svn_boolean_t *timestamp_sleep, > svn_boolean_t ignore_externals, > svn_boolean_t allow_unver_obstructions, > - svn_boolean_t innerswitch, > svn_boolean_t ignore_ancestry, > + svn_boolean_t apply_local_external_modifications, > + svn_boolean_t innerswitch, > + svn_boolean_t *timestamp_sleep, > svn_client_ctx_t *ctx, > apr_pool_t *pool) > { > @@ -267,6 +268,11 @@ switch_internal(svn_revnum_t *result_rev > the primary operation. */ > if (SVN_DEPTH_IS_RECURSIVE(depth) && (! ignore_externals)) > { > + if (apply_local_external_modifications) > + SVN_ERR(svn_client__gather_local_external_changes( > + efb.externals_new, efb.ambient_depths, local_abspath, > + depth, ctx, pool)); > + > err = svn_client__handle_externals(efb.externals_old, > efb.externals_new, > efb.ambient_depths, > svn_dirent_join(anchor_abspath, > @@ -313,11 +319,12 @@ svn_client__switch_internal(svn_revnum_t > const svn_opt_revision_t *revision, > svn_depth_t depth, > svn_boolean_t depth_is_sticky, > - svn_boolean_t *timestamp_sleep, > svn_boolean_t ignore_externals, > svn_boolean_t allow_unver_obstructions, > - svn_boolean_t innerswitch, > + svn_boolean_t apply_local_external_modifications, > svn_boolean_t ignore_ancestry, > + svn_boolean_t innerswitch, > + svn_boolean_t *timestamp_sleep, > svn_client_ctx_t *ctx, > apr_pool_t *pool) > { > @@ -343,9 +350,10 @@ svn_client__switch_internal(svn_revnum_t > err1 = switch_internal(result_rev, local_abspath, anchor_abspath, > switch_url, peg_revision, revision, > depth, depth_is_sticky, > - timestamp_sleep, ignore_externals, > - allow_unver_obstructions, innerswitch, > - ignore_ancestry, ctx, pool); > + ignore_externals, > + allow_unver_obstructions, ignore_ancestry, > + apply_local_external_modifications, innerswitch, > + timestamp_sleep, ctx, pool); > > if (acquired_lock) > err2 = svn_wc__release_write_lock(ctx->wc_ctx, anchor_abspath, pool); > @@ -366,6 +374,7 @@ svn_client_switch3(svn_revnum_t *result_ > svn_boolean_t ignore_externals, > svn_boolean_t allow_unver_obstructions, > svn_boolean_t ignore_ancestry, > + svn_boolean_t apply_local_external_modifications, > svn_client_ctx_t *ctx, > apr_pool_t *pool) > { > @@ -375,7 +384,9 @@ svn_client_switch3(svn_revnum_t *result_ > > return svn_client__switch_internal(result_rev, path, switch_url, > peg_revision, revision, depth, > - depth_is_sticky, NULL, ignore_externals, > - allow_unver_obstructions, FALSE, > - ignore_ancestry, ctx, pool); > + depth_is_sticky, ignore_externals, > + allow_unver_obstructions, > + apply_local_external_modifications, > + ignore_ancestry, > + FALSE, NULL, ctx, pool); > } > > Modified: subversion/trunk/subversion/libsvn_client/update.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/update.c?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_client/update.c (original) > +++ subversion/trunk/subversion/libsvn_client/update.c Sun Apr 24 11:09:29 > 2011 > @@ -66,8 +66,9 @@ update_internal(svn_revnum_t *result_rev > svn_boolean_t ignore_externals, > svn_boolean_t allow_unver_obstructions, > svn_boolean_t adds_as_modification, > - svn_boolean_t *timestamp_sleep, > + svn_boolean_t apply_local_external_modifications, > svn_boolean_t innerupdate, > + svn_boolean_t *timestamp_sleep, > svn_boolean_t notify_summary, > svn_client_ctx_t *ctx, > apr_pool_t *pool) > @@ -284,6 +285,10 @@ update_internal(svn_revnum_t *result_rev > the primary operation. */ > if (SVN_DEPTH_IS_RECURSIVE(depth) && (! ignore_externals)) > { > + if (apply_local_external_modifications) > + SVN_ERR(svn_client__gather_local_external_changes( > + efb.externals_new, efb.ambient_depths, anchor_abspath, > + depth, ctx, pool)); > SVN_ERR(svn_client__handle_externals(efb.externals_old, > efb.externals_new, > efb.ambient_depths, > @@ -327,9 +332,10 @@ svn_client__update_internal(svn_revnum_t > svn_boolean_t ignore_externals, > svn_boolean_t allow_unver_obstructions, > svn_boolean_t adds_as_modification, > - svn_boolean_t *timestamp_sleep, > - svn_boolean_t innerupdate, > svn_boolean_t make_parents, > + svn_boolean_t apply_local_external_modifications, > + svn_boolean_t innerupdate, > + svn_boolean_t *timestamp_sleep, > svn_client_ctx_t *ctx, > apr_pool_t *pool) > { > @@ -379,8 +385,10 @@ svn_client__update_internal(svn_revnum_t > err = update_internal(result_rev, missing_parent, anchor_abspath, > &peg_revision, svn_depth_empty, FALSE, > ignore_externals, allow_unver_obstructions, > - adds_as_modification, timestamp_sleep, > - innerupdate, FALSE, ctx, pool); > + adds_as_modification, > + apply_local_external_modifications, > + innerupdate, timestamp_sleep, > + FALSE, ctx, pool); > if (err) > goto cleanup; > anchor_abspath = missing_parent; > @@ -404,7 +412,10 @@ svn_client__update_internal(svn_revnum_t > &peg_revision, depth, depth_is_sticky, > ignore_externals, allow_unver_obstructions, > adds_as_modification, > - timestamp_sleep, innerupdate, TRUE, ctx, pool); > + apply_local_external_modifications, > + innerupdate, > + timestamp_sleep, > + TRUE, ctx, pool); > cleanup: > err = svn_error_compose_create( > err, > @@ -423,6 +434,7 @@ svn_client_update4(apr_array_header_t ** > svn_boolean_t ignore_externals, > svn_boolean_t allow_unver_obstructions, > svn_boolean_t adds_as_modification, > + svn_boolean_t apply_local_external_modifications, > svn_boolean_t make_parents, > svn_client_ctx_t *ctx, > apr_pool_t *pool) > @@ -462,7 +474,9 @@ svn_client_update4(apr_array_header_t ** > ignore_externals, > allow_unver_obstructions, > adds_as_modification, > - &sleep, FALSE, make_parents, > + make_parents, > + apply_local_external_modifications, > + FALSE, &sleep, > ctx, subpool); > > if (err) > > Modified: subversion/trunk/subversion/svn/switch-cmd.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/switch-cmd.c?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/svn/switch-cmd.c (original) > +++ subversion/trunk/subversion/svn/switch-cmd.c Sun Apr 24 11:09:29 2011 > @@ -177,6 +177,7 @@ svn_cl__switch(apr_getopt_t *os, > &(opt_state->start_revision), depth, > depth_is_sticky, opt_state->ignore_externals, > opt_state->force, opt_state->ignore_ancestry, > + FALSE /* apply_local_external_modifications */, > ctx, scratch_pool); > if (err) > { > > Modified: subversion/trunk/subversion/svn/update-cmd.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/update-cmd.c?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/svn/update-cmd.c (original) > +++ subversion/trunk/subversion/svn/update-cmd.c Sun Apr 24 11:09:29 2011 > @@ -167,6 +167,7 @@ svn_cl__update(apr_getopt_t *os, > depth, depth_is_sticky, > opt_state->ignore_externals, > opt_state->force, TRUE /* adds_as_modification > */, > + FALSE /* apply_local_external_modifications */, > opt_state->parents, > ctx, scratch_pool)); > > > Modified: subversion/trunk/subversion/tests/cmdline/externals_tests.py > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/externals_tests.py?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/tests/cmdline/externals_tests.py (original) > +++ subversion/trunk/subversion/tests/cmdline/externals_tests.py Sun Apr 24 > 11:09:29 2011 > @@ -1579,6 +1579,97 @@ def update_modify_file_external(sbox): > None, None, None, None, None, > True) > > +# Test for issue #2267 > +@Issue(2267) > +@XFail() # Needs new commandline option > +def update_external_on_locally_added_dir(sbox): > + "update an external on a locally added dir" > + > + external_url_for = externals_test_setup(sbox) > + wc_dir = sbox.wc_dir > + > + repo_url = sbox.repo_url > + other_repo_url = repo_url + ".other" > + > + # Checkout a working copy > + svntest.actions.run_and_verify_svn(None, None, [], > + 'checkout', > + repo_url, wc_dir) > + > + # Add one new external item to the property on A/foo. The new item is > + # "exdir_E", deliberately added in the middle not at the end. > + new_externals_desc = \ > + external_url_for["A/D/exdir_A"] + " exdir_A" + \ > + "\n" + \ > + external_url_for["A/D/exdir_A/G/"] + " exdir_A/G/" + \ > + "\n" + \ > + "exdir_E " + other_repo_url + "/A/B/E" + \ > + "\n" + \ > + "exdir_A/H -r 1 " + external_url_for["A/D/exdir_A/H"] + \ > + "\n" + \ > + external_url_for["A/D/x/y/z/blah"] + " x/y/z/blah" + \ > + "\n" > + > + # Add A/foo and set the property on it > + new_dir = sbox.ospath("A/foo") > + sbox.simple_mkdir("A/foo") > + change_external(new_dir, new_externals_desc, commit=False) > + > + # Update the working copy, see if we get the new item. > + svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) > + > + probe_paths_exist([os.path.join(wc_dir, "A", "foo", "exdir_E")]) > + > +# Test for issue #2267 > +@Issue(2267) > +@XFail() # Needs new commandline option > +def switch_external_on_locally_added_dir(sbox): > + "switch an external on a locally added dir" > + > + external_url_for = externals_test_setup(sbox) > + wc_dir = sbox.wc_dir > + > + repo_url = sbox.repo_url > + other_repo_url = repo_url + ".other" > + A_path = repo_url + "/A" > + A_copy_path = repo_url + "/A_copy" > + > + # Create a branch of A > + # Checkout a working copy > + svntest.actions.run_and_verify_svn(None, None, [], > + 'copy', > + A_path, A_copy_path, > + '-m', 'Create branch of A') > + > + # Checkout a working copy > + svntest.actions.run_and_verify_svn(None, None, [], > + 'checkout', > + A_path, wc_dir) > + > + # Add one new external item to the property on A/foo. The new item is > + # "exdir_E", deliberately added in the middle not at the end. > + new_externals_desc = \ > + external_url_for["A/D/exdir_A"] + " exdir_A" + \ > + "\n" + \ > + external_url_for["A/D/exdir_A/G/"] + " exdir_A/G/" + \ > + "\n" + \ > + "exdir_E " + other_repo_url + "/A/B/E" + \ > + "\n" + \ > + "exdir_A/H -r 1 " + external_url_for["A/D/exdir_A/H"] + \ > + "\n" + \ > + external_url_for["A/D/x/y/z/blah"] + " x/y/z/blah" + \ > + "\n" > + > + # Add A/foo and set the property on it > + new_dir = sbox.ospath("foo") > + sbox.simple_mkdir("foo") > + change_external(new_dir, new_externals_desc, commit=False) > + > + # Switch the working copy to the branch, see if we get the new item. > + svntest.actions.run_and_verify_svn(None, None, [], 'sw', A_copy_path, > wc_dir) > + > + probe_paths_exist([os.path.join(wc_dir, "foo", "exdir_E")]) > + > @Issue(3819) > def file_external_in_sibling(sbox): > "update a file external in sibling dir" > @@ -1641,6 +1732,8 @@ test_list = [ None, > wc_repos_file_externals, > merge_target_with_externals, > update_modify_file_external, > + update_external_on_locally_added_dir, > + switch_external_on_locally_added_dir, > file_external_in_sibling, > file_external_update_without_commit, > ] > > Modified: subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c?rev=1096306&r1=1096305&r2=1096306&view=diff > ============================================================================== > --- subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c (original) > +++ subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c Sun Apr 24 > 11:09:29 2011 > @@ -217,7 +217,8 @@ wc_update(svn_test__sandbox_t *b, const > APR_ARRAY_PUSH(paths, const char *) = wc_path(b, path); > SVN_ERR(svn_client_create_context(&ctx, b->pool)); > return svn_client_update4(&result_revs, paths, &revision, > svn_depth_infinity, > - TRUE, FALSE, FALSE, FALSE, FALSE, ctx, b->pool); > + TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, > + ctx, b->pool); > } > > static svn_error_t * > > >