Hello community,
here is the log from the commit of package perl-Template-Toolkit for
openSUSE:Factory checked in at 2018-11-10 17:01:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Template-Toolkit (Old)
and /work/SRC/openSUSE:Factory/.perl-Template-Toolkit.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Template-Toolkit"
Sat Nov 10 17:01:11 2018 rev:32 rq:647288 version:2.28
Changes:
--------
---
/work/SRC/openSUSE:Factory/perl-Template-Toolkit/perl-Template-Toolkit.changes
2017-05-16 14:33:46.823019270 +0200
+++
/work/SRC/openSUSE:Factory/.perl-Template-Toolkit.new/perl-Template-Toolkit.changes
2018-11-10 17:02:25.095530718 +0100
@@ -1,0 +2,91 @@
+Thu Nov 8 06:58:36 UTC 2018 - Stephan Kulow <[email protected]>
+
+- updated to 2.28
+ see /usr/share/doc/packages/perl-Template-Toolkit/Changes
+
+ * Matthew Somerville stopped a list import from printing an ARRAY(...)
string.
+ https://github.com/abw/Template2/issues/33
+
+
+ #-----------------------------------------------------------------------
+ # Unreleased
+ #------------------------------------------------------------------------
+
+ #-----------------------------------------------------------------------
+ # Version 2.28 - 11th October 2018
+ #------------------------------------------------------------------------
+
+ * Add and enable Travis CI to track GitHub Pull Requests
+
+ * Template is now using GitHub as the official Bug Tracker
+
+ * Nicolas R. fixed a circular reference in Template::Plugin::Filter
+ https://github.com/abw/Template2/issues/152
+
+ * Nicolas R. adjusted group regexes to not be greedy
+ https://github.com/abw/Template2/issues/94
+
+ * Nicolas R. added unit tests to cover regression from RT 91172
+ https://github.com/abw/Template2/issues/122
+
+ * Nicolas R. added support for template files having mtime=0
+ https://github.com/abw/Template2/issues/102
+
+ * Todd Rinaldo fixed rand calls with no args in Math plugin
+ https://github.com/abw/Template2/issues/155
+
+ * Todd Rinaldo corrected ttree 2.22 logic change
+ https://github.com/abw/Template2/issues/148
+
+ * Todd Rinaldo turned off automated testing for tests using optional modules
+ https://github.com/abw/Template2/issues/156
+
+ * Nicolas R. adjusted unit tests to not force Stash::XS
+
+ * Nicolas R. added a pre allocated buffer in Stash.xs to avoid malloc/free
+ https://github.com/abw/Template2/issues/82
+
+ * Nicolas R. optmized Template::Parser by avoiding a dummy sub
+ https://github.com/abw/Template2/issues/83
+
+ * Nicolas R. optimized Template:Directive by using index
+ https://github.com/abw/Template2/issues/84
+
+ * Nicolas R. adjust _dotop logic in Stash for perl 5.28 and earlier
+ https://github.com/abw/Template2/issues/81
+
+ * Todd Rinaldo documented VMethod method called 'item'
+ https://github.com/abw/Template2/issues/90
+
+ * Nicolas R. adjusted t/filter.t after recent switch to RFC3986
+ https://github.com/abw/Template2/issues/179
+
+ * Nicolas R. fixed warnings from t/cgi.t
+ https://github.com/abw/Template2/issues/178
+
+ * Ivan Krylov added STRICT option to ttree
+ https://github.com/abw/Template2/issues/81
+
+ * Kent Fredric fixed relative path handling in templates on Perl 5.26+
+ https://github.com/abw/Template2/issues/80
+
+ * Tom Delmas fixed some typo from documentation
+ https://github.com/abw/Template2/issues/76
+
+ * Matthew Somerville switched uri/url to use RFC3986
+ updated the documentation to match the history.
+ https://github.com/abw/Template2/issues/35
+
+ * Sebastien Deseille used remove_tree helper to remove directories
+ https://github.com/abw/Template2/issues/67
+
+ * Nick Hibma - Add Sortkeys to DUMPER_ARGS
+ https://github.com/abw/Template2/issues/64
+
+ * E. Choroba added a warn on duplicate block name
+ https://github.com/abw/Template2/issues/61
+
+ * Jason Lewis fixed some typo in ttree.pod
+ https://github.com/abw/Template2/issues/58
+
+-------------------------------------------------------------------
Old:
----
Template-Toolkit-2.27.tar.gz
New:
----
Template-Toolkit-2.28.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Template-Toolkit.spec ++++++
--- /var/tmp/diff_new_pack.C7t9tN/_old 2018-11-10 17:02:25.559530152 +0100
+++ /var/tmp/diff_new_pack.C7t9tN/_new 2018-11-10 17:02:25.559530152 +0100
@@ -1,7 +1,7 @@
#
# spec file for package perl-Template-Toolkit
#
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,19 +12,19 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
Name: perl-Template-Toolkit
-Version: 2.27
+Version: 2.28
Release: 0
%define cpan_name Template-Toolkit
Summary: Template Processing System
-License: Artistic-1.0 or GPL-1.0+
+License: Artistic-1.0 OR GPL-1.0-or-later
Group: Development/Libraries/Perl
-Url: http://search.cpan.org/dist/Template-Toolkit/
-Source0:
https://cpan.metacpan.org/authors/id/A/AB/ABW/%{cpan_name}-%{version}.tar.gz
+Url: https://metacpan.org/release/%{cpan_name}
+Source0:
https://cpan.metacpan.org/authors/id/A/AT/ATOOMIC/%{cpan_name}-%{version}.tar.gz
Source1: cpanspec.yml
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: perl
@@ -43,7 +43,7 @@
find . -type f ! -name \*.pl -print0 | xargs -0 chmod 644
%build
-%{__perl} Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}"
+perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}"
%{__make} %{?_smp_mflags}
%check
++++++ Template-Toolkit-2.27.tar.gz -> Template-Toolkit-2.28.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/Changes
new/Template-Toolkit-2.28/Changes
--- old/Template-Toolkit-2.27/Changes 2016-12-13 09:02:25.000000000 +0100
+++ new/Template-Toolkit-2.28/Changes 2018-10-12 00:46:12.000000000 +0200
@@ -10,6 +10,91 @@
#
#========================================================================
+* Matthew Somerville stopped a list import from printing an ARRAY(...) string.
+ https://github.com/abw/Template2/issues/33
+
+
+#-----------------------------------------------------------------------
+# Unreleased
+#------------------------------------------------------------------------
+
+#-----------------------------------------------------------------------
+# Version 2.28 - 11th October 2018
+#------------------------------------------------------------------------
+
+* Add and enable Travis CI to track GitHub Pull Requests
+
+* Template is now using GitHub as the official Bug Tracker
+
+* Nicolas R. fixed a circular reference in Template::Plugin::Filter
+ https://github.com/abw/Template2/issues/152
+
+* Nicolas R. adjusted group regexes to not be greedy
+ https://github.com/abw/Template2/issues/94
+
+* Nicolas R. added unit tests to cover regression from RT 91172
+ https://github.com/abw/Template2/issues/122
+
+* Nicolas R. added support for template files having mtime=0
+ https://github.com/abw/Template2/issues/102
+
+* Todd Rinaldo fixed rand calls with no args in Math plugin
+ https://github.com/abw/Template2/issues/155
+
+* Todd Rinaldo corrected ttree 2.22 logic change
+ https://github.com/abw/Template2/issues/148
+
+* Todd Rinaldo turned off automated testing for tests using optional modules
+ https://github.com/abw/Template2/issues/156
+
+* Nicolas R. adjusted unit tests to not force Stash::XS
+
+* Nicolas R. added a pre allocated buffer in Stash.xs to avoid malloc/free
+ https://github.com/abw/Template2/issues/82
+
+* Nicolas R. optmized Template::Parser by avoiding a dummy sub
+ https://github.com/abw/Template2/issues/83
+
+* Nicolas R. optimized Template:Directive by using index
+ https://github.com/abw/Template2/issues/84
+
+* Nicolas R. adjust _dotop logic in Stash for perl 5.28 and earlier
+ https://github.com/abw/Template2/issues/81
+
+* Todd Rinaldo documented VMethod method called 'item'
+ https://github.com/abw/Template2/issues/90
+
+* Nicolas R. adjusted t/filter.t after recent switch to RFC3986
+ https://github.com/abw/Template2/issues/179
+
+* Nicolas R. fixed warnings from t/cgi.t
+ https://github.com/abw/Template2/issues/178
+
+* Ivan Krylov added STRICT option to ttree
+ https://github.com/abw/Template2/issues/81
+
+* Kent Fredric fixed relative path handling in templates on Perl 5.26+
+ https://github.com/abw/Template2/issues/80
+
+* Tom Delmas fixed some typo from documentation
+ https://github.com/abw/Template2/issues/76
+
+* Matthew Somerville switched uri/url to use RFC3986
+ updated the documentation to match the history.
+ https://github.com/abw/Template2/issues/35
+
+* Sebastien Deseille used remove_tree helper to remove directories
+ https://github.com/abw/Template2/issues/67
+
+* Nick Hibma - Add Sortkeys to DUMPER_ARGS
+ https://github.com/abw/Template2/issues/64
+
+* E. Choroba added a warn on duplicate block name
+ https://github.com/abw/Template2/issues/61
+
+* Jason Lewis fixed some typo in ttree.pod
+ https://github.com/abw/Template2/issues/58
+
#-----------------------------------------------------------------------
# Version 2.27 - 13th December 2016
#------------------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/HACKING
new/Template-Toolkit-2.28/HACKING
--- old/Template-Toolkit-2.27/HACKING 2016-12-13 08:39:01.000000000 +0100
+++ new/Template-Toolkit-2.28/HACKING 2018-10-12 00:33:16.000000000 +0200
@@ -1,11 +1,11 @@
Template Toolkit
- Version 2.27
+ Version 2.28
- December 2016
+ October 2018
- Copyright (C) 1996-2016 Andy Wardley. All Rights Reserved
+ Copyright (C) 1996-2018 Andy Wardley. All Rights Reserved
This is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
@@ -48,7 +48,7 @@
COPYRIGHT
---------
-Copyright (C) 1996-2016 Andy Wardley. All Rights Reserved.
+Copyright (C) 1996-2018 Andy Wardley. All Rights Reserved.
This is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/INSTALL
new/Template-Toolkit-2.28/INSTALL
--- old/Template-Toolkit-2.27/INSTALL 2016-12-13 08:39:23.000000000 +0100
+++ new/Template-Toolkit-2.28/INSTALL 2018-10-12 00:33:16.000000000 +0200
@@ -1,11 +1,11 @@
Template Toolkit
- Version 2.27
+ Version 2.28
- December 2016
+ October 2018
- Copyright (C) 1996-2016 Andy Wardley. All Rights Reserved
+ Copyright (C) 1996-2018 Andy Wardley. All Rights Reserved
This is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
@@ -30,8 +30,8 @@
To install the Template Toolkit from the command line:
- $ tar zxf Template-Toolkit-2.27.tar.gz
- $ cd Template-Toolkit-2.27
+ $ tar zxf Template-Toolkit-2.28.tar.gz
+ $ cd Template-Toolkit-2.28
$ perl Makefile.PL
$ make
$ make test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/MANIFEST
new/Template-Toolkit-2.28/MANIFEST
--- old/Template-Toolkit-2.27/MANIFEST 2017-04-15 09:29:06.000000000 +0200
+++ new/Template-Toolkit-2.28/MANIFEST 2018-10-12 00:48:23.000000000 +0200
@@ -74,8 +74,8 @@
lib/Template/View.pm
lib/Template/VMethods.pm
Makefile.PL
-MANIFEST
-META.yml Module meta-data (added by MakeMaker)
+MANIFEST This list of files
+META.yml
parser/Grammar.pm.skel
parser/Parser.yp
parser/README
@@ -87,6 +87,7 @@
t/base.t
t/binop.t
t/block.t
+t/block_duplicate.t
t/blocks.t
t/capture.t
t/case.t
@@ -127,6 +128,8 @@
t/list.t
t/macro.t
t/math.t
+t/math_rand.t
+t/mtime-zero.t
t/object.t
t/outline.t
t/output.t
@@ -137,6 +140,7 @@
t/pod.t
t/prefix.t
t/proc.t
+t/process-relative.t
t/process.t
t/process_dir.t
t/provider.t
@@ -221,7 +225,6 @@
t/try.t
t/unicode.t
t/url.t
-t/url2.t
t/vars.t
t/varsv1.t
t/view.t
@@ -232,6 +235,8 @@
t/while.t
t/wrap.t
t/wrapper.t
+t/zz-plugin-cycle.t
+t/zz-plugin-leak-rt-46691.t
t/zz-plugin-leak.t
t/zz-pmv.t
t/zz-pod-coverage.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/META.json
new/Template-Toolkit-2.28/META.json
--- old/Template-Toolkit-2.27/META.json 2017-04-15 09:29:06.000000000 +0200
+++ new/Template-Toolkit-2.28/META.json 2018-10-12 00:48:22.000000000 +0200
@@ -4,7 +4,7 @@
"Andy Wardley <[email protected]>"
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter
version 2.133380",
+ "generated_by" : "ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter
version 2.150010",
"license" : [
"perl_5"
],
@@ -22,9 +22,7 @@
"prereqs" : {
"build" : {
"requires" : {
- "CGI" : "0",
- "ExtUtils::MakeMaker" : "0",
- "Test::LeakTrace" : "0"
+ "ExtUtils::MakeMaker" : "0"
}
},
"configure" : {
@@ -39,13 +37,26 @@
"File::Temp" : "0.12",
"Scalar::Util" : "0"
}
+ },
+ "test" : {
+ "requires" : {
+ "CGI" : "0",
+ "Test::LeakTrace" : "0"
+ }
}
},
"release_status" : "stable",
"resources" : {
+ "bugtracker" : {
+ "web" : "https://github.com/abw/Template2/issues"
+ },
+ "homepage" : "http://www.template-toolkit.org",
"repository" : {
- "url" : "https://github.com/abw/Template2"
+ "type" : "git",
+ "url" : "https://github.com/abw/Template2.git",
+ "web" : "https://github.com/abw/Template2"
}
},
- "version" : "2.27"
+ "version" : "2.28",
+ "x_serialization_backend" : "JSON::PP version 2.27400_02"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/META.yml
new/Template-Toolkit-2.28/META.yml
--- old/Template-Toolkit-2.27/META.yml 2017-04-15 09:29:06.000000000 +0200
+++ new/Template-Toolkit-2.28/META.yml 2018-10-12 00:48:22.000000000 +0200
@@ -3,27 +3,30 @@
author:
- 'Andy Wardley <[email protected]>'
build_requires:
- CGI: 0
- ExtUtils::MakeMaker: 0
- Test::LeakTrace: 0
+ CGI: '0'
+ ExtUtils::MakeMaker: '0'
+ Test::LeakTrace: '0'
configure_requires:
- ExtUtils::MakeMaker: 0
+ ExtUtils::MakeMaker: '0'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version
2.133380'
+generated_by: 'ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version
2.150010'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
- version: 1.4
+ version: '1.4'
name: Template-Toolkit
no_index:
directory:
- t
- inc
requires:
- AppConfig: 1.56
- File::Spec: 0.8
- File::Temp: 0.12
- Scalar::Util: 0
+ AppConfig: '1.56'
+ File::Spec: '0.8'
+ File::Temp: '0.12'
+ Scalar::Util: '0'
resources:
- repository: https://github.com/abw/Template2
-version: 2.27
+ bugtracker: https://github.com/abw/Template2/issues
+ homepage: http://www.template-toolkit.org
+ repository: https://github.com/abw/Template2.git
+version: '2.28'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/Makefile.PL
new/Template-Toolkit-2.28/Makefile.PL
--- old/Template-Toolkit-2.27/Makefile.PL 2016-12-13 08:36:08.000000000
+0100
+++ new/Template-Toolkit-2.28/Makefile.PL 2018-10-12 00:33:16.000000000
+0200
@@ -87,7 +87,7 @@
$TT_QUIET = 'n';
$TT_ACCEPT = 'n';
-my $DEFAULTS_FILE = '.defaults.cfg';
+my $DEFAULTS_FILE = './.defaults.cfg';
my $DEFAULTS = '';
if (-f $DEFAULTS_FILE) {
@@ -156,9 +156,16 @@
'Test::LeakTrace' => 0,
},
'META_MERGE' => {
- 'resources' => {
- 'repository' => 'https://github.com/abw/Template2',
- },
+ 'meta-spec' => { version => 2 },
+ "resources" => {
+ "bugtracker" => { web => "https://github.com/abw/Template2/issues"
},
+ "homepage" => "http://www.template-toolkit.org",
+ "repository" => {
+ "type" => "git",
+ "url" => "https://github.com/abw/Template2.git",
+ "web" => "https://github.com/abw/Template2"
+ },
+ }
},
'dist' => {
'COMPRESS' => 'gzip',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/README
new/Template-Toolkit-2.28/README
--- old/Template-Toolkit-2.27/README 2016-12-13 08:38:08.000000000 +0100
+++ new/Template-Toolkit-2.28/README 2018-10-12 00:33:16.000000000 +0200
@@ -1,11 +1,11 @@
Template Toolkit
- Version 2.27
+ Version 2.28
- December 2016
+ October 2018
- Copyright (C) 1996-2016 Andy Wardley. All Rights Reserved
+ Copyright (C) 1996-2018 Andy Wardley. All Rights Reserved
This is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
@@ -44,6 +44,9 @@
WHAT'S NEW?
-----------
+Version 2.28 is a maintenance release fixing some minor bugs and warnings.
+GitHub is now the official bug tacker tool for the project.
+
Version 2.27 is a maintenance release fixing some minor bugs and warnings.
Version 2.26 adds the new outline tag style and fixes various minor bugs.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/bin/ttree
new/Template-Toolkit-2.28/bin/ttree
--- old/Template-Toolkit-2.27/bin/ttree 2014-04-23 21:11:24.000000000 +0200
+++ new/Template-Toolkit-2.28/bin/ttree 2018-10-11 23:49:04.000000000 +0200
@@ -292,16 +292,6 @@
}
}
- # check against acceptance list
- if (@$accept) {
- unless ((-d $abspath && $recurse) || grep { $path =~ /$_/ }
@$accept) {
- printf yellow(" - %-32s (not accepted)\n"), $path
- if $verbose > 1;
- $n_skip++;
- next FILE;
- }
- }
-
if (-d $abspath) {
if ($recurse) {
my ($uid, $gid, $mode);
@@ -391,6 +381,16 @@
}
}
+ # check against acceptance list
+ if (not $copy_file and @$accept) {
+ unless (grep { $filename =~ /$_/ } @$accept) {
+ printf yellow(" - %-32s (not accepted)\n"), $file
+ if $verbose > 1;
+ $n_skip++;
+ return;
+ }
+ }
+
# stat the source file unconditionally, so we can preserve
# mode and ownership
( undef, undef, $mode, undef, $uid, $gid, undef,
@@ -632,6 +632,7 @@
'template_default|default=s',
'template_error|error=s',
'template_debug|debug=s',
+ 'template_strict|strict',
'template_start_tag|start_tag|starttag=s',
'template_end_tag|end_tag|endtag=s',
'template_tag_style|tag_style|tagstyle=s',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/Config.pm
new/Template-Toolkit-2.28/lib/Template/Config.pm
--- old/Template-Toolkit-2.27/lib/Template/Config.pm 2017-04-15
09:29:06.000000000 +0200
+++ new/Template-Toolkit-2.28/lib/Template/Config.pm 2018-10-12
00:48:18.000000000 +0200
@@ -36,7 +36,7 @@
$PLUGINS = 'Template::Plugins';
$PROVIDER = 'Template::Provider';
$SERVICE = 'Template::Service';
-$STASH = 'Template::Stash';
+$STASH = 'Template::Stash::XS';
$CONSTANTS = 'Template::Namespace::Constants';
@PRELOAD = ( $CONTEXT, $FILTERS, $ITERATOR, $PARSER,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/Context.pm
new/Template-Toolkit-2.28/lib/Template/Context.pm
--- old/Template-Toolkit-2.27/lib/Template/Context.pm 2014-04-23
21:11:24.000000000 +0200
+++ new/Template-Toolkit-2.28/lib/Template/Context.pm 2018-10-11
23:48:59.000000000 +0200
@@ -761,11 +761,11 @@
my @args = @_;
if (@args) {
- if ($args[0] =~ /^on|1$/i) {
+ if ($args[0] =~ /^(on|1)$/i) {
$self->{ DEBUG_DIRS } = 1;
shift(@args);
}
- elsif ($args[0] =~ /^off|0$/i) {
+ elsif ($args[0] =~ /^(off|0)$/i) {
$self->{ DEBUG_DIRS } = 0;
shift(@args);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/Directive.pm
new/Template-Toolkit-2.28/lib/Template/Directive.pm
--- old/Template-Toolkit-2.27/lib/Template/Directive.pm 2014-04-23
21:11:24.000000000 +0200
+++ new/Template-Toolkit-2.28/lib/Template/Directive.pm 2018-10-11
23:48:59.000000000 +0200
@@ -209,7 +209,13 @@
# handler defined?
if (@$ident > 2 && ($ns = $self->{ NAMESPACE })) {
my $key = $ident->[0];
- $key =~ s/^'(.+)'$/$1/s;
+
+ # a faster alternate to $key =~ s/^'(.+)'$/$1/s
+ if ( index( $key, q[']) == 0 ) {
+ substr( $key, 0, 1, '' );
+ substr( $key, -1, 1, '' ); # remove the last char blindly
+ }
+
if ($ns = $ns->{ $key }) {
return $ns->ident($ident);
}
@@ -679,7 +685,7 @@
};
if (\$@) {
\$_tt_error = \$context->catch(\$@, \\\$output);
- die \$_tt_error if \$_tt_error->type =~ /^return|stop\$/;
+ die \$_tt_error if \$_tt_error->type =~ /^(return|stop)\$/;
\$stash->set('error', \$_tt_error);
\$stash->set('e', \$_tt_error);
if (defined (\$_tt_handler = \$_tt_error->select_handler($handlers))) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/Filters.pm
new/Template-Toolkit-2.28/lib/Template/Filters.pm
--- old/Template-Toolkit-2.27/lib/Template/Filters.pm 2015-03-08
15:26:06.000000000 +0100
+++ new/Template-Toolkit-2.28/lib/Template/Filters.pm 2018-10-05
23:06:30.000000000 +0200
@@ -264,10 +264,10 @@
#-----------------------------------------------------------------------
our $UNSAFE_SPEC = {
- RFC2732 => q{A-Za-z0-9\-_.!~*'()},
- RFC3986 => q{A-Za-z0-9\-\._~},
+ RFC2732 => q{A-Za-z0-9\-_.~!*'()},
+ RFC3986 => q{A-Za-z0-9\-_.~},
};
-our $UNSAFE_CHARS = $UNSAFE_SPEC->{ RFC2732 };
+our $UNSAFE_CHARS = $UNSAFE_SPEC->{ RFC3986 };
our $URI_REGEX;
our $URL_REGEX;
our $URI_ESCAPES;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Template-Toolkit-2.27/lib/Template/Manual/Filters.pod
new/Template-Toolkit-2.28/lib/Template/Manual/Filters.pod
--- old/Template-Toolkit-2.27/lib/Template/Manual/Filters.pod 2014-04-23
21:11:24.000000000 +0200
+++ new/Template-Toolkit-2.28/lib/Template/Manual/Filters.pod 2018-10-05
23:06:30.000000000 +0200
@@ -262,11 +262,14 @@
fixed it in 2.16 and provided the url filter to implement the old behaviour
of not encoding reserved characters.
-As of version 2.26 of the Template Toolkit, the C<uri> and L<url> filters
+As of version 2.28 of the Template Toolkit, the C<uri> and L<url> filters
use the unsafe character set defined by RFC3986. This means that certain
-characters ("(", ")", "~", "*", "!" and the single quote "'") are now deemed
-unsafe and will be escaped as hex character sequences. The double quote
-character ('"') is now deemed safe and will not be escaped.
+characters ("(", ")", "*", "!", "'", and '"') are now deemed unsafe and
+will be escaped as hex character sequences.
+
+The ability to use the RFC3986 character set was added in 2.26 but not
+enabled by default; double quote was incorrectly deemed safe in 2.26 but
+correctly escaped in 2.27.
If you want to enable the old behaviour then call the C<use_rfc2732()>
method in L<Template::Filters>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Template-Toolkit-2.27/lib/Template/Manual/VMethods.pod
new/Template-Toolkit-2.28/lib/Template/Manual/VMethods.pod
--- old/Template-Toolkit-2.27/lib/Template/Manual/VMethods.pod 2015-03-08
15:21:11.000000000 +0100
+++ new/Template-Toolkit-2.28/lib/Template/Manual/VMethods.pod 2018-10-05
23:06:59.000000000 +0200
@@ -153,7 +153,7 @@
argument following the pattern.
[% text = 'bandanna';
- text.match('an+', 1).join(', ) # an, ann
+ text.match('an+', 1).join(', ') # an, ann
%]
=head2 repeat(n)
@@ -552,7 +552,7 @@
two = [ 4 5 6 ];
three = [ 7 8 9 ];
one.import(two, three);
- one.join(', ); # 1, 2, 3, 4, 5, 6, 7, 8, 9
+ one.join(', '); # 1, 2, 3, 4, 5, 6, 7, 8, 9
%]
=head2 merge
@@ -637,6 +637,12 @@
[% hash.1 %] # beer
[% hash.2 %] # peanuts
+=head2 item
+
+Returns an item from the list using an index passed as an argument.
+
+ [% list.item(0) %] # same as list.0
+
=head1 Automagic Promotion of Scalar to List for Virtual Methods
In addition to the scalar virtual methods listed in the previous
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/Parser.pm
new/Template-Toolkit-2.28/lib/Template/Parser.pm
--- old/Template-Toolkit-2.27/lib/Template/Parser.pm 2014-04-25
12:42:50.000000000 +0200
+++ new/Template-Toolkit-2.28/lib/Template/Parser.pm 2018-10-09
20:57:13.000000000 +0200
@@ -744,6 +744,8 @@
$self->debug("compiled block '$name':\n$block")
if $self->{ DEBUG } & Template::Constants::DEBUG_PARSER;
+ warn "Block redefined: $name\n" if exists $defblock->{ $name };
+
$defblock->{ $name } = $block;
return undef;
@@ -952,22 +954,27 @@
or $status = ACCEPT;
# use dummy sub if code ref doesn't exist
- $code = sub { $_[1] }
- unless $code;
-
- @codevars = $len
- ? map { $_->[1] } @$stack[ -$len .. -1 ]
- : ();
+ if ( !$code ) {
+ $coderet = $len ? $stack->[ -$len ]->[1] : undef;
+ } else {
+ # $code = sub { $_[1] }
+ # unless $code;
+
+ @codevars = $len
+ ? map { $_->[1] } @$stack[ -$len .. -1 ]
+ : ();
- eval {
- $coderet = &$code( $self, @codevars );
- };
- if ($@) {
- my $err = $@;
- chomp $err;
- return $self->_parse_error($err);
+ eval {
+ $coderet = &$code( $self, @codevars );
+ };
+ if ($@) {
+ my $err = $@;
+ chomp $err;
+ return $self->_parse_error($err);
+ }
}
+
# reduce stack by $len
splice(@$stack, -$len, $len);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/Plugin/Dumper.pm
new/Template-Toolkit-2.28/lib/Template/Plugin/Dumper.pm
--- old/Template-Toolkit-2.27/lib/Template/Plugin/Dumper.pm 2014-04-23
21:11:24.000000000 +0200
+++ new/Template-Toolkit-2.28/lib/Template/Plugin/Dumper.pm 2018-10-05
23:06:30.000000000 +0200
@@ -27,7 +27,7 @@
our $VERSION = 2.70;
our $DEBUG = 0 unless defined $DEBUG;
our @DUMPER_ARGS = qw( Indent Pad Varname Purity Useqq Terse Freezer
- Toaster Deepcopy Quotekeys Bless Maxdepth );
+ Toaster Deepcopy Quotekeys Bless Maxdepth Sortkeys );
our $AUTOLOAD;
#==============================================================================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/Plugin/Filter.pm
new/Template-Toolkit-2.28/lib/Template/Plugin/Filter.pm
--- old/Template-Toolkit-2.27/lib/Template/Plugin/Filter.pm 2014-04-24
08:59:12.000000000 +0200
+++ new/Template-Toolkit-2.28/lib/Template/Plugin/Filter.pm 2018-10-11
23:49:04.000000000 +0200
@@ -64,14 +64,8 @@
my $self = shift;
my $this = $self;
- # This causes problems: https://rt.cpan.org/Ticket/Display.html?id=46691
- # If the plugin is loaded twice in different templates (one INCLUDEd into
- # another) then the filter gets garbage collected when the inner template
- # ends (at least, I think that's what's happening). So I'm going to take
- # the "suck it and see" approach, comment it out, and wait for someone to
- # complain that this module is leaking memory.
-
- # weaken($this);
+ # avoid a memory leak
+ weaken( $this->{_CONTEXT} ) if ref $this->{_CONTEXT};
if ($self->{ _DYNAMIC }) {
return [ sub {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/Plugin/Math.pm
new/Template-Toolkit-2.28/lib/Template/Plugin/Math.pm
--- old/Template-Toolkit-2.27/lib/Template/Plugin/Math.pm 2014-04-23
21:11:24.000000000 +0200
+++ new/Template-Toolkit-2.28/lib/Template/Plugin/Math.pm 2018-10-09
20:57:13.000000000 +0200
@@ -52,10 +52,10 @@
sub int { shift; CORE::int($_[0]); }
sub log { shift; CORE::log($_[0]); }
sub oct { shift; CORE::oct($_[0]); }
-sub rand { shift; CORE::rand($_[0]); }
+sub rand { shift; @_ ? CORE::rand($_[0]) : CORE::rand(); }
sub sin { shift; CORE::sin($_[0]); }
sub sqrt { shift; CORE::sqrt($_[0]); }
-sub srand { shift; CORE::srand($_[0]); }
+sub srand { shift; @_ ? CORE::srand($_[0]) : CORE::srand(); }
# Use the Math::TrulyRandom module
# XXX This is *sloooooooowwwwwwww*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/Provider.pm
new/Template-Toolkit-2.28/lib/Template/Provider.pm
--- old/Template-Toolkit-2.27/lib/Template/Provider.pm 2014-04-23
21:11:24.000000000 +0200
+++ new/Template-Toolkit-2.28/lib/Template/Provider.pm 2018-10-11
23:48:59.000000000 +0200
@@ -212,7 +212,7 @@
foreach my $dir (@$paths) {
$path = File::Spec->catfile($dir, $name);
last INCPATH
- if $self->_template_modified($path);
+ if defined $self->_template_modified($path);
}
undef $path; # not found
}
@@ -562,13 +562,29 @@
sub _load_compiled {
my ($self, $file) = @_;
+
+ # Implicitly Relative paths are not supported
+ # by "require" and invoke @INC traversal, where relative
+ # paths only traditionally worked prior to Perl 5.26
+ # due to the presence of '.' in @INC
+ #
+ # Given load_compiled never wants to traverse @INC, forcing
+ # an absolute path for the loaded file and the INC key is
+ # sensible.
+ #
+ # NB: %INC Keys are always identical to their respective
+ # "require" invocations regardless of OS, and the only time
+ # one needs to care about slash direction is when dealing
+ # with Module::Name -> Module/Name.pm translation.
+ my $fpath = File::Spec->rel2abs( $file );
+
my $compiled;
# load compiled template via require(); we zap any
# %INC entry to ensure it is reloaded (we don't
# want 1 returned by require() to say it's in memory)
- delete $INC{ $file };
- eval { $compiled = require $file; };
+ delete $INC{ $fpath };
+ eval { $compiled = require $fpath; };
return $@
? $self->error("compiled template $compiled: $@")
: $compiled;
@@ -627,7 +643,7 @@
}
# Otherwise, it's the name of the template
- if ( $self->_template_modified( $name ) ) { # does template exist?
+ if ( defined $self->_template_modified( $name ) ) { # does template exist?
my ($text, $error, $mtime ) = $self->_template_content( $name );
unless ( $error ) {
$text = $self->_decode_unicode($text) if $self->{ UNICODE };
@@ -845,7 +861,7 @@
$parsedoc->{ METADATA } = {
'name' => $data->{ name },
- 'modtime' => $data->{ time },
+ 'modtime' => $data->{ 'time' },
%{ $parsedoc->{ METADATA } },
};
@@ -871,13 +887,13 @@
# set atime and mtime of newly compiled file, don't bother
# if time is undef
- if (!defined($error) && defined $data->{ time }) {
+ if (!defined($error) && defined $data->{ 'time' }) {
my ($cfile) = $compfile =~ /^(.+)$/s or do {
return("invalid filename: $compfile",
Template::Constants::STATUS_ERROR);
};
- my ($ctime) = $data->{ time } =~ /^(\d+)$/;
+ my ($ctime) = $data->{ 'time' } =~ /^(\d+)$/;
unless ($ctime || $ctime eq 0) {
return("invalid time: $ctime",
Template::Constants::STATUS_ERROR);
@@ -915,9 +931,15 @@
sub _compiled_is_current {
my ( $self, $template_name ) = @_;
- my $compiled_name = $self->_compiled_filename($template_name) || return;
- my $compiled_mtime = (stat($compiled_name))[9] || return;
- my $template_mtime = $self->_template_modified( $template_name ) ||
return;
+
+ my $compiled_name = $self->_compiled_filename($template_name);
+ return unless defined $compiled_name;
+
+ my $compiled_mtime = (stat($compiled_name))[9];
+ return unless defined $compiled_mtime;
+
+ my $template_mtime = $self->_template_modified( $template_name );
+ return unless defined $template_mtime;
# This was >= in the 2.15, but meant that downgrading
# a source template would not get picked up.
@@ -992,8 +1014,8 @@
sub _modified {
my ($self, $name, $time) = @_;
- my $load = $self->_template_modified($name)
- || return $time ? 1 : 0;
+ my $load = $self->_template_modified($name);
+ return $time ? 1 : 0 unless defined $load;
return $time
? $load > $time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/Stash.pm
new/Template-Toolkit-2.28/lib/Template/Stash.pm
--- old/Template-Toolkit-2.27/lib/Template/Stash.pm 2015-03-08
15:21:11.000000000 +0100
+++ new/Template-Toolkit-2.28/lib/Template/Stash.pm 2018-10-11
23:48:59.000000000 +0200
@@ -75,13 +75,13 @@
my $op;
$type = lc $type;
- if ($type =~ /^scalar|item$/) {
+ if ($type =~ /^(scalar|item)$/) {
$op = $SCALAR_OPS;
}
elsif ($type eq 'hash') {
$op = $HASH_OPS;
}
- elsif ($type =~ /^list|array$/) {
+ elsif ($type =~ /^(list|array)$/) {
$op = $LIST_OPS;
}
else {
@@ -497,7 +497,9 @@
# real throwing
my $class = ref($root) || $root;
- die $@ if ref($@) || ($@ !~ /Can't locate object method
"\Q$item\E" via package "\Q$class\E"/);
+
+ # Fail only if the function exists
+ die $@ if ( ref($@) || $root->can($item) );
# failed to call object method, so try some fallbacks
if (reftype $root eq 'HASH') {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template/VMethods.pm
new/Template-Toolkit-2.28/lib/Template/VMethods.pm
--- old/Template-Toolkit-2.27/lib/Template/VMethods.pm 2015-03-08
15:21:11.000000000 +0100
+++ new/Template-Toolkit-2.28/lib/Template/VMethods.pm 2018-10-05
23:06:30.000000000 +0200
@@ -616,7 +616,7 @@
sub list_import {
my $list = shift;
push(@$list, grep defined, map ref eq 'ARRAY' ? @$_ : undef, @_);
- return $list;
+ return '';
}
sub list_merge {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/lib/Template.pm
new/Template-Toolkit-2.28/lib/Template.pm
--- old/Template-Toolkit-2.27/lib/Template.pm 2016-12-13 08:36:47.000000000
+0100
+++ new/Template-Toolkit-2.28/lib/Template.pm 2018-10-12 00:33:16.000000000
+0200
@@ -32,7 +32,7 @@
use File::Path;
use Scalar::Util qw(blessed);
-our $VERSION = '2.27';
+our $VERSION = '2.28';
our $ERROR = '';
our $DEBUG = 0;
our $BINMODE = 0 unless defined $BINMODE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/block_duplicate.t
new/Template-Toolkit-2.28/t/block_duplicate.t
--- old/Template-Toolkit-2.27/t/block_duplicate.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Template-Toolkit-2.28/t/block_duplicate.t 2018-10-05
23:06:30.000000000 +0200
@@ -0,0 +1,24 @@
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+
+use Template;
+
+my $warning_seen;
+local $SIG{__WARN__} = sub {
+ my @warnings = @_;
+ if ($warnings[0] =~ /Block redefined: b1/) {
+ ++$warning_seen;
+ } else {
+ die "Unexpected warning: ", @warnings;
+ }
+};
+
+my $t = Template->new;
+$t->process(\ << '__TEMPLATE__', {}, \ my $ignore_output);
+[% BLOCK b1 %]first[% END %]
+[% BLOCK b1 %]second[% END %]
+__TEMPLATE__
+
+is $warning_seen, 1, 'warning seen';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/cgi.t
new/Template-Toolkit-2.28/t/cgi.t
--- old/Template-Toolkit-2.27/t/cgi.t 2014-04-24 09:11:42.000000000 +0200
+++ new/Template-Toolkit-2.28/t/cgi.t 2018-10-05 23:59:31.000000000 +0200
@@ -13,7 +13,7 @@
# under the same terms as Perl itself.
#
# $Id$
-#
+#
#========================================================================
use strict;
@@ -31,46 +31,50 @@
skip_all("no CGI module");
}
-
my $cgi = CGI->new('');
-$cgi = join("\n", $cgi->checkbox_group(
- -name => 'words',
- -values => [ 'eenie', 'meenie', 'minie', 'moe' ],
- -defaults => [ 'eenie', 'meenie' ],
-));
+$cgi = join(
+ "\n",
+ $cgi->checkbox_group(
+ -name => 'words',
+ -values => [ 'eenie', 'meenie', 'minie', 'moe' ],
+ -defaults => [ 'eenie', 'meenie' ],
+ )
+);
-
-test_expect(\*DATA, undef, { cgicheck => $cgi, barf => \&barf });
+test_expect( \*DATA, undef, { cgicheck => $cgi, barf => \&barf } );
sub barf {
carp('failed');
}
-
__END__
-- test --
+[% USE scalar -%]
[% USE cgi = CGI('id=abw&name=Andy+Wardley'); global.cgi = cgi -%]
-name: [% global.cgi.param('name') %]
+name: [% global.cgi.scalar.param('name') %]
-- expect --
name: Andy Wardley
-- test --
-name: [% global.cgi.param('name') %]
+[% USE scalar -%]
+name: [% global.cgi.scalar.param('name') %]
-- expect --
name: Andy Wardley
-- test --
+[% USE scalar -%]
[% FOREACH key = global.cgi.param.sort -%]
- * [% key %] : [% global.cgi.param(key) %]
+ * [% key %] : [% global.cgi.scalar.param(key) %]
[% END %]
-- expect --
* id : abw
* name : Andy Wardley
-- test --
+[% USE scalar -%]
[% FOREACH key = global.cgi.param().sort -%]
- * [% key %] : [% global.cgi.param(key) %]
+ * [% key %] : [% global.cgi.scalar.param(key) %]
[% END %]
-- expect --
* id : abw
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/filter.t
new/Template-Toolkit-2.28/t/filter.t
--- old/Template-Toolkit-2.27/t/filter.t 2014-05-12 14:38:16.000000000
+0200
+++ new/Template-Toolkit-2.28/t/filter.t 2018-10-09 20:57:08.000000000
+0200
@@ -945,12 +945,12 @@
-- test --
[% "foo(bar)" | uri %]
-- expect --
-foo(bar)
+foo%28bar%29
-- test --
[% "foo(bar)" | url %]
-- expect --
-foo(bar)
+foo%28bar%29
-- test --
[% use_rfc3986;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/math_rand.t
new/Template-Toolkit-2.28/t/math_rand.t
--- old/Template-Toolkit-2.27/t/math_rand.t 1970-01-01 01:00:00.000000000
+0100
+++ new/Template-Toolkit-2.28/t/math_rand.t 2018-10-09 20:57:13.000000000
+0200
@@ -0,0 +1,19 @@
+use strict;
+use Test::More;
+use Template;
+
+plan tests => 1;
+
+my @warnings;
+local $SIG{__WARN__} = sub { push @warnings, @_ };
+my $t = Template->new;
+my $out;
+$t->process(\<<EOF, {}, \$out) or die $t->error;
+[% USE Math -%]
+rand with arg: [% Math.rand(1000000) %]
+rand without arg: [% Math.rand %]
+srand with arg: [% Math.srand(1000000) %]
+srand without arg: [% Math.srand %]
+EOF
+#diag $out;
+is_deeply \@warnings, [], 'No warnings when calling rand/srand without arg';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/mtime-zero.t
new/Template-Toolkit-2.28/t/mtime-zero.t
--- old/Template-Toolkit-2.27/t/mtime-zero.t 1970-01-01 01:00:00.000000000
+0100
+++ new/Template-Toolkit-2.28/t/mtime-zero.t 2018-10-11 23:48:59.000000000
+0200
@@ -0,0 +1,45 @@
+#============================================================= -*-perl-*-
+#
+# t/mtime-zero.t
+#
+# Test template process with . in INCLUDE_PATH
+#
+# Written by Nicolas R. <[email protected]>
+#
+# Copyright (C) 2018 cPanel Inc. All Rights Reserved.
+#
+# This is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+# $Id$
+#
+#========================================================================
+
+use strict;
+use warnings;
+
+use Template;
+
+use File::Temp qw(tempfile tempdir);
+
+use Test::More tests => 4;
+
+my $content = "hello, world\n";
+
+my ( $tmpfh, $tmpfile ) = tempfile( UNLINK => 1 );
+print $tmpfh $content;
+close $tmpfh or die $!;
+
+{
+ my $out;
+ ok( Template->new( { ABSOLUTE => 1 } )->process( $tmpfile, {}, \$out ),
"process tmpfile" );
+ is( $out, $content, "content as expected" );
+}
+
+{
+ utime 0, 0, $tmpfile or die $!;
+
+ my $out;
+ ok( Template->new( { ABSOLUTE => 1 } )->process( $tmpfile, {}, \$out ),
"process tmpfile [utime=0]" );
+ is( $out, $content, "content as expected [utime=0]" );
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/process-relative.t
new/Template-Toolkit-2.28/t/process-relative.t
--- old/Template-Toolkit-2.27/t/process-relative.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Template-Toolkit-2.28/t/process-relative.t 2018-10-11
23:48:59.000000000 +0200
@@ -0,0 +1,77 @@
+#============================================================= -*-perl-*-
+#
+# t/process-relative.t
+#
+# Test template process with . in INCLUDE_PATH
+#
+# Written by Nicolas R. <[email protected]>
+#
+# Copyright (C) 2018 cPanel Inc. All Rights Reserved.
+#
+# This is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+# $Id$
+#
+#========================================================================
+
+use strict;
+use lib qw( ./lib ../lib );
+use Template;
+
+#use Template::Test;
+
+use Test::More tests => 8;
+
+#$Template::Test::DEBUG = 0;
+#$Template::Context::DEBUG = 1;
+
+my $template_file = q[t/test/dir/file1];
+
+plan( skip_all => "File $template_file missing" ) unless -e $template_file;
+
+foreach my $f ( $template_file, "./$template_file" ) {
+ note "processing $f with INCLUDE_PATH='.' ; RELATIVE => 1";
+ my $out;
+ Template->new( { INCLUDE_PATH => ".", RELATIVE => 1 } )->process( $f,
undef, \$out );
+ is $out => q[This is file 1], "process file $f";
+}
+
+foreach my $f ( $template_file, "./$template_file" ) {
+ note "processing $f with RELATIVE => 1";
+ my $out;
+ Template->new( { RELATIVE => 1 } )->process( $f, undef, \$out );
+ is $out => q[This is file 1], "process file $f";
+}
+
+{
+ my $f = $template_file;
+ note "processing $f with INCLUDE_PATH='.'";
+ my $out;
+ Template->new( { INCLUDE_PATH => "." } )->process( $f, undef, \$out );
+ is $out => q[This is file 1], "process file $f";
+}
+
+{
+ my $f = "./$template_file";
+ note "processing $f with INCLUDE_PATH='.'";
+ my $out;
+ Template->new( { INCLUDE_PATH => "." } )->process( $f, undef, \$out );
+ is $out => undef, "process file $f fails without setting RELATIVE";
+}
+
+{
+ my $out;
+ my $f = $template_file;
+ note "processing $f without INCLUDE_PATH set";
+ Template->new()->process( $f, undef, \$out );
+ is $out => q[This is file 1], "process file $f";
+}
+
+{
+ my $out;
+ my $f = "./$template_file";
+ note "processing $f without INCLUDE_PATH set";
+ Template->new()->process( $f, undef, \$out );
+ is $out => undef, "process file $f";
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/process_dir.t
new/Template-Toolkit-2.28/t/process_dir.t
--- old/Template-Toolkit-2.27/t/process_dir.t 2014-04-24 09:11:42.000000000
+0200
+++ new/Template-Toolkit-2.28/t/process_dir.t 2018-10-09 20:57:09.000000000
+0200
@@ -21,11 +21,12 @@
use Template;
use Test::More;
+use File::Path qw (remove_tree);
my $testdir = 'testdir';
my $CACHEDIR = 'ttcache';
-`rm -rf $CACHEDIR $testdir`;
+remove_tree("$CACHEDIR", "$testdir");
my $config = {COMPILE_DIR => $CACHEDIR};
my $tt1 = Template->new($config);
@@ -38,7 +39,7 @@
my $expected1 = "file error - $testdir: not found";
-my $expected2 = "file error - ./$testdir: not a file";
+my $expected2 = $^O ne 'MSWin32' ? "file error - ./$testdir: not a file" :
"file error - $testdir: not a file";
my $expected3 = <<'EOF';
This is the first test
@@ -77,4 +78,4 @@
done_testing();
-`rm -rf $CACHEDIR $testdir`;
+remove_tree("$CACHEDIR", "$testdir");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/stash-xs-unicode.t
new/Template-Toolkit-2.28/t/stash-xs-unicode.t
--- old/Template-Toolkit-2.27/t/stash-xs-unicode.t 2014-04-24
09:11:42.000000000 +0200
+++ new/Template-Toolkit-2.28/t/stash-xs-unicode.t 2018-10-09
20:57:13.000000000 +0200
@@ -20,6 +20,7 @@
use utf8;
use Template;
use Template::Test;
+use Template::Config;
BEGIN {
unless ($] > 5.007) {
@@ -27,17 +28,14 @@
}
}
-eval {
- require Template::Stash::XS;
-};
-if ($@) {
- warn $@;
- skip_all('cannot load Template::Stash::XS');
+# only run the test when compiled with Template::Stash
+if ( $Template::Config::STASH ne 'Template::Stash::XS' ) {
+ skip_all('Template::Config is not using Template::Stash::XS');
}
-binmode STDOUT, ':utf8';
+require Template::Stash::XS;
-$Template::Config::STASH = 'Template::Stash::XS';
+binmode STDOUT, ':utf8';
my $data = {
ascii => 'key',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/stash-xs.t
new/Template-Toolkit-2.28/t/stash-xs.t
--- old/Template-Toolkit-2.27/t/stash-xs.t 2014-04-24 09:11:42.000000000
+0200
+++ new/Template-Toolkit-2.28/t/stash-xs.t 2018-10-09 20:57:13.000000000
+0200
@@ -20,15 +20,14 @@
use Template::Constants qw( :status );
use Template;
use Template::Test;
+use Template::Config;
-eval {
- require Template::Stash::XS;
-};
-if ($@) {
- warn $@;
- skip_all('cannot load Template::Stash::XS');
+# only run the test when compiled with Template::Stash
+if ( $Template::Config::STASH ne 'Template::Stash::XS' ) {
+ skip_all('Template::Config is not using Template::Stash::XS');
}
+require Template::Stash::XS;
#------------------------------------------------------------------------
# define some simple objects for testing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/tiedhash.t
new/Template-Toolkit-2.28/t/tiedhash.t
--- old/Template-Toolkit-2.27/t/tiedhash.t 2014-04-24 09:11:42.000000000
+0200
+++ new/Template-Toolkit-2.28/t/tiedhash.t 2018-10-09 20:57:13.000000000
+0200
@@ -18,24 +18,22 @@
use strict;
use warnings;
+# should not prove be responsible for this?
use lib qw( blib/lib blib/arch lib ../blib/lib ../blib/arch ../lib );
use Template::Test;
use Template::Stash;
+use Template::Config;
+
our $DEBUG = grep(/-d/, @ARGV);
+our $STORE_PREFIX = '';
+our $FETCH_PREFIX = '';
-eval {
- require Template::Stash::XS;
-};
-if ($@) {
- warn $@;
- skip_all('cannot load Template::Stash::XS');
+# only run the test when compiled with Template::Stash
+if ( $Template::Config::STASH ne 'Template::Stash::XS' ) {
+ skip_all('Template::Config is not using Template::Stash::XS');
}
-#print "stash: $Template::Config::STASH\n";
-#$Template::Config::STASH = 'Template::Stash::XS';
-
-our $STORE_PREFIX = '';
-our $FETCH_PREFIX = '';
+require Template::Stash::XS;
#------------------------------------------------------------------------
package My::Tied::Hash;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/vmethods/list.t
new/Template-Toolkit-2.28/t/vmethods/list.t
--- old/Template-Toolkit-2.27/t/vmethods/list.t 2015-03-08 15:21:11.000000000
+0100
+++ new/Template-Toolkit-2.28/t/vmethods/list.t 2018-10-09 20:57:09.000000000
+0200
@@ -286,7 +286,8 @@
-- name list import one --
[% list_one = [ 1 2 3 ];
list_two = [ 4 5 6 ];
- list_one.import(list_two).join(', ') %]
+ list_one.import(list_two);
+ list_one.join(', ') %]
-- expect --
1, 2, 3, 4, 5, 6
@@ -295,7 +296,8 @@
[% list_one = [ 1 2 3 ];
list_two = [ 4 5 6 ];
list_three = [ 7 8 9 0 ];
- list_one.import(list_two, list_three).join(', ') %]
+ list_one.import(list_two, list_three);
+ list_one.join(', ') %]
-- expect --
1, 2, 3, 4, 5, 6, 7, 8, 9, 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/zz-plugin-cycle.t
new/Template-Toolkit-2.28/t/zz-plugin-cycle.t
--- old/Template-Toolkit-2.27/t/zz-plugin-cycle.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Template-Toolkit-2.28/t/zz-plugin-cycle.t 2018-10-11
23:49:04.000000000 +0200
@@ -0,0 +1,57 @@
+#============================================================= -*-perl-*-
+#
+# t/zz-plugin-cycle.t
+#
+# Check for memory leak when using Template::Plugin::Simple
+#
+# Written by Nicolas R. <[email protected]>
+#
+# Copyright (C) 2018 cPanel Inc. All Rights Reserved.
+#
+# This is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+#========================================================================
+
+use strict;
+use lib qw( t/lib ./lib ../lib ../blib/arch );
+
+use Template;
+use Template::Plugin::Simple;
+
+use Test::More;
+
+plan( skip_all => "Developer test" ) unless ( $ENV{AUTOMATED_TESTING} or
$ENV{RELEASE_TESTING} );
+
+plan tests => 1;
+
+#use Test::LeakTrace;
+eval { require Test::LeakTrace };
+if ($@) {
+ skip_all('Test::LeakTrace not installed');
+}
+
+note "Searching for leak using Test::LeakTrace...";
+
+my $no_leaks = Test::LeakTrace::no_leaks_ok( \&plugin_simple_test, 'no leak
from Template::Plugin' );
+
+if ( !$no_leaks ) {
+ diag "Memory leak detected...";
+
+ if ( eval { require Devel::Cycle; 1 } ) {
+ Devel::Cycle::find_cycle( plugin_simple_test() );
+ }
+ else {
+ diag "consider installing Devel::Cycle to detect leak";
+ }
+}
+
+exit;
+
+sub plugin_simple_test {
+ my $tpl = Template->new( PLUGIN_BASE => 'test' );
+ $tpl->context->plugin( 'Simple', [] );
+
+ return $tpl;
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/zz-plugin-leak-rt-46691.t
new/Template-Toolkit-2.28/t/zz-plugin-leak-rt-46691.t
--- old/Template-Toolkit-2.27/t/zz-plugin-leak-rt-46691.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Template-Toolkit-2.28/t/zz-plugin-leak-rt-46691.t 2018-10-11
23:49:04.000000000 +0200
@@ -0,0 +1,127 @@
+#!/usr/bin/perl
+
+#============================================================= -*-perl-*-
+#
+# t/zz-plugin-leak-rt-46691.t
+#
+# Testcase from RT #46691 aka GH #144
+# view https://github.com/abw/Template2/issues/144
+#
+# Written by Nicolas R. <[email protected]>
+#
+# Copyright (C) 2018 cPanel Inc. All Rights Reserved.
+#
+# This is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+#========================================================================
+
+use lib qw( t/lib ./lib ../lib ../blib/arch ./test );
+
+use Template;
+use Test::More;
+
+use File::Temp qw(tempfile tempdir);
+
+plan( skip_all => "Developer test only - set RELEASE_TESTING=1" ) unless (
$ENV{AUTOMATED_TESTING} or $ENV{RELEASE_TESTING} );
+
+plan tests => 2;
+
+# ------- t1.txt - checkleak template
+my $t1 = <<'EOT';
+[% USE checkleak %]
+test 1: [% name | checkleak %]
+[% INCLUDE t2.txt %]
+test 3: [% name3 | checkleak %]
+EOT
+
+# ------- t2.txt - an included template
+my $t2 = <<'EOT';
+[% USE checkleak %]
+test 2: [% name2 | checkleak %]
+EOT
+
+# ------- checkleak.pm a super checkleak custom filter
+my $plugin_checkleak = <<'EOT';
+
+package Template::Plugin::checkleak;
+
+use Template::Plugin::Filter;
+use base qw( Template::Plugin::Filter );
+
+no warnings;
+
+sub filter {
+ my ($self, $text, $args, $conf) = @_;
+ return qq|**|.$text.qq|**|;
+}
+
+sub init {
+ my $self = shift;
+ $self->{'_DYNAMIC'}=1;
+ my $name = $self->{ _CONFIG }->{ name } || 'checkleak';
+ $self->install_filter($name);
+ return $self;
+}
+
+1;
+EOT
+
+my $template_tmpdir = tempdir( CLEANUP => 1 );
+
+write_text( qq[$template_tmpdir/t1.txt], $t1 );
+write_text( qq[$template_tmpdir/t2.txt], $t2 );
+
+my $plugindir = tempdir( CLEANUP => 1 );
+
+my $plugin_pm = qq[$plugindir/Template/Plugin/checkleak.pm];
+
+# pretty ugly but only run by authors...
+mkdir("$plugindir/Template") && mkdir("$plugindir/Template/Plugin");
+die q[Failed to create plugindir] unless -d "$plugindir/Template/Plugin";
+
+write_text( $plugin_pm, $plugin_checkleak );
+
+unshift @INC, $plugindir;
+ok eval { do $plugin_pm; 1 }, "can load Template::Plugin::checkleak"
+ or die "Failed to load Template::Plugin::checkleak - $@";
+
+# chdir to our temporary folder with templates
+chdir($template_tmpdir) or die;
+
+my $tt = Template->new( { 'PLUGIN_BASE' => $plugindir } );
+
+my $out;
+$tt->process(
+ 't1.txt',
+ {
+ 'name' => 'jason',
+ 'name2' => 'fred',
+ 'name3' => 'jim',
+ },
+ \$out
+) || print STDERR $tt->error();
+
+# make sure we can process the template without any issues
+# the original bug was doing a weaken on the plugin itself..
+# resulting in not being able to load it a second time
+is $out, <<'EXPECT', "Template processed correctly using Plugin checkleak
twice";
+
+test 1: **jason**
+
+test 2: **fred**
+
+test 3: **jim**
+EXPECT
+
+done_testing;
+
+exit;
+
+sub write_text { # could also use File::Slurper::write_file ....
+ my ( $file, $content ) = @_;
+
+ open( my $fh, '>', $file ) or die $!;
+ print {$fh} $content;
+ close($fh);
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/zz-pod-coverage.t
new/Template-Toolkit-2.28/t/zz-pod-coverage.t
--- old/Template-Toolkit-2.27/t/zz-pod-coverage.t 2014-04-24
09:11:42.000000000 +0200
+++ new/Template-Toolkit-2.28/t/zz-pod-coverage.t 2018-10-09
20:57:13.000000000 +0200
@@ -20,7 +20,7 @@
plan( skip_all => "Author tests not required for installation" )
unless $ENV{ RELEASE_TESTING }
- or $ENV{ AUTOMATED_TESTING };
+ or $ENV{ AUTHOR_TESTING };
eval "use Test::Pod::Coverage 1.00";
plan skip_all => "Test::Pod::Coverage 1.00 required for testing POD coverage"
if $@;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/zz-pod-kwalitee.t
new/Template-Toolkit-2.28/t/zz-pod-kwalitee.t
--- old/Template-Toolkit-2.27/t/zz-pod-kwalitee.t 2014-04-24
09:11:42.000000000 +0200
+++ new/Template-Toolkit-2.28/t/zz-pod-kwalitee.t 2018-10-09
20:57:13.000000000 +0200
@@ -20,7 +20,7 @@
plan( skip_all => "Author tests not required for installation" )
unless $ENV{ RELEASE_TESTING }
- or $ENV{ AUTOMATED_TESTING };
+ or $ENV{ AUTHOR_TESTING };
eval "use Test::Pod 1.00";
plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/t/zz-stash-xs-leak.t
new/Template-Toolkit-2.28/t/zz-stash-xs-leak.t
--- old/Template-Toolkit-2.27/t/zz-stash-xs-leak.t 2014-04-24
11:34:15.000000000 +0200
+++ new/Template-Toolkit-2.28/t/zz-stash-xs-leak.t 2018-10-09
20:57:13.000000000 +0200
@@ -18,6 +18,8 @@
use lib qw( ./lib ../lib ../blib/lib ../blib/arch ./blib/lib ./blib/arch );
use Template::Constants qw( :status );
use Template;
+use Template::Config;
+
use Test::More;
# belt and braces
@@ -29,6 +31,11 @@
plan( skip_all => "Developer tests not required for installation" );
}
+# only run the test when compiled with Template::Stash
+if ( $Template::Config::STASH ne 'Template::Stash::XS' ) {
+ skip_all('Template::Config is not using Template::Stash::XS');
+}
+
require Template::Stash::XS;
my $stash = Template::Stash::XS->new( { x => 10, y => { } } );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Template-Toolkit-2.27/xs/Stash.xs
new/Template-Toolkit-2.28/xs/Stash.xs
--- old/Template-Toolkit-2.27/xs/Stash.xs 2014-05-12 14:25:10.000000000
+0200
+++ new/Template-Toolkit-2.28/xs/Stash.xs 2018-10-09 20:57:13.000000000
+0200
@@ -100,9 +100,13 @@
static SV* scalar_dot_defined(pTHX_ SV*, AV*);
static SV* scalar_dot_length(pTHX_ SV*, AV*);
+#if PERL_VERSION >= 19
+
#define THROW_SIZE 64
static char throw_fmt[] = "Can't locate object method \"%s\" via package
\"%s\"";
+#endif
+
/* dispatch table for XS versions of special "virtual methods",
* names must be in alphabetical order
*/
@@ -342,7 +346,9 @@
SPAGAIN;
if (SvTRUE(ERRSV)) {
+#if PERL_VERSION >= 19
char throw_str[THROW_SIZE+1];
+#endif
(void) POPs; /* remove undef from stack */
PUTBACK;
result = NULL;
@@ -365,10 +371,17 @@
* to fit into throw_str then snprintf() doesn't add
the
* terminating NULL
*/
+#if PERL_VERSION >= 19
snprintf(throw_str, THROW_SIZE, throw_fmt, item,
HvNAME(stash));
throw_str[THROW_SIZE] = '\0';
-
- if (! strstr( SvPV(ERRSV, PL_na), throw_str))
+#endif
+ if (
+#if PERL_VERSION >= 19
+ ! strstr( SvPV(ERRSV, PL_na), throw_str)
+#else
+ ! strstr( SvPV(ERRSV, PL_na), "Undefined
subroutine")
+#endif
+ )
die_object(aTHX_ ERRSV);
}
} else {
@@ -758,15 +771,21 @@
return root;
}
-
+#define TT_BUFF_SIZE 64
/* return [ map { s/\(.*$//; ($_, 0) } split(/\./, $str) ];
*/
static AV *convert_dotted_string(pTHX_ const char *str, I32 len) {
+ char prealloc[64]; /* small pre allocated buffer */
AV *av = newAV();
char *buf, *b;
int b_len = 0;
- New(0, buf, len + 1, char);
+ if ( len + 1 < TT_BUFF_SIZE ) { /* use the pre allocated buffer */
+ buf = prealloc;
+ } else { /* need a malloc */
+ New(0, buf, len + 1, char);
+ }
+
if (!buf)
croak(TT_STASH_PKG ": New() failed for convert_dotted_string");
@@ -786,7 +805,8 @@
}
}
- Safefree(buf);
+ if (buf != prealloc) Safefree(buf);
+
return (AV *) sv_2mortal((SV *) av);
}