Author: stefan2
Date: Mon May 16 15:24:59 2011
New Revision: 1103765
URL: http://svn.apache.org/viewvc?rev=1103765&view=rev
Log:
Finding the w/c base folder using svn_wc__db_wcroot_parse_local_abspath
can be expensive if being called for many different paths (e.g. files instead
of their parents whose w/c root information already got cached).
Please note that this may not reduce the total number of stat calls, yet,
as later invocations won't provide an suitable wri_abspath. However, Bert
sees that as the basis to future improvements.
* subversion/libsvn_wc/wc_db.h
(svn_wc__db_base_add_directory, svn_wc__db_base_add_file,
svn_wc__db_base_add_symlink): add wri_abspath parameter
* subversion/libsvn_wc/wc_db.c
(svn_wc__db_base_add_directory, svn_wc__db_base_add_file,
svn_wc__db_base_add_symlink): use wri_abspath to find the w/c base
folder instead of the local_abspath
* subversion/libsvn_wc/update_editor.c
(close_directory, close_file): provide the w/c root to .._db_base_add_*
* subversion/tests/libsvn_wc/op-depth-test.c
(base_dir_insert_remove): adapt callers in test code
* subversion/tests/libsvn_wc/db-test.c
(test_inserting_nodes): dito
Modified:
subversion/trunk/subversion/libsvn_wc/update_editor.c
subversion/trunk/subversion/libsvn_wc/wc_db.c
subversion/trunk/subversion/libsvn_wc/wc_db.h
subversion/trunk/subversion/tests/libsvn_wc/db-test.c
subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c
Modified: subversion/trunk/subversion/libsvn_wc/update_editor.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/update_editor.c?rev=1103765&r1=1103764&r2=1103765&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/trunk/subversion/libsvn_wc/update_editor.c Mon May 16 15:24:59
2011
@@ -2622,6 +2622,7 @@ close_directory(void *dir_baton,
complete */
SVN_ERR(svn_wc__db_base_add_directory(
eb->db, db->local_abspath,
+ eb->wcroot_abspath,
db->new_relpath,
eb->repos_root, eb->repos_uuid,
*eb->target_revision,
@@ -4136,6 +4137,7 @@ close_file(void *file_baton,
new_checksum = fb->original_checksum;
SVN_ERR(svn_wc__db_base_add_file(eb->db, fb->local_abspath,
+ eb->wcroot_abspath,
fb->new_relpath,
eb->repos_root, eb->repos_uuid,
*eb->target_revision,
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1103765&r1=1103764&r2=1103765&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Mon May 16 15:24:59 2011
@@ -1495,6 +1495,7 @@ svn_wc__db_get_wcroot(const char **wcroo
svn_error_t *
svn_wc__db_base_add_directory(svn_wc__db_t *db,
const char *local_abspath,
+ const char *wri_abspath,
const char *repos_relpath,
const char *repos_root_url,
const char *repos_uuid,
@@ -1528,8 +1529,9 @@ svn_wc__db_base_add_directory(svn_wc__db
#endif
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
+ wri_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
+ local_relpath = svn_dirent_skip_ancestor(wcroot->abspath, local_abspath);
blank_ibb(&ibb);
@@ -1576,6 +1578,7 @@ svn_wc__db_base_add_directory(svn_wc__db
svn_error_t *
svn_wc__db_base_add_file(svn_wc__db_t *db,
const char *local_abspath,
+ const char *wri_abspath,
const char *repos_relpath,
const char *repos_root_url,
const char *repos_uuid,
@@ -1608,8 +1611,9 @@ svn_wc__db_base_add_file(svn_wc__db_t *d
SVN_ERR_ASSERT(checksum != NULL);
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
+ wri_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
+ local_relpath = svn_dirent_skip_ancestor(wcroot->abspath, local_abspath);
blank_ibb(&ibb);
@@ -1657,6 +1661,7 @@ svn_wc__db_base_add_file(svn_wc__db_t *d
svn_error_t *
svn_wc__db_base_add_symlink(svn_wc__db_t *db,
const char *local_abspath,
+ const char *wri_abspath,
const char *repos_relpath,
const char *repos_root_url,
const char *repos_uuid,
@@ -1687,9 +1692,9 @@ svn_wc__db_base_add_symlink(svn_wc__db_t
SVN_ERR_ASSERT(target != NULL);
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
- local_abspath, scratch_pool, scratch_pool));
+ wri_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
-
+ local_relpath = svn_dirent_skip_ancestor(wcroot->abspath, local_abspath);
blank_ibb(&ibb);
/* Calculate repos_id in insert_base_node() to avoid extra transaction */
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.h?rev=1103765&r1=1103764&r2=1103765&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.h Mon May 16 15:24:59 2011
@@ -448,6 +448,7 @@ svn_wc__db_get_wcroot(const char **wcroo
svn_error_t *
svn_wc__db_base_add_directory(svn_wc__db_t *db,
const char *local_abspath,
+ const char *wri_abspath,
const char *repos_relpath,
const char *repos_root_url,
const char *repos_uuid,
@@ -503,6 +504,7 @@ svn_wc__db_base_add_directory(svn_wc__db
svn_error_t *
svn_wc__db_base_add_file(svn_wc__db_t *db,
const char *local_abspath,
+ const char *wri_abspath,
const char *repos_relpath,
const char *repos_root_url,
const char *repos_uuid,
@@ -583,6 +585,7 @@ svn_wc__db_base_add_file(svn_wc__db_t *d
svn_error_t *
svn_wc__db_base_add_symlink(svn_wc__db_t *db,
const char *local_abspath,
+ const char *wri_abspath,
const char *repos_relpath,
const char *repos_root_url,
const char *repos_uuid,
Modified: subversion/trunk/subversion/tests/libsvn_wc/db-test.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/db-test.c?rev=1103765&r1=1103764&r2=1103765&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_wc/db-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_wc/db-test.c Mon May 16 15:24:59
2011
@@ -679,6 +679,7 @@ test_inserting_nodes(apr_pool_t *pool)
set_prop(props, "for-file", "N", pool);
SVN_ERR(svn_wc__db_base_add_directory(
db, svn_dirent_join(local_abspath, "N", pool),
+ local_abspath,
"N", ROOT_ONE, UUID_ONE, 3,
props,
1, TIME_1a, AUTHOR_1,
@@ -690,6 +691,7 @@ test_inserting_nodes(apr_pool_t *pool)
set_prop(props, "for-file", "N/N-a", pool);
SVN_ERR(svn_wc__db_base_add_file(
db, svn_dirent_join(local_abspath, "N/N-a", pool),
+ local_abspath,
"N/N-a", ROOT_ONE, UUID_ONE, 3,
props,
1, TIME_1a, AUTHOR_1,
@@ -701,6 +703,7 @@ test_inserting_nodes(apr_pool_t *pool)
set_prop(props, "for-file", "O", pool);
SVN_ERR(svn_wc__db_base_add_symlink(
db, svn_dirent_join(local_abspath, "O", pool),
+ local_abspath,
"O", ROOT_ONE, UUID_ONE, 3,
props,
1, TIME_1a, AUTHOR_1,
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=1103765&r1=1103764&r2=1103765&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c Mon May 16
15:24:59 2011
@@ -1230,6 +1230,7 @@ base_dir_insert_remove(svn_test__sandbox
SVN_ERR(insert_dirs(b, before));
SVN_ERR(svn_wc__db_base_add_directory(b->wc_ctx->db, dir_abspath,
+ dir_abspath,
local_relpath, b->repos_url,
"not-even-a-uuid", revision,
apr_hash_make(b->pool), revision,