Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_wc/conflicts.c view on Meta::CPAN
const char *local_abspath,
svn_wc_operation_t operation,
const svn_wc_conflict_version_t *left_version,
const svn_wc_conflict_version_t *right_version,
svn_wc_conflict_reason_t local_change,
svn_wc_conflict_action_t incoming_change,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
svn_node_kind_t tc_kind;
if (left_version)
tc_kind = left_version->node_kind;
else if (right_version)
tc_kind = right_version->node_kind;
else
tc_kind = svn_node_file; /* Avoid assertion */
*desc = svn_wc_conflict_description_create_tree2(local_abspath, tc_kind,
operation,
left_version, right_version,
result_pool);
(*desc)->reason = local_change;
(*desc)->action = incoming_change;
return SVN_NO_ERROR;
}
svn_error_t *
svn_wc__conflict_invoke_resolver(svn_wc__db_t *db,
const char *local_abspath,
const svn_skel_t *conflict_skel,
const apr_array_header_t *merge_options,
svn_wc_conflict_resolver_func2_t resolver_func,
void *resolver_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *scratch_pool)
{
svn_boolean_t text_conflicted;
svn_boolean_t prop_conflicted;
svn_boolean_t tree_conflicted;
svn_wc_operation_t operation;
const apr_array_header_t *locations;
const svn_wc_conflict_version_t *left_version = NULL;
const svn_wc_conflict_version_t *right_version = NULL;
SVN_ERR(svn_wc__conflict_read_info(&operation, &locations,
&text_conflicted, &prop_conflicted,
&tree_conflicted,
db, local_abspath, conflict_skel,
scratch_pool, scratch_pool));
if (locations && locations->nelts > 0)
left_version = APR_ARRAY_IDX(locations, 0, const svn_wc_conflict_version_t *);
if (locations && locations->nelts > 1)
right_version = APR_ARRAY_IDX(locations, 1, const svn_wc_conflict_version_t *);
/* Quick and dirty compatibility wrapper. My guess would be that most resolvers
would want to look at all properties at the same time.
### svn currently only invokes this from the merge code to collect the list of
### conflicted paths. Eventually this code will be the base for 'svn resolve'
### and at that time the test coverage will improve
*/
if (prop_conflicted)
{
apr_hash_t *old_props;
apr_hash_t *mine_props;
apr_hash_t *their_props;
apr_hash_t *old_their_props;
apr_hash_t *conflicted;
apr_pool_t *iterpool;
apr_hash_index_t *hi;
svn_boolean_t mark_resolved = TRUE;
SVN_ERR(svn_wc__conflict_read_prop_conflict(NULL,
&mine_props,
&old_their_props,
&their_props,
&conflicted,
db, local_abspath,
conflict_skel,
scratch_pool, scratch_pool));
if (operation == svn_wc_operation_merge)
SVN_ERR(svn_wc__db_read_pristine_props(&old_props, db, local_abspath,
scratch_pool, scratch_pool));
else
old_props = old_their_props;
iterpool = svn_pool_create(scratch_pool);
for (hi = apr_hash_first(scratch_pool, conflicted);
hi;
hi = apr_hash_next(hi))
{
const char *propname = svn__apr_hash_index_key(hi);
svn_boolean_t conflict_remains = TRUE;
svn_pool_clear(iterpool);
if (cancel_func)
SVN_ERR(cancel_func(cancel_baton));
SVN_ERR(generate_propconflict(&conflict_remains,
db, local_abspath,
operation,
left_version,
right_version,
propname,
old_props
? svn_hash_gets(old_props, propname)
: NULL,
mine_props
? svn_hash_gets(mine_props, propname)
: NULL,
old_their_props
? svn_hash_gets(old_their_props, propname)
( run in 0.498 second using v1.01-cache-2.11-cpan-63c85eba8c4 )