You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ar...@apache.org on 2011/08/16 11:38:43 UTC
svn commit: r1158171 [6/10] - in /subversion/branches/svn-bisect: ./ build/
build/ac-macros/ build/generator/ build/generator/swig/ notes/
subversion/bindings/ctypes-python/csvn/
subversion/bindings/ctypes-python/test/ subversion/bindings/javahl/native...
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/adm_ops.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/adm_ops.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/adm_ops.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/adm_ops.c Tue Aug 16 09:38:37 2011
@@ -595,15 +595,16 @@ erase_unversioned_from_wc(const char *pa
svn_error_t *
-svn_wc_delete4(svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- svn_boolean_t keep_local,
- svn_boolean_t delete_unversioned_target,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
+svn_wc__delete_internal(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t keep_local,
+ svn_boolean_t delete_unversioned_target,
+ const char *moved_to_abspath,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
{
apr_pool_t *pool = scratch_pool;
svn_wc__db_t *db = wc_ctx->db;
@@ -670,7 +671,7 @@ svn_wc_delete4(svn_wc_context_t *wc_ctx,
SVN_ERR(svn_wc__db_read_conflicts(&conflicts, db, local_abspath,
scratch_pool, scratch_pool));
- SVN_ERR(svn_wc__db_op_delete(db, local_abspath,
+ SVN_ERR(svn_wc__db_op_delete(db, local_abspath, moved_to_abspath,
notify_func, notify_baton,
cancel_func, cancel_baton,
pool));
@@ -726,6 +727,26 @@ svn_wc_delete4(svn_wc_context_t *wc_ctx,
return SVN_NO_ERROR;
}
+svn_error_t *
+svn_wc_delete4(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ svn_boolean_t keep_local,
+ svn_boolean_t delete_unversioned_target,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
+{
+ return svn_error_trace(svn_wc__delete_internal(wc_ctx, local_abspath,
+ keep_local,
+ delete_unversioned_target,
+ NULL,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
+}
+
/* Schedule the single node at LOCAL_ABSPATH, of kind KIND, for addition in
* its parent directory in the WC. It will have no properties. */
@@ -813,7 +834,7 @@ check_can_add_to_parent(const char **rep
if (parent_status == svn_wc__db_status_added)
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL,
repos_root_url, repos_uuid, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
db, parent_abspath,
result_pool, scratch_pool));
else
@@ -1389,8 +1410,6 @@ revert_restore(svn_wc__db_t *db,
else if (on_disk == svn_node_file)
{
svn_boolean_t modified;
- svn_boolean_t executable;
- svn_boolean_t read_only;
apr_hash_t *props;
#ifdef HAVE_SYMLINK
svn_string_t *special_prop;
@@ -1438,11 +1457,6 @@ revert_restore(svn_wc__db_t *db,
db, local_abspath,
TRUE, scratch_pool));
- SVN_ERR(svn_io__is_finfo_executable(&executable, &finfo,
- scratch_pool));
- SVN_ERR(svn_io__is_finfo_read_only(&read_only, &finfo,
- scratch_pool));
-
if (modified)
{
SVN_ERR(svn_io_remove_file2(local_abspath, FALSE,
@@ -1451,10 +1465,12 @@ revert_restore(svn_wc__db_t *db,
}
else
{
+ svn_boolean_t read_only;
svn_string_t *needs_lock_prop;
-#if !defined(WIN32) && !defined(__OS2__)
- svn_string_t *executable_prop;
-#endif
+
+ SVN_ERR(svn_io__is_finfo_read_only(&read_only, &finfo,
+ scratch_pool));
+
needs_lock_prop = apr_hash_get(props, SVN_PROP_NEEDS_LOCK,
APR_HASH_KEY_STRING);
if (needs_lock_prop && !read_only)
@@ -1471,19 +1487,31 @@ revert_restore(svn_wc__db_t *db,
}
#if !defined(WIN32) && !defined(__OS2__)
- executable_prop = apr_hash_get(props, SVN_PROP_EXECUTABLE,
- APR_HASH_KEY_STRING);
- if (executable_prop && !executable)
- {
- SVN_ERR(svn_io_set_file_executable(local_abspath, TRUE,
- FALSE, scratch_pool));
- notify_required = TRUE;
- }
- else if (!executable_prop && executable)
+#ifdef HAVE_SYMLINK
+ if (!special)
+#endif
{
- SVN_ERR(svn_io_set_file_executable(local_abspath, FALSE,
- FALSE, scratch_pool));
- notify_required = TRUE;
+ svn_boolean_t executable;
+ svn_string_t *executable_prop;
+
+ SVN_ERR(svn_io__is_finfo_executable(&executable, &finfo,
+ scratch_pool));
+ executable_prop = apr_hash_get(props, SVN_PROP_EXECUTABLE,
+ APR_HASH_KEY_STRING);
+ if (executable_prop && !executable)
+ {
+ SVN_ERR(svn_io_set_file_executable(local_abspath,
+ TRUE, FALSE,
+ scratch_pool));
+ notify_required = TRUE;
+ }
+ else if (!executable_prop && executable)
+ {
+ SVN_ERR(svn_io_set_file_executable(local_abspath,
+ FALSE, FALSE,
+ scratch_pool));
+ notify_required = TRUE;
+ }
}
#endif
}
@@ -1574,15 +1602,15 @@ revert_restore(svn_wc__db_t *db,
/* Revert tree LOCAL_ABSPATH to depth DEPTH and notify for all
reverts. */
static svn_error_t *
-new_revert_internal(svn_wc__db_t *db,
- const char *local_abspath,
- svn_depth_t depth,
- svn_boolean_t use_commit_times,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
+revert_internal(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t use_commit_times,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
{
svn_error_t *err;
@@ -1624,16 +1652,16 @@ new_revert_internal(svn_wc__db_t *db,
/* Revert files in LOCAL_ABSPATH to depth DEPTH that match
CHANGELIST_HASH and notify for all reverts. */
static svn_error_t *
-new_revert_changelist(svn_wc__db_t *db,
- const char *local_abspath,
- svn_depth_t depth,
- svn_boolean_t use_commit_times,
- apr_hash_t *changelist_hash,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
+revert_changelist(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t use_commit_times,
+ apr_hash_t *changelist_hash,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
{
apr_pool_t *iterpool;
const apr_array_header_t *children;
@@ -1645,11 +1673,11 @@ new_revert_changelist(svn_wc__db_t *db,
/* Revert this node (depth=empty) if it matches one of the changelists. */
if (svn_wc__internal_changelist_match(db, local_abspath, changelist_hash,
scratch_pool))
- SVN_ERR(new_revert_internal(db, local_abspath,
- svn_depth_empty, use_commit_times,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
+ SVN_ERR(revert_internal(db, local_abspath,
+ svn_depth_empty, use_commit_times,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
if (depth == svn_depth_empty)
return SVN_NO_ERROR;
@@ -1679,11 +1707,11 @@ new_revert_changelist(svn_wc__db_t *db,
const char *),
iterpool);
- SVN_ERR(new_revert_changelist(db, child_abspath, depth,
- use_commit_times, changelist_hash,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- iterpool));
+ SVN_ERR(revert_changelist(db, child_abspath, depth,
+ use_commit_times, changelist_hash,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ iterpool));
}
svn_pool_destroy(iterpool);
@@ -1701,15 +1729,15 @@ new_revert_changelist(svn_wc__db_t *db,
### the non-recursive revert on the dir will fail. Not sure how a
### partially recursive revert should handle actual-only nodes. */
static svn_error_t *
-new_revert_partial(svn_wc__db_t *db,
- const char *local_abspath,
- svn_depth_t depth,
- svn_boolean_t use_commit_times,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- svn_wc_notify_func2_t notify_func,
- void *notify_baton,
- apr_pool_t *scratch_pool)
+revert_partial(svn_wc__db_t *db,
+ const char *local_abspath,
+ svn_depth_t depth,
+ svn_boolean_t use_commit_times,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool)
{
apr_pool_t *iterpool;
const apr_array_header_t *children;
@@ -1724,9 +1752,9 @@ new_revert_partial(svn_wc__db_t *db,
/* Revert the root node itself (depth=empty), then move on to the
children. */
- SVN_ERR(new_revert_internal(db, local_abspath, svn_depth_empty,
- use_commit_times, cancel_func, cancel_baton,
- notify_func, notify_baton, iterpool));
+ SVN_ERR(revert_internal(db, local_abspath, svn_depth_empty,
+ use_commit_times, cancel_func, cancel_baton,
+ notify_func, notify_baton, iterpool));
SVN_ERR(svn_wc__db_read_children_of_working_node(&children, db,
local_abspath,
@@ -1754,11 +1782,11 @@ new_revert_partial(svn_wc__db_t *db,
}
/* Revert just this node (depth=empty). */
- SVN_ERR(new_revert_internal(db, child_abspath,
- svn_depth_empty, use_commit_times,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- iterpool));
+ SVN_ERR(revert_internal(db, child_abspath,
+ svn_depth_empty, use_commit_times,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ iterpool));
}
svn_pool_destroy(iterpool);
@@ -1785,20 +1813,20 @@ svn_wc_revert4(svn_wc_context_t *wc_ctx,
SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash, changelist_filter,
scratch_pool));
- return svn_error_trace(new_revert_changelist(wc_ctx->db, local_abspath,
- depth, use_commit_times,
- changelist_hash,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
- }
-
- if (depth == svn_depth_empty || depth == svn_depth_infinity)
- return svn_error_trace(new_revert_internal(wc_ctx->db, local_abspath,
+ return svn_error_trace(revert_changelist(wc_ctx->db, local_abspath,
depth, use_commit_times,
+ changelist_hash,
cancel_func, cancel_baton,
notify_func, notify_baton,
scratch_pool));
+ }
+
+ if (depth == svn_depth_empty || depth == svn_depth_infinity)
+ return svn_error_trace(revert_internal(wc_ctx->db, local_abspath,
+ depth, use_commit_times,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
/* The user may expect svn_depth_files/svn_depth_immediates to work
on copied dirs with one level of children. It doesn't, the user
@@ -1807,11 +1835,11 @@ svn_wc_revert4(svn_wc_context_t *wc_ctx,
revert too much we could invoke the recursive call above. */
if (depth == svn_depth_files || depth == svn_depth_immediates)
- return svn_error_trace(new_revert_partial(wc_ctx->db, local_abspath,
- depth, use_commit_times,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
+ return svn_error_trace(revert_partial(wc_ctx->db, local_abspath,
+ depth, use_commit_times,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
/* Bogus depth. Tell the caller. */
return svn_error_create(SVN_ERR_WC_INVALID_OPERATION_DEPTH, NULL, NULL);
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/ambient_depth_filter_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/ambient_depth_filter_editor.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/ambient_depth_filter_editor.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/ambient_depth_filter_editor.c Tue Aug 16 09:38:37 2011
@@ -308,7 +308,7 @@ make_file_baton(struct file_baton **f_p,
/*** Editor Functions ***/
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
set_target_revision(void *edit_baton,
svn_revnum_t target_revision,
@@ -321,7 +321,7 @@ set_target_revision(void *edit_baton,
target_revision, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_root(void *edit_baton,
svn_revnum_t base_revision,
@@ -362,7 +362,7 @@ open_root(void *edit_baton,
pool, &b->wrapped_baton);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
delete_entry(const char *path,
svn_revnum_t base_revision,
@@ -400,7 +400,7 @@ delete_entry(const char *path,
pb->wrapped_baton, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_directory(const char *path,
void *parent_baton,
@@ -446,7 +446,7 @@ add_directory(const char *path,
pool, &b->wrapped_baton);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_directory(const char *path,
void *parent_baton,
@@ -491,7 +491,7 @@ open_directory(const char *path,
return SVN_NO_ERROR;
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_file(const char *path,
void *parent_baton,
@@ -515,7 +515,7 @@ add_file(const char *path,
pool, &b->wrapped_baton);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_file(const char *path,
void *parent_baton,
@@ -537,7 +537,7 @@ open_file(const char *path,
&b->wrapped_baton);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
apply_textdelta(void *file_baton,
const char *base_checksum,
@@ -561,7 +561,7 @@ apply_textdelta(void *file_baton,
handler, handler_baton);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_file(void *file_baton,
const char *text_checksum,
@@ -577,7 +577,7 @@ close_file(void *file_baton,
text_checksum, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
absent_file(const char *path,
void *parent_baton,
@@ -592,7 +592,7 @@ absent_file(const char *path,
return eb->wrapped_editor->absent_file(path, pb->wrapped_baton, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_directory(void *dir_baton,
apr_pool_t *pool)
@@ -606,7 +606,7 @@ close_directory(void *dir_baton,
return eb->wrapped_editor->close_directory(db->wrapped_baton, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
absent_directory(const char *path,
void *parent_baton,
@@ -622,7 +622,7 @@ absent_directory(const char *path,
return eb->wrapped_editor->absent_directory(path, pb->wrapped_baton, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_file_prop(void *file_baton,
const char *name,
@@ -639,7 +639,7 @@ change_file_prop(void *file_baton,
name, value, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_dir_prop(void *dir_baton,
const char *name,
@@ -656,7 +656,7 @@ change_dir_prop(void *dir_baton,
name, value, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_edit(void *edit_baton,
apr_pool_t *pool)
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/conflicts.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/conflicts.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/conflicts.c Tue Aug 16 09:38:37 2011
@@ -215,7 +215,6 @@ resolve_conflict_on_node(svn_wc__db_t *d
if (resolve_text)
{
- svn_stream_t *tmp_stream = NULL;
const char *auto_resolve_src;
/* Handle automatic conflict resolution before the temporary files are
@@ -240,6 +239,7 @@ resolve_conflict_on_node(svn_wc__db_t *d
if (conflict_old && conflict_working && conflict_new)
{
const char *temp_dir;
+ svn_stream_t *tmp_stream = NULL;
svn_diff_t *diff;
svn_diff_conflict_display_style_t style =
conflict_choice == svn_wc_conflict_choose_theirs_conflict
@@ -252,7 +252,7 @@ resolve_conflict_on_node(svn_wc__db_t *d
SVN_ERR(svn_stream_open_unique(&tmp_stream,
&auto_resolve_src,
temp_dir,
- svn_io_file_del_on_close,
+ svn_io_file_del_on_pool_cleanup,
pool, pool));
SVN_ERR(svn_diff_file_diff3_2(&diff,
@@ -269,6 +269,7 @@ resolve_conflict_on_node(svn_wc__db_t *d
NULL, NULL, NULL, NULL,
style,
pool));
+ SVN_ERR(svn_stream_close(tmp_stream));
}
else
auto_resolve_src = NULL;
@@ -283,9 +284,6 @@ resolve_conflict_on_node(svn_wc__db_t *d
SVN_ERR(svn_io_copy_file(
svn_dirent_join(conflict_dir_abspath, auto_resolve_src, pool),
local_abspath, TRUE, pool));
-
- if (tmp_stream)
- SVN_ERR(svn_stream_close(tmp_stream));
}
/* Records whether we found any of the conflict files. */
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/copy.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/copy.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/copy.c Tue Aug 16 09:38:37 2011
@@ -312,14 +312,9 @@ copy_versioned_file(svn_wc__db_t *db,
/* Copy the (single) node's metadata, and move the new filesystem node
into place. */
- if (is_move)
- SVN_ERR(svn_wc__db_op_move(db, src_abspath, dst_abspath,
- dst_op_root_abspath, work_items,
- scratch_pool));
- else
- SVN_ERR(svn_wc__db_op_copy(db, src_abspath, dst_abspath,
- dst_op_root_abspath, work_items,
- scratch_pool));
+ SVN_ERR(svn_wc__db_op_copy(db, src_abspath, dst_abspath,
+ dst_op_root_abspath, is_move, work_items,
+ scratch_pool));
SVN_ERR(svn_wc__wq_run(db, dir_abspath,
cancel_func, cancel_baton, scratch_pool));
@@ -383,14 +378,9 @@ copy_versioned_dir(svn_wc__db_t *db,
/* Copy the (single) node's metadata, and move the new filesystem node
into place. */
- if (is_move)
- SVN_ERR(svn_wc__db_op_move(db, src_abspath, dst_abspath,
- dst_op_root_abspath, work_items,
- scratch_pool));
- else
- SVN_ERR(svn_wc__db_op_copy(db, src_abspath, dst_abspath,
- dst_op_root_abspath, work_items,
- scratch_pool));
+ SVN_ERR(svn_wc__db_op_copy(db, src_abspath, dst_abspath,
+ dst_op_root_abspath, is_move, work_items,
+ scratch_pool));
SVN_ERR(svn_wc__wq_run(db, dir_abspath,
cancel_func, cancel_baton, scratch_pool));
@@ -499,14 +489,9 @@ copy_versioned_dir(svn_wc__db_t *db,
{
/* This will be copied as some kind of deletion. Don't touch
any actual files */
- if (is_move)
- SVN_ERR(svn_wc__db_op_move(db, child_src_abspath,
- child_dst_abspath, dst_op_root_abspath,
- NULL, scratch_pool));
- else
- SVN_ERR(svn_wc__db_op_copy(db, child_src_abspath,
- child_dst_abspath, dst_op_root_abspath,
- NULL, iterpool));
+ SVN_ERR(svn_wc__db_op_copy(db, child_src_abspath,
+ child_dst_abspath, dst_op_root_abspath,
+ is_move, NULL, iterpool));
/* Don't recurse on children while all we do is creating not-present
children */
@@ -642,6 +627,25 @@ copy_or_move(svn_wc_context_t *wc_ctx,
else
SVN_ERR(err);
+ switch (src_status)
+ {
+ case svn_wc__db_status_deleted:
+ return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
+ _("Deleted node '%s' can't be copied."),
+ svn_dirent_local_style(src_abspath,
+ scratch_pool));
+
+ case svn_wc__db_status_excluded:
+ case svn_wc__db_status_server_excluded:
+ case svn_wc__db_status_not_present:
+ return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
+ _("The node '%s' was not found."),
+ svn_dirent_local_style(src_abspath,
+ scratch_pool));
+ default:
+ break;
+ }
+
SVN_ERR(svn_wc__db_read_info(&dstdir_status, NULL, NULL, NULL,
&dst_repos_root_url, &dst_repos_uuid, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -657,7 +661,7 @@ copy_or_move(svn_wc_context_t *wc_ctx,
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL,
&src_repos_root_url,
&src_repos_uuid, NULL, NULL, NULL,
- NULL,
+ NULL, NULL, NULL,
db, src_abspath,
scratch_pool, scratch_pool));
else
@@ -674,7 +678,7 @@ copy_or_move(svn_wc_context_t *wc_ctx,
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL,
&dst_repos_root_url,
&dst_repos_uuid, NULL, NULL, NULL,
- NULL,
+ NULL, NULL, NULL,
db, dstdir_abspath,
scratch_pool, scratch_pool));
else
@@ -1006,10 +1010,11 @@ svn_wc_move(svn_wc_context_t *wc_ctx,
scratch_pool));
}
- SVN_ERR(svn_wc_delete4(wc_ctx, src_abspath, TRUE, FALSE,
- cancel_func, cancel_baton,
- notify_func, notify_baton,
- scratch_pool));
+ SVN_ERR(svn_wc__delete_internal(wc_ctx, src_abspath, TRUE, FALSE,
+ dst_abspath,
+ cancel_func, cancel_baton,
+ notify_func, notify_baton,
+ scratch_pool));
return SVN_NO_ERROR;
}
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/diff_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/diff_editor.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/diff_editor.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/diff_editor.c Tue Aug 16 09:38:37 2011
@@ -569,7 +569,7 @@ file_diff(struct edit_baton *eb,
if (status == svn_wc__db_status_added)
SVN_ERR(svn_wc__db_scan_addition(&status, NULL, NULL, NULL, NULL,
&original_repos_relpath, NULL, NULL,
- NULL, db, local_abspath,
+ NULL, NULL, NULL, db, local_abspath,
scratch_pool, scratch_pool));
/* A wc-wc diff of replaced files actually shows a diff against the
@@ -959,8 +959,8 @@ report_wc_file_as_added(struct edit_bato
if (status == svn_wc__db_status_added)
SVN_ERR(svn_wc__db_scan_addition(&status, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, db, local_abspath,
- scratch_pool, scratch_pool));
+ NULL, NULL, NULL, NULL, NULL, db,
+ local_abspath, scratch_pool, scratch_pool));
/* We can't show additions for files that don't exist. */
SVN_ERR_ASSERT(status != svn_wc__db_status_deleted || eb->use_text_base);
@@ -1144,7 +1144,7 @@ report_wc_directory_as_added(struct edit
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
set_target_revision(void *edit_baton,
svn_revnum_t target_revision,
@@ -1156,7 +1156,7 @@ set_target_revision(void *edit_baton,
return SVN_NO_ERROR;
}
-/* An editor function. The root of the comparison hierarchy */
+/* An svn_delta_editor_t function. The root of the comparison hierarchy */
static svn_error_t *
open_root(void *edit_baton,
svn_revnum_t base_revision,
@@ -1173,7 +1173,7 @@ open_root(void *edit_baton,
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
delete_entry(const char *path,
svn_revnum_t base_revision,
@@ -1261,7 +1261,7 @@ delete_entry(const char *path,
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_directory(const char *path,
void *parent_baton,
@@ -1290,7 +1290,7 @@ add_directory(const char *path,
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_directory(const char *path,
void *parent_baton,
@@ -1321,8 +1321,8 @@ open_directory(const char *path,
}
-/* An editor function. When a directory is closed, all the directory
- * elements that have been added or replaced will already have been
+/* An svn_delta_editor_t function. When a directory is closed, all the
+ * directory elements that have been added or replaced will already have been
* diff'd. However there may be other elements in the working copy
* that have not yet been considered. */
static svn_error_t *
@@ -1413,7 +1413,7 @@ close_directory(void *dir_baton,
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_file(const char *path,
void *parent_baton,
@@ -1438,7 +1438,7 @@ add_file(const char *path,
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_file(const char *path,
void *parent_baton,
@@ -1502,7 +1502,7 @@ window_handler(svn_txdelta_window_t *win
return SVN_NO_ERROR;
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
apply_textdelta(void *file_baton,
const char *base_checksum,
@@ -1543,7 +1543,7 @@ apply_textdelta(void *file_baton,
return SVN_NO_ERROR;
}
-/* An editor function. When the file is closed we have a temporary
+/* An svn_delta_editor_t function. When the file is closed we have a temporary
* file containing a pristine version of the repository file. This can
* be compared against the working copy.
*
@@ -1659,7 +1659,7 @@ close_file(void *file_baton,
if (status == svn_wc__db_status_added)
SVN_ERR(svn_wc__db_scan_addition(&status, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, eb->db,
+ NULL, NULL, NULL, NULL, NULL, eb->db,
fb->local_abspath,
scratch_pool, scratch_pool));
@@ -1795,7 +1795,7 @@ close_file(void *file_baton,
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_file_prop(void *file_baton,
const char *name,
@@ -1813,7 +1813,7 @@ change_file_prop(void *file_baton,
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_dir_prop(void *dir_baton,
const char *name,
@@ -1831,7 +1831,7 @@ change_dir_prop(void *dir_baton,
}
-/* An editor function. */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_edit(void *edit_baton,
apr_pool_t *pool)
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/diff_local.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/diff_local.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/diff_local.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/diff_local.c Tue Aug 16 09:38:37 2011
@@ -205,7 +205,7 @@ file_diff(struct diff_baton *eb,
if (status == svn_wc__db_status_added)
SVN_ERR(svn_wc__db_scan_addition(&status, NULL, NULL, NULL, NULL,
&original_repos_relpath, NULL, NULL,
- NULL, db, local_abspath,
+ NULL, NULL, NULL, db, local_abspath,
scratch_pool, scratch_pool));
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/entries.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/entries.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/entries.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/entries.c Tue Aug 16 09:38:37 2011
@@ -272,7 +272,7 @@ get_info_for_deleted(svn_wc_entry_t *ent
SVN_ERR(svn_wc__db_scan_deletion(NULL,
NULL,
- &work_del_abspath,
+ &work_del_abspath, NULL,
db, entry_abspath,
scratch_pool, scratch_pool));
@@ -285,7 +285,7 @@ get_info_for_deleted(svn_wc_entry_t *ent
&parent_repos_relpath,
&entry->repos,
&entry->uuid,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
db, parent_abspath,
result_pool, scratch_pool));
@@ -525,7 +525,7 @@ read_one_entry(const svn_wc_entry_t **ne
{
const char *work_del_abspath;
SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
- &work_del_abspath,
+ &work_del_abspath, NULL,
db, entry_abspath,
scratch_pool, scratch_pool));
@@ -615,6 +615,7 @@ read_one_entry(const svn_wc_entry_t **ne
&scanned_original_relpath,
NULL, NULL, /* original_root|uuid */
&original_revision,
+ NULL, NULL,
db,
entry_abspath,
result_pool, scratch_pool));
@@ -716,9 +717,8 @@ read_one_entry(const svn_wc_entry_t **ne
NULL, NULL, NULL,
&parent_repos_relpath,
&parent_root_url,
- NULL, NULL,
- db,
- parent_abspath,
+ NULL, NULL, NULL, NULL,
+ db, parent_abspath,
scratch_pool,
scratch_pool);
if (err)
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/info.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/info.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/info.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/info.c Tue Aug 16 09:38:37 2011
@@ -63,6 +63,11 @@ svn_wc_info_dup(const svn_wc_info_t *inf
new_info->copyfrom_url = apr_pstrdup(pool, info->copyfrom_url);
if (info->wcroot_abspath)
new_info->wcroot_abspath = apr_pstrdup(pool, info->wcroot_abspath);
+ if (info->moved_from_abspath)
+ new_info->moved_from_abspath = apr_pstrdup(pool, info->moved_from_abspath);
+ if (info->moved_to_abspath)
+ new_info->moved_to_abspath = apr_pstrdup(pool, info->moved_to_abspath);
+
return new_info;
}
@@ -146,6 +151,12 @@ build_info_for_node(svn_wc__info2_t **in
wc_info->copyfrom_rev = original_revision;
}
+
+ SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ &wc_info->moved_from_abspath, NULL,
+ db, local_abspath,
+ result_pool, scratch_pool));
}
else if (op_root)
{
@@ -153,7 +164,7 @@ build_info_for_node(svn_wc__info2_t **in
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, &repos_relpath,
&tmpinfo->repos_root_URL,
&tmpinfo->repos_UUID,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
db, local_abspath,
result_pool, scratch_pool));
@@ -199,8 +210,8 @@ build_info_for_node(svn_wc__info2_t **in
result_pool, scratch_pool));
/* And now fetch the url and revision of what will be deleted */
- SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
- &work_del_abspath,
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, &wc_info->moved_to_abspath,
+ &work_del_abspath, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
if (work_del_abspath != NULL)
@@ -214,7 +225,7 @@ build_info_for_node(svn_wc__info2_t **in
&tmpinfo->repos_root_URL,
&tmpinfo->repos_UUID,
NULL, NULL, NULL,
- &tmpinfo->rev,
+ &tmpinfo->rev, NULL, NULL,
db, added_abspath,
result_pool, scratch_pool));
@@ -285,8 +296,6 @@ build_info_for_node(svn_wc__info2_t **in
tmpinfo->lock->creation_date = lock->date;
}
- /* ### Temporary hacks to keep our test suite happy: */
-
*info = tmpinfo;
return SVN_NO_ERROR;
}
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/lock.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/lock.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/lock.c Tue Aug 16 09:38:37 2011
@@ -1104,7 +1104,7 @@ child_is_disjoint(svn_boolean_t *disjoin
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, &parent_repos_relpath,
&parent_repos_root,
&parent_repos_uuid,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
db, parent_abspath,
scratch_pool, scratch_pool));
else
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/merge.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/merge.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/merge.c Tue Aug 16 09:38:37 2011
@@ -814,7 +814,7 @@ setup_text_conflict_desc(const char *lef
svn_wc_conflict_description2_t *cdesc;
cdesc = svn_wc_conflict_description_create_text2(target_abspath, pool);
- cdesc->is_binary = FALSE;
+ cdesc->is_binary = is_binary;
cdesc->mime_type = (mimeprop && mimeprop->value)
? mimeprop->value->data : NULL,
cdesc->base_abspath = left_abspath;
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/node.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/node.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/node.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/node.c Tue Aug 16 09:38:37 2011
@@ -182,7 +182,7 @@ svn_wc__internal_get_repos_info(const ch
const char *base_del_abspath, *wrk_del_abspath;
SVN_ERR(svn_wc__db_scan_deletion(&base_del_abspath, NULL,
- &wrk_del_abspath,
+ &wrk_del_abspath, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
@@ -193,7 +193,7 @@ svn_wc__internal_get_repos_info(const ch
else if (wrk_del_abspath)
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL,
repos_root_url, repos_uuid,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
db, svn_dirent_dirname(
wrk_del_abspath,
scratch_pool),
@@ -205,7 +205,7 @@ svn_wc__internal_get_repos_info(const ch
repository location by scanning up the tree. */
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL,
repos_root_url, repos_uuid,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
db, local_abspath,
result_pool, scratch_pool));
}
@@ -381,7 +381,7 @@ svn_wc__node_get_repos_relpath(const cha
{
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, repos_relpath,
NULL, NULL, NULL, NULL,
- NULL, NULL,
+ NULL, NULL, NULL, NULL,
wc_ctx->db, local_abspath,
result_pool, scratch_pool));
}
@@ -527,8 +527,8 @@ svn_wc__internal_get_copyfrom_info(const
SVN_ERR(svn_wc__db_scan_addition(&status, &op_root_abspath, NULL, NULL,
NULL, &original_repos_relpath,
&original_root_url, NULL,
- &original_revision, db, local_abspath,
- result_pool, scratch_pool));
+ &original_revision, NULL, NULL, db,
+ local_abspath, result_pool, scratch_pool));
if (status == svn_wc__db_status_copied ||
status == svn_wc__db_status_moved_here)
{
@@ -748,6 +748,33 @@ svn_wc__node_is_status_deleted(svn_boole
}
svn_error_t *
+svn_wc__node_get_deleted_ancestor(const char **deleted_ancestor_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_status_t status;
+
+ *deleted_ancestor_abspath = NULL;
+
+ SVN_ERR(svn_wc__db_read_info(&status,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wc_ctx->db, local_abspath,
+ scratch_pool, scratch_pool));
+
+ if (status == svn_wc__db_status_deleted)
+ SVN_ERR(svn_wc__db_scan_deletion(deleted_ancestor_abspath, NULL, NULL,
+ NULL, wc_ctx->db, local_abspath,
+ result_pool, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_wc__node_is_status_server_excluded(svn_boolean_t *is_server_excluded,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
@@ -977,7 +1004,7 @@ svn_wc__internal_get_commit_base_rev(svn
revision (not this node's base revision). */
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, commit_base_revision,
- db, local_abspath,
+ NULL, NULL, db, local_abspath,
scratch_pool, scratch_pool));
@@ -990,7 +1017,7 @@ svn_wc__internal_get_commit_base_rev(svn
const char *work_del_abspath;
SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
- &work_del_abspath,
+ &work_del_abspath, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
if (work_del_abspath != NULL)
@@ -999,7 +1026,7 @@ svn_wc__internal_get_commit_base_rev(svn
* revision. */
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL,
- commit_base_revision,
+ commit_base_revision, NULL, NULL,
db,
svn_dirent_dirname(work_del_abspath,
scratch_pool),
@@ -1133,7 +1160,7 @@ svn_wc__internal_node_get_schedule(svn_w
/* Find out details of our deletion. */
SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
- &work_del_abspath,
+ &work_del_abspath, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
@@ -1394,8 +1421,8 @@ svn_wc__internal_get_origin(svn_boolean_
SVN_ERR(svn_wc__db_scan_addition(&status, &op_root_abspath, NULL,
NULL, NULL, &original_repos_relpath,
repos_root_url,
- repos_uuid,
- revision, db, local_abspath,
+ repos_uuid, revision, NULL, NULL,
+ db, local_abspath,
result_pool, scratch_pool));
if (status == svn_wc__db_status_added)
@@ -1620,7 +1647,6 @@ svn_wc__check_for_obstructions(svn_wc_no
svn_node_kind_t *kind,
svn_boolean_t *added,
svn_boolean_t *deleted,
- svn_boolean_t *conflicted,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
svn_boolean_t no_wcroot_check,
@@ -1629,7 +1655,6 @@ svn_wc__check_for_obstructions(svn_wc_no
svn_wc__db_status_t status;
svn_wc__db_kind_t db_kind;
svn_node_kind_t disk_kind;
- svn_boolean_t conflicted_p;
svn_error_t *err;
*obstruction_state = svn_wc_notify_state_inapplicable;
@@ -1639,14 +1664,12 @@ svn_wc__check_for_obstructions(svn_wc_no
*added = FALSE;
if (deleted)
*deleted = FALSE;
- if (conflicted)
- *conflicted = FALSE;
SVN_ERR(svn_io_check_path(local_abspath, &disk_kind, scratch_pool));
err = svn_wc__db_read_info(&status, &db_kind, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, &conflicted_p, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL,
wc_ctx->db, local_abspath,
scratch_pool, scratch_pool);
@@ -1752,17 +1775,76 @@ svn_wc__check_for_obstructions(svn_wc_no
SVN_ERR_MALFUNCTION();
}
- if (conflicted_p && (conflicted != NULL))
- {
- svn_boolean_t text_c, prop_c, tree_c;
+ return SVN_NO_ERROR;
+}
- SVN_ERR(svn_wc__internal_conflicted_p(&text_c, &prop_c, &tree_c,
- wc_ctx->db, local_abspath,
- scratch_pool));
- *conflicted = (text_c || prop_c || tree_c);
- }
+svn_error_t *
+svn_wc__node_was_moved_away(const char **moved_to_abspath,
+ const char **op_root_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t is_deleted;
+
+ if (moved_to_abspath)
+ *moved_to_abspath = NULL;
+ if (op_root_abspath)
+ *op_root_abspath = NULL;
+
+ SVN_ERR(svn_wc__node_is_status_deleted(&is_deleted, wc_ctx, local_abspath,
+ scratch_pool));
+ if (is_deleted)
+ SVN_ERR(svn_wc__db_scan_deletion(NULL, moved_to_abspath, NULL,
+ op_root_abspath, wc_ctx->db,
+ local_abspath,
+ result_pool, scratch_pool));
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_wc__node_was_moved_here(const char **moved_from_abspath,
+ const char **delete_op_root_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_boolean_t is_added;
+
+ if (moved_from_abspath)
+ *moved_from_abspath = NULL;
+ if (delete_op_root_abspath)
+ *delete_op_root_abspath = NULL;
+
+ SVN_ERR(svn_wc__node_is_added(&is_added, wc_ctx, local_abspath,
+ scratch_pool));
+ if (is_added && (moved_from_abspath || delete_op_root_abspath))
+ {
+ svn_wc__db_status_t status;
+ const char *db_moved_from_abspath;
+ const char *db_delete_op_root_abspath;
+
+ SVN_ERR(svn_wc__db_scan_addition(&status, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, &db_moved_from_abspath,
+ &db_delete_op_root_abspath,
+ wc_ctx->db, local_abspath,
+ scratch_pool, scratch_pool));
+ if (status == svn_wc__db_status_moved_here)
+ {
+ if (moved_from_abspath)
+ *moved_from_abspath = apr_pstrdup(result_pool,
+ db_moved_from_abspath);
+ if (delete_op_root_abspath)
+ *delete_op_root_abspath = apr_pstrdup(result_pool,
+ db_delete_op_root_abspath);
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/props.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/props.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/props.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/props.c Tue Aug 16 09:38:37 2011
@@ -1929,7 +1929,7 @@ svn_wc__get_pristine_props(apr_hash_t **
while a simple add does not. */
SVN_ERR(svn_wc__db_scan_addition(&status, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
}
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/status.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/status.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/status.c Tue Aug 16 09:38:37 2011
@@ -336,7 +336,7 @@ get_repos_root_url_relpath(const char **
SVN_ERR(svn_wc__db_scan_addition(NULL, NULL,
repos_relpath, repos_root_url,
repos_uuid, NULL, NULL, NULL, NULL,
- db, local_abspath,
+ NULL, NULL, db, local_abspath,
result_pool, scratch_pool));
}
else if (info->have_base)
@@ -365,7 +365,7 @@ internal_status(svn_wc_status3_t **statu
/* Fill in *STATUS for LOCAL_ABSPATH, using DB. Allocate *STATUS in
RESULT_POOL and use SCRATCH_POOL for temporary allocations.
- PARENT_REPOS_ROOT_URL and PARENT_REPOS_RELPATH are the the repository root
+ PARENT_REPOS_ROOT_URL and PARENT_REPOS_RELPATH are the repository root
and repository relative path of the parent of LOCAL_ABSPATH or NULL if
LOCAL_ABSPATH doesn't have a versioned parent directory.
@@ -403,6 +403,9 @@ assemble_status(svn_wc_status3_t **statu
const char *repos_relpath;
const char *repos_root_url;
const char *repos_uuid;
+ const char *moved_from_abspath = NULL;
+ const char *moved_to_abspath = NULL;
+ const char *moved_to_op_root_abspath = NULL;
svn_filesize_t filesize = (dirent && (dirent->kind == svn_node_file))
? dirent->filesize
: SVN_INVALID_FILESIZE;
@@ -426,7 +429,7 @@ assemble_status(svn_wc_status3_t **statu
switched_p = !name || (strcmp(name, svn_dirent_basename(local_abspath, NULL)) != 0);
}
- /* Examine whether our target is missing or obstructed or missing.
+ /* Examine whether our target is missing or obstructed.
While we are not completely in single-db mode yet, data about
obstructed or missing nodes might be incomplete here. This is
@@ -608,6 +611,24 @@ assemble_status(svn_wc_status3_t **statu
}
}
+ /* Get moved-to info. */
+ if (info->status == svn_wc__db_status_deleted)
+ SVN_ERR(svn_wc__db_scan_deletion(NULL,
+ &moved_to_abspath,
+ NULL,
+ &moved_to_op_root_abspath,
+ db, local_abspath,
+ result_pool, scratch_pool));
+
+ /* Get moved-from info. */
+ if (info->status == svn_wc__db_status_added)
+ SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ &moved_from_abspath,
+ NULL,
+ db, local_abspath,
+ result_pool, scratch_pool));
+
if (node_status == svn_wc_status_normal)
node_status = text_status;
@@ -700,6 +721,10 @@ assemble_status(svn_wc_status3_t **statu
stat->repos_relpath = repos_relpath;
stat->repos_uuid = repos_uuid;
+ stat->moved_from_abspath = moved_from_abspath;
+ stat->moved_to_abspath = moved_to_abspath;
+ stat->moved_to_op_root_abspath = moved_to_op_root_abspath;
+
*status = stat;
return SVN_NO_ERROR;
@@ -1705,7 +1730,7 @@ handle_statii(struct edit_baton *eb,
/*** The callbacks we'll plug into an svn_delta_editor_t structure. ***/
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
set_target_revision(void *edit_baton,
svn_revnum_t target_revision,
@@ -1717,7 +1742,7 @@ set_target_revision(void *edit_baton,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_root(void *edit_baton,
svn_revnum_t base_revision,
@@ -1730,7 +1755,7 @@ open_root(void *edit_baton,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
delete_entry(const char *path,
svn_revnum_t revision,
@@ -1766,7 +1791,7 @@ delete_entry(const char *path,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_directory(const char *path,
void *parent_baton,
@@ -1792,7 +1817,7 @@ add_directory(const char *path,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_directory(const char *path,
void *parent_baton,
@@ -1805,7 +1830,7 @@ open_directory(const char *path,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_dir_prop(void *dir_baton,
const char *name,
@@ -1836,7 +1861,7 @@ change_dir_prop(void *dir_baton,
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_directory(void *dir_baton,
apr_pool_t *pool)
@@ -1986,7 +2011,7 @@ close_directory(void *dir_baton,
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
add_file(const char *path,
void *parent_baton,
@@ -2009,7 +2034,7 @@ add_file(const char *path,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
open_file(const char *path,
void *parent_baton,
@@ -2025,7 +2050,7 @@ open_file(const char *path,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
apply_textdelta(void *file_baton,
const char *base_checksum,
@@ -2046,7 +2071,7 @@ apply_textdelta(void *file_baton,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
change_file_prop(void *file_baton,
const char *name,
@@ -2078,7 +2103,7 @@ change_file_prop(void *file_baton,
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_file(void *file_baton,
const char *text_checksum, /* ignored, as we receive no data */
@@ -2135,7 +2160,7 @@ close_file(void *file_baton,
SVN_INVALID_REVNUM, repos_lock, pool);
}
-/* */
+/* An svn_delta_editor_t function. */
static svn_error_t *
close_edit(void *edit_baton,
apr_pool_t *pool)
@@ -2464,21 +2489,24 @@ internal_status(svn_wc_status3_t **statu
db, local_abspath,
scratch_pool, scratch_pool);
- if ((err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- || node_status == svn_wc__db_status_not_present
- || node_status == svn_wc__db_status_server_excluded
- || node_status == svn_wc__db_status_excluded)
+ if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
{
svn_error_clear(err);
node_kind = svn_wc__db_kind_unknown;
-
/* Ensure conflicted is always set, but don't hide tree conflicts
on 'hidden' nodes. */
- if (err)
- conflicted = FALSE;
+ conflicted = FALSE;
+ }
+ else if (err)
+ {
+ return svn_error_trace(err);
+ }
+ else if (node_status == svn_wc__db_status_not_present
+ || node_status == svn_wc__db_status_server_excluded
+ || node_status == svn_wc__db_status_excluded)
+ {
+ node_kind = svn_wc__db_kind_unknown;
}
- else
- SVN_ERR(err);
if (node_kind == svn_wc__db_kind_unknown)
return svn_error_trace(assemble_unversioned(status,
@@ -2588,6 +2616,18 @@ svn_wc_dup_status3(const svn_wc_status3_
new_stat->repos_uuid
= apr_pstrdup(pool, orig_stat->repos_uuid);
+ if (orig_stat->moved_from_abspath)
+ new_stat->moved_from_abspath
+ = apr_pstrdup(pool, orig_stat->moved_from_abspath);
+
+ if (orig_stat->moved_to_abspath)
+ new_stat->moved_to_abspath
+ = apr_pstrdup(pool, orig_stat->moved_to_abspath);
+
+ if (orig_stat->moved_to_op_root_abspath)
+ new_stat->moved_to_op_root_abspath
+ = apr_pstrdup(pool, orig_stat->moved_to_op_root_abspath);
+
/* Return the new hotness. */
return new_stat;
}
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/update_editor.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/update_editor.c Tue Aug 16 09:38:37 2011
@@ -1300,8 +1300,8 @@ create_tree_conflict(svn_wc_conflict_des
SVN_ERR(svn_wc__db_scan_addition(&added_status, NULL,
&added_repos_relpath,
&repos_root_url,
- NULL, NULL, NULL, NULL, NULL,
- eb->db, local_abspath,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, eb->db, local_abspath,
result_pool, scratch_pool));
/* This better really be an added status. */
@@ -2128,7 +2128,7 @@ add_directory(const char *path,
/* Is the local add a copy? */
if (status == svn_wc__db_status_added)
SVN_ERR(svn_wc__db_scan_addition(&add_status, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
eb->db, db->local_abspath,
pool, pool));
@@ -2208,7 +2208,7 @@ add_directory(const char *path,
### to theirs with 'svn revert'. */
if (db->shadowed && db->obstruction_found)
{
- SVN_ERR(svn_wc__db_op_delete(eb->db, db->local_abspath,
+ SVN_ERR(svn_wc__db_op_delete(eb->db, db->local_abspath, NULL,
NULL, NULL /* notification */,
eb->cancel_func, eb->cancel_baton,
pool));
@@ -3155,7 +3155,7 @@ add_file(const char *path,
/* Is the local node a copy or move */
if (status == svn_wc__db_status_added)
SVN_ERR(svn_wc__db_scan_addition(&status, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
eb->db, fb->local_abspath,
scratch_pool, scratch_pool));
@@ -3935,10 +3935,13 @@ close_file(void *file_baton,
if (fb->new_text_base_md5_checksum && expected_md5_checksum
&& !svn_checksum_match(expected_md5_checksum,
fb->new_text_base_md5_checksum))
- return svn_checksum_mismatch_err(expected_md5_checksum,
- fb->new_text_base_md5_checksum, scratch_pool,
- _("Checksum mismatch for '%s'"),
- svn_dirent_local_style(fb->local_abspath, pool));
+ return svn_error_trace(
+ svn_checksum_mismatch_err(expected_md5_checksum,
+ fb->new_text_base_md5_checksum,
+ scratch_pool,
+ _("Checksum mismatch for '%s'"),
+ svn_dirent_local_style(
+ fb->local_abspath, pool)));
/* Gather the changes for each kind of property. */
SVN_ERR(svn_categorize_props(fb->propchanges, &entry_prop_changes,
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/upgrade.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/upgrade.c?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/upgrade.c (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/upgrade.c Tue Aug 16 09:38:37 2011
@@ -1106,6 +1106,18 @@ migrate_text_bases(apr_hash_t **text_bas
is_revert_base = FALSE;
}
+ if (! versioned_file_name)
+ {
+ /* Some file that doesn't end with .svn-base or .svn-revert.
+ No idea why that would be in our administrative area, but
+ we shouldn't segfault on this case.
+
+ Note that we already copied this file in the pristine store,
+ but the next cleanup will take care of that.
+ */
+ continue;
+ }
+
/* Create a new info struct for this versioned file, or fill in the
* existing one if this is the second text-base we've found for it. */
info = apr_hash_get(*text_bases_info, versioned_file_name,
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/wc-metadata.sql
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/wc-metadata.sql?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/wc-metadata.sql (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/wc-metadata.sql Tue Aug 16 09:38:37 2011
@@ -316,8 +316,8 @@ CREATE TABLE NODES (
BASE node, the location of the initial checkout.
When op_depth != 0, they indicate where this node was copied/moved from.
- In this case, the fields are set only on the root of the operation,
- and are NULL for all children. */
+ In this case, the fields are set for the root of the operation and for all
+ children. */
repos_id INTEGER REFERENCES REPOSITORY (id),
repos_path TEXT,
revision INTEGER,
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/wc-queries.sql?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/wc-queries.sql Tue Aug 16 09:38:37 2011
@@ -29,7 +29,7 @@
-- STMT_SELECT_NODE_INFO
SELECT op_depth, repos_id, repos_path, presence, kind, revision, checksum,
translated_size, changed_revision, changed_date, changed_author, depth,
- symlink_target, last_mod_time, properties
+ symlink_target, last_mod_time, properties, moved_here
FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2
ORDER BY op_depth DESC
@@ -38,7 +38,7 @@ ORDER BY op_depth DESC
SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision,
checksum, translated_size, changed_revision, changed_date, changed_author,
depth, symlink_target, last_mod_time, properties, lock_token, lock_owner,
- lock_comment, lock_date
+ lock_comment, lock_date, moved_here
FROM nodes
LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
AND nodes.repos_path = lock.repos_relpath
@@ -278,7 +278,7 @@ SELECT dav_cache FROM nodes
WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
-- STMT_SELECT_DELETION_INFO
-SELECT nodes_base.presence, nodes_work.presence, nodes_work.moved_to,
+SELECT nodes_base.presence, nodes_work.presence, nodes_base.moved_to,
nodes_work.op_depth
FROM nodes AS nodes_work
LEFT OUTER JOIN nodes nodes_base ON nodes_base.wc_id = nodes_work.wc_id
@@ -603,8 +603,8 @@ WHERE wc_id = ?1
AND local_relpath = ?2
AND (changelist IS NULL
OR NOT EXISTS (SELECT 1 FROM nodes_current c
- WHERE c.wc_id = ?1 AND c.local_relpath = local_relpath
- AND kind = 'file'))
+ WHERE c.wc_id = ?1 AND c.local_relpath = ?2
+ AND c.kind = 'file'))
-- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE
DELETE FROM actual_node
@@ -614,8 +614,9 @@ WHERE wc_id = ?1
OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
AND (changelist IS NULL
OR NOT EXISTS (SELECT 1 FROM nodes_current c
- WHERE c.wc_id = ?1 AND c.local_relpath = local_relpath
- AND kind = 'file'))
+ WHERE c.wc_id = ?1
+ AND c.local_relpath = actual_node.local_relpath
+ AND c.kind = 'file'))
-- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST
UPDATE actual_node
@@ -811,8 +812,18 @@ SELECT wc_id, local_relpath, ?4 /*op_dep
kind
FROM nodes
WHERE wc_id = ?1
- AND (local_relpath = ?2
- OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
+ AND (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0')
+ AND op_depth = ?3
+ AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'absent')
+
+-- STMT_INSERT_DELETE_NODE
+INSERT INTO nodes (
+ wc_id, local_relpath, op_depth, parent_relpath, presence, kind)
+SELECT wc_id, local_relpath, ?4 /*op_depth*/, parent_relpath, 'base-deleted',
+ kind
+FROM nodes
+WHERE wc_id = ?1
+ AND local_relpath = ?2
AND op_depth = ?3
AND presence NOT IN ('base-deleted', 'not-present', 'excluded', 'absent')
@@ -1321,6 +1332,31 @@ WHERE wc_id = ?1
AND presence='normal'
AND file_external IS NULL
+-- STMT_SELECT_MOVED_FROM_RELPATH
+SELECT local_relpath FROM nodes
+WHERE wc_id = ?1 AND moved_to = ?2 AND op_depth = 0
+
+-- STMT_UPDATE_MOVED_TO_RELPATH
+UPDATE nodes SET moved_to = ?3
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
+
+-- STMT_CLEAR_MOVED_TO_RELPATH
+UPDATE nodes SET moved_to = NULL
+WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0
+
+-- STMT_CLEAR_MOVED_TO_RELPATH_RECURSIVE
+UPDATE nodes SET moved_to = NULL
+WHERE wc_id = ?1
+ AND (?2 = ''
+ OR local_relpath = ?2
+ OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
+ AND op_depth = 0
+
+-- STMT_SELECT_MOVED_HERE_CHILDREN
+SELECT moved_to, local_relpath FROM nodes
+WHERE wc_id = ?1 AND op_depth = 0
+ AND (moved_to > ?2 || '/' AND moved_to < ?2 || '0')
+
/* ------------------------------------------------------------------------- */
/* Queries for verification. */
Modified: subversion/branches/svn-bisect/subversion/libsvn_wc/wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/libsvn_wc/wc.h?rev=1158171&r1=1158170&r2=1158171&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/libsvn_wc/wc.h (original)
+++ subversion/branches/svn-bisect/subversion/libsvn_wc/wc.h Tue Aug 16 09:38:37 2011
@@ -402,7 +402,7 @@ svn_wc__internal_file_modified_p(svn_boo
conflict resolver as older_version and their_version.
## TODO: We should store the information in LEFT_VERSION and RIGHT_VERSION
- in the workingcopy for future retrieval via svn info.
+ in the working copy for future retrieval via svn info.
WRI_ABSPATH describes in which working copy information should be
retrieved. (Interesting for merging file externals).