2 * resolve-cmd.c -- Subversion resolve subcommand
4 * ====================================================================
5 * Licensed to the Apache Software Foundation (ASF) under one
6 * or more contributor license agreements. See the NOTICE file
7 * distributed with this work for additional information
8 * regarding copyright ownership. The ASF licenses this file
9 * to you under the Apache License, Version 2.0 (the
10 * "License"); you may not use this file except in compliance
11 * with the License. You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing,
16 * software distributed under the License is distributed on an
17 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18 * KIND, either express or implied. See the License for the
19 * specific language governing permissions and limitations
21 * ====================================================================
24 /* ==================================================================== */
30 #include "svn_client.h"
31 #include "svn_error.h"
32 #include "svn_pools.h"
35 #include "svn_private_config.h"
41 /* This implements the `svn_opt_subcommand_t' interface. */
43 svn_cl__resolve(apr_getopt_t *os,
45 apr_pool_t *scratch_pool)
47 svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
48 svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
49 svn_wc_conflict_choice_t conflict_choice;
51 apr_array_header_t *targets;
54 svn_boolean_t had_error = FALSE;
56 switch (opt_state->accept_which)
58 case svn_cl__accept_working:
59 conflict_choice = svn_wc_conflict_choose_merged;
61 case svn_cl__accept_base:
62 conflict_choice = svn_wc_conflict_choose_base;
64 case svn_cl__accept_theirs_conflict:
65 conflict_choice = svn_wc_conflict_choose_theirs_conflict;
67 case svn_cl__accept_mine_conflict:
68 conflict_choice = svn_wc_conflict_choose_mine_conflict;
70 case svn_cl__accept_theirs_full:
71 conflict_choice = svn_wc_conflict_choose_theirs_full;
73 case svn_cl__accept_mine_full:
74 conflict_choice = svn_wc_conflict_choose_mine_full;
76 case svn_cl__accept_unspecified:
77 if (opt_state->non_interactive)
78 return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
79 _("missing --accept option"));
80 conflict_choice = svn_wc_conflict_choose_unspecified;
83 return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
84 _("invalid 'accept' ARG"));
87 SVN_ERR(svn_cl__args_to_target_array_print_reserved(&targets, os,
92 svn_opt_push_implicit_dot_target(targets, scratch_pool);
94 if (opt_state->depth == svn_depth_unknown)
96 if (opt_state->accept_which == svn_cl__accept_unspecified)
97 opt_state->depth = svn_depth_infinity;
99 opt_state->depth = svn_depth_empty;
102 SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, scratch_pool));
104 SVN_ERR(svn_cl__check_targets_are_local_paths(targets));
106 iterpool = svn_pool_create(scratch_pool);
107 for (i = 0; i < targets->nelts; i++)
109 const char *target = APR_ARRAY_IDX(targets, i, const char *);
110 svn_pool_clear(iterpool);
111 SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton));
112 err = svn_client_resolve(target,
113 opt_state->depth, conflict_choice,
118 svn_handle_warning2(stderr, err, "svn: ");
119 svn_error_clear(err);
123 svn_pool_destroy(iterpool);
126 return svn_error_create(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
127 _("Failure occurred resolving one or more "