You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2011/04/13 20:45:37 UTC
svn commit: r1091882 - in /subversion/trunk/subversion: include/svn_wc.h
libsvn_client/merge.c libsvn_client/patch.c libsvn_client/status.c
libsvn_wc/status.c
Author: pburba
Date: Wed Apr 13 18:45:37 2011
New Revision: 1091882
URL: http://svn.apache.org/viewvc?rev=1091882&view=rev
Log:
Teach svn_wc_walk_status() to optionally skip check for text modifications.
Adjust the walk for subtrees of merge-tracking importance to use this new
option. This avoids the needless performance penalty that checking for text
modifications incurs.
* subversion/include/svn_wc.h
(svn_wc_walk_status): Add argument to optionally disable checking for text
modifications.
* subversion/libsvn_client/merge.c
(get_mergeinfo_paths): Update call to svn_wc_walk_status(), don't bother
checking for text mods, we don't need to know about them here.
* subversion/libsvn_client/patch.c
(check_dir_empty):
* subversion/libsvn_client/status.c
(svn_client_status5):
Update calls to svn_wc_walk_status(), maintaining existing behavior.
* subversion/libsvn_wc/status.c
(assemble_status): Add argument to optionally disable checking for text
modifications.
(send_status_structure,
get_dir_status,
handle_dir_entry,
svn_wc_walk_status): Add argument to optionally disable checking for text
modifications and pass that along.
(make_dir_baton,
handle_statii,
close_directory,
close_edit,
internal_status): Update calls to get_dir_status(), svn_wc_walk_status()
and assemble_status(), maintaining existing behavior of checking for
text modifications.
Modified:
subversion/trunk/subversion/include/svn_wc.h
subversion/trunk/subversion/libsvn_client/merge.c
subversion/trunk/subversion/libsvn_client/patch.c
subversion/trunk/subversion/libsvn_client/status.c
subversion/trunk/subversion/libsvn_wc/status.c
Modified: subversion/trunk/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_wc.h?rev=1091882&r1=1091881&r2=1091882&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_wc.h (original)
+++ subversion/trunk/subversion/include/svn_wc.h Wed Apr 13 18:45:37 2011
@@ -3813,6 +3813,12 @@ typedef void (*svn_wc_status_func_t)(voi
* - If @a get_all is FALSE, then only locally-modified entries will be
* returned. If TRUE, then all entries will be returned.
*
+ * - If @a ignore_text_mods is TRUE, then the walk will not check for
+ * modified files. Any #svn_wc_status3_t structures returned for files
+ * will always have a text_status field set to svn_wc_status_normal.
+ * If @a ignore_text_mods is FALSE, the walk checks for text changes
+ * and returns #svn_wc_status3_t structures describing any changes.
+ *
* - If @a depth is #svn_depth_empty, a status structure will
* be returned for the target only; if #svn_depth_files, for the
* target and its immediate file children; if
@@ -3852,6 +3858,7 @@ svn_wc_walk_status(svn_wc_context_t *wc_
svn_depth_t depth,
svn_boolean_t get_all,
svn_boolean_t no_ignore,
+ svn_boolean_t ignore_text_mods,
const apr_array_header_t *ignore_patterns,
svn_wc_status_func4_t status_func,
void *status_baton,
Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1091882&r1=1091881&r2=1091882&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Wed Apr 13 18:45:37 2011
@@ -5820,7 +5820,7 @@ get_mergeinfo_paths(apr_array_header_t *
pre_merge_status_baton.pool = scratch_pool;
SVN_ERR(svn_wc_walk_status(merge_cmd_baton->ctx->wc_ctx,
merge_cmd_baton->target_abspath,
- depth, TRUE, TRUE, NULL,
+ depth, TRUE, TRUE, TRUE, NULL,
pre_merge_status_cb,
&pre_merge_status_baton,
NULL, NULL,
Modified: subversion/trunk/subversion/libsvn_client/patch.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/patch.c?rev=1091882&r1=1091881&r2=1091882&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/patch.c (original)
+++ subversion/trunk/subversion/libsvn_client/patch.c Wed Apr 13 18:45:37 2011
@@ -2400,7 +2400,7 @@ check_dir_empty(svn_boolean_t *empty, co
btn.parent_path = local_abspath;
btn.result_pool = scratch_pool;
SVN_ERR(svn_wc_walk_status(wc_ctx, local_abspath, svn_depth_immediates,
- TRUE, TRUE, NULL, find_existing_children,
+ TRUE, TRUE, FALSE, NULL, find_existing_children,
&btn, NULL, NULL, NULL, NULL, scratch_pool));
*empty = TRUE;
Modified: subversion/trunk/subversion/libsvn_client/status.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/status.c?rev=1091882&r1=1091881&r2=1091882&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/status.c (original)
+++ subversion/trunk/subversion/libsvn_client/status.c Wed Apr 13 18:45:37 2011
@@ -515,7 +515,7 @@ svn_client_status5(svn_revnum_t *result_
else
{
err = svn_wc_walk_status(ctx->wc_ctx, target_abspath,
- depth, get_all, no_ignore, ignores,
+ depth, get_all, no_ignore, FALSE, ignores,
tweak_status, &sb,
ignore_externals
? NULL
Modified: subversion/trunk/subversion/libsvn_wc/status.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/status.c?rev=1091882&r1=1091881&r2=1091882&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/status.c (original)
+++ subversion/trunk/subversion/libsvn_wc/status.c Wed Apr 13 18:45:37 2011
@@ -362,7 +362,9 @@ internal_status(svn_wc_status3_t **statu
If GET_ALL is FALSE, and LOCAL_ABSPATH is not locally modified, then
*STATUS will be set to NULL. If GET_ALL is non-zero, then *STATUS will be
- allocated and returned no matter what.
+ allocated and returned no matter what. If IGNORE_TEXT_MODS is TRUE then
+ don't check for text mods, assume there are none and set and *STATUS
+ returned to reflect that assumption.
The status struct's repos_lock field will be set to REPOS_LOCK.
*/
@@ -375,6 +377,7 @@ assemble_status(svn_wc_status3_t **statu
const struct svn_wc__db_info_t *info,
const svn_io_dirent2_t *dirent,
svn_boolean_t get_all,
+ svn_boolean_t ignore_text_mods,
const svn_lock_t *repos_lock,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
@@ -512,11 +515,12 @@ assemble_status(svn_wc_status3_t **statu
to avoid an extra filestat for every file, which can be
expensive on network drives as a filestat usually can't
be cached there */
- if (dirent
- && dirent->filesize != SVN_INVALID_FILESIZE
- && dirent->mtime != 0
- && info->translated_size == dirent->filesize
- && info->last_mod_time == dirent->mtime)
+ if (ignore_text_mods
+ ||(dirent
+ && dirent->filesize != SVN_INVALID_FILESIZE
+ && dirent->mtime != 0
+ && info->translated_size == dirent->filesize
+ && info->last_mod_time == dirent->mtime))
text_modified_p = FALSE;
else
{
@@ -769,6 +773,7 @@ send_status_structure(const struct walk_
const struct svn_wc__db_info_t *info,
const svn_io_dirent2_t *dirent,
svn_boolean_t get_all,
+ svn_boolean_t ignore_text_mods,
svn_wc_status_func4_t status_func,
void *status_baton,
apr_pool_t *scratch_pool)
@@ -799,7 +804,7 @@ send_status_structure(const struct walk_
SVN_ERR(assemble_status(&statstruct, wb->db, local_abspath,
parent_repos_root_url, parent_repos_relpath,
- info, dirent, get_all,
+ info, dirent, get_all, ignore_text_mods,
repos_lock, scratch_pool, scratch_pool));
if (statstruct && status_func)
@@ -967,6 +972,7 @@ get_dir_status(const struct walk_status_
svn_depth_t depth,
svn_boolean_t get_all,
svn_boolean_t no_ignore,
+ svn_boolean_t ignore_text_mods,
svn_wc_status_func4_t status_func,
void *status_baton,
svn_cancel_func_t cancel_func,
@@ -989,6 +995,7 @@ handle_dir_entry(const struct walk_statu
svn_depth_t depth,
svn_boolean_t get_all,
svn_boolean_t no_ignore,
+ svn_boolean_t ignore_text_mods,
svn_wc_status_func4_t status_func,
void *status_baton,
svn_cancel_func_t cancel_func,
@@ -1018,6 +1025,7 @@ handle_dir_entry(const struct walk_statu
dir_repos_root_url, dir_repos_relpath,
entry_info,
dirent, ignores, depth, get_all, no_ignore,
+ ignore_text_mods,
status_func, status_baton, cancel_func,
cancel_baton,
pool));
@@ -1030,6 +1038,7 @@ handle_dir_entry(const struct walk_statu
dir_repos_root_url,
dir_repos_relpath,
entry_info, dirent, get_all,
+ ignore_text_mods,
status_func, status_baton, pool));
}
}
@@ -1040,6 +1049,7 @@ handle_dir_entry(const struct walk_statu
dir_repos_root_url,
dir_repos_relpath,
entry_info, dirent, get_all,
+ ignore_text_mods,
status_func, status_baton, pool));
}
@@ -1127,6 +1137,7 @@ get_dir_status(const struct walk_status_
svn_depth_t depth,
svn_boolean_t get_all,
svn_boolean_t no_ignore,
+ svn_boolean_t ignore_text_mods,
svn_wc_status_func4_t status_func,
void *status_baton,
svn_cancel_func_t cancel_func,
@@ -1203,6 +1214,7 @@ get_dir_status(const struct walk_status_
parent_repos_root_url,
parent_repos_relpath,
dir_info, dirent, get_all,
+ ignore_text_mods,
status_func, status_baton,
iterpool));
@@ -1255,6 +1267,7 @@ get_dir_status(const struct walk_status_
: svn_depth_empty,
get_all,
no_ignore,
+ ignore_text_mods,
status_func, status_baton,
cancel_func, cancel_baton, iterpool));
continue;
@@ -1595,7 +1608,7 @@ make_dir_baton(void **dir_baton,
d->depth == svn_depth_files
? svn_depth_files
: svn_depth_immediates,
- TRUE, TRUE,
+ TRUE, TRUE, FALSE,
hash_stash, d->statii,
eb->cancel_func, eb->cancel_baton,
pool));
@@ -1772,6 +1785,7 @@ handle_statii(struct edit_baton *eb,
NULL,
NULL /* dirent */,
ignores, depth, eb->get_all, eb->no_ignore,
+ FALSE,
status_func, status_baton,
eb->cancel_func, eb->cancel_baton,
iterpool));
@@ -2042,6 +2056,7 @@ close_directory(void *dir_baton,
eb->ignores,
eb->default_depth,
eb->get_all, eb->no_ignore,
+ FALSE,
eb->status_func, eb->status_baton,
eb->cancel_func, eb->cancel_baton,
pool));
@@ -2239,6 +2254,7 @@ close_edit(void *edit_baton,
eb->default_depth,
eb->get_all,
eb->no_ignore,
+ FALSE,
eb->ignores,
eb->status_func,
eb->status_baton,
@@ -2359,6 +2375,7 @@ svn_wc_walk_status(svn_wc_context_t *wc_
svn_depth_t depth,
svn_boolean_t get_all,
svn_boolean_t no_ignore,
+ svn_boolean_t ignore_text_mods,
const apr_array_header_t *ignore_patterns,
svn_wc_status_func4_t status_func,
void *status_baton,
@@ -2425,6 +2442,7 @@ svn_wc_walk_status(svn_wc_context_t *wc_
depth,
get_all,
no_ignore,
+ ignore_text_mods,
status_func, status_baton,
cancel_func, cancel_baton,
scratch_pool));
@@ -2566,6 +2584,7 @@ internal_status(svn_wc_status3_t **statu
NULL,
dirent,
TRUE /* get_all */,
+ FALSE,
NULL /* repos_lock */,
result_pool, scratch_pool));
}