Modified: subversion/branches/inheritable-props/subversion/libsvn_client/externals.c URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/externals.c?rev=1354186&r1=1354185&r2=1354186&view=diff ============================================================================== --- subversion/branches/inheritable-props/subversion/libsvn_client/externals.c (original) +++ subversion/branches/inheritable-props/subversion/libsvn_client/externals.c Tue Jun 26 19:26:49 2012 @@ -24,7 +24,7 @@ /* ==================================================================== */ - + /*** Includes. ***/ #include <apr_uri.h> @@ -41,18 +41,7 @@ #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 @@ -180,7 +169,10 @@ switch_dir_external(const char *local_ab FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, timestamp_sleep, - ctx, subpool)); + ctx, + ctx->conflict_func2, + ctx->conflict_baton2, + subpool)); svn_pool_destroy(subpool); goto cleanup; } @@ -313,10 +305,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, - const char *ra_session_url, - svn_revnum_t ra_revnum, - const char *repos_root_url, - svn_boolean_t *timestamp_sleep, svn_client_ctx_t *ctx, apr_pool_t *scratch_pool) { @@ -437,8 +425,7 @@ switch_file_external(const char *local_a void *report_baton; const svn_delta_editor_t *switch_editor; void *switch_baton; - const char *switch_rev_url; - const char *repos_uuid; + svn_client__pathrev_t *switch_loc; svn_revnum_t revnum; /* ### TODO: Provide the real definition path (now available in ### def_dir_abspath) after switching to the new externals store. @@ -447,22 +434,20 @@ switch_file_external(const char *local_a const char *definition_abspath = svn_dirent_dirname(local_abspath,subpool); /* Open an RA session to 'source' URL */ - SVN_ERR(svn_client__ra_session_from_path(&ra_session, &revnum, - &switch_rev_url, - url, dir_abspath, - peg_revision, revision, - ctx, subpool)); + SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &switch_loc, + url, dir_abspath, + peg_revision, revision, + ctx, subpool)); SVN_ERR(svn_ra_reparent(ra_session, url, subpool)); - SVN_ERR(svn_ra_get_uuid2(ra_session, &repos_uuid, subpool)); SVN_ERR(svn_wc__get_file_external_editor(&switch_editor, &switch_baton, &revnum, ctx->wc_ctx, local_abspath, definition_abspath /* wri */, - switch_rev_url, - repos_root_url, - repos_uuid, + switch_loc->url, + switch_loc->repos_root_url, + switch_loc->repos_uuid, use_commit_times, diff3_cmd, preserved_exts, definition_abspath /* def */, @@ -477,16 +462,17 @@ switch_file_external(const char *local_a /* Tell RA to do an update of URL+TARGET to REVISION; if we pass an invalid revnum, that means RA will use the latest revision. */ - SVN_ERR(svn_ra_do_switch2(ra_session, &reporter, &report_baton, revnum, - target, svn_depth_unknown, url, - switch_editor, switch_baton, subpool)); - - SVN_ERR(svn_wc__crawl_file_external(ctx->wc_ctx, local_abspath, - reporter, report_baton, - TRUE, use_commit_times, - ctx->cancel_func, ctx->cancel_baton, - ctx->notify_func2, ctx->notify_baton2, - subpool)); + SVN_ERR(svn_ra_do_switch2(ra_session, &reporter, &report_baton, + switch_loc->rev, + target, svn_depth_unknown, url, + switch_editor, switch_baton, subpool)); + + SVN_ERR(svn_wc__crawl_file_external(ctx->wc_ctx, local_abspath, + reporter, report_baton, + TRUE, use_commit_times, + ctx->cancel_func, ctx->cancel_baton, + ctx->notify_func2, ctx->notify_baton2, + subpool)); if (ctx->notify_func2) { @@ -512,7 +498,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) @@ -526,19 +512,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)); @@ -548,12 +534,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, @@ -563,8 +549,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) @@ -577,7 +562,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); @@ -594,23 +579,22 @@ 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; - svn_revnum_t ra_revnum; - const char *ra_session_url; - const char *repos_root_url; - const char *repos_uuid; + svn_client__pathrev_t *new_loc; 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 @@ -621,35 +605,31 @@ 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)); /* Determine if the external is a file or directory. */ /* Get the RA connection. */ - SVN_ERR(svn_client__ra_session_from_path(&ra_session, - &ra_revnum, - &ra_session_url, - new_url, NULL, - &(new_item->peg_revision), - &(new_item->revision), eb->ctx, - scratch_pool)); - - SVN_ERR(svn_ra_get_uuid2(ra_session, &repos_uuid, scratch_pool)); - SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, scratch_pool)); - SVN_ERR(svn_ra_check_path(ra_session, "", ra_revnum, &ext_kind, + SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &new_loc, + new_url, NULL, + &(new_item->peg_revision), + &(new_item->revision), ctx, + scratch_pool)); + + SVN_ERR(svn_ra_check_path(ra_session, "", new_loc->rev, &ext_kind, scratch_pool)); if (svn_node_none == ext_kind) return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL, _("URL '%s' at revision %ld doesn't exist"), - ra_session_url, ra_revnum); + new_loc->url, new_loc->rev); if (svn_node_dir != ext_kind && svn_node_file != ext_kind) return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL, _("URL '%s' at revision %ld is not a file " "or a directory"), - ra_session_url, ra_revnum); + new_loc->url, new_loc->rev); /* Not protecting against recursive externals. Detecting them in @@ -657,10 +637,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), @@ -683,11 +663,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, repos_root_url)) + if (strcmp(repos_root_url, new_loc->repos_root_url)) { const char *local_repos_root_url; const char *local_repos_uuid; @@ -704,32 +684,28 @@ 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(repos_root_url, + ext_repos_relpath = svn_uri_skip_ancestor(new_loc->repos_root_url, new_url, scratch_pool); if (local_repos_uuid == NULL || local_repos_root_url == NULL || ext_repos_relpath == NULL || - strcmp(local_repos_uuid, repos_uuid) != 0) + strcmp(local_repos_uuid, new_loc->repos_uuid) != 0) 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, scratch_pool); - SVN_ERR(svn_client__ra_session_from_path(&ra_session, - &ra_revnum, - &ra_session_url, - new_url, - NULL, - &(new_item->peg_revision), - &(new_item->revision), - eb->ctx, scratch_pool)); - SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, - scratch_pool)); + SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &new_loc, + new_url, + NULL, + &(new_item->peg_revision), + &(new_item->revision), + ctx, scratch_pool)); } SVN_ERR(switch_file_external(local_abspath, @@ -738,12 +714,10 @@ handle_external_item_change(const struct &new_item->revision, parent_dir_abspath, ra_session, - ra_session_url, - ra_revnum, - repos_root_url, - eb->timestamp_sleep, eb->ctx, + ctx, scratch_pool)); break; + default: SVN_ERR_MALFUNCTION(); break; @@ -753,22 +727,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; @@ -778,7 +751,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, @@ -809,7 +784,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); @@ -824,8 +799,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); @@ -834,11 +809,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)); @@ -866,15 +844,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 @@ -913,7 +885,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)); @@ -931,8 +904,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)); @@ -979,17 +952,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)) @@ -1039,7 +1007,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, @@ -1060,7 +1028,7 @@ svn_client__export_externals(apr_hash_t svn_error_t * svn_client__do_external_status(svn_client_ctx_t *ctx, - apr_hash_t *externals_new, + apr_hash_t *external_map, svn_depth_t depth, svn_boolean_t get_all, svn_boolean_t update, @@ -1070,69 +1038,59 @@ svn_client__do_external_status(svn_clien apr_pool_t *pool) { apr_hash_index_t *hi; - apr_pool_t *subpool = svn_pool_create(pool); + apr_pool_t *iterpool = svn_pool_create(pool); /* Loop over the hash of new values (we don't care about the old ones). This is a mapping of versioned directories to property values. */ - for (hi = apr_hash_first(pool, externals_new); + for (hi = apr_hash_first(pool, external_map); hi; hi = apr_hash_next(hi)) { - apr_array_header_t *exts; - const char *path = svn__apr_hash_index_key(hi); - const char *propval = svn__apr_hash_index_val(hi); - apr_pool_t *iterpool; - int i; + svn_node_kind_t external_kind; + const char *local_abspath = svn__apr_hash_index_key(hi); + const char *defining_abspath = svn__apr_hash_index_val(hi); + svn_node_kind_t kind; + svn_opt_revision_t opt_rev; - /* Clear the subpool. */ - svn_pool_clear(subpool); + svn_pool_clear(iterpool); - /* Parse the svn:externals property value. This results in a - hash mapping subdirectories to externals structures. */ - SVN_ERR(svn_wc_parse_externals_description3(&exts, path, propval, - FALSE, subpool)); + /* Obtain information on the expected external. */ + SVN_ERR(svn_wc__read_external_info(&external_kind, NULL, NULL, NULL, + &opt_rev.value.number, + ctx->wc_ctx, defining_abspath, + local_abspath, FALSE, + iterpool, iterpool)); - /* Make a sub-pool of SUBPOOL. */ - iterpool = svn_pool_create(subpool); + if (external_kind != svn_node_dir) + continue; - /* Loop over the subdir array. */ - for (i = 0; exts && (i < exts->nelts); i++) - { - const char *fullpath; - svn_wc_external_item2_t *external; - svn_node_kind_t kind; - - svn_pool_clear(iterpool); - - external = APR_ARRAY_IDX(exts, i, svn_wc_external_item2_t *); - fullpath = svn_dirent_join(path, external->target_dir, iterpool); - - /* If the external target directory doesn't exist on disk, - just skip it. */ - SVN_ERR(svn_io_check_path(fullpath, &kind, iterpool)); - if (kind != svn_node_dir) - continue; - - /* Tell the client we're starting an external status set. */ - if (ctx->notify_func2) - (ctx->notify_func2)( + SVN_ERR(svn_io_check_path(local_abspath, &kind, iterpool)); + if (kind != svn_node_dir) + continue; + + if (SVN_IS_VALID_REVNUM(opt_rev.value.number)) + opt_rev.kind = svn_opt_revision_number; + else + opt_rev.kind = svn_opt_revision_unspecified; + + /* Tell the client we're starting an external status set. */ + if (ctx->notify_func2) + ctx->notify_func2( ctx->notify_baton2, - svn_wc_create_notify(fullpath, svn_wc_notify_status_external, + svn_wc_create_notify(local_abspath, + svn_wc_notify_status_external, iterpool), iterpool); - /* And then do the status. */ - SVN_ERR(svn_client_status5(NULL, ctx, fullpath, - &(external->revision), - depth, get_all, update, - no_ignore, FALSE, FALSE, NULL, - status_func, status_baton, - iterpool)); - } + /* And then do the status. */ + SVN_ERR(svn_client_status5(NULL, ctx, local_abspath, &opt_rev, depth, + get_all, update, no_ignore, FALSE, FALSE, + NULL, status_func, status_baton, + iterpool)); } /* Destroy SUBPOOL and (implicitly) ITERPOOL. */ - svn_pool_destroy(subpool); + svn_pool_destroy(iterpool); return SVN_NO_ERROR; }
Modified: subversion/branches/inheritable-props/subversion/libsvn_client/info.c URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/info.c?rev=1354186&r1=1354185&r2=1354186&view=diff ============================================================================== --- subversion/branches/inheritable-props/subversion/libsvn_client/info.c (original) +++ subversion/branches/inheritable-props/subversion/libsvn_client/info.c Tue Jun 26 19:26:49 2012 @@ -348,7 +348,10 @@ svn_client_info3(const char *abspath_or_ || peg_revision->kind == svn_opt_revision_unspecified)) { /* Do all digging in the working copy. */ - wc_info_receiver_baton_t b = { receiver, receiver_baton }; + wc_info_receiver_baton_t b; + + b.client_receiver_func = receiver; + b.client_receiver_baton = receiver_baton; return svn_error_trace( svn_wc__get_info(ctx->wc_ctx, abspath_or_url, depth, fetch_excluded, fetch_actual_only, changelists, Modified: subversion/branches/inheritable-props/subversion/libsvn_client/list.c URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/list.c?rev=1354186&r1=1354185&r2=1354186&view=diff ============================================================================== --- subversion/branches/inheritable-props/subversion/libsvn_client/list.c (original) +++ subversion/branches/inheritable-props/subversion/libsvn_client/list.c Tue Jun 26 19:26:49 2012 @@ -237,9 +237,8 @@ svn_client_list2(const char *path_or_url apr_pool_t *pool) { svn_ra_session_t *ra_session; - svn_revnum_t rev; + svn_client__pathrev_t *loc; svn_dirent_t *dirent; - const char *url; const char *fs_path; svn_error_t *err; apr_hash_t *locks; @@ -249,20 +248,19 @@ svn_client_list2(const char *path_or_url dirent_fields |= SVN_DIRENT_KIND; /* Get an RA plugin for this filesystem object. */ - SVN_ERR(svn_client__ra_session_from_path(&ra_session, &rev, - &url, path_or_url, NULL, - peg_revision, - revision, ctx, pool)); + SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &loc, + path_or_url, NULL, + peg_revision, + revision, ctx, pool)); - SVN_ERR(svn_ra__get_fspath_relative_to_root(ra_session, &fs_path, url, - pool)); + fs_path = svn_client__pathrev_fspath(loc, pool); - SVN_ERR(ra_stat_compatible(ra_session, rev, &dirent, dirent_fields, + SVN_ERR(ra_stat_compatible(ra_session, loc->rev, &dirent, dirent_fields, ctx, pool)); if (! dirent) return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL, _("URL '%s' non-existent in revision %ld"), - url, rev); + loc->url, loc->rev); /* Maybe get all locks under url. */ if (fetch_locks) @@ -292,7 +290,7 @@ svn_client_list2(const char *path_or_url && (depth == svn_depth_files || depth == svn_depth_immediates || depth == svn_depth_infinity)) - SVN_ERR(get_dir_contents(dirent_fields, "", rev, ra_session, locks, + SVN_ERR(get_dir_contents(dirent_fields, "", loc->rev, ra_session, locks, fs_path, depth, ctx, list_func, baton, pool)); return SVN_NO_ERROR; Modified: subversion/branches/inheritable-props/subversion/libsvn_client/locking_commands.c URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/locking_commands.c?rev=1354186&r1=1354185&r2=1354186&view=diff ============================================================================== --- subversion/branches/inheritable-props/subversion/libsvn_client/locking_commands.c (original) +++ subversion/branches/inheritable-props/subversion/libsvn_client/locking_commands.c Tue Jun 26 19:26:49 2012 @@ -44,7 +44,7 @@ /* For use with store_locks_callback, below. */ struct lock_baton { - const char *base_path; + const char *base_dir_abspath; apr_hash_t *urls_to_paths; svn_client_ctx_t *ctx; apr_pool_t *pool; @@ -55,8 +55,8 @@ struct lock_baton * BATON is a 'struct lock_baton *', PATH is the path being locked, * and LOCK is the lock itself. * - * If BATON->base_path is not null, then this function either stores - * the LOCK on REL_URL or removes any lock tokens from REL_URL + * If BATON->base_dir_abspath is not null, then this function either + * stores the LOCK on REL_URL or removes any lock tokens from REL_URL * (depending on whether DO_LOCK is true or false respectively), but * only if RA_ERR is null, or (in the unlock case) is something other * than SVN_ERR_FS_LOCK_OWNER_MISMATCH. @@ -86,20 +86,17 @@ store_locks_callback(void *baton, notify->lock = lock; notify->err = ra_err; - if (lb->base_path) + if (lb->base_dir_abspath) { char *path = apr_hash_get(lb->urls_to_paths, rel_url, APR_HASH_KEY_STRING); const char *local_abspath; - SVN_ERR(svn_dirent_get_absolute(&local_abspath, - svn_dirent_join(lb->base_path, - path, pool), - pool)); + local_abspath = svn_dirent_join(lb->base_dir_abspath, path, pool); /* Notify a valid working copy path */ notify->path = local_abspath; - notify->path_prefix = lb->base_path; + notify->path_prefix = lb->base_dir_abspath; if (do_lock) { @@ -457,7 +454,7 @@ svn_client_lock(const apr_array_header_t NULL, FALSE, FALSE, ctx, pool)); - cb.base_path = base_dir; + cb.base_dir_abspath = base_dir_abspath; cb.urls_to_paths = urls_to_paths; cb.ctx = ctx; cb.pool = pool; @@ -504,7 +501,7 @@ svn_client_unlock(const apr_array_header if (! base_dir && !break_lock) SVN_ERR(fetch_tokens(ra_session, path_tokens, pool)); - cb.base_path = base_dir; + cb.base_dir_abspath = base_dir_abspath; cb.urls_to_paths = urls_to_paths; cb.ctx = ctx; cb.pool = pool; Modified: subversion/branches/inheritable-props/subversion/libsvn_client/log.c URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/log.c?rev=1354186&r1=1354185&r2=1354186&view=diff ============================================================================== --- subversion/branches/inheritable-props/subversion/libsvn_client/log.c (original) +++ subversion/branches/inheritable-props/subversion/libsvn_client/log.c Tue Jun 26 19:26:49 2012 @@ -101,23 +101,22 @@ svn_client__get_copy_source(const char * copyfrom_info_t copyfrom_info = { 0 }; apr_pool_t *sesspool = svn_pool_create(pool); svn_ra_session_t *ra_session; - svn_revnum_t at_rev; - const char *at_url; + svn_client__pathrev_t *at_loc; copyfrom_info.is_first = TRUE; copyfrom_info.path = NULL; copyfrom_info.rev = SVN_INVALID_REVNUM; copyfrom_info.pool = pool; - SVN_ERR(svn_client__ra_session_from_path(&ra_session, &at_rev, &at_url, - path_or_url, NULL, - revision, revision, - ctx, sesspool)); + SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &at_loc, + path_or_url, NULL, + revision, revision, + ctx, sesspool)); /* Find the copy source. Walk the location segments to find the revision at which this node was created (copied or added). */ - err = svn_ra_get_location_segments(ra_session, "", at_rev, at_rev, + err = svn_ra_get_location_segments(ra_session, "", at_loc->rev, at_loc->rev, SVN_INVALID_REVNUM, copyfrom_info_receiver, ©from_info, pool); @@ -281,7 +280,6 @@ svn_client_log5(const apr_array_header_t svn_ra_session_t *ra_session; const char *url_or_path; svn_boolean_t has_log_revprops; - const char *actual_url; apr_array_header_t *condensed_targets; svn_opt_revision_t session_opt_rev; const char *ra_target; @@ -474,6 +472,8 @@ svn_client_log5(const apr_array_header_t { + svn_client__pathrev_t *actual_loc; + /* If this is a revision type that requires access to the working copy, * we use our initial target path to figure out where to root the RA * session, otherwise we use our URL. */ @@ -483,7 +483,7 @@ svn_client_log5(const apr_array_header_t else ra_target = url_or_path; - SVN_ERR(svn_client__ra_session_from_path(&ra_session, NULL, &actual_url, + SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &actual_loc, ra_target, NULL, &peg_rev, &session_opt_rev, ctx, pool)); @@ -497,7 +497,7 @@ svn_client_log5(const apr_array_header_t /* Create ra session on first use */ rb.ra_session_pool = pool; - rb.ra_session_url = actual_url; + rb.ra_session_url = actual_loc->url; } }
