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 &quot;The Great One&quot; 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
 

Reply via email to