diff options
author | Georgi Kodinov <joro@sun.com> | 2009-03-23 11:36:39 +0200 |
---|---|---|
committer | Georgi Kodinov <joro@sun.com> | 2009-03-23 11:36:39 +0200 |
commit | 84557d4423ee56624b051e7f118ec96229e9aff9 (patch) | |
tree | c079ecccd7f27f8b69d08071df37e532bd93b423 | |
parent | 7c63b4ba5af76ebecd466ddbe3b5a9407d8802fb (diff) | |
parent | eb5ef513271a23a06aa7369175fbdbf799218446 (diff) | |
download | mariadb-git-84557d4423ee56624b051e7f118ec96229e9aff9.tar.gz |
merged 5.1-main -> 5.1-bugteam
-rw-r--r-- | client/mysqltest.cc | 32 | ||||
-rw-r--r-- | mysql-test/lib/My/SafeProcess/safe_process.cc | 1 |
2 files changed, 21 insertions, 12 deletions
diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 34dceafd14a..6ac130d4744 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -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 @@ -2653,7 +2660,8 @@ void do_exec(struct st_command *command) log_msg("exec of '%s' failed, error: %d, status: %d, errno: %d", ds_cmd.str, error, status, errno); dynstr_free(&ds_cmd); - die("command \"%s\" failed", command->first_argument); + die("command \"%s\" failed\n\nOutput from before failure:\n%s\n", + command->first_argument, ds_res.str); } DBUG_PRINT("info", diff --git a/mysql-test/lib/My/SafeProcess/safe_process.cc b/mysql-test/lib/My/SafeProcess/safe_process.cc index 6ad45a3226e..dc7b7da28c7 100644 --- a/mysql-test/lib/My/SafeProcess/safe_process.cc +++ b/mysql-test/lib/My/SafeProcess/safe_process.cc @@ -45,6 +45,7 @@ #include <sys/types.h> #include <sys/wait.h> +#include <sys/time.h> #include <sys/resource.h> #include <unistd.h> #include <stdarg.h> |