Commit 5e566b8e authored by Bjorn Munch's avatar Bjorn Munch

Bug #43532 mtr should not rely on diff to report test results

mtr on Windows does not give decent diff due to missing diff install
Modified to look for 'mtrdiff' if diff not available.
parent 4cab4919
......@@ -1445,6 +1445,7 @@ static int run_tool(const char *tool_path, DYNAMIC_STRING *ds_res, ...)
Test if diff is present. This is needed on Windows systems
as the OS returns 1 whether diff is successful or if it is
not present.
Takes name of diff program as argument
We run diff -v and look for output in stdout.
We don't redirect stderr to stdout to make for a simplified check
......@@ -1452,11 +1453,12 @@ static int run_tool(const char *tool_path, DYNAMIC_STRING *ds_res, ...)
not present.
*/
int diff_check()
int diff_check (const char *diff_name)
{
char buf[512]= {0};
FILE *res_file;
const char *cmd = "diff -v";
char cmd[128];
my_snprintf (cmd, sizeof(cmd), "%s -v", diff_name);
int have_diff = 0;
if (!(res_file= popen(cmd, "r")))
......@@ -1488,7 +1490,7 @@ void show_diff(DYNAMIC_STRING* ds,
const char* filename1, const char* filename2)
{
DYNAMIC_STRING ds_tmp;
int have_diff = 0;
const char *diff_name = 0;
if (init_dynamic_string(&ds_tmp, "", 256, 256))
die("Out of memory");
......@@ -1501,15 +1503,20 @@ void show_diff(DYNAMIC_STRING* ds,
the way it's implemented does not work with default 'diff' on Solaris.
*/
#ifdef __WIN__
have_diff = diff_check();
if (diff_check("diff"))
diff_name = "diff";
else if (diff_check("mtrdiff"))
diff_name = "mtrdiff";
else
diff_name = 0;
#else
have_diff = 1;
diff_name = "diff"; // Otherwise always assume it's called diff
#endif
if (have_diff)
if (diff_name)
{
/* First try with unified diff */
if (run_tool("diff",
if (run_tool(diff_name,
&ds_tmp, /* Get output from diff in ds_tmp */
"-u",
filename1,
......@@ -1520,7 +1527,7 @@ void show_diff(DYNAMIC_STRING* ds,
dynstr_set(&ds_tmp, "");
/* Fallback to context diff with "diff -c" */
if (run_tool("diff",
if (run_tool(diff_name,
&ds_tmp, /* Get output from diff in ds_tmp */
"-c",
filename1,
......@@ -1531,20 +1538,20 @@ void show_diff(DYNAMIC_STRING* ds,
dynstr_set(&ds_tmp, "");
/* Fallback to simple diff with "diff" */
if (run_tool("diff",
if (run_tool(diff_name,
&ds_tmp, /* Get output from diff in ds_tmp */
filename1,
filename2,
"2>&1",
NULL) > 1) /* Most "diff" tools return >1 if error */
{
have_diff= 0;
diff_name= 0;
}
}
}
}
if (! have_diff)
if (! diff_name)
{
/*
Fallback to dump both files to result file and inform
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment