List:Commits« Previous MessageNext Message »
From:msvensson Date:February 19 2007 4:39pm
Subject:bk commit into 4.1 tree (msvensson:1.2612)
View as plain text  
Below is the list of changes that have just been committed into a local
4.1 repository of msvensson. When msvensson does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-02-19 16:39:50+01:00, msvensson@stripped +2 -0
  Add "append_file" command to mysqltest

  client/mysqltest.c@stripped, 2007-02-19 16:39:49+01:00, msvensson@stripped +90 -30
    Add "append_file" command to mysqltest

  mysql-test/t/mysqltest.test@stripped, 2007-02-19 16:39:49+01:00, msvensson@stripped
+19 -0
    Add "append_file" command to mysqltest

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	msvensson
# Host:	pilot.blaudden
# Root:	/home/msvensson/mysql/mysql-4.1-maint

--- 1.24/mysql-test/t/mysqltest.test	2006-11-30 10:54:49 +01:00
+++ 1.25/mysql-test/t/mysqltest.test	2007-02-19 16:39:49 +01:00
@@ -1485,6 +1485,25 @@
 remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
 
 # ----------------------------------------------------------------------------
+# test for append_file
+# ----------------------------------------------------------------------------
+
+write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
+Content for test_file1
+EOF
+file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
+
+append_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
+Appended text
+EOF
+file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
+
+remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
+append_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
+Appended text on nonexisting file
+EOF
+
+# ----------------------------------------------------------------------------
 # test for file_exist
 # ----------------------------------------------------------------------------
 --error 1

--- 1.237/client/mysqltest.c	2007-02-19 12:00:16 +01:00
+++ 1.238/client/mysqltest.c	2007-02-19 16:39:49 +01:00
@@ -32,7 +32,7 @@
   Holyfoot
 */
 
-#define MTEST_VERSION "3.1"
+#define MTEST_VERSION "3.2"
 
 #include <my_global.h>
 #include <mysql_embed.h>
@@ -273,7 +273,7 @@
   Q_DISABLE_PARSING, Q_ENABLE_PARSING,
   Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST,
   Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT,
-  Q_CHMOD_FILE,
+  Q_CHMOD_FILE, Q_APPEND_FILE,
 
   Q_UNKNOWN,			       /* Unknown command.   */
   Q_COMMENT,			       /* Comments, ignored. */
@@ -357,6 +357,7 @@
   /* Don't execute any more commands, compare result */
   "exit",
   "chmod",
+  "append_file",
   0
 };
 
@@ -436,6 +437,7 @@
 void do_eval(DYNAMIC_STRING *query_eval, const char *query,
              const char *query_end, my_bool pass_through_escape_chars);
 void str_to_file(const char *fname, char *str, int size);
+void str_to_file2(const char *fname, char *str, int size, my_bool append);
 
 #ifdef __WIN__
 void free_tmp_sh_file();
@@ -2063,6 +2065,38 @@
 }
 
 
