Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-Text-CSV_XS for openSUSE:Factory checked in at 2024-05-16 17:12:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Text-CSV_XS (Old) and /work/SRC/openSUSE:Factory/.perl-Text-CSV_XS.new.1880 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Text-CSV_XS" Thu May 16 17:12:47 2024 rev:54 rq:1174131 version:1.540.0 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Text-CSV_XS/perl-Text-CSV_XS.changes 2024-03-10 20:23:54.608437117 +0100 +++ /work/SRC/openSUSE:Factory/.perl-Text-CSV_XS.new.1880/perl-Text-CSV_XS.changes 2024-05-16 17:13:27.608192391 +0200 @@ -1,0 +2,12 @@ +Fri Apr 19 03:08:23 UTC 2024 - Tina Müller <timueller+p...@suse.de> + +- updated to 1.54 + see /usr/share/doc/packages/perl-Text-CSV_XS/ChangeLog + + 1.54 - 2024-04-18, H.Merijn Brand + * Fix doc (Jean Forget, RT#150757) + * It's 2024 + * Fix comment_str with strict + * Doc fixup (RT#151546) + +------------------------------------------------------------------- Old: ---- Text-CSV_XS-1.53.tgz New: ---- Text-CSV_XS-1.54.tgz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Text-CSV_XS.spec ++++++ --- /var/tmp/diff_new_pack.5z9Ou6/_old 2024-05-16 17:13:30.492296921 +0200 +++ /var/tmp/diff_new_pack.5z9Ou6/_new 2024-05-16 17:13:30.492296921 +0200 @@ -18,9 +18,10 @@ %define cpan_name Text-CSV_XS Name: perl-Text-CSV_XS -Version: 1.530.0 +Version: 1.540.0 Release: 0 -%define cpan_version 1.53 +# 1.54 -> normalize -> 1.540.0 +%define cpan_version 1.54 License: Artistic-1.0 OR GPL-1.0-or-later Summary: Comma-Separated Values manipulation routines URL: https://metacpan.org/release/%{cpan_name} @@ -30,7 +31,7 @@ BuildRequires: perl-macros Provides: perl(Text::CSV_XS) = %{version} %undefine __perllib_provides -Recommends: perl(Encode) >= 3.200.0 +Recommends: perl(Encode) >= 3.210.0 %{perl_requires} %description ++++++ Text-CSV_XS-1.53.tgz -> Text-CSV_XS-1.54.tgz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/CSV_XS.pm new/Text-CSV_XS-1.54/CSV_XS.pm --- old/Text-CSV_XS-1.53/CSV_XS.pm 2023-09-22 10:29:41.000000000 +0200 +++ new/Text-CSV_XS-1.54/CSV_XS.pm 2024-04-18 09:41:00.000000000 +0200 @@ -1,6 +1,6 @@ package Text::CSV_XS; -# Copyright (c) 2007-2023 H.Merijn Brand. All rights reserved. +# Copyright (c) 2007-2024 H.Merijn Brand. All rights reserved. # Copyright (c) 1998-2001 Jochen Wiedmann. All rights reserved. # Copyright (c) 1997 Alan Citterman. All rights reserved. # @@ -23,7 +23,7 @@ use Carp; use vars qw( $VERSION @ISA @EXPORT_OK %EXPORT_TAGS ); -$VERSION = "1.53"; +$VERSION = "1.54"; @ISA = qw( Exporter ); XSLoader::load ("Text::CSV_XS", $VERSION); @@ -1795,7 +1795,7 @@ =item * -The separation-, escape-, and escape- characters can be any ASCII character +The separation-, quote-, and escape character(s) can be any ASCII character in the range from C<0x20> (space) to C<0x7E> (tilde). Characters outside this range may or may not work as expected. Multibyte characters, like UTF C<U+060C> (ARABIC COMMA), C<U+FF0C> (FULLWIDTH COMMA), C<U+241B> (SYMBOL @@ -1980,6 +1980,9 @@ If this attribute is set to C<1>, any row that parses to a different number of fields than the previous row will cause the parser to throw error 2014. +Empty rows or rows that result in no fields (like comment lines) are exempt +from these checks. + =head3 skip_empty_rows X<skip_empty_rows> @@ -3983,6 +3986,22 @@ [ "1", "2" ], [ "3", "4", "5" ]] +=head3 csv +X<csv> + +The I<function> L</csv> can also be called as a method or with an existing +Text::CSV_XS object. This could help if the function is to be invoked a lot +of times and the overhead of creating the object internally over and over +again would be prevented by passing an existing instance. + + my $csv = Text::CSV_XS->new ({ binary => 1, auto_diag => 1 }); + + my $aoa = $csv->csv (in => $fh); + my $aoa = csv (in => $fh, csv => $csv); + +both act the same. Running this 20000 times on a 20 lines CSV file, showed +a 53% speedup. + =head2 Callbacks X<Callbacks> @@ -4322,21 +4341,6 @@ } ] -=item csv - -The I<function> L</csv> can also be called as a method or with an existing -Text::CSV_XS object. This could help if the function is to be invoked a lot -of times and the overhead of creating the object internally over and over -again would be prevented by passing an existing instance. - - my $csv = Text::CSV_XS->new ({ binary => 1, auto_diag => 1 }); - - my $aoa = $csv->csv (in => $fh); - my $aoa = csv (in => $fh, csv => $csv); - -both act the same. Running this 20000 times on a 20 lines CSV file, showed -a 53% speedup. - =back =head1 INTERNALS @@ -5156,7 +5160,7 @@ =head1 COPYRIGHT AND LICENSE - Copyright (C) 2007-2023 H.Merijn Brand. All rights reserved. + Copyright (C) 2007-2024 H.Merijn Brand. All rights reserved. Copyright (C) 1998-2001 Jochen Wiedmann. All rights reserved. Copyright (C) 1997 Alan Citterman. All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/CSV_XS.xs new/Text-CSV_XS-1.54/CSV_XS.xs --- old/Text-CSV_XS-1.53/CSV_XS.xs 2023-11-20 18:35:19.000000000 +0100 +++ new/Text-CSV_XS-1.54/CSV_XS.xs 2024-04-11 15:14:07.000000000 +0200 @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2023 H.Merijn Brand. All rights reserved. +/* Copyright (c) 2007-2024 H.Merijn Brand. All rights reserved. * Copyright (c) 1998-2001 Jochen Wiedmann. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. @@ -547,13 +547,23 @@ (void)memcpy (cache, csv, sizeof (csv_t)); } /* cache_set */ -#define _pretty_strl(csv) cx_pretty_str (aTHX_ csv, strlen (csv)) -#define _pretty_str(csv,xse) cx_pretty_str (aTHX_ csv, xse) +#define _pretty_strl(cp) cx_pretty_str (aTHX_ cp, strlen (cp)) +#define _pretty_str(cp,xse) cx_pretty_str (aTHX_ cp, xse) static char *cx_pretty_str (pTHX_ byte *s, STRLEN l) { SV *dsv = newSVpvs_flags ("", SVs_TEMP); return (pv_pretty (dsv, (char *)s, l, 0, NULL, NULL, (PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT))); } /* _pretty_str */ +#define _pretty_sv(cp) cx_pretty_sv (aTHX_ cp) +static char *cx_pretty_sv (pTHX_ SV *sv) { + SV *dsv = newSVpvs_flags ("", SVs_TEMP); + if (SvOK (sv) && SvPOK (sv)) { + STRLEN l; + char *s = SvPV (sv, l); + return _pretty_str (s, l); + } + return (""); + } /* _pretty_sv */ #define _cache_show_byte(trim,c) \ warn (" %-21s %02x:%3d\n", trim, c, c) @@ -584,6 +594,7 @@ _cache_show_byte ("diag_verbose", csv->diag_verbose); _cache_show_byte ("formula", csv->formula); _cache_show_byte ("strict", csv->strict); + _cache_show_byte ("strict_n", csv->strict_n); _cache_show_byte ("skip_empty_rows", csv->skip_empty_rows); _cache_show_byte ("has_error_input", csv->has_error_input); _cache_show_byte ("blank_is_undef", csv->blank_is_undef); @@ -592,6 +603,7 @@ _cache_show_byte ("keep_meta_info", csv->keep_meta_info); _cache_show_byte ("verbatim", csv->verbatim); + _cache_show_byte ("useIO", csv->useIO); _cache_show_byte ("has_hooks", csv->has_hooks); _cache_show_byte ("eol_is_cr", csv->eol_is_cr); _cache_show_byte ("eol_len", csv->eol_len); @@ -1110,9 +1122,13 @@ char *ptr2; STRLEN l; -#if MAINT_DEBUG > 4 - (void)fprintf (stderr, "# Combine:\n"); +#if MAINT_DEBUG > 6 + (void)fprintf (stderr, "# %04d Combine:\n", __LINE__); sv_dump (sv); +#else +#if MAINT_DEBUG > 4 + (void)fprintf (stderr, "# %04d Combine: '%s'\n", __LINE__, _pretty_sv (sv)); +#endif #endif for (ptr2 = ptr, l = len; l; ++ptr2, --l) { byte c = *ptr2; @@ -1252,9 +1268,13 @@ csv->tmp = result ? POPs : NULL; PUTBACK; -#if MAINT_DEBUG > 4 - (void)fprintf (stderr, "getline () returned:\n"); +#if MAINT_DEBUG > 6 + (void)fprintf (stderr, "# %04d getline () returned:\n", __LINE__); sv_dump (csv->tmp); +#else +#if MAINT_DEBUG > 4 + (void)fprintf (stderr, "# %04d getline () returned: '%s'\n", __LINE__, _pretty_sv (csv->tmp)); +#endif #endif } if (csv->tmp && SvOK (csv->tmp)) { @@ -1272,7 +1292,7 @@ } if (match) { #if MAINT_DEBUG > 4 - (void)fprintf (stderr, "# EOLX match, size: %d\n", csv->size); + (void)fprintf (stderr, "# %04d EOLX match, size: %d\n", __LINE__, csv->size); #endif csv->size -= csv->eol_len; unless (csv->verbatim) @@ -1303,14 +1323,18 @@ } #if MAINT_DEBUG > 4 -#define PUT_RPT (void)fprintf (stderr, "# CSV_PUT @ %4d: 0x%02x '%c'\n", __LINE__, c, isprint (c) ? c : '?') -#define PUT_SEPX_RPT1 (void)fprintf (stderr, "# PUT SEPX @ %4d\n", __LINE__) -#define PUT_SEPX_RPT2 (void)fprintf (stderr, "# Done putting SEPX\n") -#define PUT_QUOX_RPT1 (void)fprintf (stderr, "# PUT QUOX @ %4d\n", __LINE__) -#define PUT_QUOX_RPT2 (void)fprintf (stderr, "# Done putting QUOX\n") -#define PUT_EOLX_RPT1 (void)fprintf (stderr, "# PUT EOLX @ %4d\n", __LINE__) -#define PUT_EOLX_RPT2 (void)fprintf (stderr, "# Done putting EOLX\n") -#define PUSH_RPT (void)fprintf (stderr, "# AV_PUSHd @ %4d\n", __LINE__); sv_dump (sv) +#define PUT_RPT (void)fprintf (stderr, "# %04d CSV_PUT: 0x%02x '%c'\n", __LINE__, c, isprint (c) ? c : '?') +#define PUT_SEPX_RPT1 (void)fprintf (stderr, "# %04d PUT SEPX\n", __LINE__) +#define PUT_SEPX_RPT2 (void)fprintf (stderr, "# %04d Done putting SEPX\n") +#define PUT_QUOX_RPT1 (void)fprintf (stderr, "# %04d PUT QUOX\n", __LINE__) +#define PUT_QUOX_RPT2 (void)fprintf (stderr, "# %04d Done putting QUOX\n") +#define PUT_EOLX_RPT1 (void)fprintf (stderr, "# %04d PUT EOLX\n", __LINE__) +#define PUT_EOLX_RPT2 (void)fprintf (stderr, "# %04d Done putting EOLX\n") +#if MAINT_DEBUG > 6 +#define PUSH_RPT (void)fprintf (stderr, "# %04d AV_PUSHd\n", __LINE__); sv_dump (sv) +#else +#define PUSH_RPT (void)fprintf (stderr, "# %04d AV_PUSHd '%s'\n", __LINE__, _pretty_sv (sv)) +#endif #else #define PUT_RPT #define PUT_SEPX_RPT1 @@ -1360,9 +1384,9 @@ #if MAINT_DEBUG > 3 int CSV_GET_ (pTHX_ csv_t *csv, SV *src, int l) { int c; - (void)fprintf (stderr, "# 1-CSV_GET @ %4d: (used: %d, size: %d, eol_pos: %d, eolx = %d)\n", l, csv->used, csv->size, csv->eol_pos, csv->eolx); + (void)fprintf (stderr, "# %04d 1-CSV_GET: (used: %d, size: %d, eol_pos: %d, eolx = %d)\n", l, csv->used, csv->size, csv->eol_pos, csv->eolx); c = CSV_GET1; - (void)fprintf (stderr, "# 2-CSV_GET @ %4d: 0x%02x '%c'\n", l, c, isprint (c) ? c : '?'); + (void)fprintf (stderr, "# %04d 2-CSV_GET: 0x%02x '%c'\n", l, c, isprint (c) ? c : '?'); return (c); } /* CSV_GET_ */ #define CSV_GET CSV_GET_ (aTHX_ csv, src, __LINE__) @@ -1462,13 +1486,13 @@ #endif restart: #if MAINT_DEBUG > 9 - (void)fprintf (stderr, "# at restart: %d/%d/%03x pos %d = 0x%02x\n", - waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, c); + (void)fprintf (stderr, "# %04d at restart: %d/%d/%03x pos %d = 0x%02x\n", + __LINE__, waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, c); #endif if (is_SEP (c)) { #if MAINT_DEBUG > 1 - (void)fprintf (stderr, "# %d/%d/%03x pos %d = SEP %s\t%s\n", - waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, + (void)fprintf (stderr, "# %04d %d/%d/%03x pos %d = SEP %s\t%s\n", + __LINE__, waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, _sep_string (csv), _pretty_strl (csv->bptr + csv->used)); #endif if (waitingForField) { @@ -1502,8 +1526,8 @@ else if (is_QUOTE (c)) { #if MAINT_DEBUG > 1 - (void)fprintf (stderr, "# %d/%d/%03x pos %d = QUO '%c'\t\t%s\n", - waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, c, + (void)fprintf (stderr, "# %04d %d/%d/%03x pos %d = QUO '%c'\t\t%s\n", + __LINE__, waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, c, _pretty_strl (csv->bptr + csv->used)); #endif if (waitingForField) { @@ -1683,8 +1707,8 @@ else if (c == csv->escape_char && csv->escape_char) { #if MAINT_DEBUG > 1 - (void)fprintf (stderr, "# %d/%d/%03x pos %d = ESC '%c'\t%s\n", - waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, c, + (void)fprintf (stderr, "# %04d %d/%d/%03x pos %d = ESC '%c'\t%s\n", + __LINE__, waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, c, _pretty_strl (csv->bptr + csv->used)); #endif /* This means quote_char != escape_char */ @@ -1759,8 +1783,8 @@ if (c == CH_NL || is_EOL (c)) { EOLX: #if MAINT_DEBUG > 1 - (void)fprintf (stderr, "# %d/%d/%03x pos %d = NL\t%s\n", - waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, + (void)fprintf (stderr, "# %04d %d/%d/%03x pos %d = NL\t%s\n", + __LINE__, waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, _pretty_strl (csv->bptr + csv->used)); #endif if (fnum == 1 && f == 0 && SvCUR (sv) == 0 && csv->skip_empty_rows) { @@ -1833,8 +1857,8 @@ else if (c == CH_CR && !(csv->verbatim)) { #if MAINT_DEBUG > 1 - (void)fprintf (stderr, "# %d/%d/%03x pos %d = CR\n", - waitingForField ? 1 : 0, sv ? 1 : 0, f, spl); + (void)fprintf (stderr, "# %04d %d/%d/%03x pos %d = CR\n", + __LINE__, waitingForField ? 1 : 0, sv ? 1 : 0, f, spl); #endif if (waitingForField) { int c2; @@ -1856,8 +1880,8 @@ c = EOF; #if MAINT_DEBUG > 9 - (void)fprintf (stderr, "# (%d) ... CR EOF 0x%x\n", - seenSomething, c); + (void)fprintf (stderr, "# %04d (%d) ... CR EOF 0x%x\n", + __LINE__, seenSomething, c); #endif unless (seenSomething) break; @@ -1966,8 +1990,8 @@ } /* CH_CR */ else { #if MAINT_DEBUG > 1 - (void)fprintf (stderr, "# %d/%d/%03x pos %d = CCC '%c'\t\t%s\n", - waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, c, + (void)fprintf (stderr, "# %04d %d/%d/%03x pos %d = CCC '%c'\t\t%s\n", + __LINE__, waitingForField ? 1 : 0, sv ? 1 : 0, f, spl, c, _pretty_strl (csv->bptr + csv->used)); #endif /* Needed for non-IO parse, where EOL is not set during read */ @@ -1977,7 +2001,7 @@ (csv->used += csv->eol_len - 1)) { c = CH_EOLX; #if MAINT_DEBUG > 5 - (void)fprintf (stderr, "# -> EOLX (0x%x)\n", c); + (void)fprintf (stderr, "# %04d -> EOLX (0x%x)\n", __LINE__, c); #endif goto EOLX; } @@ -1988,19 +2012,19 @@ #if MAINT_DEBUG > 5 (void)fprintf (stderr, - "COMMENT? cl = %d, size = %d, used = %d\n", - cl, csv->size, csv->used); + "# %04d COMMENT? cl = %d, size = %d, used = %d\n", + __LINE__, cl, csv->size, csv->used); #endif if (cl == 1 || ( (csv->size - csv->used >= cl - 1 && !memcmp (csv->bptr + csv->used, csv->comment_str + 1, cl - 1) && (csv->used += cl - 1)))) { - csv->used = csv->size; - csv->fld_idx = 0; - c = CSV_GET; + csv->used = csv->size; + csv->fld_idx = csv->strict_n ? csv->strict_n - 1 : 0; + c = CSV_GET; seenSomething = FALSE; #if MAINT_DEBUG > 5 - (void)fprintf (stderr, "# COMMENT, SKIPPED\n"); + (void)fprintf (stderr, "# %04d COMMENT, SKIPPED\n", __LINE__); #endif if (c == EOF) break; @@ -2012,7 +2036,7 @@ do { c = CSV_GET; #if MAINT_DEBUG > 5 - (void)fprintf (stderr, "# WS next got (0x%x)\n", c); + (void)fprintf (stderr, "# %04d WS next got (0x%x)\n", __LINE__, c); #endif } while (is_whitespace (c)); if (c == EOF) @@ -2024,8 +2048,8 @@ } #if MAINT_DEBUG > 5 - (void)fprintf (stderr, "# %sc 0x%x is%s binary %s utf8\n", - f & CSV_FLAGS_QUO ? "quoted " : "", c, + (void)fprintf (stderr, "# %04d %sc 0x%x is%s binary %s utf8\n", + __LINE__, f & CSV_FLAGS_QUO ? "quoted " : "", c, is_csv_binary (c) ? "" : " not", csv->utf8 ? "is" : "not"); #endif @@ -2089,7 +2113,7 @@ int res; #if MAINT_DEBUG > 1 - (void)fprintf (stderr, "# HOOK %s %x\n", cb_name, av); + (void)fprintf (stderr, "# %04d HOOK %s %x\n", __LINE__, cb_name, av); #endif unless ((svp = hv_fetchs (hv, "callbacks", FALSE)) && _is_hashref (*svp)) return 0; /* uncoverable statement defensive programming */ @@ -2162,8 +2186,14 @@ (void)hv_store (hv, "_EOF", 4, &PL_sv_no, 0); if (csv.strict) { - unless (csv.strict_n) csv.strict_n = (short)csv.fld_idx; - if (csv.fld_idx != csv.strict_n) { + STRLEN nf = av_len (av); +#if MAINT_DEBUG > 6 + (void)fprintf (stderr, "# %04d Strict nf = %2d, n = %2d, idx = %2d, recno = %2d, res = %d\n", + __LINE__, nf, csv.strict_n, csv.fld_idx, csv.recno, result); +#endif + + if (nf && !csv.strict_n) csv.strict_n = (short)nf; + if (csv.strict_n > 0 && nf != csv.strict_n) { unless (csv.useIO & useIO_EOF) ParseError (&csv, 2014, csv.used); if (last_error) /* an error callback can reset and accept */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/ChangeLog new/Text-CSV_XS-1.54/ChangeLog --- old/Text-CSV_XS-1.53/ChangeLog 2023-11-22 20:30:12.000000000 +0100 +++ new/Text-CSV_XS-1.54/ChangeLog 2024-04-18 09:42:29.000000000 +0200 @@ -1,3 +1,9 @@ +1.54 - 2024-04-18, H.Merijn Brand + * Fix doc (Jean Forget, RT#150757) + * It's 2024 + * Fix comment_str with strict + * Doc fixup (RT#151546) + 1.53 - 2023-11-22, H.Merijn Brand * Two casts for -Wformat (issue 50) * Add --skip-empty to csv2xlsx diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/META.json new/Text-CSV_XS-1.54/META.json --- old/Text-CSV_XS-1.53/META.json 2023-11-23 10:19:13.000000000 +0100 +++ new/Text-CSV_XS-1.54/META.json 2024-04-18 14:09:14.000000000 +0200 @@ -1,70 +1,70 @@ { - "release_status" : "stable", + "name" : "Text-CSV_XS", + "author" : [ + "H.Merijn Brand <hmbr...@cpan.org>" + ], + "abstract" : "Comma-Separated Values manipulation routines", + "dynamic_config" : 1, + "resources" : { + "x_IRC" : "irc://irc.perl.org/#csv", + "repository" : { + "web" : "https://github.com/Tux/Text-CSV_XS", + "type" : "git", + "url" : "https://github.com/Tux/Text-CSV_XS" + }, + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Text-CSV_XS" + }, + "homepage" : "https://metacpan.org/pod/Text::CSV_XS", + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "1.54", "prereqs" : { - "configure" : { + "test" : { "requires" : { - "ExtUtils::MakeMaker" : "0" - }, + "Tie::Scalar" : "0", + "Test::More" : "0" + } + }, + "configure" : { "recommends" : { "ExtUtils::MakeMaker" : "7.70" - } }, + "requires" : { + "ExtUtils::MakeMaker" : "0" + } + }, "runtime" : { - "recommends" : { - "Encode" : "3.20" - }, "requires" : { - "IO::Handle" : "0", "perl" : "5.006001", - "XSLoader" : "0" - } - }, - "test" : { - "requires" : { - "Tie::Scalar" : "0", - "Test::More" : "0" - } + "XSLoader" : "0", + "IO::Handle" : "0" }, + "recommends" : { + "Encode" : "3.21" + } + }, "build" : { "requires" : { "Config" : "0" - } } - }, - "resources" : { - "homepage" : "https://metacpan.org/pod/Text::CSV_XS", - "bugtracker" : { - "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Text-CSV_XS" - }, - "license" : [ - "http://dev.perl.org/licenses/" - ], - "repository" : { - "url" : "https://github.com/Tux/Text-CSV_XS", - "type" : "git", - "web" : "https://github.com/Tux/Text-CSV_XS" - }, - "x_IRC" : "irc://irc.perl.org/#csv" - }, - "name" : "Text-CSV_XS", + } + }, + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : 2 + }, + "generated_by" : "Author", "provides" : { "Text::CSV_XS" : { - "version" : "1.53", + "version" : "1.54", "file" : "CSV_XS.pm" - } - }, - "abstract" : "Comma-Separated Values manipulation routines", + } + }, + "release_status" : "stable", "license" : [ "perl_5" - ], - "author" : [ - "H.Merijn Brand <hmbr...@cpan.org>" - ], - "version" : "1.53", - "generated_by" : "Author", - "dynamic_config" : 1, - "meta-spec" : { - "version" : 2, - "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec" - } - } + ] +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/META.yml new/Text-CSV_XS-1.54/META.yml --- old/Text-CSV_XS-1.53/META.yml 2023-11-23 10:19:13.000000000 +0100 +++ new/Text-CSV_XS-1.54/META.yml 2024-04-18 14:09:14.000000000 +0200 @@ -16,9 +16,9 @@ provides: Text::CSV_XS: file: CSV_XS.pm - version: '1.53' + version: '1.54' recommends: - Encode: '3.20' + Encode: '3.21' requires: IO::Handle: 0 Test::More: 0 @@ -31,4 +31,4 @@ homepage: https://metacpan.org/pod/Text::CSV_XS license: http://dev.perl.org/licenses/ repository: https://github.com/Tux/Text-CSV_XS -version: '1.53' +version: '1.54' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/Makefile.PL new/Text-CSV_XS-1.54/Makefile.PL --- old/Text-CSV_XS-1.53/Makefile.PL 2023-10-12 15:50:23.000000000 +0200 +++ new/Text-CSV_XS-1.54/Makefile.PL 2024-01-04 15:57:25.000000000 +0100 @@ -1,6 +1,6 @@ #!/usr/bin/perl -# Copyright PROCURA B.V. (c) 2006-2023 H.Merijn Brand +# Copyright PROCURA B.V. (c) 2006-2024 H.Merijn Brand require 5.006001; # <- also see postamble at the bottom for META.yml use strict; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/README new/Text-CSV_XS-1.54/README --- old/Text-CSV_XS-1.53/README 2023-05-30 17:31:32.000000000 +0200 +++ new/Text-CSV_XS-1.54/README 2024-01-04 15:57:28.000000000 +0100 @@ -19,7 +19,7 @@ That process is described in the documentation. Copying: - Copyright (c) 2007-2023 H.Merijn Brand. All rights reserved. + Copyright (c) 2007-2024 H.Merijn Brand. All rights reserved. Copyright (c) 1998-2001 Jochen Wiedmann. All rights reserved. Portions Copyright (c) 1997 Alan Citterman. All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/cpanfile new/Text-CSV_XS-1.54/cpanfile --- old/Text-CSV_XS-1.53/cpanfile 2023-11-23 10:19:13.000000000 +0100 +++ new/Text-CSV_XS-1.54/cpanfile 2024-04-18 14:09:13.000000000 +0200 @@ -1,7 +1,7 @@ requires "IO::Handle"; requires "XSLoader"; -recommends "Encode" => "3.20"; +recommends "Encode" => "3.21"; on "configure" => sub { requires "ExtUtils::MakeMaker"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/examples/csv-check new/Text-CSV_XS-1.54/examples/csv-check --- old/Text-CSV_XS-1.53/examples/csv-check 2023-01-03 13:36:46.000000000 +0100 +++ new/Text-CSV_XS-1.54/examples/csv-check 2024-01-04 15:55:56.000000000 +0100 @@ -1,7 +1,7 @@ #!/pro/bin/perl # csv-check: Check validity of CSV file and report -# (m)'20 [21 May 2020] Copyright H.M.Brand 2007-2023 +# (m)'20 [21 May 2020] Copyright H.M.Brand 2007-2024 # This code requires the defined-or feature and PerlIO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/examples/csv2xls new/Text-CSV_XS-1.54/examples/csv2xls --- old/Text-CSV_XS-1.53/examples/csv2xls 2023-11-14 13:48:22.000000000 +0100 +++ new/Text-CSV_XS-1.54/examples/csv2xls 2024-01-04 15:56:00.000000000 +0100 @@ -1,7 +1,7 @@ #!/pro/bin/perl # csv2xls: Convert csv to xls -# (m)'23 [14 Nov 2023] Copyright H.M.Brand 2007-2023 +# (m)'23 [14 Nov 2023] Copyright H.M.Brand 2007-2024 use 5.012000; use warnings; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/examples/csv2xlsx new/Text-CSV_XS-1.54/examples/csv2xlsx --- old/Text-CSV_XS-1.53/examples/csv2xlsx 2023-11-14 13:48:55.000000000 +0100 +++ new/Text-CSV_XS-1.54/examples/csv2xlsx 2024-01-04 15:56:17.000000000 +0100 @@ -1,7 +1,7 @@ #!/pro/bin/perl # csv2xlsx: Convert csv to xlsx -# (m)'23 Copyright H.M.Brand 2007-2023 +# (m)'23 Copyright H.M.Brand 2007-2024 use 5.014000; use warnings; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/examples/csvdiff new/Text-CSV_XS-1.54/examples/csvdiff --- old/Text-CSV_XS-1.53/examples/csvdiff 2023-08-07 13:57:49.000000000 +0200 +++ new/Text-CSV_XS-1.54/examples/csvdiff 2024-01-04 15:56:15.000000000 +0100 @@ -4,7 +4,7 @@ use warnings; # csvdiff: Show differences between CSV files -# (m)'23 [05 Aug 2023] Copyright H.M.Brand 2009-2023 +# (m)'23 [05 Aug 2023] Copyright H.M.Brand 2009-2024 our $VERSION = "1.03 - 20230805"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/examples/parser-xs.pl new/Text-CSV_XS-1.54/examples/parser-xs.pl --- old/Text-CSV_XS-1.53/examples/parser-xs.pl 2023-01-03 13:17:24.000000000 +0100 +++ new/Text-CSV_XS-1.54/examples/parser-xs.pl 2024-01-04 15:56:03.000000000 +0100 @@ -3,7 +3,7 @@ # This script can be used as a base to parse unreliable CSV streams # Modify to your own needs # -# (m)'08 [23 Apr 2008] Copyright H.M.Brand 2008-2023 +# (m)'08 [23 Apr 2008] Copyright H.M.Brand 2008-2024 use strict; use warnings; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/examples/rewrite.pl new/Text-CSV_XS-1.54/examples/rewrite.pl --- old/Text-CSV_XS-1.53/examples/rewrite.pl 2023-01-03 13:17:26.000000000 +0100 +++ new/Text-CSV_XS-1.54/examples/rewrite.pl 2024-01-04 15:56:06.000000000 +0100 @@ -4,7 +4,7 @@ use warnings; # rewrite.pl: Convert csv to csv -# (m)'17 [20 Sep 2017] Copyright H.M.Brand 2014-2023 +# (m)'17 [20 Sep 2017] Copyright H.M.Brand 2014-2024 our $VERSION = "0.05 - 20170920"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/examples/speed.pl new/Text-CSV_XS-1.54/examples/speed.pl --- old/Text-CSV_XS-1.53/examples/speed.pl 2023-01-03 13:17:28.000000000 +0100 +++ new/Text-CSV_XS-1.54/examples/speed.pl 2024-01-04 15:56:07.000000000 +0100 @@ -1,7 +1,7 @@ #!/usr/bin/perl -w # speed.pl: compare different versions of Text-CSV* modules -# (m)'08 [07 Apr 2008] Copyright H.M.Brand 2007-2023 +# (m)'08 [07 Apr 2008] Copyright H.M.Brand 2007-2024 require 5.006001; use strict; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/ppport.h new/Text-CSV_XS-1.54/ppport.h --- old/Text-CSV_XS-1.53/ppport.h 2023-08-07 09:06:27.000000000 +0200 +++ new/Text-CSV_XS-1.54/ppport.h 2024-01-04 10:29:29.000000000 +0100 @@ -6,7 +6,7 @@ ppport.h -- Perl/Pollution/Portability Version 3.71 - Automatically created by Devel::PPPort running under perl 5.038000. + Automatically created by Devel::PPPort running under perl 5.038002. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/t/47_comment.t new/Text-CSV_XS-1.54/t/47_comment.t --- old/Text-CSV_XS-1.53/t/47_comment.t 2023-11-20 18:39:05.000000000 +0100 +++ new/Text-CSV_XS-1.54/t/47_comment.t 2024-04-11 15:01:58.000000000 +0200 @@ -12,7 +12,7 @@ } else { require Encode; - plan tests => 61; + plan tests => 65; } require "./t/util.pl"; } @@ -56,17 +56,57 @@ } } +my $data = <<"EOC"; +id | name +# +42 | foo +# +EOC + is_deeply (csv ( - in => *DATA, + in => \$data, sep_char => "|", headers => "auto", allow_whitespace => 1, - comment_str => "#" + comment_str => "#", + strict => 0, ), [{ id => 42, name => "foo" }], "Last record is comment"); +is_deeply (csv ( + in => \$data, + sep_char => "|", + headers => "auto", + allow_whitespace => 1, + comment_str => "#", + strict => 1, + ), [{ id => 42, name => "foo" }], "Last record is comment, under strict"); + +$data .= "3\n"; +is_deeply (csv ( + in => \$data, + sep_char => "|", + headers => "auto", + allow_whitespace => 1, + comment_str => "#", + strict => 0, + ), [{ id => 42, name => "foo" }, + { id => 3, name => undef }, + ], "Valid record past comment"); +is_deeply (csv ( + in => \$data, + sep_char => "|", + headers => "auto", + allow_whitespace => 1, + comment_str => "#", + strict => 1, + auto_diag => 0, # Suppress error 2014 + ), [{ id => 42, name => "foo" }], "Invalid record past comment, under strict"); +is_deeply (csv ( + in => \"# comment\n42 | foo\n53 | bar\n", + sep_char => "|", + allow_whitespace => 1, + comment_str => "#", + strict => 1, + auto_diag => 1, + ), [[ 42, "foo" ], [ 53, "bar" ]], "Comment on first line, under strict"); 1; -__END__ -id | name -# -42 | foo -# diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Text-CSV_XS-1.53/t/80_diag.t new/Text-CSV_XS-1.54/t/80_diag.t --- old/Text-CSV_XS-1.53/t/80_diag.t 2023-09-19 10:50:39.000000000 +0200 +++ new/Text-CSV_XS-1.54/t/80_diag.t 2024-03-29 10:38:21.000000000 +0100 @@ -3,7 +3,7 @@ use strict; use warnings; - use Test::More tests => 345; + use Test::More tests => 347; #use Test::More "no_plan"; my %err;