Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package csvprintf for openSUSE:Factory checked in at 2021-12-10 21:52:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/csvprintf (Old) and /work/SRC/openSUSE:Factory/.csvprintf.new.2520 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "csvprintf" Fri Dec 10 21:52:27 2021 rev:9 rq:938271 version:1.3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/csvprintf/csvprintf.changes 2021-11-24 23:55:04.216358629 +0100 +++ /work/SRC/openSUSE:Factory/.csvprintf.new.2520/csvprintf.changes 2021-12-10 21:52:41.674900777 +0100 @@ -1,0 +2,6 @@ +Thu Dec 9 19:49:33 UTC 2021 - Archie Cobbs <archie.co...@gmail.com> + +- Update to release 1.3.0 + + Added "-b" flag for new Bash output mode + +------------------------------------------------------------------- Old: ---- csvprintf-1.2.1.obscpio New: ---- csvprintf-1.3.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ csvprintf.spec ++++++ --- /var/tmp/diff_new_pack.y8D173/_old 2021-12-10 21:52:42.262901037 +0100 +++ /var/tmp/diff_new_pack.y8D173/_new 2021-12-10 21:52:42.266901039 +0100 @@ -17,7 +17,7 @@ Name: csvprintf -Version: 1.2.1 +Version: 1.3.0 Release: 0 Summary: Simple CSV file parser for the UNIX command line License: Apache-2.0 @@ -39,8 +39,8 @@ in the format string contain numeric or symbolic column accessors to specify which CSV column to format. -%{name} can also convert CSV files into XML documents. The xml2csv -command converts XML documents so generated back into CSV files. +%{name} can also convert CSV files into XML and JSON documents +and Bash variable assignments suitable for eval(1). %prep %autosetup -p1 @@ -51,7 +51,7 @@ %make_build %check -%make_build test +%make_build tests %install %make_install ++++++ _service ++++++ --- /var/tmp/diff_new_pack.y8D173/_old 2021-12-10 21:52:42.310901059 +0100 +++ /var/tmp/diff_new_pack.y8D173/_new 2021-12-10 21:52:42.314901060 +0100 @@ -2,8 +2,8 @@ <service mode="localonly" name="obs_scm"> <param name="scm">git</param> <param name="url">https://github.com/archiecobbs/csvprintf</param> - <param name="versionformat">1.2.1</param> - <param name="revision">1.2.1</param> + <param name="versionformat">1.3.0</param> + <param name="revision">1.3.0</param> <param name="filename">csvprintf</param> </service> <service mode="buildtime" name="tar"/> ++++++ csvprintf-1.2.1.obscpio -> csvprintf-1.3.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/CHANGES new/csvprintf-1.3.0/CHANGES --- old/csvprintf-1.2.1/CHANGES 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/CHANGES 2021-12-09 20:47:36.000000000 +0100 @@ -1,3 +1,7 @@ +Version 1.3.0 released December 9, 2021 + + - Added "-b" flag for new Bash output mode + Version 1.2.1 released November 24, 2021 - Fixed bug where "-x" flag was behaving like "-X" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/Makefile.am new/csvprintf-1.3.0/Makefile.am --- old/csvprintf-1.2.1/Makefile.am 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/Makefile.am 2021-12-09 20:47:36.000000000 +0100 @@ -28,7 +28,8 @@ .in: rm -f $@; $(subst) < $< >$@ -test: csvprintf +.PHONY: tests +tests: csvprintf cd tests && ./run.sh subst= sed \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/README new/csvprintf-1.3.0/README --- old/csvprintf-1.2.1/README 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/README 2021-12-09 20:47:36.000000000 +0100 @@ -7,7 +7,8 @@ column to use, so for example '%3$d' would format the third column as a decimal value. -csvprintf can also convert CSV files into XML documents. +csvprintf can also convert CSV files into XML and JSON documents +and Bash variable assignments suitable for eval(1). See INSTALL for installation instructions. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/README.md new/csvprintf-1.3.0/README.md --- old/csvprintf-1.2.1/README.md 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/README.md 2021-12-09 20:47:36.000000000 +0100 @@ -2,7 +2,7 @@ **cvsprintf** works just like the `printf(1)` command line utility. You supply a `printf(1)` format string on the command line and each record in the CSV file is formatted accordingly. Each format specifier in the format string contains a column accessor to specify which CSV column to use, so for example `%3$d` would format the third column as a decimal value. -**csvprintf** can also convert CSV files into XML documents. +**csvprintf** can also convert CSV files into XML and JSON documents. You can view the [ManPage](https://github.com/archiecobbs/csvprintf/wiki/ManPage) online. @@ -32,19 +32,19 @@ An example of the XML output: ``` -$ cat input.csv | csvprintf -ix +$ cat input.csv | csvprintf -iX <?xml version="1.0" encoding="ISO-8859-1"?> <csv> <row> - <col1>Fred Smith</col1> - <col2>1234 Main St. -Anytown, USA 39103</col2> - <col3>123.4567</col3> + <NAME>Fred Smith</NAME> + <ADDRESS>1234 Main St. +Anytown, USA 39103</ADDRESS> + <POINTS>123.4567</POINTS> </row> <row> - <col1>Wayne "The Great One" Gretsky</col1> - <col2>59 Hockey Lane</col2> - <col3>999999</col3> + <NAME>Wayne "The Great One" Gretsky</NAME> + <ADDRESS>59 Hockey Lane</ADDRESS> + <POINTS>999999</POINTS> </row> </csv> ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/configure.ac new/csvprintf-1.3.0/configure.ac --- old/csvprintf-1.2.1/configure.ac 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/configure.ac 2021-12-09 20:47:36.000000000 +0100 @@ -16,7 +16,7 @@ # under the License. # -AC_INIT([csvprintf - Simple CSV file parser for the UNIX command line], [1.2.1], [https://github.com/archiecobbs/csvprintf], [csvprintf]) +AC_INIT([csvprintf - Simple CSV file parser for the UNIX command line], [1.3.0], [https://github.com/archiecobbs/csvprintf], [csvprintf]) AC_CONFIG_AUX_DIR(scripts) AM_INIT_AUTOMAKE dnl AM_MAINTAINER_MODE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/csvprintf.1.in new/csvprintf-1.3.0/csvprintf.1.in --- old/csvprintf-1.2.1/csvprintf.1.in 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/csvprintf.1.in 2021-12-09 20:47:36.000000000 +0100 @@ -23,38 +23,32 @@ .Sh SYNOPSIS .Nm csvprintf .Bk -words -.Op Fl i -.Op Fl q Ar char -.Op Fl s Ar char -.Op Fl f Ar file +.Op Ar options .Ar format .Ek .Pp .Nm csvprintf .Bk -words +.Fl b +.Op Ar options +.Ek +.Pp +.Nm csvprintf +.Bk -words .Fl j -.Op Fl q Ar char -.Op Fl s Ar char -.Op Fl f Ar file +.Op Ar options .Ek .Pp .Nm csvprintf .Bk -words .Fl x -.Op Fl i -.Op Fl q Ar char -.Op Fl s Ar char -.Op Fl f Ar file -.Op Fl e Ar enc +.Op Ar options .Ek .Pp .Nm csvprintf .Bk -words .Fl X -.Op Fl q Ar char -.Op Fl s Ar char -.Op Fl f Ar file -.Op Fl e Ar enc +.Op Ar options .Ek .Pp .Nm xml2csv @@ -65,12 +59,14 @@ .Nm is a simple UNIX command line utility for parsing CSV files. .Pp +In the first form, .Nm works like the .Xr printf 1 command line utility: you supply a .Xr printf 1 format string on the command line, and each row of the CSV file is split into arguments and formatted accordingly. +.Pp The format specifiers in the format string contain numeric or symbolic column accessors to specify which CSV column to format. .Pp A numeric column accessor is a sequence of decimal digits followed by the @@ -99,28 +95,124 @@ .Pp Specifying a column name that does not appear in the first row generates an error, so the use of symbolic column accessors adds an extra consistency check. +.Sh XML Mode +With +.Fl x +or +.Fl X , +the entire file is converted into an XML document. +.Pp +The document element is +.Ar "<csv>" . +Each CSV row becomes a +.Ar "<row>" +element containing its individual column values as sub-elements. .Pp -.Nm -can also convert CSV files into XML documents and JSON text sequences. +With +.Fl x , +the sub-elements are +.Ar "<col1>" , +.Ar "<col2>" , +etc. +.Pp +With +.Fl X +the sub-elements use the column names read from the first row (with illegal characters replaced by underscores). +.Pp +In XML mode, a character encoding must be assumed; see +.Fl e . .Pp The .Nm xml2csv -command converts XML documents generated by +command can convert XML documents generated by .Nm back into CSV files. -.Sh INPUT ENCODING -Lines must be terminated by LF bytes or CR+LF byte pairs, and the separator and quote characters must be recognizable as single byte values. -Otherwise, column values are copied from input to output without interpretation. +.Sh JSON Mode +With +.Fl j , +each row is converted into a JSON document. +.Pp +This form is described by RFC 7464 and consists of concatenated JSON documents, +each framed by ASCII RS and LF control characters. +This output is compatible with the +.Xr jq 1 +utility's +.Fl \-seq +flag. +.Pp +Without +.Fl i , +each row is written as a string array. +With +.Fl i , +each row is written as an object, with a field for each column name. +An error occurs if two CSV columns have the same name. +.Pp +In JSON mode, a character encoding must be assumed; see +.Fl e . +.Sh Bash Mode +With +.Fl b , +each row is converted into +.Xr bash 1 +variable assignments which may be applied with the +.Xr eval 1 +command. +.Pp +Without +.Fl i , +the output assigns +.Ar ROW +as an array of values. +The resulting output can be used like this: +.Bd -literal -offset indent +cat input.csv | csvprintf -b | while read LINE; do + eval "${LINE}" + echo "The first column is: ${ROW[0]}" + echo "The second column is: ${ROW[1]}" + ... +done +.Ed +.Pp +With +.Fl i , +each column value is assigned to a separate variable whose name is the corresponding column name +(with underscores replacing non-alphanumeric characters), and an error occurs if two CSV columns have the same name. +.Pp +So an input file like this: +.Bd -literal -offset indent +"Last Name","First Name","Registered???" +"Washington","George","Y" +"Lincoln","Abe","N" +.Ed +.Pp +can be processed like this: +.Bd -literal -offset indent +cat input.csv | csvprintf -bi | while read LINE; do + eval "${LINE}" + echo "First name: ${First_Name}" + echo "Last name: ${Last_Name}" + echo "Registered: ${Registered___}" +done +.Ed +.Sh Input Encoding +In all modes, lines must be terminated by LF bytes or CR+LF byte pairs, and the separator and quote characters must be recognizable as single byte values. +This parsing behavior is compatible with ASCII, ISO-8859-1, UTF-8, etc., but not multi-byte encodings such as UTF-16, which must be re-encoded (e.g., to UTF-8) first. .Pp -This behavior is compatible with ASCII, ISO-8859-1, UTF-8, etc., but not multi-byte encodings such as UTF-16, which must be re-encoded first. +In normal and Bash modes, column values are copied from input to output bytewise without interpretation. .Pp -In XML mode, column values must be interpreted according to an assumed character encoding, which is configured by the +In XML and JSON modes, column values must be interpreted according to an assumed character encoding. +This encoding defaults to ISO-8859-1 but can be changed with the .Fl e flag. .Sh OPTIONS .Bl -tag -width Ds +.It Fl b +Convert each CSV row into a +.Xr bash 1 +variable assignment line. .It Fl e -Specify input character encoding for XML mode. +Specify input character encoding for XML or JSON mode. .Pp By default, ISO-8859-1 is assumed. .It Fl f @@ -130,30 +222,36 @@ .Nm reads from standard input. .It Fl i -Assume the first CSV record contains column names. -Enable symbolic column accessors and omit that first record from the output. -.It Fl j -Convert the CSV input into a JavaScript Object Notation (JSON) text sequence document. +Assume the first CSV record contains column names and omit that record from the output. .Pp -This form is described by RFC 7464 and consists of JSON documents concatenated and framed by -ASCII RS and LF control characters. -This form is compatible with the -.Xr jq 1 -utility's -.Fl \-seq -flag. +In normal mode, enable symbolic column accessors. +.Pp +In XML mode, use column names for the inner-most XML elements. +.Pp +In JSON mode, output objects instead of arrays and use column names for the object fields. .Pp +In Bash mode, output multiple variable assignments using column names instead of a single +.Ar ROW +array variable. +.Pp +It's possible for a row to have more columns than the column header row did. +In that case, .Nm -writes each row as a string array or, when the -.Fl i -flag is specified, a object with column name string fields. +reverts to using +.Ar col1 , +.Ar col2 , +etc. +.It Fl j +Convert the CSV input into a JavaScript Object Notation (JSON) text sequence document. .It Fl q Specify an alternate CSV column quote character. The usual backslash escape sequences are accepted. +.Pp The default quote character is double quote. .It Fl s Specify an alternate CSV column separator character. The usual backslash escape sequences are accepted. +.Pp The default separator character is comma. .It Fl h Output usage message and exit. @@ -161,9 +259,6 @@ Output version information and exit. .It Fl x Convert the CSV input into an XML document. -If the input character encoding is other than ISO-8859-1, specify using the -.Fl e -flag. .It Fl X Same as .Fl x , diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/main.c new/csvprintf-1.3.0/main.c --- old/csvprintf-1.2.1/main.c 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/main.c 2021-12-09 20:47:36.000000000 +0100 @@ -38,6 +38,7 @@ #define MODE_NORMAL 0 // normal mode #define MODE_XML 1 // XML mode #define MODE_JSON 2 // JSON mode +#define MODE_BASH 3 // bash mode struct col { char *buf; @@ -63,6 +64,9 @@ static void freerow(struct row *row); static void print_xml_tag_name(const char *tag, int linenum); static void print_json_string(const char *string, int linenum); +static void print_bash_name(const char *string); +static void print_bash_value(const char *string); +static char bash_name_safe(char ch, int first); static int decode_utf8(const char *const obuf, size_t olen, int *lenp, int linenum); static void convert_to_utf8(iconv_t icd, struct row *row, int linenum); static const char *escape_xml_char(int uchar); @@ -101,8 +105,13 @@ memset(&column_names, 0, sizeof(column_names)); // Parse command line - while ((ch = getopt(argc, argv, "e:f:hijq:s:vxX")) != -1) { + while ((ch = getopt(argc, argv, "be:f:hijq:s:vxX")) != -1) { switch (ch) { + case 'b': + if (mode != -1 && mode != MODE_BASH) + errx(1, "flag \"%c\" conflicts with previous mode flag", ch); + mode = MODE_BASH; + break; case 'e': encoding = optarg; break; @@ -178,9 +187,14 @@ err(1, "%s", input); // Initialize iconv - if (mode != MODE_NORMAL) { + switch (mode) { + case MODE_XML: + case MODE_JSON: if ((icd = iconv_open(XML_OUTPUT_ENCODING, encoding)) == (iconv_t)-1) err(1, "%s", encoding); + break; + default: + break; } // XML opening @@ -215,7 +229,7 @@ if (first_row && read_column_names) { // Convert to UTF-8 if needed - if (mode != MODE_NORMAL) + if (icd != NULL) convert_to_utf8(icd, &row, linenum); // Save column names @@ -226,8 +240,10 @@ if (mode == MODE_NORMAL) nargs = parsefmt(format, &column_names, &args); - // For JSON object notation, fail if any column names are duplicated - if (mode == MODE_JSON) { + // Check for illegal or duplicate column names + switch (mode) { + case MODE_JSON: + { int i, j; for (i = 0; i < column_names.num - 1; i++) { @@ -236,6 +252,37 @@ errx(1, "duplicate column name \"%s\"", column_names.fields[i]); } } + break; + } + case MODE_BASH: + { + int i, j; + + for (i = 0; i < column_names.num; i++) { + const char *const namei = column_names.fields[i]; + + if (*namei == '\0') + errx(1, "illegal empty string column name"); + for (j = i + 1; j < column_names.num; j++) { + const char *const namej = column_names.fields[j]; + int same = 1; + int k; + + for (k = 0; namei[k] != '\0' || namej[k] != '\0'; k++) { + if (namei[k] == '\0' || namej[k] == '\0' + || bash_name_safe(namei[k], k == 0) != bash_name_safe(namej[k], k == 0)) { + same = 0; + break; + } + } + if (same) + errx(1, "duplicate (bash variable) column names \"%s\" and \"%s\"", namei, namej); + } + } + break; + } + default: + break; } // Proceed @@ -323,6 +370,46 @@ printf(" </row>\n"); break; } + case MODE_BASH: + { + int col; + + // Start array (if needed) + if (!read_column_names) + printf("ROW=("); + + // Output row + for (col = 0; col < row.num; col++) { + + // Add space + if (col > 0 || !read_column_names) + putchar(' '); + + // Add column name (if using column names) + if (read_column_names) { + if (col < column_names.num) + print_bash_name(column_names.fields[col]); + else + printf("col%d", col + 1); + putchar('='); + } + + // Add column value + print_bash_value(row.fields[col]); + + // Add separator + if (read_column_names) + putchar(';'); + } + + // End array (if needed) + if (!read_column_names) + printf(" )"); + + // End line + printf("\n"); + break; + } case MODE_NORMAL: { char ncolbuf[32]; @@ -382,7 +469,7 @@ printf("</csv>\n"); // Clean up iconv - if (mode != MODE_NORMAL) + if (icd != NULL) (void)iconv_close(icd); // Clean up @@ -455,6 +542,82 @@ } } +static void +print_bash_name(const char *string) +{ + int i; + + for (i = 0; string[i] != '\0'; i++) + fputc(bash_name_safe(string[i], i == 0), stdout); +} + +static void +print_bash_value(const char *string) +{ + int single_quotes = 1; + int i; + + // See if plain single quotes will work + for (i = 0; string[i] != '\0'; i++) { + if (string[i] == '\'' || !isprint((u_char)string[i])) { + single_quotes = 0; + break; + } + } + + // Output value + if (single_quotes) + printf("'%s'", string); + else { + printf("$'"); + for (i = 0; string[i] != '\0'; i++) { + switch (string[i]) { + case '\'': + printf("\\'"); + break; + case '\\': + printf("\\\\"); + break; + case '\b': + printf("\\b"); + break; + case '\f': + printf("\\f"); + break; + case '\n': + printf("\\n"); + break; + case '\r': + printf("\\r"); + break; + case '\t': + printf("\\t"); + break; + case '\v': + printf("\\v"); + break; + default: + if (isprint((u_char)string[i])) + putchar((u_char)string[i]); + else + printf("\\x%02x", (u_char)string[i]); + break; + } + } + putchar('\''); + } +} + +static char +bash_name_safe(char ch, int first) +{ + if (isupper((u_char)ch) || islower((u_char)ch) || ch == '_') + return ch; + if (!first && isdigit((u_char)ch)) + return ch; + return '_'; +} + // Output JSON string static void print_json_string(const char *string, int linenum) @@ -706,9 +869,9 @@ { size_t skip; - while (col->len > 0 && isspace(col->buf[col->len - 1])) + while (col->len > 0 && isspace((u_char)col->buf[col->len - 1])) col->len--; - for (skip = 0; skip < col->len && isspace(col->buf[skip]); skip++) + for (skip = 0; skip < col->len && isspace((u_char)col->buf[skip]); skip++) ; col->len -= skip; memmove(col->buf, col->buf + skip, col->len); @@ -871,7 +1034,7 @@ { if (*s == '*') return eataccessor(fspec, desc, column_names, s + 1, nargs, args); - while (isdigit(*s)) // eat up numerical field width or precision + while (isdigit((u_char)*s)) // eat up numerical field width or precision s++; return s; } @@ -910,7 +1073,7 @@ } args[(*nargs)++] = argnum; } else { - while (isdigit(*s)) + while (isdigit((u_char)*s)) s++; if (s == start || *s++ != '$') errx(1, "missing required column accessor in %s starting at \"%.20s...\"", desc, fspec); @@ -951,12 +1114,14 @@ fprintf(stderr, "Usage:\n"); fprintf(stderr, " csvprintf [options] format\n"); + fprintf(stderr, " csvprintf -b [options]\n"); fprintf(stderr, " csvprintf -j [options]\n"); fprintf(stderr, " csvprintf -x [options]\n"); fprintf(stderr, " csvprintf -X [options]\n"); fprintf(stderr, " csvprintf -h\n"); fprintf(stderr, " csvprintf -v\n"); fprintf(stderr, "Options:\n"); + fprintf(stderr, " -b\t\tConvert input to bash(1) variable assignments\n"); fprintf(stderr, " -e encoding\tSpecify input character encoding (XML and JSON modes only; default ISO-8859-1)\n"); fprintf(stderr, " -f input\tRead CSV input from specified file (default stdin)\n"); fprintf(stderr, " -i\t\tAssume the first CSV record contains column names\n"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/run.sh new/csvprintf-1.3.0/tests/run.sh --- old/csvprintf-1.2.1/tests/run.sh 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/tests/run.sh 2021-12-09 20:47:36.000000000 +0100 @@ -1,13 +1,17 @@ #!/bin/sh set -e +set -o pipefail FAILED_TESTS='' for INPUT_FILE in *.in; do OUTPUT_FILE1=`echo "${INPUT_FILE}" | sed -n 's/\.in$/.out1/gp'` OUTPUT_FILE2=`echo "${INPUT_FILE}" | sed -n 's/\.in$/.out2/gp'` - OUTPUT_FILE3=`echo "${INPUT_FILE}" | sed -n 's/\.in$/.out3/gp'` + OUTPUT_FILE3A=`echo "${INPUT_FILE}" | sed -n 's/\.in$/.out3a/gp'` + OUTPUT_FILE3B=`echo "${INPUT_FILE}" | sed -n 's/\.in$/.out3b/gp'` OUTPUT_FILE4=`echo "${INPUT_FILE}" | sed -n 's/\.in$/.out4/gp'` + OUTPUT_FILE5A=`echo "${INPUT_FILE}" | sed -n 's/\.in$/.out5a/gp'` + OUTPUT_FILE5B=`echo "${INPUT_FILE}" | sed -n 's/\.in$/.out5b/gp'` echo "*** testing ${INPUT_FILE}..." 1>&2 if ! ../csvprintf -x -f "${INPUT_FILE}" | diff -u "${OUTPUT_FILE1}" -; then echo "*** FAILED: [1] ${INPUT_FILE}" 1>&2 @@ -18,17 +22,29 @@ FAILED_TESTS="${FAILED_TESTS} ${INPUT_FILE}/${OUTPUT_FILE2}" fi if ! ../csvprintf -e iso-8859-1 -x -f "${INPUT_FILE}" | xsltproc ../csv.xsl - | ../csvprintf -e UTF-8 -x | diff -u "${OUTPUT_FILE1}" -; then - echo "*** FAILED: [3] ${INPUT_FILE}" 1>&2 + echo "*** FAILED: [1x] ${INPUT_FILE}" 1>&2 FAILED_TESTS="${FAILED_TESTS} ${INPUT_FILE}/csv2xml" fi - if ! ../csvprintf -ij -f "${INPUT_FILE}" | diff -u "${OUTPUT_FILE3}" -; then - echo "*** FAILED: [3] ${INPUT_FILE}" 1>&2 - FAILED_TESTS="${FAILED_TESTS} ${INPUT_FILE}/${OUTPUT_FILE3}" + if ! ../csvprintf -j -f "${INPUT_FILE}" | diff -u "${OUTPUT_FILE3A}" -; then + echo "*** FAILED: [3a] ${INPUT_FILE}" 1>&2 + FAILED_TESTS="${FAILED_TESTS} ${INPUT_FILE}/${OUTPUT_FILE3A}" + fi + if ! ../csvprintf -ij -f "${INPUT_FILE}" | diff -u "${OUTPUT_FILE3B}" -; then + echo "*** FAILED: [3b] ${INPUT_FILE}" 1>&2 + FAILED_TESTS="${FAILED_TESTS} ${INPUT_FILE}/${OUTPUT_FILE3B}" fi if ! ../csvprintf -ix -f "${INPUT_FILE}" | diff -u "${OUTPUT_FILE4}" -; then echo "*** FAILED: [4] ${INPUT_FILE}" 1>&2 FAILED_TESTS="${FAILED_TESTS} ${INPUT_FILE}/${OUTPUT_FILE4}" fi + if ! ../csvprintf -b -f "${INPUT_FILE}" | diff -u "${OUTPUT_FILE5A}" -; then + echo "*** FAILED: [5a] ${INPUT_FILE}" 1>&2 + FAILED_TESTS="${FAILED_TESTS} ${INPUT_FILE}/${OUTPUT_FILE5A}" + fi + if ! ../csvprintf -ib -f "${INPUT_FILE}" | diff -u "${OUTPUT_FILE5B}" -; then + echo "*** FAILED: [5b] ${INPUT_FILE}" 1>&2 + FAILED_TESTS="${FAILED_TESTS} ${INPUT_FILE}/${OUTPUT_FILE5B}" + fi done if [ -z "${FAILED_TESTS}" ]; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test1.out3 new/csvprintf-1.3.0/tests/test1.out3 --- old/csvprintf-1.2.1/tests/test1.out3 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test1.out3 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -{"NAME":"Fred Smith","ADDRESS":"1234 Main St.\nAnytown, USA 39103","POINTS":"123.4567"} -{"NAME":"Wayne \"The Great One\" Gretsky","ADDRESS":"59 Hockey Lane","POINTS":"999999"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test1.out3a new/csvprintf-1.3.0/tests/test1.out3a --- old/csvprintf-1.2.1/tests/test1.out3a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test1.out3a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +["NAME","ADDRESS","POINTS"] +["Fred Smith","1234 Main St.\nAnytown, USA 39103","123.4567"] +["Wayne \"The Great One\" Gretsky","59 Hockey Lane","999999"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test1.out3b new/csvprintf-1.3.0/tests/test1.out3b --- old/csvprintf-1.2.1/tests/test1.out3b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test1.out3b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +{"NAME":"Fred Smith","ADDRESS":"1234 Main St.\nAnytown, USA 39103","POINTS":"123.4567"} +{"NAME":"Wayne \"The Great One\" Gretsky","ADDRESS":"59 Hockey Lane","POINTS":"999999"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test1.out5a new/csvprintf-1.3.0/tests/test1.out5a --- old/csvprintf-1.2.1/tests/test1.out5a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test1.out5a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +ROW=( 'NAME' 'ADDRESS' 'POINTS' ) +ROW=( 'Fred Smith' $'1234 Main St.\nAnytown, USA 39103' '123.4567' ) +ROW=( 'Wayne "The Great One" Gretsky' '59 Hockey Lane' '999999' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test1.out5b new/csvprintf-1.3.0/tests/test1.out5b --- old/csvprintf-1.2.1/tests/test1.out5b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test1.out5b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +NAME='Fred Smith'; ADDRESS=$'1234 Main St.\nAnytown, USA 39103'; POINTS='123.4567'; +NAME='Wayne "The Great One" Gretsky'; ADDRESS='59 Hockey Lane'; POINTS='999999'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test2.out3 new/csvprintf-1.3.0/tests/test2.out3 --- old/csvprintf-1.2.1/tests/test2.out3 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test2.out3 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -{"NAME":"Fred Smith","ADDRESS":"1234 Main St.\r\nAnytown, USA 39103","POINTS":"123.4567"} -{"NAME":"Wayne \"The Great One\" Gretsky","ADDRESS":"59 Hockey Lane","POINTS":"999999"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test2.out3a new/csvprintf-1.3.0/tests/test2.out3a --- old/csvprintf-1.2.1/tests/test2.out3a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test2.out3a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +["NAME","ADDRESS","POINTS"] +["Fred Smith","1234 Main St.\r\nAnytown, USA 39103","123.4567"] +["Wayne \"The Great One\" Gretsky","59 Hockey Lane","999999"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test2.out3b new/csvprintf-1.3.0/tests/test2.out3b --- old/csvprintf-1.2.1/tests/test2.out3b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test2.out3b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +{"NAME":"Fred Smith","ADDRESS":"1234 Main St.\r\nAnytown, USA 39103","POINTS":"123.4567"} +{"NAME":"Wayne \"The Great One\" Gretsky","ADDRESS":"59 Hockey Lane","POINTS":"999999"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test2.out5a new/csvprintf-1.3.0/tests/test2.out5a --- old/csvprintf-1.2.1/tests/test2.out5a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test2.out5a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +ROW=( 'NAME' 'ADDRESS' 'POINTS' ) +ROW=( 'Fred Smith' $'1234 Main St.\r\nAnytown, USA 39103' '123.4567' ) +ROW=( 'Wayne "The Great One" Gretsky' '59 Hockey Lane' '999999' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test2.out5b new/csvprintf-1.3.0/tests/test2.out5b --- old/csvprintf-1.2.1/tests/test2.out5b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test2.out5b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +NAME='Fred Smith'; ADDRESS=$'1234 Main St.\r\nAnytown, USA 39103'; POINTS='123.4567'; +NAME='Wayne "The Great One" Gretsky'; ADDRESS='59 Hockey Lane'; POINTS='999999'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test3.out3 new/csvprintf-1.3.0/tests/test3.out3 --- old/csvprintf-1.2.1/tests/test3.out3 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test3.out3 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -{"NAME":"Fred Smith","ADDRESS":"1234 Main St.\rAnytown, USA 39103","POINTS":"123.4567"} -{"NAME":"Wayne \"The Great One\" Gretsky","ADDRESS":"59 Hockey Lane","POINTS":"999999"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test3.out3a new/csvprintf-1.3.0/tests/test3.out3a --- old/csvprintf-1.2.1/tests/test3.out3a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test3.out3a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +["NAME","ADDRESS","POINTS"] +["Fred Smith","1234 Main St.\rAnytown, USA 39103","123.4567"] +["Wayne \"The Great One\" Gretsky","59 Hockey Lane","999999"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test3.out3b new/csvprintf-1.3.0/tests/test3.out3b --- old/csvprintf-1.2.1/tests/test3.out3b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test3.out3b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +{"NAME":"Fred Smith","ADDRESS":"1234 Main St.\rAnytown, USA 39103","POINTS":"123.4567"} +{"NAME":"Wayne \"The Great One\" Gretsky","ADDRESS":"59 Hockey Lane","POINTS":"999999"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test3.out5a new/csvprintf-1.3.0/tests/test3.out5a --- old/csvprintf-1.2.1/tests/test3.out5a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test3.out5a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +ROW=( 'NAME' 'ADDRESS' 'POINTS' ) +ROW=( 'Fred Smith' $'1234 Main St.\rAnytown, USA 39103' '123.4567' ) +ROW=( 'Wayne "The Great One" Gretsky' '59 Hockey Lane' '999999' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test3.out5b new/csvprintf-1.3.0/tests/test3.out5b --- old/csvprintf-1.2.1/tests/test3.out5b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test3.out5b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +NAME='Fred Smith'; ADDRESS=$'1234 Main St.\rAnytown, USA 39103'; POINTS='123.4567'; +NAME='Wayne "The Great One" Gretsky'; ADDRESS='59 Hockey Lane'; POINTS='999999'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test4.out3 new/csvprintf-1.3.0/tests/test4.out3 --- old/csvprintf-1.2.1/tests/test4.out3 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test4.out3 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -{"NAME":"Fred Smith","ADDRESS":"1234 Main St.\nAnytown, USA 39103","POINTS":"123.4567"} -{"NAME":"Wayne \"The Great One\" Gretsky","ADDRESS":"59 Hockey Lane","POINTS":"999999"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test4.out3a new/csvprintf-1.3.0/tests/test4.out3a --- old/csvprintf-1.2.1/tests/test4.out3a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test4.out3a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +["NAME","ADDRESS","POINTS"] +["Fred Smith","1234 Main St.\nAnytown, USA 39103","123.4567"] +["Wayne \"The Great One\" Gretsky","59 Hockey Lane","999999"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test4.out3b new/csvprintf-1.3.0/tests/test4.out3b --- old/csvprintf-1.2.1/tests/test4.out3b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test4.out3b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +{"NAME":"Fred Smith","ADDRESS":"1234 Main St.\nAnytown, USA 39103","POINTS":"123.4567"} +{"NAME":"Wayne \"The Great One\" Gretsky","ADDRESS":"59 Hockey Lane","POINTS":"999999"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test4.out5a new/csvprintf-1.3.0/tests/test4.out5a --- old/csvprintf-1.2.1/tests/test4.out5a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test4.out5a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +ROW=( 'NAME' 'ADDRESS' 'POINTS' ) +ROW=( 'Fred Smith' $'1234 Main St.\nAnytown, USA 39103' '123.4567' ) +ROW=( 'Wayne "The Great One" Gretsky' '59 Hockey Lane' '999999' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test4.out5b new/csvprintf-1.3.0/tests/test4.out5b --- old/csvprintf-1.2.1/tests/test4.out5b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test4.out5b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +NAME='Fred Smith'; ADDRESS=$'1234 Main St.\nAnytown, USA 39103'; POINTS='123.4567'; +NAME='Wayne "The Great One" Gretsky'; ADDRESS='59 Hockey Lane'; POINTS='999999'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test5.out3a new/csvprintf-1.3.0/tests/test5.out3a --- old/csvprintf-1.2.1/tests/test5.out3a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test5.out3a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1 @@ +["pi\u00f1ata"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test5.out5a new/csvprintf-1.3.0/tests/test5.out5a --- old/csvprintf-1.2.1/tests/test5.out5a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test5.out5a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1 @@ +ROW=( $'pi\xf1ata' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test6.out3 new/csvprintf-1.3.0/tests/test6.out3 --- old/csvprintf-1.2.1/tests/test6.out3 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test6.out3 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -{"NAME":"Fred Smith","ADDRESS":"1234 Main St.\nAnytown, USA 39103","POINTS":"123.4567"} -{"NAME":"Wayne \"The Great One\" Gretsky","ADDRESS":"59 Hockey Lane","POINTS":"999999"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test6.out3a new/csvprintf-1.3.0/tests/test6.out3a --- old/csvprintf-1.2.1/tests/test6.out3a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test6.out3a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +["NAME","ADDRESS","POINTS"] +["Fred Smith","1234 Main St.\nAnytown, USA 39103","123.4567"] +["Wayne \"The Great One\" Gretsky","59 Hockey Lane","999999"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test6.out3b new/csvprintf-1.3.0/tests/test6.out3b --- old/csvprintf-1.2.1/tests/test6.out3b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test6.out3b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +{"NAME":"Fred Smith","ADDRESS":"1234 Main St.\nAnytown, USA 39103","POINTS":"123.4567"} +{"NAME":"Wayne \"The Great One\" Gretsky","ADDRESS":"59 Hockey Lane","POINTS":"999999"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test6.out5a new/csvprintf-1.3.0/tests/test6.out5a --- old/csvprintf-1.2.1/tests/test6.out5a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test6.out5a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +ROW=( 'NAME' 'ADDRESS' 'POINTS' ) +ROW=( 'Fred Smith' $'1234 Main St.\nAnytown, USA 39103' '123.4567' ) +ROW=( 'Wayne "The Great One" Gretsky' '59 Hockey Lane' '999999' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test6.out5b new/csvprintf-1.3.0/tests/test6.out5b --- old/csvprintf-1.2.1/tests/test6.out5b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test6.out5b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +NAME='Fred Smith'; ADDRESS=$'1234 Main St.\nAnytown, USA 39103'; POINTS='123.4567'; +NAME='Wayne "The Great One" Gretsky'; ADDRESS='59 Hockey Lane'; POINTS='999999'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test7.out3 new/csvprintf-1.3.0/tests/test7.out3 --- old/csvprintf-1.2.1/tests/test7.out3 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test7.out3 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -{"Name With Spaces":"aaa","#~!@#$%^&*()":"bbb","&<>&\"\\":"ccc"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test7.out3a new/csvprintf-1.3.0/tests/test7.out3a --- old/csvprintf-1.2.1/tests/test7.out3a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test7.out3a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +["Name With Spaces","#~!@#$%^&*()","&<>&\"\\"] +["aaa","bbb","ccc"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test7.out3b new/csvprintf-1.3.0/tests/test7.out3b --- old/csvprintf-1.2.1/tests/test7.out3b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test7.out3b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1 @@ +{"Name With Spaces":"aaa","#~!@#$%^&*()":"bbb","&<>&\"\\":"ccc"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test7.out5a new/csvprintf-1.3.0/tests/test7.out5a --- old/csvprintf-1.2.1/tests/test7.out5a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test7.out5a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +ROW=( 'Name With Spaces' '#~!@#$%^&*()' '&<>&"\' ) +ROW=( 'aaa' 'bbb' 'ccc' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test7.out5b new/csvprintf-1.3.0/tests/test7.out5b --- old/csvprintf-1.2.1/tests/test7.out5b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test7.out5b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1 @@ +Name_With_Spaces='aaa'; ____________='bbb'; ______='ccc'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test8.out3 new/csvprintf-1.3.0/tests/test8.out3 --- old/csvprintf-1.2.1/tests/test8.out3 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test8.out3 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -{"ColA":"aaa","ColB":"bbb","ColC":"ccc"} -{"ColA":"aaa","ColB":"bbb"} -{"ColA":"aaa","ColB":"bbb","ColC":"ccc","col4":"ddd"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test8.out3a new/csvprintf-1.3.0/tests/test8.out3a --- old/csvprintf-1.2.1/tests/test8.out3a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test8.out3a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,4 @@ +["ColA","ColB","ColC"] +["aaa","bbb","ccc"] +["aaa","bbb"] +["aaa","bbb","ccc","ddd"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test8.out3b new/csvprintf-1.3.0/tests/test8.out3b --- old/csvprintf-1.2.1/tests/test8.out3b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test8.out3b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +{"ColA":"aaa","ColB":"bbb","ColC":"ccc"} +{"ColA":"aaa","ColB":"bbb"} +{"ColA":"aaa","ColB":"bbb","ColC":"ccc","col4":"ddd"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test8.out5a new/csvprintf-1.3.0/tests/test8.out5a --- old/csvprintf-1.2.1/tests/test8.out5a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test8.out5a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,4 @@ +ROW=( 'ColA' 'ColB' 'ColC' ) +ROW=( 'aaa' 'bbb' 'ccc' ) +ROW=( 'aaa' 'bbb' ) +ROW=( 'aaa' 'bbb' 'ccc' 'ddd' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test8.out5b new/csvprintf-1.3.0/tests/test8.out5b --- old/csvprintf-1.2.1/tests/test8.out5b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test8.out5b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,3 @@ +ColA='aaa'; ColB='bbb'; ColC='ccc'; +ColA='aaa'; ColB='bbb'; +ColA='aaa'; ColB='bbb'; ColC='ccc'; col4='ddd'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test9.out3 new/csvprintf-1.3.0/tests/test9.out3 --- old/csvprintf-1.2.1/tests/test9.out3 2021-11-24 18:11:42.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test9.out3 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -{"foo":"value1","col2":"value2","col3":"value3"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test9.out3a new/csvprintf-1.3.0/tests/test9.out3a --- old/csvprintf-1.2.1/tests/test9.out3a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test9.out3a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +["foo"] +["value1","value2","value3"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test9.out3b new/csvprintf-1.3.0/tests/test9.out3b --- old/csvprintf-1.2.1/tests/test9.out3b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test9.out3b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1 @@ +{"foo":"value1","col2":"value2","col3":"value3"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test9.out5a new/csvprintf-1.3.0/tests/test9.out5a --- old/csvprintf-1.2.1/tests/test9.out5a 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test9.out5a 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1,2 @@ +ROW=( 'foo' ) +ROW=( 'value1' 'value2' 'value3' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/csvprintf-1.2.1/tests/test9.out5b new/csvprintf-1.3.0/tests/test9.out5b --- old/csvprintf-1.2.1/tests/test9.out5b 1970-01-01 01:00:00.000000000 +0100 +++ new/csvprintf-1.3.0/tests/test9.out5b 2021-12-09 20:47:36.000000000 +0100 @@ -0,0 +1 @@ +foo='value1'; col2='value2'; col3='value3'; ++++++ csvprintf.obsinfo ++++++ --- /var/tmp/diff_new_pack.y8D173/_old 2021-12-10 21:52:42.466901127 +0100 +++ /var/tmp/diff_new_pack.y8D173/_new 2021-12-10 21:52:42.466901127 +0100 @@ -1,5 +1,5 @@ name: csvprintf -version: 1.2.1 -mtime: 1637773902 -commit: c133d4374a0664f57fcfb582e6d46f033b81f77a +version: 1.3.0 +mtime: 1639079256 +commit: 57eae72333bf69be54b884e56bd8136d6abce19d