Wouldn't the
svn_err = svn_error_wrap_apr(status, "getopt failure");
try to wrap APR_SUCCESS on the 4th -L case?
Bert
Sent from Windows Mail
From: Philip Martin
Sent: Friday, May 2, 2014 1:29 PM
To: commits_at_subversion.apache.org
Author: philip
Date: Fri May 2 11:29:26 2014
New Revision: 1591871
URL: http://svn.apache.org/r1591871
Log:
Make it easier to use tools/diff/diff3 in a --diff3-cmd script by
accepting all the options passed when a diff3 program is invoked.
Use '-L' to label the output, simply ignore '-E' and '-m'. This
allows a --diff3-cmd script to invoke diff3 as:
diff3 --conflict-style modified-latest $@
* tools/diff/diff3.c
(do_diff3): Add conflict label parameters.
(main): Add '-L' and accept up to 3 instances, add '-m' and '-E' and
ignore, tweak usage text.
Modified:
subversion/trunk/tools/diff/diff3.c
Modified: subversion/trunk/tools/diff/diff3.c
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/diff/diff3.c?rev=1591871&r1=1591870&r2=1591871&view=diff
==============================================================================
--- subversion/trunk/tools/diff/diff3.c (original)
+++ subversion/trunk/tools/diff/diff3.c Fri May 2 11:29:26 2014
@@ -34,7 +34,12 @@
static svn_error_t *
do_diff3(svn_stream_t *ostream,
- const char *original, const char *modified, const char *latest,
+ const char *original,
+ const char *modified,
+ const char *latest,
+ const char *conflict_original,
+ const char *conflict_modified,
+ const char *conflict_latest,
svn_diff_conflict_display_style_t conflict_style,
svn_boolean_t *has_changes,
apr_pool_t *pool)
@@ -48,7 +53,10 @@ do_diff3(svn_stream_t *ostream,
SVN_ERR(svn_diff_file_output_merge2(ostream, diff,
original, modified, latest,
- NULL, NULL, NULL, NULL,
+ conflict_original,
+ conflict_modified,
+ conflict_latest,
+ "=======",
conflict_style,
pool));
@@ -67,6 +75,9 @@ int main(int argc, const char *argv[])
};
static const apr_getopt_option_t options[] = {
{"conflict-style", conflict_style_opt, 1, ""},
+ {"label", 'L', 1, ""},
+ {"show-overlap", 'E', 0, ""},
+ {"merge", 'm', 0, ""},
{NULL, 0, 0, NULL}
};
svn_diff_conflict_display_style_t conflict_style
@@ -86,6 +97,9 @@ int main(int argc, const char *argv[])
svn_diff_conflict_display_only_conflicts },
{NULL, 0}
};
+ const char *conflict_original = NULL;
+ const char *conflict_modified = NULL;
+ const char *conflict_latest = NULL;
apr_initialize();
@@ -115,6 +129,23 @@ int main(int argc, const char *argv[])
conflict_style = val;
break;
}
+ case 'L':
+ if (!conflict_original)
+ conflict_original = apr_pstrcat(pool, "<<<<<<< ", arg, SVN_VA_NULL);
+ else if (!conflict_modified)
+ conflict_modified = apr_pstrcat(pool, "||||||| ", arg, SVN_VA_NULL);
+ else if (!conflict_latest)
+ conflict_latest = apr_pstrcat(pool, ">>>>>>> ", arg, SVN_VA_NULL);
+ else
+ svn_err = svn_error_wrap_apr(status, "getopt failure");
+ break;
+ case 'E':
+ case 'm':
+ /* These are allowed and ignored so that all the options
+ passed when invoking --diff3-cmd are accepted as that
+ makes it easier to use this as an external diff3
+ program. */
+ break;
}
}
@@ -131,6 +162,7 @@ int main(int argc, const char *argv[])
svn_boolean_t has_changes;
svn_err = do_diff3(ostream, argv[argc-2], argv[argc-3], argv[argc-1],
+ conflict_original, conflict_modified, conflict_latest,
conflict_style, &has_changes, pool);
if (svn_err == NULL)
{
@@ -148,13 +180,22 @@ int main(int argc, const char *argv[])
"Usage: %s [options] <mine> <older> <yours>\n"
"Options:\n"
" --conflict-style STYLE\n"
- " where STYLE can be:\n"
- " %s\n"
- " %s\n"
- " %s\n"
- " %s\n"
- " %s\n"
- " %s\n",
+ " where STYLE can be:\n"
+ " %s\n"
+ " %s\n"
+ " %s\n"
+ " %s\n"
+ " %s\n"
+ " %s\n"
+ "\n"
+ " --label [-L] LABEL\n"
+ " can be repeated up to three times\n"
+ "\n"
+ " --merge [-m]\n"
+ " ignored (present for compatibility)\n"
+ "\n"
+ " --show-overlap [-E]\n"
+ " ignored (present for compatibility)\n",
argv[0],
svn_token__to_word(style_map,
svn_diff_conflict_display_modified_latest),
Received on 2014-05-03 23:23:05 CEST