diff options
Diffstat (limited to 'subversion/libsvn_client/merge.c')
-rw-r--r-- | subversion/libsvn_client/merge.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/subversion/libsvn_client/merge.c b/subversion/libsvn_client/merge.c index b314e84..f0ff9a2 100644 --- a/subversion/libsvn_client/merge.c +++ b/subversion/libsvn_client/merge.c @@ -1258,13 +1258,14 @@ record_skip(merge_cmd_baton_t *merge_b, svn_node_kind_t kind, svn_wc_notify_action_t action, svn_wc_notify_state_t state, + struct merge_dir_baton_t *pdb, apr_pool_t *scratch_pool) { if (merge_b->record_only) return SVN_NO_ERROR; /* ### Why? - Legacy compatibility */ - if (merge_b->merge_source.ancestral - || merge_b->reintegrate_merge) + if ((merge_b->merge_source.ancestral || merge_b->reintegrate_merge) + && !(pdb && pdb->shadowed)) { store_path(merge_b->skipped_abspaths, local_abspath); } @@ -1979,7 +1980,8 @@ merge_file_changed(const char *relpath, /* We haven't notified for this node yet: report a skip */ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_file, svn_wc_notify_update_shadowed_update, - fb->skip_reason, scratch_pool)); + fb->skip_reason, fb->parent_baton, + scratch_pool)); } return SVN_NO_ERROR; @@ -2148,7 +2150,8 @@ merge_file_added(const char *relpath, /* We haven't notified for this node yet: report a skip */ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_file, svn_wc_notify_update_shadowed_add, - fb->skip_reason, scratch_pool)); + fb->skip_reason, fb->parent_baton, + scratch_pool)); } return SVN_NO_ERROR; @@ -2359,7 +2362,8 @@ merge_file_deleted(const char *relpath, /* We haven't notified for this node yet: report a skip */ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_file, svn_wc_notify_update_shadowed_delete, - fb->skip_reason, scratch_pool)); + fb->skip_reason, fb->parent_baton, + scratch_pool)); } return SVN_NO_ERROR; @@ -2723,6 +2727,12 @@ merge_dir_opened(void **new_dir_baton, /* Set a tree conflict */ db->shadowed = TRUE; db->tree_conflict_reason = svn_wc_conflict_reason_obstructed; + + if ((merge_b->merge_source.ancestral || merge_b->reintegrate_merge) + && !(pdb && pdb->shadowed)) + { + store_path(merge_b->skipped_abspaths, local_abspath); + } } } @@ -2847,7 +2857,8 @@ merge_dir_changed(const char *relpath, /* We haven't notified for this node yet: report a skip */ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_dir, svn_wc_notify_update_shadowed_update, - db->skip_reason, scratch_pool)); + db->skip_reason, db->parent_baton, + scratch_pool)); } return SVN_NO_ERROR; @@ -2931,7 +2942,8 @@ merge_dir_added(const char *relpath, /* We haven't notified for this node yet: report a skip */ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_dir, svn_wc_notify_update_shadowed_add, - db->skip_reason, scratch_pool)); + db->skip_reason, db->parent_baton, + scratch_pool)); } return SVN_NO_ERROR; @@ -3098,7 +3110,8 @@ merge_dir_deleted(const char *relpath, /* We haven't notified for this node yet: report a skip */ SVN_ERR(record_skip(merge_b, local_abspath, svn_node_dir, svn_wc_notify_update_shadowed_delete, - db->skip_reason, scratch_pool)); + db->skip_reason, db->parent_baton, + scratch_pool)); } return SVN_NO_ERROR; @@ -3278,13 +3291,14 @@ merge_node_absent(const char *relpath, apr_pool_t *scratch_pool) { merge_cmd_baton_t *merge_b = processor->baton; + struct merge_dir_baton_t *db = dir_baton; const char *local_abspath = svn_dirent_join(merge_b->target->abspath, relpath, scratch_pool); SVN_ERR(record_skip(merge_b, local_abspath, svn_node_unknown, svn_wc_notify_skip, svn_wc_notify_state_missing, - scratch_pool)); + db, scratch_pool)); return SVN_NO_ERROR; } |