diff options
Diffstat (limited to 'subversion/svn/info-cmd.c')
-rw-r--r-- | subversion/svn/info-cmd.c | 181 |
1 files changed, 115 insertions, 66 deletions
diff --git a/subversion/svn/info-cmd.c b/subversion/svn/info-cmd.c index fafc398c5f6c..e0c0041b468a 100644 --- a/subversion/svn/info-cmd.c +++ b/subversion/svn/info-cmd.c @@ -162,6 +162,9 @@ typedef struct print_info_baton_t /* Did we already print a line of output? */ svn_boolean_t start_new_line; + + /* The client context. */ + svn_client_ctx_t *ctx; } print_info_baton_t; @@ -391,15 +394,24 @@ print_info_xml(void *baton, if (info->wc_info && info->wc_info->conflicts) { int i; + apr_pool_t *iterpool; + iterpool = svn_pool_create(pool); for (i = 0; i < info->wc_info->conflicts->nelts; i++) { - const svn_wc_conflict_description2_t *conflict = + const svn_wc_conflict_description2_t *desc = APR_ARRAY_IDX(info->wc_info->conflicts, i, const svn_wc_conflict_description2_t *); + svn_client_conflict_t *conflict; + + svn_pool_clear(iterpool); - SVN_ERR(svn_cl__append_conflict_info_xml(sb, conflict, pool)); + SVN_ERR(svn_client_conflict_get(&conflict, desc->local_abspath, + receiver_baton->ctx, + iterpool, iterpool)); + SVN_ERR(svn_cl__append_conflict_info_xml(sb, conflict, iterpool)); } + svn_pool_destroy(iterpool); } if (info->lock) @@ -581,68 +593,93 @@ print_info(void *baton, if (info->wc_info->conflicts) { - svn_boolean_t printed_prop_conflict_file = FALSE; svn_boolean_t printed_tc = FALSE; - int i; + svn_stringbuf_t *conflicted_props = NULL; + svn_client_conflict_t *conflict; + svn_boolean_t text_conflicted; + apr_array_header_t *props_conflicted; + svn_boolean_t tree_conflicted; + const svn_wc_conflict_description2_t *desc2 = + APR_ARRAY_IDX(info->wc_info->conflicts, 0, + const svn_wc_conflict_description2_t *); + + SVN_ERR(svn_client_conflict_get(&conflict, desc2->local_abspath, + receiver_baton->ctx, pool, pool)); + SVN_ERR(svn_client_conflict_get_conflicted(&text_conflicted, + &props_conflicted, + &tree_conflicted, + conflict, pool, pool)); + if (text_conflicted) + { + const char *base_abspath = NULL; + const char *my_abspath = NULL; + const char *their_abspath = NULL; + + SVN_ERR(svn_client_conflict_text_get_contents( + NULL, &my_abspath, &base_abspath, &their_abspath, + conflict, pool, pool)); + + if (base_abspath) + SVN_ERR(svn_cmdline_printf(pool, + _("Conflict Previous Base File: %s\n"), + svn_cl__local_style_skip_ancestor( + receiver_baton->path_prefix, + base_abspath, + pool))); + + if (my_abspath) + SVN_ERR(svn_cmdline_printf(pool, + _("Conflict Previous Working File: %s\n"), + svn_cl__local_style_skip_ancestor( + receiver_baton->path_prefix, + my_abspath, + pool))); + + if (their_abspath) + SVN_ERR(svn_cmdline_printf(pool, + _("Conflict Current Base File: %s\n"), + svn_cl__local_style_skip_ancestor( + receiver_baton->path_prefix, + their_abspath, + pool))); + } - for (i = 0; i < info->wc_info->conflicts->nelts; i++) + if (props_conflicted) { - const svn_wc_conflict_description2_t *conflict = - APR_ARRAY_IDX(info->wc_info->conflicts, i, - const svn_wc_conflict_description2_t *); - const char *desc; + int i; - switch (conflict->kind) + for (i = 0; i < props_conflicted->nelts; i++) { - case svn_wc_conflict_kind_text: - if (conflict->base_abspath) - SVN_ERR(svn_cmdline_printf(pool, - _("Conflict Previous Base File: %s\n"), - svn_cl__local_style_skip_ancestor( - receiver_baton->path_prefix, - conflict->base_abspath, - pool))); - - if (conflict->my_abspath) - SVN_ERR(svn_cmdline_printf(pool, - _("Conflict Previous Working File: %s\n"), - svn_cl__local_style_skip_ancestor( - receiver_baton->path_prefix, - conflict->my_abspath, - pool))); - - if (conflict->their_abspath) - SVN_ERR(svn_cmdline_printf(pool, - _("Conflict Current Base File: %s\n"), - svn_cl__local_style_skip_ancestor( - receiver_baton->path_prefix, - conflict->their_abspath, - pool))); - break; - - case svn_wc_conflict_kind_property: - if (! printed_prop_conflict_file) - SVN_ERR(svn_cmdline_printf(pool, - _("Conflict Properties File: %s\n"), - svn_cl__local_style_skip_ancestor( - receiver_baton->path_prefix, - conflict->prop_reject_abspath, - pool))); - printed_prop_conflict_file = TRUE; - break; - - case svn_wc_conflict_kind_tree: - printed_tc = TRUE; - SVN_ERR( - svn_cl__get_human_readable_tree_conflict_description( - &desc, conflict, pool)); - - SVN_ERR(svn_cmdline_printf(pool, "%s: %s\n", - _("Tree conflict"), desc)); - break; + const char *name; + + name = APR_ARRAY_IDX(props_conflicted, i, const char *); + if (conflicted_props == NULL) + conflicted_props = svn_stringbuf_create(name, pool); + else + { + svn_stringbuf_appendbyte(conflicted_props, ' '); + svn_stringbuf_appendcstr(conflicted_props, name); + } } } + if (tree_conflicted) + { + const char *desc; + + printed_tc = TRUE; + SVN_ERR( + svn_cl__get_human_readable_tree_conflict_description( + &desc, conflict, pool)); + + SVN_ERR(svn_cmdline_printf(pool, "%s: %s\n", + _("Tree conflict"), desc)); + } + + if (conflicted_props) + SVN_ERR(svn_cmdline_printf(pool, _("Conflicted Properties: %s\n"), + conflicted_props->data)); + /* We only store one left and right version for all conflicts, which is referenced from all conflicts. Print it after the conflicts to match the 1.6/1.7 output where it is @@ -650,30 +687,40 @@ print_info(void *baton, { const char *src_left_version; const char *src_right_version; - const svn_wc_conflict_description2_t *conflict = - APR_ARRAY_IDX(info->wc_info->conflicts, 0, - const svn_wc_conflict_description2_t *); + const char *repos_root_url; + const char *repos_relpath; + svn_revnum_t peg_rev; + svn_node_kind_t node_kind; if (!printed_tc) { const char *desc; SVN_ERR(svn_cl__get_human_readable_action_description(&desc, - svn_wc_conflict_action_edit, - conflict->operation, - conflict->node_kind, pool)); + svn_wc_conflict_action_edit, + svn_client_conflict_get_operation(conflict), + info->kind, + pool)); SVN_ERR(svn_cmdline_printf(pool, "%s: %s\n", _("Conflict Details"), desc)); } + SVN_ERR(svn_client_conflict_get_repos_info(&repos_root_url, NULL, + conflict, pool, pool)); + SVN_ERR(svn_client_conflict_get_incoming_old_repos_location( + &repos_relpath, &peg_rev, &node_kind, conflict, + pool, pool)); src_left_version = - svn_cl__node_description(conflict->src_left_version, - info->repos_root_URL, pool); + svn_cl__node_description(repos_root_url, repos_relpath, + peg_rev, node_kind, info->repos_root_URL, pool); + SVN_ERR(svn_client_conflict_get_incoming_new_repos_location( + &repos_relpath, &peg_rev, &node_kind, conflict, + pool, pool)); src_right_version = - svn_cl__node_description(conflict->src_right_version, - info->repos_root_URL, pool); + svn_cl__node_description(repos_root_url, repos_relpath, + peg_rev, node_kind, info->repos_root_URL, pool); if (src_left_version) SVN_ERR(svn_cmdline_printf(pool, " %s: %s\n", @@ -874,6 +921,8 @@ svn_cl__info(apr_getopt_t *os, /* Add "." if user passed 0 arguments. */ svn_opt_push_implicit_dot_target(targets, pool); + receiver_baton.ctx = ctx; + if (opt_state->xml) { receiver = print_info_xml; |