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.
This commit is contained in:
parent
4cab491915
commit
5e566b8eff
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user