You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2015/11/30 11:24:23 UTC
svn commit: r1717223 [38/50] - in /subversion/branches/ra-git: ./ build/
build/ac-macros/ build/generator/ build/generator/templates/
contrib/hook-scripts/ notes/ notes/api-errata/1.9/ notes/move-tracking/
subversion/ subversion/bindings/ctypes-python/...
Modified: subversion/branches/ra-git/subversion/po/es.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/es.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/es.po [UTF-8] (original)
+++ subversion/branches/ra-git/subversion/po/es.po [UTF-8] Mon Nov 30 10:24:16 2015
@@ -10197,13 +10197,11 @@ msgid "local %s, incoming %s upon %s"
msgstr ""
#: ../svn/util.c:74
-#, fuzzy, c-format
+#, c-format
msgid ""
-"\n"
"Committed revision %ld%s.\n"
msgstr ""
-"\n"
-"Commit de la revisión %ld.\n"
+"Commit de la revisión %ld%s.\n"
#: ../svn/util.c:78
msgid " (the answer to life, the universe, and everything)"
Modified: subversion/branches/ra-git/subversion/po/fr.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/fr.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/fr.po [UTF-8] (original)
+++ subversion/branches/ra-git/subversion/po/fr.po [UTF-8] Mon Nov 30 10:24:16 2015
@@ -11331,6 +11331,11 @@ msgstr "Mise à jour de '%s'\n"
msgid "Redirecting to URL '%s':\n"
msgstr "Redirection vers l'URL '%s' :\n"
+#: ../svn/notify.c:1066
+#, c-format
+msgid "Committing transaction...\n"
+msgstr "Transaction de propagation...\n"
+
#: ../svn/propdel-cmd.c:88
#, c-format
msgid "Cannot specify revision for deleting versioned property '%s'"
@@ -11543,10 +11548,8 @@ msgstr "'%s' actualisé à la révision
#: ../svn/util.c:76
#, c-format
msgid ""
-"\n"
"Committed revision %ld%s.\n"
msgstr ""
-"\n"
"Révision %ld%s propagée.\n"
#: ../svn/util.c:80
Modified: subversion/branches/ra-git/subversion/po/it.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/it.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/it.po (original)
+++ subversion/branches/ra-git/subversion/po/it.po Mon Nov 30 10:24:16 2015
@@ -10134,7 +10134,7 @@ msgstr ""
#: ../svn/propedit-cmd.c:158
#, c-format
msgid "Set new value for property '%s' on revision %ld\n"
-msgstr "Impostazione di un nuovo volore per la proprietà '%s' nella revisione %ld\n"
+msgstr "Impostazione di un nuovo valore per la proprietà '%s' nella revisione %ld\n"
#: ../svn/propedit-cmd.c:164
#, c-format
@@ -10286,13 +10286,11 @@ msgid "local %s, incoming %s upon %s"
msgstr ""
#: ../svn/util.c:74
-#, fuzzy, c-format
+#, c-format
msgid ""
-"\n"
"Committed revision %ld%s.\n"
msgstr ""
-"\n"
-"Commit della Revisione %ld eseguito.\n"
+"Commit della Revisione %ld%s eseguito.\n"
#: ../svn/util.c:78
msgid " (the answer to life, the universe, and everything)"
Modified: subversion/branches/ra-git/subversion/po/ja.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/ja.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/ja.po [UTF-8] (original)
+++ subversion/branches/ra-git/subversion/po/ja.po [UTF-8] Mon Nov 30 10:24:16 2015
@@ -10643,13 +10643,11 @@ msgid "local %s, incoming %s upon %s"
msgstr ""
#: ../svn/util.c:74
-#, fuzzy, c-format
+#, c-format
msgid ""
-"\n"
"Committed revision %ld%s.\n"
msgstr ""
-"\n"
-"リビジョン %ld をコミットしました。\n"
+"リビジョン %ld%s をコミットしました。\n"
#: ../svn/util.c:78
msgid " (the answer to life, the universe, and everything)"
Modified: subversion/branches/ra-git/subversion/po/ko.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/ko.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/ko.po [UTF-8] (original)
+++ subversion/branches/ra-git/subversion/po/ko.po [UTF-8] Mon Nov 30 10:24:16 2015
@@ -10530,10 +10530,8 @@ msgstr " '%s' 을(를) r%ld 로 업데�
#: ../svn/util.c:75
#, c-format
msgid ""
-"\n"
"Committed revision %ld%s.\n"
msgstr ""
-"\n"
"커밋된 리비전 %ld%s.\n"
#: ../svn/util.c:79
Modified: subversion/branches/ra-git/subversion/po/nb.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/nb.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/nb.po [UTF-8] (original)
+++ subversion/branches/ra-git/subversion/po/nb.po [UTF-8] Mon Nov 30 10:24:16 2015
@@ -10226,13 +10226,11 @@ msgid "local %s, incoming %s upon %s"
msgstr "lokal %s, innkommende %s på %s"
#: ../svn/util.c:74
-#, fuzzy, c-format
+#, c-format
msgid ""
-"\n"
"Committed revision %ld%s.\n"
msgstr ""
-"\n"
-"La inn revisjon %ld.\n"
+"La inn revisjon %ld%s.\n"
#: ../svn/util.c:78
msgid " (the answer to life, the universe, and everything)"
Modified: subversion/branches/ra-git/subversion/po/pl.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/pl.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/pl.po [UTF-8] (original)
+++ subversion/branches/ra-git/subversion/po/pl.po [UTF-8] Mon Nov 30 10:24:16 2015
@@ -10285,13 +10285,11 @@ msgid "local %s, incoming %s upon %s"
msgstr "lokalne: %s, przychodzące: %s, operacja: %s"
#: ../svn/util.c:74
-#, fuzzy, c-format
+#, c-format
msgid ""
-"\n"
"Committed revision %ld%s.\n"
msgstr ""
-"\n"
-"Zatwierdzona wersja %ld.\n"
+"Zatwierdzona wersja %ld%s.\n"
#: ../svn/util.c:78
msgid " (the answer to life, the universe, and everything)"
Modified: subversion/branches/ra-git/subversion/po/pt_BR.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/pt_BR.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/pt_BR.po [UTF-8] (original)
+++ subversion/branches/ra-git/subversion/po/pt_BR.po [UTF-8] Mon Nov 30 10:24:16 2015
@@ -10087,13 +10087,11 @@ msgid "local %s, incoming %s upon %s"
msgstr ""
#: ../svn/util.c:74
-#, fuzzy, c-format
+#, c-format
msgid ""
-"\n"
"Committed revision %ld%s.\n"
msgstr ""
-"\n"
-"Commit da revisão %ld.\n"
+"Commit da revisão %ld%s.\n"
#: ../svn/util.c:78
msgid " (the answer to life, the universe, and everything)"
Modified: subversion/branches/ra-git/subversion/po/sv.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/sv.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/sv.po [UTF-8] (original)
+++ subversion/branches/ra-git/subversion/po/sv.po [UTF-8] Mon Nov 30 10:24:16 2015
@@ -13145,10 +13145,8 @@ msgstr " Uppdaterade \"%s\" till r%ld.\
#: ../svn/util.c:79
#, c-format
msgid ""
-"\n"
"Committed revision %ld%s.\n"
msgstr ""
-"\n"
"Arkiverade revision %ld%s.\n"
#: ../svn/util.c:83
Modified: subversion/branches/ra-git/subversion/po/zh_CN.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/zh_CN.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/zh_CN.po [UTF-8] (original)
+++ subversion/branches/ra-git/subversion/po/zh_CN.po [UTF-8] Mon Nov 30 10:24:16 2015
@@ -11284,9 +11284,9 @@ msgid "done\n"
msgstr "完成。\n"
#: ../svn/notify.c:1066
-#, fuzzy, c-format
+#, c-format
msgid "Committing transaction...\n"
-msgstr "正在读取事务"
+msgstr "正在读取事务\n"
#: ../svn/propdel-cmd.c:88
#, c-format
@@ -13710,10 +13710,9 @@ msgid " Updated '%s' to r%ld.\n"
msgstr "更新 '%s' 到版本 %ld。\n"
#: ../svn/util.c:79
-#, fuzzy, c-format
+#, c-format
msgid "Committed revision %ld%s.\n"
msgstr ""
-"\n"
"提交后的版本为 %ld%s。\n"
#: ../svn/util.c:83
Modified: subversion/branches/ra-git/subversion/po/zh_TW.po
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/po/zh_TW.po?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/po/zh_TW.po [UTF-8] (original)
+++ subversion/branches/ra-git/subversion/po/zh_TW.po [UTF-8] Mon Nov 30 10:24:16 2015
@@ -10123,13 +10123,11 @@ msgid "local %s, incoming %s upon %s"
msgstr ""
#: ../svn/util.c:74
-#, fuzzy, c-format
+#, c-format
msgid ""
-"\n"
"Committed revision %ld%s.\n"
msgstr ""
-"\n"
-"送交修訂版 %ld.\n"
+"送交修訂版 %ld%s.\n"
#: ../svn/util.c:78
msgid " (the answer to life, the universe, and everything)"
Modified: subversion/branches/ra-git/subversion/svn/auth-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/svn/auth-cmd.c?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/svn/auth-cmd.c (original)
+++ subversion/branches/ra-git/subversion/svn/auth-cmd.c Mon Nov 30 10:24:16 2015
@@ -96,6 +96,39 @@ show_cert_failures(const char *failure_s
return SVN_NO_ERROR;
}
+
+/* decodes from format we store certs in for auth creds and
+ * turns parsing errors into warnings if PRINT_WARNING is TRUE
+ * and ignores them otherwise. returns NULL if it couldn't
+ * parse a cert for any reason. */
+static svn_x509_certinfo_t *
+parse_certificate(const svn_string_t *ascii_cert,
+ svn_boolean_t print_warning,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_x509_certinfo_t *certinfo;
+ const svn_string_t *der_cert;
+ svn_error_t *err;
+
+ /* Convert header-less PEM to DER by undoing base64 encoding. */
+ der_cert = svn_base64_decode_string(ascii_cert, scratch_pool);
+
+ err = svn_x509_parse_cert(&certinfo, der_cert->data, der_cert->len,
+ result_pool, scratch_pool);
+ if (err)
+ {
+ /* Just display X.509 parsing errors as warnings and continue */
+ if (print_warning)
+ svn_handle_warning2(stderr, err, "svn: ");
+ svn_error_clear(err);
+ return NULL;
+ }
+
+ return certinfo;
+}
+
+
struct walk_credentials_baton_t
{
int matches;
@@ -115,12 +148,58 @@ match_pattern(const char *pattern, const
return (apr_fnmatch(p, value, flags) == APR_SUCCESS);
}
+static svn_boolean_t
+match_certificate(svn_x509_certinfo_t **certinfo,
+ const char *pattern,
+ const svn_string_t *ascii_cert,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ const char *value;
+ const svn_checksum_t *checksum;
+ const apr_array_header_t *hostnames;
+ int i;
+
+ *certinfo = parse_certificate(ascii_cert, FALSE, result_pool, scratch_pool);
+ if (*certinfo == NULL)
+ return FALSE;
+
+ value = svn_x509_certinfo_get_subject(*certinfo, scratch_pool);
+ if (match_pattern(pattern, value, FALSE, scratch_pool))
+ return TRUE;
+
+ value = svn_x509_certinfo_get_issuer(*certinfo, scratch_pool);
+ if (match_pattern(pattern, value, FALSE, scratch_pool))
+ return TRUE;
+
+ checksum = svn_x509_certinfo_get_digest(*certinfo);
+ value = svn_checksum_to_cstring_display(checksum, scratch_pool);
+ if (match_pattern(pattern, value, TRUE, scratch_pool))
+ return TRUE;
+
+ hostnames = svn_x509_certinfo_get_hostnames(*certinfo);
+ if (hostnames)
+ {
+ for (i = 0; i < hostnames->nelts; i++)
+ {
+ const char *hostname = APR_ARRAY_IDX(hostnames, i, const char *);
+ if (match_pattern(pattern, hostname, TRUE, scratch_pool))
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+
static svn_error_t *
match_credential(svn_boolean_t *match,
+ svn_x509_certinfo_t **certinfo,
const char *cred_kind,
const char *realmstring,
apr_array_header_t *patterns,
apr_array_header_t *cred_items,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
int i;
@@ -152,7 +231,8 @@ match_credential(svn_boolean_t *match,
strcmp(key, SVN_CONFIG_AUTHN_PASSPHRASE_KEY) == 0)
continue; /* don't match secrets */
else if (strcmp(key, SVN_CONFIG_AUTHN_ASCII_CERT_KEY) == 0)
- continue; /* don't match base64 data */
+ *match = match_certificate(certinfo, pattern, value,
+ result_pool, iterpool);
else
*match = match_pattern(pattern, value->data, FALSE, iterpool);
@@ -168,25 +248,15 @@ match_credential(svn_boolean_t *match,
}
static svn_error_t *
-show_cert(const svn_string_t *pem_cert, apr_pool_t *scratch_pool)
+show_cert(svn_x509_certinfo_t *certinfo, const svn_string_t *pem_cert,
+ apr_pool_t *scratch_pool)
{
- const svn_string_t *der_cert;
- svn_x509_certinfo_t *certinfo;
const apr_array_header_t *hostnames;
- svn_error_t *err;
- /* Convert header-less PEM to DER by undoing base64 encoding. */
- der_cert = svn_base64_decode_string(pem_cert, scratch_pool);
-
- err = svn_x509_parse_cert(&certinfo, der_cert->data, der_cert->len,
- scratch_pool, scratch_pool);
- if (err)
- {
- /* Just display X.509 parsing errors as warnings and continue */
- svn_handle_warning2(stderr, err, "svn: ");
- svn_error_clear(err);
- return SVN_NO_ERROR;
- }
+ if (certinfo == NULL)
+ certinfo = parse_certificate(pem_cert, TRUE, scratch_pool, scratch_pool);
+ if (certinfo == NULL)
+ return SVN_NO_ERROR;
SVN_ERR(svn_cmdline_printf(scratch_pool, _("Subject: %s\n"),
svn_x509_certinfo_get_subject(certinfo, scratch_pool)));
@@ -229,6 +299,7 @@ list_credential(const char *cred_kind,
const char *realmstring,
apr_array_header_t *cred_items,
svn_boolean_t show_passwords,
+ svn_x509_certinfo_t *certinfo,
apr_pool_t *scratch_pool)
{
int i;
@@ -275,7 +346,7 @@ list_credential(const char *cred_kind,
else if (strcmp(key, SVN_CONFIG_AUTHN_USERNAME_KEY) == 0)
SVN_ERR(svn_cmdline_printf(iterpool, _("Username: %s\n"), value->data));
else if (strcmp(key, SVN_CONFIG_AUTHN_ASCII_CERT_KEY) == 0)
- SVN_ERR(show_cert(value, iterpool));
+ SVN_ERR(show_cert(certinfo, value, iterpool));
else if (strcmp(key, SVN_CONFIG_AUTHN_FAILURES_KEY) == 0)
SVN_ERR(show_cert_failures(value->data, iterpool));
else
@@ -298,6 +369,7 @@ walk_credentials(svn_boolean_t *delete_c
{
struct walk_credentials_baton_t *b = baton;
apr_array_header_t *sorted_cred_items;
+ svn_x509_certinfo_t *certinfo = NULL;
*delete_cred = FALSE;
@@ -308,9 +380,9 @@ walk_credentials(svn_boolean_t *delete_c
{
svn_boolean_t match;
- SVN_ERR(match_credential(&match, cred_kind, realmstring,
+ SVN_ERR(match_credential(&match, &certinfo, cred_kind, realmstring,
b->patterns, sorted_cred_items,
- scratch_pool));
+ scratch_pool, scratch_pool));
if (!match)
return SVN_NO_ERROR;
}
@@ -319,7 +391,7 @@ walk_credentials(svn_boolean_t *delete_c
if (b->list)
SVN_ERR(list_credential(cred_kind, realmstring, sorted_cred_items,
- b->show_passwords, scratch_pool));
+ b->show_passwords, certinfo, scratch_pool));
if (b->delete)
{
*delete_cred = TRUE;
Modified: subversion/branches/ra-git/subversion/svn/cl-conflicts.c
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/svn/cl-conflicts.c?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/svn/cl-conflicts.c (original)
+++ subversion/branches/ra-git/subversion/svn/cl-conflicts.c Mon Nov 30 10:24:16 2015
@@ -229,14 +229,14 @@ operation_str(svn_wc_operation_t operati
svn_error_t *
svn_cl__get_human_readable_prop_conflict_description(
const char **desc,
- const svn_wc_conflict_description2_t *conflict,
+ const svn_client_conflict_t *conflict,
apr_pool_t *pool)
{
const char *reason_str, *action_str;
/* We provide separately translatable strings for the values that we
* know about, and a fall-back in case any other values occur. */
- switch (conflict->reason)
+ switch (svn_client_conflict_get_local_change(conflict))
{
case svn_wc_conflict_reason_edited:
reason_str = _("local edit");
@@ -251,12 +251,14 @@ svn_cl__get_human_readable_prop_conflict
reason_str = _("local obstruction");
break;
default:
- reason_str = apr_psprintf(pool, _("local %s"),
- svn_token__to_word(map_conflict_reason_xml,
- conflict->reason));
+ reason_str = apr_psprintf(
+ pool, _("local %s"),
+ svn_token__to_word(
+ map_conflict_reason_xml,
+ svn_client_conflict_get_local_change(conflict)));
break;
}
- switch (conflict->action)
+ switch (svn_client_conflict_get_incoming_change(conflict))
{
case svn_wc_conflict_action_edit:
action_str = _("incoming edit");
@@ -268,51 +270,63 @@ svn_cl__get_human_readable_prop_conflict
action_str = _("incoming delete");
break;
default:
- action_str = apr_psprintf(pool, _("incoming %s"),
- svn_token__to_word(map_conflict_action_xml,
- conflict->action));
+ action_str = apr_psprintf(
+ pool, _("incoming %s"),
+ svn_token__to_word(
+ map_conflict_action_xml,
+ svn_client_conflict_get_incoming_change(conflict)));
break;
}
SVN_ERR_ASSERT(reason_str && action_str);
*desc = apr_psprintf(pool, _("%s, %s %s"),
reason_str, action_str,
- operation_str(conflict->operation));
+ operation_str(
+ svn_client_conflict_get_operation(conflict)));
return SVN_NO_ERROR;
}
svn_error_t *
svn_cl__get_human_readable_tree_conflict_description(
const char **desc,
- const svn_wc_conflict_description2_t *conflict,
+ const svn_client_conflict_t *conflict,
apr_pool_t *pool)
{
const char *action, *reason, *operation;
svn_node_kind_t incoming_kind;
+ svn_wc_conflict_action_t conflict_action;
+ svn_wc_conflict_reason_t conflict_reason;
+ svn_wc_operation_t conflict_operation;
+ svn_node_kind_t conflict_node_kind;
+
+ conflict_action = svn_client_conflict_get_incoming_change(conflict);
+ conflict_reason = svn_client_conflict_get_local_change(conflict);
+ conflict_operation = svn_client_conflict_get_operation(conflict);
+ conflict_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
/* Determine the node kind of the incoming change. */
incoming_kind = svn_node_unknown;
- if (conflict->action == svn_wc_conflict_action_edit ||
- conflict->action == svn_wc_conflict_action_delete)
+ if (conflict_action == svn_wc_conflict_action_edit ||
+ conflict_action == svn_wc_conflict_action_delete)
{
/* Change is acting on 'src_left' version of the node. */
- if (conflict->src_left_version)
- incoming_kind = conflict->src_left_version->node_kind;
+ SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(
+ NULL, NULL, &incoming_kind, conflict, pool, pool));
}
- else if (conflict->action == svn_wc_conflict_action_add ||
- conflict->action == svn_wc_conflict_action_replace)
+ else if (conflict_action == svn_wc_conflict_action_add ||
+ conflict_action == svn_wc_conflict_action_replace)
{
/* Change is acting on 'src_right' version of the node.
*
* ### For 'replace', the node kind is ambiguous. However, src_left
* ### is NULL for replace, so we must use src_right. */
- if (conflict->src_right_version)
- incoming_kind = conflict->src_right_version->node_kind;
+ SVN_ERR(svn_client_conflict_get_incoming_new_repos_location(
+ NULL, NULL, &incoming_kind, conflict, pool, pool));
}
- reason = local_reason_str(conflict->node_kind, conflict->reason,
- conflict->operation);
- action = incoming_action_str(incoming_kind, conflict->action);
- operation = operation_str(conflict->operation);
+ reason = local_reason_str(conflict_node_kind, conflict_reason,
+ conflict_operation);
+ action = incoming_action_str(incoming_kind, conflict_action);
+ operation = operation_str(conflict_operation);
SVN_ERR_ASSERT(operation);
if (action && reason)
@@ -326,12 +340,12 @@ svn_cl__get_human_readable_tree_conflict
It will not be pretty, but is closer to an internal error than
an ordinary user-facing string. */
*desc = apr_psprintf(pool, _("local: %s %s incoming: %s %s %s"),
- svn_node_kind_to_word(conflict->node_kind),
+ svn_node_kind_to_word(conflict_node_kind),
svn_token__to_word(map_conflict_reason_xml,
- conflict->reason),
+ conflict_reason),
svn_node_kind_to_word(incoming_kind),
svn_token__to_word(map_conflict_action_xml,
- conflict->action),
+ conflict_action),
operation);
}
return SVN_NO_ERROR;
@@ -360,13 +374,16 @@ svn_cl__get_human_readable_action_descri
/* Helper for svn_cl__append_tree_conflict_info_xml().
- * Appends the attributes of the given VERSION to ATT_HASH.
+ * Appends the repository location of a conflicted node to ATT_HASH.
* SIDE is the content of the version tag's side="..." attribute,
* currently one of "source-left" or "source-right".*/
static svn_error_t *
add_conflict_version_xml(svn_stringbuf_t **pstr,
const char *side,
- const svn_wc_conflict_version_t *version,
+ const char *repos_root_url,
+ const char *repos_relpath,
+ svn_revnum_t peg_rev,
+ svn_node_kind_t node_kind,
apr_pool_t *pool)
{
apr_hash_t *att_hash = apr_hash_make(pool);
@@ -374,18 +391,17 @@ add_conflict_version_xml(svn_stringbuf_t
svn_hash_sets(att_hash, "side", side);
- if (version->repos_url)
- svn_hash_sets(att_hash, "repos-url", version->repos_url);
+ if (repos_root_url)
+ svn_hash_sets(att_hash, "repos-url", repos_root_url);
- if (version->path_in_repos)
- svn_hash_sets(att_hash, "path-in-repos", version->path_in_repos);
+ if (repos_relpath)
+ svn_hash_sets(att_hash, "path-in-repos", repos_relpath);
- if (SVN_IS_VALID_REVNUM(version->peg_rev))
- svn_hash_sets(att_hash, "revision", apr_ltoa(pool, version->peg_rev));
+ if (SVN_IS_VALID_REVNUM(peg_rev))
+ svn_hash_sets(att_hash, "revision", apr_ltoa(pool, peg_rev));
- if (version->node_kind != svn_node_unknown)
- svn_hash_sets(att_hash, "kind",
- svn_cl__node_kind_str_xml(version->node_kind));
+ if (node_kind != svn_node_unknown)
+ svn_hash_sets(att_hash, "kind", svn_cl__node_kind_str_xml(node_kind));
svn_xml_make_open_tag_hash(pstr, pool, svn_xml_self_closing,
"version", att_hash);
@@ -395,25 +411,34 @@ add_conflict_version_xml(svn_stringbuf_t
static svn_error_t *
append_tree_conflict_info_xml(svn_stringbuf_t *str,
- const svn_wc_conflict_description2_t *conflict,
+ const svn_client_conflict_t *conflict,
apr_pool_t *pool)
{
apr_hash_t *att_hash = apr_hash_make(pool);
const char *tmp;
+ const char *repos_root_url;
+ const char *repos_relpath;
+ svn_revnum_t peg_rev;
+ svn_node_kind_t node_kind;
svn_hash_sets(att_hash, "victim",
- svn_dirent_basename(conflict->local_abspath, pool));
+ svn_dirent_basename(
+ svn_client_conflict_get_local_abspath(conflict), pool));
svn_hash_sets(att_hash, "kind",
- svn_cl__node_kind_str_xml(conflict->node_kind));
+ svn_cl__node_kind_str_xml(
+ svn_client_conflict_tree_get_victim_node_kind(conflict)));
svn_hash_sets(att_hash, "operation",
- svn_cl__operation_str_xml(conflict->operation, pool));
+ svn_cl__operation_str_xml(
+ svn_client_conflict_get_operation(conflict), pool));
- tmp = svn_token__to_word(map_conflict_action_xml, conflict->action);
+ tmp = svn_token__to_word(map_conflict_action_xml,
+ svn_client_conflict_get_incoming_change(conflict));
svn_hash_sets(att_hash, "action", tmp);
- tmp = svn_token__to_word(map_conflict_reason_xml, conflict->reason);
+ tmp = svn_token__to_word(map_conflict_reason_xml,
+ svn_client_conflict_get_local_change(conflict));
svn_hash_sets(att_hash, "reason", tmp);
/* Open the tree-conflict tag. */
@@ -422,17 +447,30 @@ append_tree_conflict_info_xml(svn_string
/* Add child tags for OLDER_VERSION and THEIR_VERSION. */
- if (conflict->src_left_version)
- SVN_ERR(add_conflict_version_xml(&str,
- "source-left",
- conflict->src_left_version,
- pool));
-
- if (conflict->src_right_version)
+ 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));
+ if (repos_root_url && repos_relpath)
+ SVN_ERR(add_conflict_version_xml(&str, "source-left",
+ repos_root_url, repos_relpath, peg_rev,
+ node_kind, pool));
+
+ SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(&repos_relpath,
+ &peg_rev,
+ &node_kind,
+ conflict,
+ pool,
+ pool));
+ if (repos_root_url && repos_relpath)
SVN_ERR(add_conflict_version_xml(&str,
"source-right",
- conflict->src_right_version,
- pool));
+ repos_root_url, repos_relpath, peg_rev,
+ node_kind, pool));
svn_xml_make_close_tag(&str, pool, "tree-conflict");
@@ -441,12 +479,22 @@ append_tree_conflict_info_xml(svn_string
svn_error_t *
svn_cl__append_conflict_info_xml(svn_stringbuf_t *str,
- const svn_wc_conflict_description2_t *conflict,
+ const svn_client_conflict_t *conflict,
apr_pool_t *scratch_pool)
{
apr_hash_t *att_hash;
const char *kind;
- if (conflict->kind == svn_wc_conflict_kind_tree)
+ svn_wc_conflict_kind_t conflict_kind;
+ svn_wc_operation_t conflict_operation;
+ const char *repos_root_url;
+ const char *repos_relpath;
+ svn_revnum_t peg_rev;
+ svn_node_kind_t node_kind;
+
+ conflict_kind = svn_client_conflict_get_kind(conflict);
+ conflict_operation = svn_client_conflict_get_operation(conflict);
+
+ if (conflict_kind == svn_wc_conflict_kind_tree)
{
/* Uses other element type */
return svn_error_trace(
@@ -456,53 +504,80 @@ svn_cl__append_conflict_info_xml(svn_str
att_hash = apr_hash_make(scratch_pool);
svn_hash_sets(att_hash, "operation",
- svn_cl__operation_str_xml(conflict->operation, scratch_pool));
+ svn_cl__operation_str_xml(conflict_operation, scratch_pool));
- kind = svn_token__to_word(map_conflict_kind_xml, conflict->kind);
+ kind = svn_token__to_word(map_conflict_kind_xml, conflict_kind);
svn_hash_sets(att_hash, "type", kind);
svn_hash_sets(att_hash, "operation",
- svn_cl__operation_str_xml(conflict->operation, scratch_pool));
+ svn_cl__operation_str_xml(conflict_operation, scratch_pool));
/* "<conflict>" */
svn_xml_make_open_tag_hash(&str, scratch_pool,
svn_xml_normal, "conflict", att_hash);
- if (conflict->src_left_version)
- SVN_ERR(add_conflict_version_xml(&str,
- "source-left",
- conflict->src_left_version,
- scratch_pool));
-
- if (conflict->src_right_version)
- SVN_ERR(add_conflict_version_xml(&str,
- "source-right",
- conflict->src_right_version,
- scratch_pool));
+ SVN_ERR(svn_client_conflict_get_repos_info(&repos_root_url, NULL, conflict,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(&repos_relpath,
+ &peg_rev,
+ &node_kind,
+ conflict,
+ scratch_pool,
+ scratch_pool));
+ if (repos_root_url && repos_relpath)
+ SVN_ERR(add_conflict_version_xml(&str, "source-left",
+ repos_root_url, repos_relpath, peg_rev,
+ node_kind, scratch_pool));
+
+ SVN_ERR(svn_client_conflict_get_incoming_old_repos_location(&repos_relpath,
+ &peg_rev,
+ &node_kind,
+ conflict,
+ scratch_pool,
+ scratch_pool));
+ if (repos_root_url && repos_relpath)
+ SVN_ERR(add_conflict_version_xml(&str, "source-right",
+ repos_root_url, repos_relpath, peg_rev,
+ node_kind, scratch_pool));
- switch (conflict->kind)
+ switch (conflict_kind)
{
+ const char *base_abspath;
+ const char *my_abspath;
+ const char *their_abspath;
+
case svn_wc_conflict_kind_text:
+ SVN_ERR(svn_client_conflict_text_get_contents(NULL, &my_abspath,
+ &base_abspath,
+ &their_abspath,
+ conflict, scratch_pool,
+ scratch_pool));
/* "<prev-base-file> xx </prev-base-file>" */
- svn_cl__xml_tagged_cdata(&str, scratch_pool, "prev-base-file",
- conflict->base_abspath);
+ svn_cl__xml_tagged_cdata(
+ &str, scratch_pool, "prev-base-file", base_abspath);
/* "<prev-wc-file> xx </prev-wc-file>" */
- svn_cl__xml_tagged_cdata(&str, scratch_pool, "prev-wc-file",
- conflict->my_abspath);
+ svn_cl__xml_tagged_cdata(
+ &str, scratch_pool, "prev-wc-file", my_abspath);
/* "<cur-base-file> xx </cur-base-file>" */
- svn_cl__xml_tagged_cdata(&str, scratch_pool, "cur-base-file",
- conflict->their_abspath);
+ svn_cl__xml_tagged_cdata(
+ &str, scratch_pool, "cur-base-file", their_abspath);
break;
case svn_wc_conflict_kind_property:
- /* "<prop-file> xx </prop-file>" */
- svn_cl__xml_tagged_cdata(&str, scratch_pool, "prop-file",
- conflict->their_abspath);
+ {
+ const char *reject_abspath;
+
+ /* "<prop-file> xx </prop-file>" */
+ reject_abspath =
+ svn_client_conflict_prop_get_reject_abspath(conflict);
+ svn_cl__xml_tagged_cdata(
+ &str, scratch_pool, "prop-file", reject_abspath);
+ }
break;
default:
Modified: subversion/branches/ra-git/subversion/svn/cl-conflicts.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/svn/cl-conflicts.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/svn/cl-conflicts.h (original)
+++ subversion/branches/ra-git/subversion/svn/cl-conflicts.h Mon Nov 30 10:24:16 2015
@@ -31,6 +31,7 @@
#include "svn_types.h"
#include "svn_string.h"
+#include "svn_client.h"
#include "svn_wc.h"
#ifdef __cplusplus
@@ -48,7 +49,7 @@ extern "C" {
svn_error_t *
svn_cl__get_human_readable_prop_conflict_description(
const char **desc,
- const svn_wc_conflict_description2_t *conflict,
+ const svn_client_conflict_t *conflict,
apr_pool_t *pool);
/**
@@ -60,7 +61,7 @@ svn_cl__get_human_readable_prop_conflict
svn_error_t *
svn_cl__get_human_readable_tree_conflict_description(
const char **desc,
- const svn_wc_conflict_description2_t *conflict,
+ const svn_client_conflict_t *conflict,
apr_pool_t *pool);
/* Like svn_cl__get_human_readable_tree_conflict_description but
@@ -80,7 +81,7 @@ svn_cl__get_human_readable_action_descri
svn_error_t *
svn_cl__append_conflict_info_xml(
svn_stringbuf_t *str,
- const svn_wc_conflict_description2_t *conflict,
+ const svn_client_conflict_t *conflict,
apr_pool_t *pool);
#ifdef __cplusplus
Modified: subversion/branches/ra-git/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/svn/cl.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/svn/cl.h (original)
+++ subversion/branches/ra-git/subversion/svn/cl.h Mon Nov 30 10:24:16 2015
@@ -251,10 +251,13 @@ typedef struct svn_cl__opt_state_t
const char *show_item; /* print only the given item */
} svn_cl__opt_state_t;
+/* Conflict stats for operations such as update and merge. */
+typedef struct svn_cl__conflict_stats_t svn_cl__conflict_stats_t;
typedef struct svn_cl__cmd_baton_t
{
svn_cl__opt_state_t *opt_state;
+ svn_cl__conflict_stats_t *conflict_stats;
svn_client_ctx_t *ctx;
} svn_cl__cmd_baton_t;
@@ -346,9 +349,6 @@ svn_cl__check_cancel(void *baton);
typedef struct svn_cl__interactive_conflict_baton_t
svn_cl__interactive_conflict_baton_t;
-/* Conflict stats for operations such as update and merge. */
-typedef struct svn_cl__conflict_stats_t svn_cl__conflict_stats_t;
-
/* Return a new, initialized, conflict stats structure, allocated in
* POOL. */
svn_cl__conflict_stats_t *
@@ -402,6 +402,23 @@ svn_cl__conflict_func_interactive(svn_wc
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+
+svn_error_t *
+svn_cl__resolve_conflict(svn_boolean_t *resolved,
+ svn_cl__accept_t *accept_which,
+ svn_boolean_t *quit,
+ svn_boolean_t *external_failed,
+ svn_boolean_t *printed_summary,
+ svn_client_conflict_t *conflict,
+ const char *editor_cmd,
+ apr_hash_t *config,
+ const char *path_prefix,
+ svn_cmdline_prompt_baton_t *pb,
+ svn_cl__conflict_stats_t *conflict_stats,
+ svn_client_conflict_option_id_t option_id,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
/*** Command-line output functions -- printing to the user. ***/
@@ -777,15 +794,18 @@ svn_cl__args_to_target_array_print_reser
svn_boolean_t keep_dest_origpath_on_truepath_collision,
apr_pool_t *pool);
-/* Return a string showing NODE's kind, URL and revision, to the extent that
- * that information is available in NODE. If NODE itself is NULL, this prints
- * just a 'none' node kind.
+/* Return a string showing a conflicted node's kind, URL and revision,
+ * to the extent that that information is available. If REPOS_ROOT_URL or
+ * REPOS_RELPATH are NULL, this prints just a 'none' node kind.
* WC_REPOS_ROOT_URL should reflect the target working copy's repository
- * root URL. If NODE is from that same URL, the printed URL is abbreviated
+ * root URL. If the node is from that same URL, the printed URL is abbreviated
* to caret notation (^/). WC_REPOS_ROOT_URL may be NULL, in which case
* this function tries to print the conflicted node's complete URL. */
const char *
-svn_cl__node_description(const svn_wc_conflict_version_t *node,
+svn_cl__node_description(const char *repos_root_url,
+ const char *repos_relpath,
+ svn_revnum_t peg_rev,
+ svn_node_kind_t node_kind,
const char *wc_repos_root_URL,
apr_pool_t *pool);