You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2012/11/15 12:26:19 UTC
svn commit: r1409736 - /subversion/trunk/subversion/libsvn_client/list.c
Author: rhuijben
Date: Thu Nov 15 11:26:18 2012
New Revision: 1409736
URL: http://svn.apache.org/viewvc?rev=1409736&view=rev
Log:
* subversion/libsvn_client/list.c
(svn_client__ra_stat_compatible): Avoid unneeded work in the common case
where the ra layer supports svn_ra_stat(). Rename some variables.
Modified:
subversion/trunk/subversion/libsvn_client/list.c
Modified: subversion/trunk/subversion/libsvn_client/list.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/list.c?rev=1409736&r1=1409735&r2=1409736&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/list.c (original)
+++ subversion/trunk/subversion/libsvn_client/list.c Thu Nov 15 11:26:18 2012
@@ -132,28 +132,29 @@ svn_client__ra_stat_compatible(svn_ra_se
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- const char *repos_root, *url;
svn_error_t *err;
- svn_dirent_t *dirent;
-
- SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root, pool));
- SVN_ERR(svn_ra_get_session_url(ra_session, &url, pool));
- err = svn_ra_stat(ra_session, "", rev, &dirent, pool);
+ err = svn_ra_stat(ra_session, "", rev, dirent_p, pool);
/* svnserve before 1.2 doesn't support the above, so fall back on
a less efficient method. */
if (err && err->apr_err == SVN_ERR_RA_NOT_IMPLEMENTED)
{
+ const char *repos_root_url;
+ const char *session_url;
svn_node_kind_t kind;
+ svn_dirent_t *dirent;
svn_error_clear(err);
+ SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, pool));
+ SVN_ERR(svn_ra_get_session_url(ra_session, &session_url, pool));
+
SVN_ERR(svn_ra_check_path(ra_session, "", rev, &kind, pool));
if (kind != svn_node_none)
{
- if (strcmp(url, repos_root) != 0)
+ if (strcmp(session_url, repos_root_url) != 0)
{
svn_ra_session_t *parent_session;
apr_hash_t *parent_ents;
@@ -162,7 +163,7 @@ svn_client__ra_stat_compatible(svn_ra_se
/* Open another session to the path's parent. This server
doesn't support svn_ra_reparent anyway, so don't try it. */
- svn_uri_split(&parent_url, &base_name, url, subpool);
+ svn_uri_split(&parent_url, &base_name, session_url, subpool);
SVN_ERR(svn_client__open_ra_session_internal(&parent_session,
NULL, parent_url,
@@ -171,12 +172,14 @@ svn_client__ra_stat_compatible(svn_ra_se
/* Get all parent's entries, no props. */
SVN_ERR(svn_ra_get_dir2(parent_session, &parent_ents, NULL,
- NULL, "", rev, dirent_fields, pool));
+ NULL, "", rev, dirent_fields, subpool));
/* Get the relevant entry. */
dirent = apr_hash_get(parent_ents, base_name,
APR_HASH_KEY_STRING);
+ *dirent_p = svn_dirent_dup(dirent, pool);
+
svn_pool_destroy(subpool); /* Close RA session */
}
else
@@ -216,15 +219,16 @@ svn_client__ra_stat_compatible(svn_ra_se
APR_HASH_KEY_STRING);
dirent->last_author = val ? val->data : NULL;
}
+
+ *dirent_p = dirent;
}
}
else
- dirent = NULL;
+ *dirent_p = NULL;
}
else
SVN_ERR(err);
- *dirent_p = dirent;
return SVN_NO_ERROR;
}