RE: svn commit: r39312 - trunk/subversion/libsvn_client
Bert Huijben <[email protected]>
| Newsgroups | gmane.comp.version-control.subversion.rapidsvn.devel,gmane.comp.version-control.subversion.svn |
|---|---|
| Message-ID | <006701ca3585$0afdad00$20f90700$__5905.62663642249$1252964923$gmane$org@nl> |
> -----Original Message----- > From: Hyrum K. Wright [mailto:[email protected]] > Sent: maandag 14 september 2009 21:50 > To: svn-lmwclWVctOZK/[email protected] > Subject: svn commit: r39312 - trunk/subversion/libsvn_client > > Author: hwright > Date: Mon Sep 14 12:49:53 2009 > New Revision: 39312 > > Log: > Rewrite the client locks organization code to remove the use of access > batons. > > * subversion/libsvn_client/locking_commands.c > (organize_lock_targets): Pass back a base_directory in place of an > access > baton, and update the base_dir calculation. Also, rename the > common_parent > output variable to something a bit more descriptive. > (svn_client_lock, svn_client_unlock): Drop the use of an access > baton, and > just use the returned base_dir to get the desired information. > > Modified: > trunk/subversion/libsvn_client/locking_commands.c > > Modified: trunk/subversion/libsvn_client/locking_commands.c > URL: > http://svn.collab.net/viewvc/svn/trunk/subversion/libsvn_client/locking > _commands.c?pathrev=39312&r1=39311&r2=39312 > ======================================================================= > ======= > --- trunk/subversion/libsvn_client/locking_commands.c Mon Sep 14 > 12:25:09 2009 (r39311) > +++ trunk/subversion/libsvn_client/locking_commands.c Mon Sep 14 > 12:49:53 2009 (r39312) > @@ -136,21 +136,11 @@ store_locks_callback(void *baton, > } > > > -/* Set *COMMON_PARENT to the nearest common parent of all TARGETS. If > - * TARGETS are local paths, then the entry for each path is examined > +/* Set *COMMON_PARENT_URL to the nearest common parent URL of all > TARGETS. > + * If TARGETS are local paths, then the entry for each path is > examined > * and *COMMON_PARENT is set to the common parent URL for all the > * targets (as opposed to the common local path). > * > - * If all the targets are local paths within the same wc, i.e., they > - * share a common parent at some level, set *PARENT_ADM_ACCESS_P > - * to the adm_access of that common parent. *PARENT_ADM_ACCESS_P will > - * be associated with adm_access objects for all the other paths, > - * which are locked in the working copy while we lock them in the > - * repository. > - * > - * If all the targets are URLs in the same repository, i.e. sharing a > - * common parent URL prefix, then set *PARENT_ADM_ACCESS_P to null. > - * > * If there is no common parent, either because the targets are a > * mixture of URLs and local paths, or because they simply do not > * share a common parent, then return SVN_ERR_UNSUPPORTED_FEATURE. > @@ -175,8 +165,8 @@ store_locks_callback(void *baton, > * TARGETS may not be empty. > */ > static svn_error_t * > -organize_lock_targets(const char **common_parent, > - svn_wc_adm_access_t **parent_adm_access_p, > +organize_lock_targets(const char **common_parent_url, > + const char **base_dir, > apr_hash_t **rel_targets_p, > apr_hash_t **rel_fs_paths_p, > const apr_array_header_t *targets, > @@ -192,30 +182,30 @@ organize_lock_targets(const char **commo > apr_pool_t *subpool = svn_pool_create(pool); > > /* Get the common parent and all relative paths */ > - SVN_ERR(svn_path_condense_targets(common_parent, &rel_targets, > targets, > + SVN_ERR(svn_path_condense_targets(common_parent_url, &rel_targets, > targets, > FALSE, pool)); If rel_targets are urls, you can use svn_uri_condense_targets(). If they are paths svn_dirent_condense_targets(). > > /* svn_path_condense_targets leaves paths empty if TARGETS only had > 1 member, so we special case that. */ > if (apr_is_empty_array(rel_targets)) > { > - const char *base_name = svn_uri_basename(*common_parent, pool); > - *common_parent = svn_uri_dirname(*common_parent, pool); > + const char *base_name = svn_uri_basename(*common_parent_url, > pool); > + *common_parent_url = svn_uri_dirname(*common_parent_url, pool); > > APR_ARRAY_PUSH(rel_targets, const char *) = base_name; > } > > - if (*common_parent == NULL || (*common_parent)[0] == '\0') > + if (*common_parent_url == NULL || (*common_parent_url)[0] == '\0') > return svn_error_create > (SVN_ERR_UNSUPPORTED_FEATURE, NULL, > _("No common parent found, unable to operate on disjoint > arguments")); > > - if (svn_path_is_url(*common_parent)) > + if (svn_path_is_url(*common_parent_url)) This looks strange. Is it an _url, or isn't it? My guess would be that it can be either.. and in that case the url suffix is not right. Bert > { > svn_revnum_t *invalid_revnum; > invalid_revnum = apr_palloc(pool, sizeof(*invalid_revnum)); > *invalid_revnum = SVN_INVALID_REVNUM; > - *parent_adm_access_p = NULL; > + *base_dir = NULL; > > for (i = 0; i < rel_targets->nelts; i++) > { > @@ -229,29 +219,13 @@ organize_lock_targets(const char **commo > } > else /* common parent is a local path */ > { > - int max_levels_to_lock = 0; > apr_array_header_t *rel_urls; > apr_array_header_t *urls = apr_array_make(pool, 1, > sizeof(const char *)); > apr_hash_t *urls_hash = apr_hash_make(pool); > const char *common_url; > > - /* Calculate the maximum number of components in the > rel_targets, which > - is the depth to which we need to lock the WC. */ > - for (i = 0; i < rel_targets->nelts; ++i) > - { > - const char *target = APR_ARRAY_IDX(rel_targets, i, const > char *); > - apr_size_t n = svn_path_component_count(target); > - > - if (n > max_levels_to_lock) > - max_levels_to_lock = (int) n; > - } > - > - SVN_ERR(svn_wc__adm_probe_in_context(parent_adm_access_p, ctx- > >wc_ctx, > - *common_parent, > - TRUE, max_levels_to_lock, > - ctx->cancel_func, ctx- > >cancel_baton, > - pool)); > + *base_dir = *common_parent_url; > > /* Get the url for each target and verify all paths. */ > for (i = 0; i < rel_targets->nelts; i++) > @@ -262,7 +236,7 @@ organize_lock_targets(const char **commo > > svn_pool_clear(subpool); > > - abs_path = svn_path_join(*common_parent, target, subpool); > + abs_path = svn_path_join(*common_parent_url, target, > subpool); > > SVN_ERR(svn_wc__get_entry_versioned(&entry, ctx->wc_ctx, > abs_path, > svn_node_unknown, FALSE, > FALSE, > @@ -312,7 +286,7 @@ organize_lock_targets(const char **commo > APR_HASH_KEY_STRING, > apr_pstrdup(pool, target)); > > - abs_path = svn_path_join(*common_parent, target, subpool); > + abs_path = svn_path_join(*common_parent_url, target, > subpool); > > SVN_ERR(svn_wc__get_entry_versioned(&entry, ctx->wc_ctx, > abs_path, > svn_node_unknown, FALSE, > FALSE, > @@ -351,7 +325,7 @@ organize_lock_targets(const char **commo > } > > *rel_fs_paths_p = urls_hash; > - *common_parent = common_url; > + *common_parent_url = common_url; > } > > *rel_targets_p = rel_targets_ret; > @@ -398,8 +372,8 @@ svn_client_lock(const apr_array_header_t > svn_client_ctx_t *ctx, > apr_pool_t *pool) > { > - svn_wc_adm_access_t *adm_access; > - const char *common_parent; > + const char *base_dir; > + const char *common_parent_url; > svn_ra_session_t *ra_session; > apr_hash_t *path_revs, *urls_to_paths; > struct lock_baton cb; > @@ -416,24 +390,15 @@ svn_client_lock(const apr_array_header_t > _("Lock comment contains illegal characters")); > } > > - SVN_ERR(organize_lock_targets(&common_parent, &adm_access, > - &path_revs, &urls_to_paths, targets, > TRUE, > - steal_lock, ctx, pool)); > + SVN_ERR(organize_lock_targets(&common_parent_url, &base_dir, > &path_revs, > + &urls_to_paths, targets, TRUE, > steal_lock, > + ctx, pool)); > > /* Open an RA session to the common parent of TARGETS. */ > - SVN_ERR(svn_client__open_ra_session_internal(&ra_session, > common_parent, > - adm_access ? > svn_wc_adm_access_path(adm_access) : NULL, > - NULL, FALSE, FALSE, ctx, pool)); > + SVN_ERR(svn_client__open_ra_session_internal(&ra_session, > common_parent_url, > + base_dir, NULL, FALSE, FALSE, ctx, pool)); > > - if (adm_access) > - { > - cb.base_path = svn_wc_adm_access_path(adm_access); > - SVN_ERR(svn_wc_adm_close2(adm_access, pool)); > - } > - else > - { > - cb.base_path = NULL; > - } > + cb.base_path = base_dir; > cb.urls_to_paths = urls_to_paths; > cb.ctx = ctx; > cb.pool = pool; > @@ -451,8 +416,8 @@ svn_client_unlock(const apr_array_header > svn_client_ctx_t *ctx, > apr_pool_t *pool) > { > - svn_wc_adm_access_t *adm_access; > - const char *common_parent; > + const char *base_dir; > + const char *common_parent_url; > svn_ra_session_t *ra_session; > apr_hash_t *path_tokens, *urls_to_paths; > struct lock_baton cb; > @@ -460,31 +425,22 @@ svn_client_unlock(const apr_array_header > if (apr_is_empty_array(targets)) > return SVN_NO_ERROR; > > - SVN_ERR(organize_lock_targets(&common_parent, &adm_access, > - &path_tokens, &urls_to_paths, targets, > - FALSE, break_lock, ctx, pool)); > + SVN_ERR(organize_lock_targets(&common_parent_url, &base_dir, > &path_tokens, > + &urls_to_paths, targets, FALSE, > break_lock, > + ctx, pool)); > > /* Open an RA session. */ > - SVN_ERR(svn_client__open_ra_session_internal(&ra_session, > common_parent, > - adm_access ? > svn_wc_adm_access_path(adm_access) : NULL, > - NULL, FALSE, FALSE, ctx, pool)); > + SVN_ERR(svn_client__open_ra_session_internal(&ra_session, > common_parent_url, > + base_dir, NULL, FALSE, FALSE, ctx, pool)); > > /* If break_lock is not set, lock tokens are required by the server. > If the targets were all URLs, ensure that we provide lock tokens, > so the repository will only check that the user owns the > locks. */ > - if (! adm_access && !break_lock) > + if (! base_dir && !break_lock) > SVN_ERR(fetch_tokens(ra_session, path_tokens, pool)); > > - if (adm_access) > - { > - cb.base_path = svn_wc_adm_access_path(adm_access); > - SVN_ERR(svn_wc_adm_close2(adm_access, pool)); > - } > - else > - { > - cb.base_path = NULL; > - } > + cb.base_path = base_dir; > cb.urls_to_paths = urls_to_paths; > cb.ctx = ctx; > cb.pool = pool; > > ------------------------------------------------------ > http://subversion.tigris.org/ds/viewMessage.do?dsForumId=495&dsMessageI > d=2394759 ------------------------------------------------------ http://subversion.tigris.org/ds/viewMessage.do?dsForumId=495&dsMessageId=2394797