+void do_write_file_command(struct st_command *command, my_bool append)
+{
+  static DYNAMIC_STRING ds_content;
+  static DYNAMIC_STRING ds_filename;
+  static DYNAMIC_STRING ds_delimiter;
+  const struct command_arg write_file_args[] = {
+    "filename", ARG_STRING, TRUE, &ds_filename, "File to write to",
+    "delimiter", ARG_STRING, FALSE, &ds_delimiter, "Delimiter to read until"
+  };
+  DBUG_ENTER("do_write_file");
+
+  check_command_args(command,
+                     command->first_argument,
+                     write_file_args,
+                     sizeof(write_file_args)/sizeof(struct command_arg),
+                     ' ');
+
+  /* If no delimiter was provided, use EOF */
+  if (ds_delimiter.length == 0)
+    dynstr_set(&ds_delimiter, "EOF");
+
+  init_dynamic_string(&ds_content, "", 1024, 1024);
+  read_until_delimiter(&ds_content, &ds_delimiter);
+  DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str));
+  str_to_file2(ds_filename.str, ds_content.str, ds_content.length, append);
+  dynstr_free(&ds_content);
+  dynstr_free(&ds_filename);
+  dynstr_free(&ds_delimiter);
+  DBUG_VOID_RETURN;
+}
+
+
 /*
   SYNOPSIS
   do_write_file
@@ -2092,33 +2126,38 @@
 
 void do_write_file(struct st_command *command)
 {
-  static DYNAMIC_STRING ds_content;
-  static DYNAMIC_STRING ds_filename;
-  static DYNAMIC_STRING ds_delimiter;
-  const struct command_arg write_file_args[] = {
-    "filename", ARG_STRING, TRUE, &ds_filename, "File to write to",
-    "delimiter", ARG_STRING, FALSE, &ds_delimiter, "Delimiter to read until"
-  };
-  DBUG_ENTER("do_write_file");
+  do_write_file_command(command, FALSE);
+}
 
-  check_command_args(command,
-                     command->first_argument,
-                     write_file_args,
-                     sizeof(write_file_args)/sizeof(struct command_arg),
-                     ' ');
 
-  /* If no delimiter was provided, use EOF */
-  if (ds_delimiter.length == 0)
-    dynstr_set(&ds_delimiter, "EOF");
+/*
+  SYNOPSIS
+  do_append_file
+  command	called command
 
-  init_dynamic_string(&ds_content, "", 1024, 1024);
-  read_until_delimiter(&ds_content, &ds_delimiter);
-  DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str));
-  str_to_file(ds_filename.str, ds_content.str, ds_content.length);
-  dynstr_free(&ds_content);
-  dynstr_free(&ds_filename);
-  dynstr_free(&ds_delimiter);
-  DBUG_VOID_RETURN;
+  DESCRIPTION
+  append_file <file_name> [<delimiter>];
+  <what to write line 1>
+  <...>
+  < what to write line n>
+  EOF
+
+  --append_file <file_name>;
+  <what to write line 1>
+  <...>
+  < what to write line n>
+  EOF
+
+  Append everything between the "append_file" command
+  and 'delimiter' to "file_name"
+
+  Default <delimiter> is EOF
+
+*/
+
+void do_append_file(struct st_command *command)
+{
+  do_write_file_command(command, TRUE);
 }
 
 
@@ -4271,21 +4310,22 @@
   return 0;
 }
 
-
 /*
   Write the content of str into file
 
   SYNOPSIS
-  str_to_file
+  str_to_file2
   fname - name of file to truncate/create and write to
   str - content to write to file
   size - size of content witten to file
+  append - append to file instead of overwriting old file
 */
 
-void str_to_file(const char *fname, char *str, int size)
+void str_to_file2(const char *fname, char *str, int size, my_bool append)
 {
   int fd;
   char buff[FN_REFLEN];
+  int flags= O_WRONLY | O_CREAT;
   if (!test_if_hard_path(fname))
   {
     strxmov(buff, opt_basedir, fname, NullS);
@@ -4293,14 +4333,33 @@
   }
   fn_format(buff, fname, "", "", MY_UNPACK_FILENAME);
 
-  if ((fd= my_open(buff, O_WRONLY | O_CREAT | O_TRUNC,
+  if (!append)
+    flags|= O_TRUNC;
+  if ((fd= my_open(buff, flags,
                    MYF(MY_WME | MY_FFNF))) < 0)
     die("Could not open %s: errno = %d", buff, errno);
+  if (append && my_seek(fd, 0, SEEK_END, MYF(0)) == MY_FILEPOS_ERROR)
+    die("Could not find end of file %s: errno = %d", buff, errno);
   if (my_write(fd, (byte*)str, size, MYF(MY_WME|MY_FNABP)))
     die("write failed");
   my_close(fd, MYF(0));
 }
 
+/*
+  Write the content of str into file
+
+  SYNOPSIS
+  str_to_file
+  fname - name of file to truncate/create and write to
+  str - content to write to file
+  size - size of content witten to file
+*/
+
+void str_to_file(const char *fname, char *str, int size)
+{
+  str_to_file2(fname, str, size, FALSE);
+}
+
 
 void dump_result_to_reject_file(char *buf, int size)
 {
@@ -5867,6 +5926,7 @@
       case Q_REMOVE_FILE: do_remove_file(command); break;
       case Q_FILE_EXIST: do_file_exist(command); break;
       case Q_WRITE_FILE: do_write_file(command); break;
+      case Q_APPEND_FILE: do_append_file(command); break;
       case Q_COPY_FILE: do_copy_file(command); break;
       case Q_CHMOD_FILE: do_chmod_file(command); break;
       case Q_PERL: do_perl(command); break;
Thread
bk commit into 4.1 tree (msvensson:1.2612)msvensson19 Feb