openSUSE Commits
Threads by month
- ----- 2024 -----
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
March 2019
- 1 participants
- 2391 discussions
Hello community,
here is the log from the commit of package perl-Cpanel-JSON-XS for openSUSE:Factory checked in at 2019-03-29 20:42:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Cpanel-JSON-XS (Old)
and /work/SRC/openSUSE:Factory/.perl-Cpanel-JSON-XS.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Cpanel-JSON-XS"
Fri Mar 29 20:42:56 2019 rev:18 rq:689724 version:4.11
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Cpanel-JSON-XS/perl-Cpanel-JSON-XS.changes 2019-03-22 15:08:54.185414808 +0100
+++ /work/SRC/openSUSE:Factory/.perl-Cpanel-JSON-XS.new.25356/perl-Cpanel-JSON-XS.changes 2019-03-29 20:42:58.674677667 +0100
@@ -1,0 +2,11 @@
+Wed Mar 27 06:07:16 UTC 2019 - Stephan Kulow <coolo(a)suse.com>
+
+- updated to 4.11
+ see /usr/share/doc/packages/perl-Cpanel-JSON-XS/Changes
+
+ 4.11 2019-03-26 (rurban)
+ - Fix unicode strings with BOM corrupt ->utf8 state (#125)
+ The BOM encoding effects only its very own decode call,
+ not its object.
+
+-------------------------------------------------------------------
Old:
----
Cpanel-JSON-XS-4.10.tar.gz
New:
----
Cpanel-JSON-XS-4.11.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Cpanel-JSON-XS.spec ++++++
--- /var/tmp/diff_new_pack.aIGRdK/_old 2019-03-29 20:42:59.150677652 +0100
+++ /var/tmp/diff_new_pack.aIGRdK/_new 2019-03-29 20:42:59.150677652 +0100
@@ -17,7 +17,7 @@
Name: perl-Cpanel-JSON-XS
-Version: 4.10
+Version: 4.11
Release: 0
%define cpan_name Cpanel-JSON-XS
Summary: CPanel fork of JSON::XS, fast and correct serializing
++++++ Cpanel-JSON-XS-4.10.tar.gz -> Cpanel-JSON-XS-4.11.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cpanel-JSON-XS-4.10/Changes new/Cpanel-JSON-XS-4.11/Changes
--- old/Cpanel-JSON-XS-4.10/Changes 2019-03-18 08:47:57.000000000 +0100
+++ new/Cpanel-JSON-XS-4.11/Changes 2019-03-26 17:45:45.000000000 +0100
@@ -2,6 +2,11 @@
TODO: http://stevehanov.ca/blog/index.php?id=104 compression
+4.11 2019-03-26 (rurban)
+ - Fix unicode strings with BOM corrupt ->utf8 state (#125)
+ The BOM encoding effects only its very own decode call,
+ not its object.
+
4.10 2019-03-18 (rurban)
- Fix incr_text refcounts (#123)
- Add incr_rest testcase (#123)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cpanel-JSON-XS-4.10/META.json new/Cpanel-JSON-XS-4.11/META.json
--- old/Cpanel-JSON-XS-4.10/META.json 2019-03-18 08:49:05.000000000 +0100
+++ new/Cpanel-JSON-XS-4.11/META.json 2019-03-26 17:46:03.000000000 +0100
@@ -4,7 +4,7 @@
"Reini Urban <rurban(a)cpan.org>"
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 8.3506, CPAN::Meta::Converter version 2.150010",
+ "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",
"license" : [
"perl_5"
],
@@ -48,30 +48,32 @@
"url" : "https://github.com/rurban/Cpanel-JSON-XS"
}
},
- "version" : "4.10",
+ "version" : "4.11",
"x_contributors" : [
"Ashley Willis <ashleyw(a)cpan.org>",
- "Daniel Dragan <bulk88(a)hotmail.com>",
+ "Chip Salzenberg <chip(a)pobox.com>",
+ "Christopher J. Madsen <cjm(a)cjmweb.net>",
"Colin Kuskie <colink(a)perldreamer.com>",
+ "Daniel Dragan <bulk88(a)hotmail.com>",
"David Golden <xdg(a)xdg.me>",
"David Steinbrunner <dsteinbrunner(a)pobox.com>",
+ "E. Choroba <choroba(a)users.noreply.github.com>",
"Gianni Ceccarelli <gianni.ceccarelli(a)net-a-porter.com>",
"Gilmar Santos Jr <jgasjr(a)gmail.com>",
"Graham Knop <haarg(a)haarg.org>",
- "Chip Salzenberg <chip(a)pobox.com>",
- "Christopher J. Madsen <cjm(a)cjmweb.net>",
+ "James Rouzier <rouzier(a)gmail.com>",
"J. Nick Koston <nick(a)cpanel.net>",
"Karen Etheridge <ether(a)cpan.org>",
"Lubomir Rintel <lkundrak(a)v3.sk>",
- "Marc Lehmann <schmorp(a)schmorp.de>",
+ "Lukas Mai <l.mai(a)web.de>",
"Matthew Horsfall <wolfsage(a)gmail.com>",
"Michael G. Schwern <schwern(a)pobox.com>",
"Pali <pali(a)cpan.org>",
"Patrick Cronin <PatrickCronin(a)users.noreply.github.com>",
"Quim Rovira <quim(a)rovira.cat>",
- "Reini Urban <rurban(a)cpan.org>",
"Sergey Aleynikov <sergey.aleynikov(a)gmail.com>",
- "Syohei Yoshida <syohex(a)gmail.com>"
+ "Syohei Yoshida <syohex(a)gmail.com>",
+ "tevfik1903 <tevfik1903(a)users.noreply.github.com>"
],
- "x_serialization_backend" : "JSON::PP version 2.97001_04"
+ "x_serialization_backend" : "JSON::PP version 2.97001"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cpanel-JSON-XS-4.10/META.yml new/Cpanel-JSON-XS-4.11/META.yml
--- old/Cpanel-JSON-XS-4.10/META.yml 2019-03-18 08:49:05.000000000 +0100
+++ new/Cpanel-JSON-XS-4.11/META.yml 2019-03-26 17:46:03.000000000 +0100
@@ -7,7 +7,7 @@
configure_requires:
ExtUtils::MakeMaker: '0'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 8.3506, CPAN::Meta::Converter version 2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -23,28 +23,30 @@
bugtracker: https://github.com/rurban/Cpanel-JSON-XS/issues
license: http://dev.perl.org/licenses/
repository: https://github.com/rurban/Cpanel-JSON-XS
-version: '4.10'
+version: '4.11'
x_contributors:
- 'Ashley Willis <ashleyw(a)cpan.org>'
- - 'Daniel Dragan <bulk88(a)hotmail.com>'
+ - 'Chip Salzenberg <chip(a)pobox.com>'
+ - 'Christopher J. Madsen <cjm(a)cjmweb.net>'
- 'Colin Kuskie <colink(a)perldreamer.com>'
+ - 'Daniel Dragan <bulk88(a)hotmail.com>'
- 'David Golden <xdg(a)xdg.me>'
- 'David Steinbrunner <dsteinbrunner(a)pobox.com>'
+ - 'E. Choroba <choroba(a)users.noreply.github.com>'
- 'Gianni Ceccarelli <gianni.ceccarelli(a)net-a-porter.com>'
- 'Gilmar Santos Jr <jgasjr(a)gmail.com>'
- 'Graham Knop <haarg(a)haarg.org>'
- - 'Chip Salzenberg <chip(a)pobox.com>'
- - 'Christopher J. Madsen <cjm(a)cjmweb.net>'
+ - 'James Rouzier <rouzier(a)gmail.com>'
- 'J. Nick Koston <nick(a)cpanel.net>'
- 'Karen Etheridge <ether(a)cpan.org>'
- 'Lubomir Rintel <lkundrak(a)v3.sk>'
- - 'Marc Lehmann <schmorp(a)schmorp.de>'
+ - 'Lukas Mai <l.mai(a)web.de>'
- 'Matthew Horsfall <wolfsage(a)gmail.com>'
- 'Michael G. Schwern <schwern(a)pobox.com>'
- 'Pali <pali(a)cpan.org>'
- 'Patrick Cronin <PatrickCronin(a)users.noreply.github.com>'
- 'Quim Rovira <quim(a)rovira.cat>'
- - 'Reini Urban <rurban(a)cpan.org>'
- 'Sergey Aleynikov <sergey.aleynikov(a)gmail.com>'
- 'Syohei Yoshida <syohex(a)gmail.com>'
+ - 'tevfik1903 <tevfik1903(a)users.noreply.github.com>'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cpanel-JSON-XS-4.10/Makefile.PL new/Cpanel-JSON-XS-4.11/Makefile.PL
--- old/Cpanel-JSON-XS-4.10/Makefile.PL 2018-08-22 18:42:09.000000000 +0200
+++ new/Cpanel-JSON-XS-4.11/Makefile.PL 2019-03-26 17:45:45.000000000 +0100
@@ -98,27 +98,29 @@
},
x_contributors => [
'Ashley Willis <ashleyw(a)cpan.org>',
- 'Daniel Dragan <bulk88(a)hotmail.com>',
+ 'Chip Salzenberg <chip(a)pobox.com>',
+ 'Christopher J. Madsen <cjm(a)cjmweb.net>',
'Colin Kuskie <colink(a)perldreamer.com>',
+ 'Daniel Dragan <bulk88(a)hotmail.com>',
'David Golden <xdg(a)xdg.me>',
'David Steinbrunner <dsteinbrunner(a)pobox.com>',
+ 'E. Choroba <choroba(a)users.noreply.github.com>',
'Gianni Ceccarelli <gianni.ceccarelli(a)net-a-porter.com>',
'Gilmar Santos Jr <jgasjr(a)gmail.com>',
'Graham Knop <haarg(a)haarg.org>',
- 'Chip Salzenberg <chip(a)pobox.com>',
- 'Christopher J. Madsen <cjm(a)cjmweb.net>',
+ 'James Rouzier <rouzier(a)gmail.com>',
'J. Nick Koston <nick(a)cpanel.net>',
'Karen Etheridge <ether(a)cpan.org>',
'Lubomir Rintel <lkundrak(a)v3.sk>',
- 'Marc Lehmann <schmorp(a)schmorp.de>',
+ 'Lukas Mai <l.mai(a)web.de>',
'Matthew Horsfall <wolfsage(a)gmail.com>',
'Michael G. Schwern <schwern(a)pobox.com>',
'Pali <pali(a)cpan.org>',
'Patrick Cronin <PatrickCronin(a)users.noreply.github.com>',
'Quim Rovira <quim(a)rovira.cat>',
- 'Reini Urban <rurban(a)cpan.org>',
'Sergey Aleynikov <sergey.aleynikov(a)gmail.com>',
'Syohei Yoshida <syohex(a)gmail.com>',
+ 'tevfik1903 <tevfik1903(a)users.noreply.github.com>',
],
}
) : ()),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cpanel-JSON-XS-4.10/README new/Cpanel-JSON-XS-4.11/README
--- old/Cpanel-JSON-XS-4.10/README 2019-03-18 08:49:08.000000000 +0100
+++ new/Cpanel-JSON-XS-4.11/README 2019-03-26 17:46:04.000000000 +0100
@@ -105,7 +105,7 @@
represent the same number are here treated as numbers, not strings.
Cpanel::JSON::XS is a bit slower, but preserves numeric types better.
- - numbers ending with .0 stay numbers, are not converted to integers.
+ - numbers ending with .0 stray numbers, are not converted to integers.
[#63] dual-vars which are represented as number not integer (42+"bar" !=
5.8.9) are now encoded as number (=> 42.0) because internally it's now a
NOK type. However !!1 which is wrongly encoded in 5.8 as "1"/1.0 is
@@ -1206,6 +1206,9 @@
Detect all unicode Byte Order Marks on decode. Which are UTF-8,
UTF-16LE, UTF-16BE, UTF-32LE and UTF-32BE.
+ The BOM encoding is set only for one specific decode call, it does not
+ change the state of the JSON object.
+
Warning: With perls older than 5.20 you need load the Encode module
before loading a multibyte BOM, i.e. >= UTF-16. Otherwise an error is
thrown. This is an implementation limitation and might get fixed later.
@@ -2019,14 +2022,14 @@
be fixed swiftly, though.
Since the JSON::XS author refuses to use a public bugtracker and prefers
- private emails, we've setup a tracker at RT, so you might want to report
- any issues twice. Once in private to MLEHMANN to be fixed in JSON::XS
- and one to our the public tracker. Issues fixed by JSON::XS with a new
- release will also be backported to Cpanel::JSON::XS and 5.6.2, as long
- as cPanel relies on 5.6.2 and Cpanel::JSON::XS as our serializer of
- choice.
+ private emails, we use the tracker at github, so you might want to
+ report any issues twice. Once in private to MLEHMANN to be fixed in
+ JSON::XS and one to our the public tracker. Issues fixed by JSON::XS
+ with a new release will also be backported to Cpanel::JSON::XS and
+ 5.6.2, as long as cPanel relies on 5.6.2 and Cpanel::JSON::XS as our
+ serializer of choice.
- <https://rt.cpan.org/Public/Dist/Display.html?Queue=Cpanel-JSON-XS>
+ <https://github.com/rurban/Cpanel-JSON-XS/issues>
LICENSE
This module is available under the same licences as perl, the Artistic
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cpanel-JSON-XS-4.10/SIGNATURE new/Cpanel-JSON-XS-4.11/SIGNATURE
--- old/Cpanel-JSON-XS-4.10/SIGNATURE 2019-03-18 08:49:08.000000000 +0100
+++ new/Cpanel-JSON-XS-4.11/SIGNATURE 2019-03-26 17:46:04.000000000 +0100
@@ -12,24 +12,24 @@
not run its Makefile.PL or Build.PL.
-----BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA512
+Hash: SHA256
SHA256 0abb585f231403618cae65047cfb3910d018ec83951b2bc14dcef5cbc77d1151 .appveyor.yml
SHA256 797abf38891d61e631374ccba78b2a8a707901227012c59372f5a9b2bc867188 .travis.yml
SHA256 8de3540a3cd7ecc9a9dcb48975fe852c082fe17d4462f87bb72aa7cc47f083ad COPYING
-SHA256 d0fb74795b89f0f60cd24c12a94bfbc8e3d2a56fad32d7091b91bce21316ab72 Changes
+SHA256 194bdaafc23d7c8590d6a79fa97313e53ac77aee75b0596a8090653677f4450a Changes
SHA256 04d51042e2091c8c1f22252efa7e11322d2f6c4dc60c5145aec77e2969f506c8 MANIFEST
-SHA256 27346ea551ba6d65ce3b6d2f740bbc1b18cfc4100ca76d9fefb721d01d1c8e20 META.json
-SHA256 c5c808a568fa2ff95e873833320b24a9a8c92e7d644482b9b3b3306ab3761326 META.yml
-SHA256 d718ee16b2c401c39ce7e2aa2262d4950498879764e060506ed8d667d0a4b798 Makefile.PL
-SHA256 599983808ff085fb2e2ec6021e56bac1ffddf315cefb1450e5d58e7687d793a9 README
-SHA256 377a81926fccc1a7a9a8a35ee2988cbcd6239b8bab741c45696ab8c981b56a68 XS.pm
-SHA256 ca5cb63280ef9427d62f39511917690389700af4d4524f79513738befbc37135 XS.xs
+SHA256 29bb695600128a2b4e927f9bf58be012ab01f5456dc79d9ced2a026467a0a0bc META.json
+SHA256 75d7364940bfec9c29f0fee8e91f43d3cf72f7797c46752676dce75565d0ff7d META.yml
+SHA256 0161feeade3462743c01c6f1ed7d0d3d2ed0ab2dfe12e77b3b72370df52f636f Makefile.PL
+SHA256 b1cc0c54dd2c73af4788751d29ff2106a05462f75fa533d823f24eadbe8ce5bd README
+SHA256 a95c7358e91f96db3af82280ff64c9ce65313ebf156b7c4095d03f8f429f53d2 XS.pm
+SHA256 4302048fb353ea21ef4394b795f6bc3ce7f1b45db525a25a0cdbde5e46f29369 XS.xs
SHA256 c95e4b970183cbd6d1ec9c88c37a80f12bd2b66ed6be3c008ffd578d2f622c01 XS/Boolean.pm
SHA256 f9a40fece0783df5c1d1d3d6f2586e61689b0445dcf10bba2916553c29d5f490 XS/Type.pm
SHA256 2f34a530b7ce981b0df9aacd2b6944ccf74c4a7f8bb49fde57b342663e7feb26 bin/cpanel_json_xs
SHA256 0d188abe82c2270e7bc5fc21de1d8210bfc52118a834b22592781bb2879a6065 eg/bench
-SHA256 d9bb17ea9bb54f1062d44f52aa88180737fde99b3e4258df9777bbcdc9a63ddd ppport.h
+SHA256 3290077eba2e57ff1d2bf46c2a7d34a3b9c7f9b24fe517a3943430f5720da95f ppport.h
SHA256 8bd5ef4d15ed3a9b2e641cc04549d6eed1532c86bba907e2b035d80c8dd5ac2c t/00_load.t
SHA256 07c0d02dcabd1d0996e6ab852df867fe7f91d551579832760262f586b56a1808 t/01_utf8.t
SHA256 d2ec342bd9183411689ae9fee51b4e6730f6e5dce95f49cb59b4b38237337f1e t/02_error.t
@@ -74,7 +74,7 @@
SHA256 b35b52310a4c3edfcb2653f681aa7a42712cf93a0a8d66729544996bdcf9ce06 t/25_boolean.t
SHA256 25d388275acde51b3d768b80c7a4b03d47988cc3919c81aa71b657250b5d4099 t/26_duplicate.t
SHA256 03a2061b4742ea591961a4ce7403feac91998c0909dbde982c465ce3d2c39706 t/30_jsonspec.t
-SHA256 f31d07044b924b28a1329f9eac213ad903ec4b8bb6eda095a609cb8c87870439 t/31_bom.t
+SHA256 cf2181a691d5e1862d71e4e902928a0d899b9671e3633584efa8ae3f5cc0d174 t/31_bom.t
SHA256 59c743137453c8c4e9e785a15dcd057b0209d5ce160d683d7ab416dc37a92b6d t/52_object.t
SHA256 3b9ce402e2d0cae8a525df4beca05f2656ba5cf02b074d02fd690fe97773d2d7 t/53_readonly.t
SHA256 949e22de3e54ca7624cea2610a26c0b4697040ea5113fdca3b77564d90f82e24 t/54_stringify.t
@@ -437,12 +437,12 @@
SHA256 aca6f846869ab2e4881e807739086e1535b1438bd0e23d7a021360742736a6a9 xt/pod.t
-----BEGIN PGP SIGNATURE-----
-iQEzBAEBCgAdFiEEKJWogdNCcPq/6PdHtPYzOeZdZBQFAlyPTXIACgkQtPYzOeZd
-ZBQ2Awf/ZxPvzIhafA9258hDm/ocKiMtJqrmqOkkVpYCfi5537XYWwj0zgkWHdva
-Pi/ADvePTy8nPRGb/Ko9tiZS/bku6RQ7dQbWuZqjCHYOOO5GC9WZSTFFingxSkRU
-x2HE5GtfKWEqQ7n2PYNr+fFxXxa2Nvu3yAsCdr+1mVu0wu012kmee4wVm8AcrLLU
-8CjV1gEPAlvNVUEeG9FF4MlfyrynETnzVgE2E5a5wUxFubZTL/tQ8qeWaOdmmoRf
-hDR3xgtB3n5k9yZ2QfMz4S/IjjEo+FX9+pehqwcm3jlh6qEplJbrR/xkyyF9SGae
-TatfnmOPFtqvq5bGcGowHVBECOe3Ww==
-=L7NV
+iQEzBAEBCAAdFiEEKJWogdNCcPq/6PdHtPYzOeZdZBQFAlyaV0sACgkQtPYzOeZd
+ZBQ6OggAqdANm+uvP0K7E6lCDNM6ZrPy00fowN5s3Vjkv+nya8BRMlDx4RMhNoRc
+Qqxm+dMq99zPEmXVhwdgFSmkvPAXDYcXi2byYCapkbYM1diULOn6jWgYSBb3+1P6
+i37ZMMfCywy/6CHQbz/oH+yJG3/v0PiwTl4OvMV+ODKIuUhQALoeBI5Oo05HSya8
++NJEiIudy/AfauqE9auB5ZBqsc4CbgKNzB3CADr0OqltWT1TEZ1LkBQb5AFFqRk8
+U01/CRNDxPNgW5a1/JrYfzUgp1eI/1aDXda02gL4oNfzYDxln30lVO8MM5U1gQAa
+Q4bOGHPGL3UYpCsVXVLmwUMwfz1q1Q==
+=/CPf
-----END PGP SIGNATURE-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cpanel-JSON-XS-4.10/XS.pm new/Cpanel-JSON-XS-4.11/XS.pm
--- old/Cpanel-JSON-XS-4.10/XS.pm 2019-03-10 12:01:16.000000000 +0100
+++ new/Cpanel-JSON-XS-4.11/XS.pm 2019-03-26 17:45:45.000000000 +0100
@@ -1,5 +1,5 @@
package Cpanel::JSON::XS;
-our $VERSION = '4.10';
+our $VERSION = '4.11';
our $XS_VERSION = $VERSION;
# $VERSION = eval $VERSION;
@@ -118,7 +118,7 @@
strings. Cpanel::JSON::XS is a bit slower, but preserves numeric
types better.
-- numbers ending with .0 stay numbers, are not converted to
+- numbers ending with .0 stray numbers, are not converted to
integers. [#63] dual-vars which are represented as number not
integer (42+"bar" != 5.8.9) are now encoded as number (=> 42.0)
because internally it's now a NOK type. However !!1 which is
@@ -191,7 +191,7 @@
decode_json(, allow_nonref) arg.
relaxed implements allow_dupkeys.
-- support all 5 unicode BOM's: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE,
+- support all 5 unicode L<BOM|/BOM>'s: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE,
UTF-32BE, encoding internally to UTF-8.
=cut
@@ -1358,6 +1358,9 @@
Detect all unicode B<Byte Order Marks> on decode.
Which are UTF-8, UTF-16LE, UTF-16BE, UTF-32LE and UTF-32BE.
+The BOM encoding is set only for one specific decode call, it does not
+change the state of the JSON object.
+
B<Warning>: With perls older than 5.20 you need load the Encode module
before loading a multibyte BOM, i.e. >= UTF-16. Otherwise an error is
thrown. This is an implementation limitation and might get fixed later.
@@ -2220,14 +2223,14 @@
be fixed swiftly, though.
Since the JSON::XS author refuses to use a public bugtracker and
-prefers private emails, we've setup a tracker at RT, so you might want
+prefers private emails, we use the tracker at B<github>, so you might want
to report any issues twice. Once in private to MLEHMANN to be fixed in
JSON::XS and one to our the public tracker. Issues fixed by JSON::XS
with a new release will also be backported to Cpanel::JSON::XS and
5.6.2, as long as cPanel relies on 5.6.2 and Cpanel::JSON::XS as our
serializer of choice.
-L<https://rt.cpan.org/Public/Dist/Display.html?Queue=Cpanel-JSON-XS>
+L<https://github.com/rurban/Cpanel-JSON-XS/issues>
=head1 LICENSE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cpanel-JSON-XS-4.10/XS.xs new/Cpanel-JSON-XS-4.11/XS.xs
--- old/Cpanel-JSON-XS-4.10/XS.xs 2019-03-18 08:35:37.000000000 +0100
+++ new/Cpanel-JSON-XS-4.11/XS.xs 2019-03-26 17:45:45.000000000 +0100
@@ -3745,12 +3745,12 @@
NOT add a byte order mark to the beginning of a JSON text",
"implementations (...) MAY ignore the presence of a byte order
mark rather than treating it as an error". */
- if (UNLIKELY(len > 2 && SvPOK(string))) {
+ if (UNLIKELY(len > 2 && SvPOK(string) && !json->incr_pos)) {
U8 *s = (U8*)SvPVX (string);
if (*s >= 0xEF) {
if (len >= 3 && memEQc(s, UTF8BOM)) {
+ converted = 1 + (json->flags & F_UTF8);
json->flags |= F_UTF8;
- converted++;
offset = 3;
SvPV_set(string, SvPVX_mutable (string) + 3);
SvCUR_set(string, len - 3);
@@ -3758,22 +3758,22 @@
/* omitting the endian name will skip the BOM in the result */
} else if (len >= 4 && memEQc(s, UTF32BOM)) {
string = decode_bom(aTHX_ "UTF-32", string, 4);
+ converted = 1 + (json->flags & F_UTF8);
json->flags |= F_UTF8;
- converted++;
} else if (memEQc(s, UTF16BOM)) {
string = decode_bom(aTHX_ "UTF-16", string, 2);
+ converted = 1 + (json->flags & F_UTF8);
json->flags |= F_UTF8;
- converted++;
} else if (memEQc(s, UTF16BOM_BE)) {
string = decode_bom(aTHX_ "UTF-16", string, 2);
+ converted = 1 + (json->flags & F_UTF8);
json->flags |= F_UTF8;
- converted++;
}
} else if (UNLIKELY(len >= 4 && !*s && memEQc(s, UTF32BOM_BE))) {
string = decode_bom(aTHX_ "UTF-32", string, 4);
+ converted = 1 + (json->flags & F_UTF8);
json->flags |= F_UTF8;
- converted++;
- }
+ }
}
if (LIKELY(!converted)) {
@@ -3850,6 +3850,8 @@
if (!(dec.json.flags & F_ALLOW_NONREF) && json_nonref(aTHX_ sv))
croak ("JSON text must be an object or array (but found number, string, true, false or null, use allow_nonref to allow this)");
+ if (UNLIKELY(converted && !(converted - 1))) /* with BOM, and UTF8 was not set */
+ json->flags &= ~F_UTF8;
return sv_2mortal (sv);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cpanel-JSON-XS-4.10/ppport.h new/Cpanel-JSON-XS-4.11/ppport.h
--- old/Cpanel-JSON-XS-4.10/ppport.h 2018-01-30 14:18:43.000000000 +0100
+++ new/Cpanel-JSON-XS-4.11/ppport.h 2019-03-26 17:45:45.000000000 +0100
@@ -1,3 +1,4 @@
+
#if 0
<<'SKIP';
#endif
@@ -4590,14 +4591,16 @@
# undef isPRINT
# endif
-#ifdef HAS_QUAD
-# ifdef U64TYPE
-# define WIDEST_UTYPE U64TYPE
+#ifndef WIDEST_UTYPE
+# ifdef QUADKIND
+# ifdef U64TYPE
+# define WIDEST_UTYPE U64TYPE
+# else
+# define WIDEST_UTYPE Quad_t
+# endif
# else
-# define WIDEST_UTYPE Quad_t
+# define WIDEST_UTYPE U32
# endif
-#else
-# define WIDEST_UTYPE U32
#endif
#ifndef isALNUMC
# define isALNUMC(c) (isALPHA(c) || isDIGIT(c))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cpanel-JSON-XS-4.10/t/31_bom.t new/Cpanel-JSON-XS-4.11/t/31_bom.t
--- old/Cpanel-JSON-XS-4.10/t/31_bom.t 2018-01-30 14:18:43.000000000 +0100
+++ new/Cpanel-JSON-XS-4.11/t/31_bom.t 2019-03-26 17:45:45.000000000 +0100
@@ -2,10 +2,12 @@
#
# https://tools.ietf.org/html/rfc7159#section-8.1
# JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32.
-use Test::More ($] >= 5.008) ? (tests => 5) : (skip_all => "needs 5.8");;
+use Test::More ($] >= 5.008) ? (tests => 9) : (skip_all => "needs 5.8");;
use Cpanel::JSON::XS;
use Encode; # Currently required for <5.20
+use charnames qw(:short);
use utf8;
+
my $json = Cpanel::JSON::XS->new->utf8->allow_nonref;
# parser need to succeed, result should be valid
@@ -28,3 +30,14 @@
for my $bom (@bom) {
y_pass(@$bom);
}
+
+# [GH #125] BOM in the middle corrupts state, sets utf8 flag
+my $j = Cpanel::JSON::XS->new;
+
+ok(my $as_json = eval {
+ $j->encode({ example => "data with non-ASCII characters",
+ unicode => "\N{greek:Sigma}" })
+}, 'can encode a basic structure');
+ok(eval { $j->decode($as_json) }, 'can decode again');
+ok(eval { $j->decode("\x{feff}" . $as_json) }, 'can decode with BOM');
+ok(eval { $j->decode($as_json) }, 'can decode original');
1
0
Hello community,
here is the log from the commit of package edgar for openSUSE:Factory checked in at 2019-03-29 20:42:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/edgar (Old)
and /work/SRC/openSUSE:Factory/.edgar.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "edgar"
Fri Mar 29 20:42:50 2019 rev:12 rq:689722 version:1.31
Changes:
--------
--- /work/SRC/openSUSE:Factory/edgar/edgar.changes 2019-03-26 15:45:09.148098469 +0100
+++ /work/SRC/openSUSE:Factory/.edgar.new.25356/edgar.changes 2019-03-29 20:42:54.670677791 +0100
@@ -1,0 +2,7 @@
+Wed Mar 27 22:28:22 UTC 2019 - Martin Hauke <mardnh(a)gmx.de>
+
+- Update to version 1.31
+ * Updated game to use SDL2
+ * Updated Esperanto translation
+
+-------------------------------------------------------------------
Old:
----
edgar-1.30.tar.gz
New:
----
edgar-1.31.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ edgar.spec ++++++
--- /var/tmp/diff_new_pack.OTZlI7/_old 2019-03-29 20:42:57.114677715 +0100
+++ /var/tmp/diff_new_pack.OTZlI7/_new 2019-03-29 20:42:57.118677715 +0100
@@ -1,7 +1,7 @@
#
# spec file for package edgar
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 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,12 +12,12 @@
# 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: edgar
-Version: 1.30
+Version: 1.31
Release: 0
Summary: 2D platform game with a persistent world
License: GPL-2.0-or-later
@@ -29,11 +29,11 @@
BuildRequires: pkgconfig
BuildRequires: update-desktop-files
BuildRequires: zlib-devel
-BuildRequires: pkgconfig(SDL_image)
-BuildRequires: pkgconfig(SDL_mixer)
-BuildRequires: pkgconfig(SDL_ttf)
+BuildRequires: pkgconfig(SDL2_image)
+BuildRequires: pkgconfig(SDL2_mixer)
+BuildRequires: pkgconfig(SDL2_ttf)
BuildRequires: pkgconfig(libpng)
-BuildRequires: pkgconfig(sdl)
+BuildRequires: pkgconfig(sdl2)
Requires: %{name}-data = %{version}
Recommends: %{name}-lang = %{version}
%lang_package
++++++ edgar-1.30.tar.gz -> edgar-1.31.tar.gz ++++++
/work/SRC/openSUSE:Factory/edgar/edgar-1.30.tar.gz /work/SRC/openSUSE:Factory/.edgar.new.25356/edgar-1.31.tar.gz differ: char 12, line 1
1
0
Hello community,
here is the log from the commit of package autossh for openSUSE:Factory checked in at 2019-03-29 20:42:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/autossh (Old)
and /work/SRC/openSUSE:Factory/.autossh.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "autossh"
Fri Mar 29 20:42:48 2019 rev:15 rq:689491 version:1.4g
Changes:
--------
--- /work/SRC/openSUSE:Factory/autossh/autossh.changes 2018-10-17 08:42:37.409793569 +0200
+++ /work/SRC/openSUSE:Factory/.autossh.new.25356/autossh.changes 2019-03-29 20:42:49.610677948 +0100
@@ -1,0 +2,14 @@
+Thu Mar 28 21:29:41 UTC 2019 - Greg Freemyer <Greg.Freemyer(a)gmail.com>
+
+- Update to version 1.4g
+ + most notably addresses a bug that could see an alarm signal occur
+ without a handler, causing autossh to exit inappropriately.
+
+-------------------------------------------------------------------
+Sun Mar 17 14:12:50 UTC 2019 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Remove pre-12.2 parts from build recipe
+- Reduce hard dependency on systemd
+- Replace old $RPM_* shell vars and %__-type macro indirections.
+
+-------------------------------------------------------------------
Old:
----
autossh-1.4f.tgz
New:
----
autossh-1.4g.tgz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ autossh.spec ++++++
--- /var/tmp/diff_new_pack.MMR0aD/_old 2019-03-29 20:42:50.218677930 +0100
+++ /var/tmp/diff_new_pack.MMR0aD/_new 2019-03-29 20:42:50.222677929 +0100
@@ -1,7 +1,7 @@
#
# spec file for package autossh
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 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,7 +12,7 @@
# 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/
#
@@ -21,21 +21,17 @@
%define _fillupdir /var/adm/fillup-templates
%endif
-%if 0%{?suse_version} > 1220
%define with_systemd 1
-%else
-%define with_systemd 0
-%endif
Summary: Automatically restart SSH sessions and tunnels
License: BSD-3-Clause
Group: Productivity/Networking/SSH
Name: autossh
-Version: 1.4f
+Version: 1.4g
Release: 0
-Url: http://www.harding.motd.ca/autossh/
-Source: http://www.harding.motd.ca/autossh/%{name}-%{version}.tgz
+URL: https://www.harding.motd.ca/autossh/
+Source: https://www.harding.motd.ca/autossh/%{name}-%{version}.tgz
Source1: autossh.init
Source2: autossh.conf
Source3: autossh.service
@@ -46,12 +42,8 @@
# configure checks is the ssh client exists
BuildRequires: openssh
Requires: openssh
-%if %{with_systemd}
-BuildRequires: systemd
-%{?systemd_requires}
-%else
-Requires(pre): %fillup_prereq %insserv_prereq
-%endif
+BuildRequires: systemd-rpm-macros
+%{?systemd_ordering}
%description
Autossh is a program to start a copy of ssh and monitor it, restarting
@@ -69,55 +61,34 @@
%build
%configure
-%__make %{?jobs:-j%jobs}
+make %{?_smp_mflags}
%install
%makeinstall
-%__mkdir_p %{buildroot}%{_sbindir}
-%if %{with_systemd}
-%__install -D -m 444 %{S:3} %{buildroot}%{_unitdir}/autossh@.service
-ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcautossh
-%else
-%__install -D -m 755 %{S:1} %{buildroot}%{_initrddir}/autossh
-%__ln_s -f %{_initrddir}/autossh %{buildroot}%{_sbindir}/rcautossh
-%__install -D -m 644 %{S:2} %{buildroot}%{_fillupdir}/sysconfig.autossh
-%endif
-%__rm "$RPM_BUILD_ROOT/usr/share/doc/autossh"/{CHANGES,README}
-%__rm -rf "%{buildroot}%{_datadir}/examples"
+mkdir -p %{buildroot}/%{_sbindir}
+install -D -m 444 %{S:3} %{buildroot}/%{_unitdir}/autossh@.service
+ln -s /usr/sbin/service %{buildroot}/%{_sbindir}/rcautossh
+rm "%buildroot/%{_datadir}/doc/autossh"/{CHANGES,README}
+rm -rf "%{buildroot}/%{_datadir}/examples"
-%if %{with_systemd}
%pre
%service_add_pre %{name}.service
%preun
%service_del_preun %{name}.service
-%endif
%post
-%if %{with_systemd}
%service_add_post %{name}.service
-%else
-%fillup_only
-%endif
%postun
-%if %{with_systemd}
%service_del_postun %{name}.service
-%else
-%insserv_cleanup
-%endif
%files
%defattr(-, root, root, 0755)
%doc CHANGES README README.SUSE.md my.conf
%doc autossh.host rscreen
%{_bindir}/autossh
-%if %{with_systemd}
%{_unitdir}/%{name}@.service
-%else
-%{_initrddir}/autossh
-%{_fillupdir}/sysconfig.autossh
-%endif
%{_sbindir}/rcautossh
%doc %{_mandir}/man1/autossh.1*
1
0
Hello community,
here is the log from the commit of package python-yq for openSUSE:Factory checked in at 2019-03-29 20:42:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-yq (Old)
and /work/SRC/openSUSE:Factory/.python-yq.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-yq"
Fri Mar 29 20:42:41 2019 rev:3 rq:689264 version:2.7.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-yq/python-yq.changes 2018-12-13 19:45:59.324892012 +0100
+++ /work/SRC/openSUSE:Factory/.python-yq.new.25356/python-yq.changes 2019-03-29 20:42:42.494678168 +0100
@@ -1,0 +2,24 @@
+Wed Mar 27 14:45:44 UTC 2019 - Matej Cepl <mcepl(a)suse.com>
+
+- Run test suite at least for Python 3
+
+-------------------------------------------------------------------
+Tue Mar 26 10:45:19 UTC 2019 - pgajdos(a)suse.com
+
+- version update to 2.7.2
+ * xq: Introduce –xml-dtd and –xml-root.
+ * TOML support is optional and experimental
+ * TOML support with the tq executable entry point.
+ * Disallow argparse abbreviated options.
+ * Parse unrecognized tags instead of dropping them.
+ * Ignore unrecognized YAML tags instead of crashing.
+ * xq -x: Raise understandable error on non-dict conversion failure.
+ * Support XML parsing with xmltodict.
+ * Fix for the –from-file/-f argument: Re-route jq_filter to files
+ when using –from-file.
+ * Parse and pass multiple positional-consuming jq args.
+ * Support jq arguments that consume subsequent positionals.
+ * Support bare YAML dates and times.
+- package LICENSE
+
+-------------------------------------------------------------------
Old:
----
yq-2.3.3.tar.gz
New:
----
yq-2.7.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-yq.spec ++++++
--- /var/tmp/diff_new_pack.vfY9i8/_old 2019-03-29 20:42:43.422678140 +0100
+++ /var/tmp/diff_new_pack.vfY9i8/_new 2019-03-29 20:42:43.422678140 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-yq
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 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
@@ -18,18 +18,26 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-yq
-Version: 2.3.3
+Version: 2.7.2
Release: 0
Summary: Command-line YAML processor - jq wrapper for YAML documents
License: Apache-2.0
Group: Development/Languages/Python
Url: https://github.com/kislyuk/yq
Source: https://files.pythonhosted.org/packages/source/y/yq/yq-%{version}.tar.gz
-BuildRequires: %{python_module PyYAML >= 3.11}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
+# SECTION test requirements
+BuildRequires: %{python_module PyYAML >= 3.11}
+BuildRequires: %{python_module toml >= 0.9.4}
+BuildRequires: %{python_module xmltodict >= 0.11.0}
+BuildRequires: jq
+# /SECTION
Requires: python-PyYAML >= 3.11
+Requires: python-setuptools
+Requires: python-toml >= 0.9.4
+Requires: python-xmltodict >= 0.11.0
Requires(post): update-alternatives
Requires(postun): update-alternatives
BuildArch: noarch
@@ -48,18 +56,26 @@
%install
%python_install
%python_clone -a %{buildroot}%{_bindir}/yq
+%python_clone -a %{buildroot}%{_bindir}/xq
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%post
%python_install_alternative yq
+%python_install_alternative xq
%postun
%python_uninstall_alternative yq
+%python_uninstall_alternative xq
+
+%check
+PYTHONPATH=%{buildroot}%{python3_sitelib} python3 test/test.py -v
%files %{python_files}
%defattr(-,root,root,-)
+%license LICENSE
%doc README.rst
%python_alternative %{_bindir}/yq
+%python_alternative %{_bindir}/xq
%{python_sitelib}/*
%changelog
++++++ yq-2.3.3.tar.gz -> yq-2.7.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/LICENSE new/yq-2.7.2/LICENSE
--- old/yq-2.3.3/LICENSE 1970-01-01 01:00:00.000000000 +0100
+++ new/yq-2.7.2/LICENSE 2017-05-01 19:50:52.000000000 +0200
@@ -0,0 +1,191 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright
+owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities
+that control, are controlled by, or are under common control with that entity.
+For the purposes of this definition, "control" means (i) the power, direct or
+indirect, to cause the direction or management of such entity, whether by
+contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and configuration
+files.
+
+"Object" form shall mean any form resulting from mechanical transformation or
+translation of a Source form, including but not limited to compiled object code,
+generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made
+available under the License, as indicated by a copyright notice that is included
+in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that
+is based on (or derived from) the Work and for which the editorial revisions,
+annotations, elaborations, or other modifications represent, as a whole, an
+original work of authorship. For the purposes of this License, Derivative Works
+shall not include works that remain separable from, or merely link (or bind by
+name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version
+of the Work and any modifications or additions to that Work or Derivative Works
+thereof, that is intentionally submitted to Licensor for inclusion in the Work
+by the copyright owner or by an individual or Legal Entity authorized to submit
+on behalf of the copyright owner. For the purposes of this definition,
+"submitted" means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems, and
+issue tracking systems that are managed by, or on behalf of, the Licensor for
+the purpose of discussing and improving the Work, but excluding communication
+that is conspicuously marked or otherwise designated in writing by the copyright
+owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
+of whom a Contribution has been received by Licensor and subsequently
+incorporated within the Work.
+
+2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.
+
+3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable (except as stated in this section) patent license to make, have
+made, use, offer to sell, sell, import, and otherwise transfer the Work, where
+such license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by combination
+of their Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or contributory
+patent infringement, then any patent licenses granted to You under this License
+for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof
+in any medium, with or without modifications, and in Source or Object form,
+provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of
+this License; and
+You must cause any modified files to carry prominent notices stating that You
+changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute,
+all copyright, patent, trademark, and attribution notices from the Source form
+of the Work, excluding those notices that do not pertain to any part of the
+Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any
+Derivative Works that You distribute must include a readable copy of the
+attribution notices contained within such NOTICE file, excluding those notices
+that do not pertain to any part of the Derivative Works, in at least one of the
+following places: within a NOTICE text file distributed as part of the
+Derivative Works; within the Source form or documentation, if provided along
+with the Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The contents of
+the NOTICE file are for informational purposes only and do not modify the
+License. You may add Your own attribution notices within Derivative Works that
+You distribute, alongside or as an addendum to the NOTICE text from the Work,
+provided that such additional attribution notices cannot be construed as
+modifying the License.
+You may add Your own copyright statement to Your modifications and may provide
+additional or different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works as a whole,
+provided Your use, reproduction, and distribution of the Work otherwise complies
+with the conditions stated in this License.
+
+5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted
+for inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the terms of
+any separate license agreement you may have executed with Licensor regarding
+such Contributions.
+
+6. Trademarks.
+
+This License does not grant permission to use the trade names, trademarks,
+service marks, or product names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor provides the
+Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
+including, without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
+solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise of
+permissions under this License.
+
+8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including negligence),
+contract, or otherwise, unless required by applicable law (such as deliberate
+and grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License or
+out of the use or inability to use the Work (including but not limited to
+damages for loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses), even if such Contributor has
+been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to
+offer, and charge a fee for, acceptance of support, warranty, indemnity, or
+other liability obligations and/or rights consistent with this License. However,
+in accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if You
+agree to indemnify, defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason of your
+accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included on
+the same "printed page" as the copyright notice for easier identification within
+third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/MANIFEST.in new/yq-2.7.2/MANIFEST.in
--- old/yq-2.3.3/MANIFEST.in 1970-01-01 01:00:00.000000000 +0100
+++ new/yq-2.7.2/MANIFEST.in 2018-04-28 16:21:59.000000000 +0200
@@ -0,0 +1 @@
+include LICENSE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/PKG-INFO new/yq-2.7.2/PKG-INFO
--- old/yq-2.3.3/PKG-INFO 2017-09-30 19:06:15.000000000 +0200
+++ new/yq-2.7.2/PKG-INFO 2019-01-09 19:55:01.000000000 +0100
@@ -1,14 +1,13 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: yq
-Version: 2.3.3
-Summary: Command-line YAML processor - jq wrapper for YAML documents
+Version: 2.7.2
+Summary: Command-line YAML/XML processor - jq wrapper for YAML/XML documents
Home-page: https://github.com/kislyuk/yq
Author: Andrey Kislyuk
Author-email: kislyuk(a)gmail.com
License: Apache Software License
-Description-Content-Type: UNKNOWN
-Description: yq: Command-line YAML processor - jq wrapper for YAML documents
- ===============================================================
+Description: yq: Command-line YAML/XML processor - jq wrapper for YAML and XML documents
+ ===========================================================================
Installation
------------
@@ -19,28 +18,38 @@
Before using ``yq``, you also have to install its dependency, ``jq``. See the `jq installation instructions
<https://stedolan.github.io/jq/download/>`_ for details and directions specific to your platform.
+ On macOS, ``yq`` is also available on `Homebrew <https://brew.sh/>`_: use ``brew install python-yq``.
+
Synopsis
--------
- ``yq``'s mode of operation is simple: it transcodes YAML on standard input to JSON (using the key-order-preserving
- equivalent of ``yaml.safe_load_all`` to avoid dangerous vulnerabilities in YAML/PyYAML design) and pipes it to ``jq``::
+ ``yq`` takes YAML input, converts it to JSON, and pipes it to `jq <https://stedolan.github.io/jq/>`_::
cat input.yml | yq .foo.bar
- Or specify the filename directly::
+ Like in ``jq``, you can also specify input filename(s) as arguments::
yq .foo.bar input.yml
- By default, no transcoding of ``jq`` output is done. Specify the ``--yaml-output``/``-y`` option to transcode it back
- into YAML (using the key-order-preserving equivalent of ``yaml.safe_dump_all``)::
+ By default, no conversion of ``jq`` output is done. Use the ``--yaml-output``/``-y`` argument to convert it back into YAML::
cat input.yml | yq -y .foo.bar
- Use the ``--width``/``-w`` argument to pass the line wrap width for string literals.
-
- All other command line arguments are forwarded to ``jq``. ``yq`` forwards the exit code ``jq`` produced,
- unless there was an error in YAML parsing, in which case the exit code is 1. See the `jq manual
- <https://stedolan.github.io/jq/manual/>`_ for more details on ``jq`` features and options.
+ Use the ``--width``/``-w`` argument to pass the line wrap width for string literals. All other command line arguments are
+ forwarded to ``jq``. ``yq`` forwards the exit code ``jq`` produced, unless there was an error in YAML parsing, in which case
+ the exit code is 1. See the `jq manual <https://stedolan.github.io/jq/manual/>`_ for more details on ``jq`` features and
+ options.
+
+ YAML `tags <http://www.yaml.org/spec/1.2/spec.html#id2764295>`_ in the input are ignored (any nested data is treated as
+ untagged). Key order is preserved.
+
+ XML support
+ -----------
+ ``yq`` also supports XML. The ``yq`` package installs an executable, ``xq``, which
+ `transcodes XML to JSON <https://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html>`_ using
+ `xmltodict <https://github.com/martinblech/xmltodict>`_ and pipes it to ``jq``. Roundtrip transcoding is available with
+ the ``xq --xml-output``/``xq -x`` option. Multiple XML documents can be passed in separate files/streams as
+ ``xq a.xml b.xml``. Entity expansion and DTD resolution is disabled to avoid XML parsing vulnerabilities.
.. admonition:: Compatibility note
@@ -59,6 +68,7 @@
* `Documentation (Read the Docs) <https://yq.readthedocs.io/en/latest/>`_
* `Package distribution (PyPI) <https://pypi.python.org/pypi/yq>`_
* `Change log <https://github.com/kislyuk/yq/blob/master/Changes.rst>`_
+ * `jq <https://stedolan.github.io/jq/>`_ - the command-line JSON processor utility powering ``yq``
Bugs
~~~~
@@ -91,3 +101,5 @@
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Provides-Extra: test
+Provides-Extra: toml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/README.rst new/yq-2.7.2/README.rst
--- old/yq-2.3.3/README.rst 2017-08-27 21:37:10.000000000 +0200
+++ new/yq-2.7.2/README.rst 2018-08-04 04:43:19.000000000 +0200
@@ -1,5 +1,5 @@
-yq: Command-line YAML processor - jq wrapper for YAML documents
-===============================================================
+yq: Command-line YAML/XML processor - jq wrapper for YAML and XML documents
+===========================================================================
Installation
------------
@@ -10,28 +10,38 @@
Before using ``yq``, you also have to install its dependency, ``jq``. See the `jq installation instructions
<https://stedolan.github.io/jq/download/>`_ for details and directions specific to your platform.
+On macOS, ``yq`` is also available on `Homebrew <https://brew.sh/>`_: use ``brew install python-yq``.
+
Synopsis
--------
-``yq``'s mode of operation is simple: it transcodes YAML on standard input to JSON (using the key-order-preserving
-equivalent of ``yaml.safe_load_all`` to avoid dangerous vulnerabilities in YAML/PyYAML design) and pipes it to ``jq``::
+``yq`` takes YAML input, converts it to JSON, and pipes it to `jq <https://stedolan.github.io/jq/>`_::
cat input.yml | yq .foo.bar
-Or specify the filename directly::
+Like in ``jq``, you can also specify input filename(s) as arguments::
yq .foo.bar input.yml
-By default, no transcoding of ``jq`` output is done. Specify the ``--yaml-output``/``-y`` option to transcode it back
-into YAML (using the key-order-preserving equivalent of ``yaml.safe_dump_all``)::
+By default, no conversion of ``jq`` output is done. Use the ``--yaml-output``/``-y`` argument to convert it back into YAML::
cat input.yml | yq -y .foo.bar
-Use the ``--width``/``-w`` argument to pass the line wrap width for string literals.
-
-All other command line arguments are forwarded to ``jq``. ``yq`` forwards the exit code ``jq`` produced,
-unless there was an error in YAML parsing, in which case the exit code is 1. See the `jq manual
-<https://stedolan.github.io/jq/manual/>`_ for more details on ``jq`` features and options.
+Use the ``--width``/``-w`` argument to pass the line wrap width for string literals. All other command line arguments are
+forwarded to ``jq``. ``yq`` forwards the exit code ``jq`` produced, unless there was an error in YAML parsing, in which case
+the exit code is 1. See the `jq manual <https://stedolan.github.io/jq/manual/>`_ for more details on ``jq`` features and
+options.
+
+YAML `tags <http://www.yaml.org/spec/1.2/spec.html#id2764295>`_ in the input are ignored (any nested data is treated as
+untagged). Key order is preserved.
+
+XML support
+-----------
+``yq`` also supports XML. The ``yq`` package installs an executable, ``xq``, which
+`transcodes XML to JSON <https://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html>`_ using
+`xmltodict <https://github.com/martinblech/xmltodict>`_ and pipes it to ``jq``. Roundtrip transcoding is available with
+the ``xq --xml-output``/``xq -x`` option. Multiple XML documents can be passed in separate files/streams as
+``xq a.xml b.xml``. Entity expansion and DTD resolution is disabled to avoid XML parsing vulnerabilities.
.. admonition:: Compatibility note
@@ -50,6 +60,7 @@
* `Documentation (Read the Docs) <https://yq.readthedocs.io/en/latest/>`_
* `Package distribution (PyPI) <https://pypi.python.org/pypi/yq>`_
* `Change log <https://github.com/kislyuk/yq/blob/master/Changes.rst>`_
+* `jq <https://stedolan.github.io/jq/>`_ - the command-line JSON processor utility powering ``yq``
Bugs
~~~~
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/scripts/yq new/yq-2.7.2/scripts/yq
--- old/yq-2.3.3/scripts/yq 2017-05-01 19:50:52.000000000 +0200
+++ new/yq-2.7.2/scripts/yq 1970-01-01 01:00:00.000000000 +0100
@@ -1,5 +0,0 @@
-#!/usr/bin/env python
-
-from yq import main
-
-main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/setup.cfg new/yq-2.7.2/setup.cfg
--- old/yq-2.3.3/setup.cfg 2017-09-30 19:06:15.000000000 +0200
+++ new/yq-2.7.2/setup.cfg 2019-01-09 19:55:01.000000000 +0100
@@ -1,9 +1,12 @@
+[metadata]
+license_file = LICENSE
+
[bdist_wheel]
universal = 1
[flake8]
max-line-length = 120
-ignore = E301, E302, E305, E401, E261, E265, E226, F401, E501
+ignore = E302, E305, E401
[egg_info]
tag_build =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/setup.py new/yq-2.7.2/setup.py
--- old/yq-2.3.3/setup.py 2017-09-30 19:05:07.000000000 +0200
+++ new/yq-2.7.2/setup.py 2019-01-09 19:51:35.000000000 +0100
@@ -1,28 +1,36 @@
#!/usr/bin/env python
-import os, glob
from setuptools import setup, find_packages
tests_require = ["coverage", "flake8", "wheel"]
setup(
name="yq",
- version="2.3.3",
+ version="2.7.2",
url="https://github.com/kislyuk/yq",
license="Apache Software License",
author="Andrey Kislyuk",
author_email="kislyuk(a)gmail.com",
- description="Command-line YAML processor - jq wrapper for YAML documents",
+ description="Command-line YAML/XML processor - jq wrapper for YAML/XML documents",
long_description=open("README.rst").read(),
install_requires=[
"setuptools",
- "PyYAML >= 3.11"
+ "PyYAML >= 3.11",
+ "xmltodict >= 0.11.0"
],
tests_require=tests_require,
- extras_require={"test": tests_require},
+ extras_require={
+ "test": tests_require,
+ "toml": ["toml >= 0.9.4"]
+ },
packages=find_packages(exclude=["test"]),
- scripts=glob.glob("scripts/*"),
include_package_data=True,
+ entry_points={
+ 'console_scripts': [
+ 'yq=yq:main',
+ 'xq=yq:xq_cli'
+ ],
+ },
test_suite="test",
classifiers=[
"Intended Audience :: Developers",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/test/test.py new/yq-2.7.2/test/test.py
--- old/yq-2.3.3/test/test.py 2017-09-26 17:41:18.000000000 +0200
+++ new/yq-2.7.2/test/test.py 2019-01-09 19:47:40.000000000 +0100
@@ -3,22 +3,44 @@
from __future__ import absolute_import, division, print_function, unicode_literals
-import os, sys, unittest, tempfile, json, io
+import os, sys, unittest, tempfile, json, io, platform, subprocess
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-from yq import main # noqa
+from yq import main # noqa
USING_PYTHON2 = True if sys.version_info < (3, 0) else False
+USING_PYPY = True if platform.python_implementation() == "PyPy" else False
+
+yaml_with_tags = """
+foo: !vault |
+ $ANSIBLE_VAULT;1.1;AES256
+ 3766343436323632623130303
+xyz: !!mytag
+ foo: bar
+ baz: 1
+xyzzt: !binary
+ - 1
+ - 2
+ - 3
+scalar-red: !color FF0000
+scalar-orange: !color FFFF00
+mapping-red: !color-mapping {r: 255, g: 0, b: 0}
+mapping-orange:
+ !color-mapping
+ r: 255
+ g: 255
+ b: 0
+"""
class TestYq(unittest.TestCase):
- def run_yq(self, input_data, args, expect_exit_code=os.EX_OK):
+ def run_yq(self, input_data, args, expect_exit_codes={os.EX_OK}, input_format="yaml"):
stdin, stdout = sys.stdin, sys.stdout
try:
sys.stdin = io.StringIO(input_data)
sys.stdout = io.BytesIO() if USING_PYTHON2 else io.StringIO()
- main(args)
+ main(args, input_format=input_format)
except SystemExit as e:
- self.assertEqual(e.code, expect_exit_code)
+ self.assertIn(e.code, expect_exit_codes)
finally:
result = sys.stdout.getvalue()
if USING_PYTHON2:
@@ -27,19 +49,46 @@
return result
def test_yq(self):
+ for input_format in "yaml", "xml", "toml":
+ try:
+ main(["--help"], input_format=input_format)
+ except SystemExit as e:
+ self.assertEqual(e.code, 0)
self.assertEqual(self.run_yq("{}", ["."]), "")
self.assertEqual(self.run_yq("foo:\n bar: 1\n baz: {bat: 3}", [".foo.baz.bat"]), "")
self.assertEqual(self.run_yq("[1, 2, 3]", ["--yaml-output", "-M", "."]), "- 1\n- 2\n- 3\n")
self.assertEqual(self.run_yq("foo:\n bar: 1\n baz: {bat: 3}", ["-y", ".foo.baz.bat"]), "3\n...\n")
self.assertEqual(self.run_yq("[aaaaaaaaaa bbb]", ["-y", "."]), "- aaaaaaaaaa bbb\n")
- self.assertEqual(self.run_yq("[aaaaaaaaaa bbb]", ["-y", "-w8", "."]), "- aaaaaaaaaa\n bbb\n")
+ self.assertEqual(self.run_yq("[aaaaaaaaaa bbb]", ["-y", "-w", "8", "."]), "- aaaaaaaaaa\n bbb\n")
self.assertEqual(self.run_yq('{"понедельник": 1}', ['.["понедельник"]']), "")
self.assertEqual(self.run_yq('{"понедельник": 1}', ["-y", '.["понедельник"]']), "1\n...\n")
self.assertEqual(self.run_yq("- понедельник\n- вторник\n", ["-y", "."]), "- понедельник\n- вторник\n")
def test_yq_err(self):
- err = 'yq: Error running jq: ScannerError: while scanning for the next token\nfound character \'%\' that cannot start any token\n in "<file>", line 1, column 3.'
- self.run_yq("- %", ["."], expect_exit_code=err)
+ err = ('yq: Error running jq: ScannerError: while scanning for the next token\nfound character \'%\' that '
+ 'cannot start any token\n in "<file>", line 1, column 3.')
+ self.run_yq("- %", ["."], expect_exit_codes={err, 2})
+
+ def test_yq_arg_passthrough(self):
+ self.assertEqual(self.run_yq("{}", ["--arg", "foo", "bar", "--arg", "x", "y", "--indent", "4", "."]), "")
+ self.assertEqual(self.run_yq("{}", ["--arg", "foo", "bar", "--arg", "x", "y", "-y", "--indent", "4", ".x=$x"]),
+ "x: y\n")
+ err = "yq: Error running jq: {}Error: [Errno 32] Broken pipe{}".format("IO" if USING_PYTHON2 else "BrokenPipe",
+ ": '<fdopen>'." if USING_PYPY else ".")
+ self.run_yq("{}", ["--indent", "9", "."], expect_exit_codes={err, 2})
+
+ with tempfile.NamedTemporaryFile() as tf, tempfile.TemporaryFile() as tf2:
+ tf.write(b'.a')
+ tf.seek(0)
+ tf2.write(b'{"a": 1}')
+ for arg in "--from-file", "-f":
+ tf2.seek(0)
+ self.assertEqual(self.run_yq("", ["-y", arg, tf.name, self.fd_path(tf2)]), '1\n...\n')
+
+ @unittest.skipIf(subprocess.check_output(["jq", "--version"]) < b"jq-1.6", "Test options introduced in jq 1.6")
+ def test_jq16_arg_passthrough(self):
+ self.assertEqual(self.run_yq("{}", ["-y", ".a=$ARGS.positional", "--args", "a", "b"]), "a:\n- a\n- b\n")
+ self.assertEqual(self.run_yq("{}", [".", "--jsonargs", "a", "b"]), "")
def fd_path(self, fh):
return "/dev/fd/{}".format(fh.fileno())
@@ -57,5 +106,78 @@
self.assertEqual(self.run_yq("- 2016-12-20T22:07:36Z\n", ["."]), "")
self.assertEqual(self.run_yq("- 2016-12-20T22:07:36Z\n", ["-y", "."]), "- '2016-12-20T22:07:36'\n")
+ self.assertEqual(self.run_yq("2016-12-20", ["."]), "")
+ self.assertEqual(self.run_yq("2016-12-20", ["-y", "."]), "'2016-12-20'\n")
+
+ def test_unrecognized_tags(self):
+ self.assertEqual(self.run_yq("!!foo bar\n", ["."]), "")
+ self.assertEqual(self.run_yq("!!foo bar\n", ["-y", "."]), "bar\n...\n")
+ self.assertEqual(self.run_yq("x: !foo bar\n", ["-y", "."]), "x: bar\n")
+ self.assertEqual(self.run_yq("x: !!foo bar\n", ["-y", "."]), "x: bar\n")
+ with tempfile.TemporaryFile() as tf:
+ tf.write(yaml_with_tags.encode())
+ tf.seek(0)
+ self.assertEqual(self.run_yq("", ["-y", ".xyz.foo", self.fd_path(tf)]), 'bar\n...\n')
+
+ @unittest.expectedFailure
+ def test_times(self):
+ """
+ Timestamps are parsed as sexagesimals in YAML 1.1 but not 1.2. No PyYAML support for YAML 1.2 yet. See issue 10
+ """
+ self.assertEqual(self.run_yq("11:12:13", ["."]), "")
+ self.assertEqual(self.run_yq("11:12:13", ["-y", "."]), "'11:12:13'\n")
+
+ def test_xq(self):
+ self.assertEqual(self.run_yq("<foo/>", ["."], input_format="xml"), "")
+ self.assertEqual(self.run_yq("<foo/>", ["-x", ".foo.x=1"], input_format="xml"),
+ '<foo>\n <x>1</x>\n</foo>\n')
+ with tempfile.TemporaryFile() as tf, tempfile.TemporaryFile() as tf2:
+ tf.write(b'<a><b/></a>')
+ tf.seek(0)
+ tf2.write(b'<a><c/></a>')
+ tf2.seek(0)
+ self.assertEqual(self.run_yq("", ["-x", ".a", self.fd_path(tf), self.fd_path(tf2)], input_format="xml"),
+ '<b></b>\n<c></c>\n')
+ err = ("yq: Error converting JSON to XML: cannot represent non-object types at top level. "
+ "Use --xml-root=name to envelope your output with a root element.")
+ self.run_yq("[1]", ["-x", "."], expect_exit_codes=[err])
+
+ def test_xq_dtd(self):
+ with tempfile.TemporaryFile() as tf:
+ tf.write(b'<a><b c="d">e</b><b>f</b></a>')
+ tf.seek(0)
+ self.assertEqual(self.run_yq("", ["-x", ".a", self.fd_path(tf)], input_format="xml"),
+ '<b c="d">e</b><b>f</b>\n')
+ tf.seek(0)
+ self.assertEqual(self.run_yq("", ["-x", "--xml-dtd", ".", self.fd_path(tf)], input_format="xml"),
+ '<?xml version="1.0" encoding="utf-8"?>\n<a>\n <b c="d">e</b>\n <b>f</b>\n</a>\n')
+ tf.seek(0)
+ self.assertEqual(
+ self.run_yq("", ["-x", "--xml-dtd", "--xml-root=g", ".a", self.fd_path(tf)], input_format="xml"),
+ '<?xml version="1.0" encoding="utf-8"?>\n<g>\n <b c="d">e</b>\n <b>f</b>\n</g>\n'
+ )
+
+ def test_tq(self):
+ self.assertEqual(self.run_yq("", ["."], input_format="toml"), "")
+ self.assertEqual(self.run_yq("", ["-t", ".foo.x=1"], input_format="toml"),
+ '[foo]\nx = 1\n')
+
+ self.assertEqual(self.run_yq("[input]\n"
+ "test_val = 1234\n",
+ ["-t", ".input"], input_format="toml"),
+ "test_val = 1234\n")
+
+ err = "yq: Error converting JSON to TOML: cannot represent non-object types at top level."
+ self.run_yq('[1]', ["-t", "."], expect_exit_codes=[err])
+
+ @unittest.skipIf(sys.version_info < (3, 5),
+ "argparse option abbreviation interferes with opt passthrough, can't be disabled until Python 3.5")
+ def test_abbrev_opt_collisions(self):
+ with tempfile.TemporaryFile() as tf, tempfile.TemporaryFile() as tf2:
+ self.assertEqual(
+ self.run_yq("", ["-y", "-e", "--slurp", ".[0] == .[1]", "-", self.fd_path(tf), self.fd_path(tf2)]),
+ "true\n...\n"
+ )
+
if __name__ == '__main__':
unittest.main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/yq/__init__.py new/yq-2.7.2/yq/__init__.py
--- old/yq-2.3.3/yq/__init__.py 2017-09-30 19:04:16.000000000 +0200
+++ new/yq-2.7.2/yq/__init__.py 2019-01-09 19:50:25.000000000 +0100
@@ -7,10 +7,12 @@
from __future__ import absolute_import, division, print_function, unicode_literals
-import os, sys, argparse, subprocess, json
+import sys, argparse, subprocess, json
from collections import OrderedDict
-from datetime import datetime
+from datetime import datetime, date, time
+
import yaml
+
from .version import __version__
class Parser(argparse.ArgumentParser):
@@ -19,7 +21,7 @@
print("\n".join(["usage: yq [options] <jq filter> [YAML file...]"] + yq_help[1:] + [""]))
try:
subprocess.check_call(["jq", "--help"])
- except:
+ except Exception:
pass
class OrderedLoader(yaml.SafeLoader):
@@ -30,7 +32,7 @@
class JSONDateTimeEncoder(json.JSONEncoder):
def default(self, o):
- if isinstance(o, datetime):
+ if isinstance(o, (datetime, date, time)):
return o.isoformat()
return json.JSONEncoder.default(self, o)
@@ -44,58 +46,189 @@
def decode_docs(jq_output, json_decoder):
while jq_output:
doc, pos = json_decoder.raw_decode(jq_output)
- jq_output = jq_output[pos+1:]
+ jq_output = jq_output[pos + 1:]
yield doc
+def parse_unknown_tags(loader, tag_suffix, node):
+ if isinstance(node, yaml.nodes.ScalarNode):
+ return loader.construct_scalar(node)
+ elif isinstance(node, yaml.nodes.SequenceNode):
+ return loader.construct_sequence(node)
+ elif isinstance(node, yaml.nodes.MappingNode):
+ return construct_mapping(loader, node)
+
OrderedLoader.add_constructor(yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, construct_mapping)
+OrderedLoader.add_multi_constructor('', parse_unknown_tags)
OrderedDumper.add_representer(OrderedDict, represent_dict_order)
-parser = Parser(description=__doc__, formatter_class=argparse.RawTextHelpFormatter)
-parser.add_argument("--yaml-output", "--yml-output", "-y", help="Transcode jq JSON output back into YAML and emit it",
- action="store_true")
-parser.add_argument("--width", "-w", type=int, help="When using --yaml-output, specify string wrap width")
-parser.add_argument("--version", action="version", version="%(prog)s {version}".format(version=__version__))
-parser.add_argument("jq_filter")
-parser.add_argument("files", nargs="*", type=argparse.FileType())
+# jq arguments that consume positionals must be listed here to avoid our parser mistaking them for our positionals
+jq_arg_spec = {"--indent": 1, "-f": 1, "--from-file": 1, "-L": 1, "--arg": 2, "--argjson": 2, "--slurpfile": 2,
+ "--argfile": 2, "--rawfile": 2, "--args": argparse.REMAINDER, "--jsonargs": argparse.REMAINDER}
+
+# Detection for Python 2
+USING_PYTHON2 = True if sys.version_info < (3, 0) else False
+
+def get_parser(program_name):
+ # By default suppress these help strings and only enable them in the specific programs.
+ yaml_output_help, width_help = argparse.SUPPRESS, argparse.SUPPRESS
+ xml_output_help, xml_dtd_help, xml_root_help = argparse.SUPPRESS, argparse.SUPPRESS, argparse.SUPPRESS
+ toml_output_help = argparse.SUPPRESS
+
+ if program_name == "yq":
+ current_language = "YAML"
+ yaml_output_help = "Transcode jq JSON output back into YAML and emit it"
+ width_help = "When using --yaml-output, specify string wrap width"
+ elif program_name == "xq":
+ current_language = "XML"
+ xml_output_help = "Transcode jq JSON output back into XML and emit it"
+ xml_dtd_help = "Preserve XML Document Type Definition (disables streaming of multiple docs)"
+ xml_root_help = "When transcoding back to XML, envelope the output in an element with this name"
+ elif program_name == "tq":
+ current_language = "TOML"
+ toml_output_help = "Transcode jq JSON output back into TOML and emit it"
+ else:
+ raise Exception("Unknown program name")
+
+ description = __doc__.replace("yq", program_name).replace("YAML", current_language)
+ parser_args = dict(prog=program_name, description=description, formatter_class=argparse.RawTextHelpFormatter)
+ if sys.version_info >= (3, 5):
+ parser_args.update(allow_abbrev=False) # required to disambiguate options listed in jq_arg_spec
+ parser = Parser(**parser_args)
+ parser.add_argument("--yaml-output", "--yml-output", "-y", action="store_true", help=yaml_output_help)
+ parser.add_argument("--width", "-w", type=int, help=width_help)
+ parser.add_argument("--xml-output", "-x", action="store_true", help=xml_output_help)
+ parser.add_argument("--xml-dtd", action="store_true", help=xml_dtd_help)
+ parser.add_argument("--xml-root", help=xml_root_help)
+ parser.add_argument("--toml-output", "-t", action="store_true", help=toml_output_help)
+ parser.add_argument("--version", action="version", version="%(prog)s {version}".format(version=__version__))
+
+ for arg in jq_arg_spec:
+ parser.add_argument(arg, nargs=jq_arg_spec[arg], dest=arg, action="append", help=argparse.SUPPRESS)
+
+ parser.add_argument("jq_filter")
+ parser.add_argument("files", nargs="*", type=argparse.FileType())
+ return parser
-def main(args=None):
+def xq_cli():
+ main(input_format="xml", program_name="xq")
+
+def tq_cli():
+ main(input_format="toml", program_name="tq")
+
+def main(args=None, input_format="yaml", program_name="yq"):
+ parser = get_parser(program_name)
args, jq_args = parser.parse_known_args(args=args)
+ for arg in jq_arg_spec:
+ values = getattr(args, arg, None)
+ if values is not None:
+ for value_group in values:
+ jq_args.append(arg)
+ jq_args.extend(value_group)
+ if getattr(args, "--from-file") or getattr(args, "-f"):
+ args.files.insert(0, argparse.FileType()(args.jq_filter))
+ else:
+ jq_filter_arg_loc = len(jq_args)
+ if getattr(args, "--args"):
+ jq_filter_arg_loc = jq_args.index('--args') + 1
+ elif getattr(args, "--jsonargs"):
+ jq_filter_arg_loc = jq_args.index('--jsonargs') + 1
+ jq_args.insert(jq_filter_arg_loc, args.jq_filter)
+
if sys.stdin.isatty() and not args.files:
return parser.print_help()
+ converting_output = args.yaml_output or args.xml_output or args.toml_output
+
try:
# Note: universal_newlines is just a way to induce subprocess to make stdin a text buffer and encode it for us
- jq = subprocess.Popen(["jq"] + jq_args + [args.jq_filter],
+ jq = subprocess.Popen(["jq"] + jq_args,
stdin=subprocess.PIPE,
- stdout=subprocess.PIPE if args.yaml_output else None,
+ stdout=subprocess.PIPE if converting_output else None,
universal_newlines=True)
except OSError as e:
- msg = "yq: Error starting jq: {}: {}. Is jq installed and available on PATH?"
- parser.exit(msg.format(type(e).__name__, e))
+ msg = "{}: Error starting jq: {}: {}. Is jq installed and available on PATH?"
+ parser.exit(msg.format(program_name, type(e).__name__, e))
try:
input_streams = args.files if args.files else [sys.stdin]
- if args.yaml_output:
+
+ if converting_output:
# TODO: enable true streaming in this branch (with asyncio, asyncproc, a multi-shot variant of
# subprocess.Popen._communicate, etc.)
# See https://stackoverflow.com/questions/375427/non-blocking-read-on-a-subproces…
input_docs = []
for input_stream in input_streams:
- input_docs.extend(yaml.load_all(input_stream, Loader=OrderedLoader))
+ if input_format == "yaml":
+ input_docs.extend(yaml.load_all(input_stream, Loader=OrderedLoader))
+ elif input_format == "xml":
+ import xmltodict
+ input_docs.append(xmltodict.parse(input_stream.read(), disable_entities=True))
+ elif input_format == "toml":
+ import toml
+ input_docs.append(toml.load(input_stream))
+ else:
+ raise Exception("Unknown input format")
input_payload = "\n".join(json.dumps(doc, cls=JSONDateTimeEncoder) for doc in input_docs)
jq_out, jq_err = jq.communicate(input_payload)
json_decoder = json.JSONDecoder(object_pairs_hook=OrderedDict)
- yaml.dump_all(decode_docs(jq_out, json_decoder), stream=sys.stdout, Dumper=OrderedDumper, width=args.width,
- allow_unicode=True, default_flow_style=False)
+ if args.yaml_output:
+ yaml.dump_all(decode_docs(jq_out, json_decoder), stream=sys.stdout, Dumper=OrderedDumper,
+ width=args.width, allow_unicode=True, default_flow_style=False)
+ elif args.xml_output:
+ import xmltodict
+ for doc in decode_docs(jq_out, json_decoder):
+ if args.xml_root:
+ doc = {args.xml_root: doc}
+ elif not isinstance(doc, OrderedDict):
+ msg = ("{}: Error converting JSON to XML: cannot represent non-object types at top level. "
+ "Use --xml-root=name to envelope your output with a root element.")
+ parser.exit(msg.format(program_name))
+ full_document = True if args.xml_dtd else False
+ try:
+ xmltodict.unparse(doc, output=sys.stdout, full_document=full_document, pretty=True, indent=" ")
+ except ValueError as e:
+ if "Document must have exactly one root" in str(e):
+ raise Exception(str(e) + " Use --xml-root=name to envelope your output with a root element")
+ else:
+ raise
+ sys.stdout.write(b"\n" if sys.version_info < (3, 0) else "\n")
+ elif args.toml_output:
+ import toml
+ for doc in decode_docs(jq_out, json_decoder):
+ if not isinstance(doc, OrderedDict):
+ msg = "{}: Error converting JSON to TOML: cannot represent non-object types at top level."
+ parser.exit(msg.format(program_name))
+
+ if USING_PYTHON2:
+ # For Python 2, dump the string and encode it into bytes.
+ output = toml.dumps(doc)
+ sys.stdout.write(output.encode("utf-8"))
+ else:
+ # For Python 3, write the unicode to the buffer directly.
+ toml.dump(doc, sys.stdout)
else:
- for input_stream in input_streams:
- for doc in yaml.load_all(input_stream, Loader=OrderedLoader):
- json.dump(doc, jq.stdin, cls=JSONDateTimeEncoder)
+ if input_format == "yaml":
+ for input_stream in input_streams:
+ for doc in yaml.load_all(input_stream, Loader=OrderedLoader):
+ json.dump(doc, jq.stdin, cls=JSONDateTimeEncoder)
+ jq.stdin.write("\n")
+ elif input_format == "xml":
+ import xmltodict
+ for input_stream in input_streams:
+ json.dump(xmltodict.parse(input_stream.read(), disable_entities=True), jq.stdin)
jq.stdin.write("\n")
+ elif input_format == "toml":
+ import toml
+ for input_stream in input_streams:
+ json.dump(toml.load(input_stream), jq.stdin)
+ jq.stdin.write("\n")
+ else:
+ raise Exception("Unknown input format")
+
jq.stdin.close()
jq.wait()
for input_stream in input_streams:
input_stream.close()
exit(jq.returncode)
except Exception as e:
- parser.exit("yq: Error running jq: {}: {}.".format(type(e).__name__, e))
+ parser.exit("{}: Error running jq: {}: {}.".format(program_name, type(e).__name__, e))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/yq/version.py new/yq-2.7.2/yq/version.py
--- old/yq-2.3.3/yq/version.py 2017-09-30 19:06:09.000000000 +0200
+++ new/yq-2.7.2/yq/version.py 2019-01-09 19:54:54.000000000 +0100
@@ -1 +1 @@
-__version__ = '2.3.3'
+__version__ = '2.7.2'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/yq.egg-info/PKG-INFO new/yq-2.7.2/yq.egg-info/PKG-INFO
--- old/yq-2.3.3/yq.egg-info/PKG-INFO 2017-09-30 19:06:15.000000000 +0200
+++ new/yq-2.7.2/yq.egg-info/PKG-INFO 2019-01-09 19:55:01.000000000 +0100
@@ -1,14 +1,13 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: yq
-Version: 2.3.3
-Summary: Command-line YAML processor - jq wrapper for YAML documents
+Version: 2.7.2
+Summary: Command-line YAML/XML processor - jq wrapper for YAML/XML documents
Home-page: https://github.com/kislyuk/yq
Author: Andrey Kislyuk
Author-email: kislyuk(a)gmail.com
License: Apache Software License
-Description-Content-Type: UNKNOWN
-Description: yq: Command-line YAML processor - jq wrapper for YAML documents
- ===============================================================
+Description: yq: Command-line YAML/XML processor - jq wrapper for YAML and XML documents
+ ===========================================================================
Installation
------------
@@ -19,28 +18,38 @@
Before using ``yq``, you also have to install its dependency, ``jq``. See the `jq installation instructions
<https://stedolan.github.io/jq/download/>`_ for details and directions specific to your platform.
+ On macOS, ``yq`` is also available on `Homebrew <https://brew.sh/>`_: use ``brew install python-yq``.
+
Synopsis
--------
- ``yq``'s mode of operation is simple: it transcodes YAML on standard input to JSON (using the key-order-preserving
- equivalent of ``yaml.safe_load_all`` to avoid dangerous vulnerabilities in YAML/PyYAML design) and pipes it to ``jq``::
+ ``yq`` takes YAML input, converts it to JSON, and pipes it to `jq <https://stedolan.github.io/jq/>`_::
cat input.yml | yq .foo.bar
- Or specify the filename directly::
+ Like in ``jq``, you can also specify input filename(s) as arguments::
yq .foo.bar input.yml
- By default, no transcoding of ``jq`` output is done. Specify the ``--yaml-output``/``-y`` option to transcode it back
- into YAML (using the key-order-preserving equivalent of ``yaml.safe_dump_all``)::
+ By default, no conversion of ``jq`` output is done. Use the ``--yaml-output``/``-y`` argument to convert it back into YAML::
cat input.yml | yq -y .foo.bar
- Use the ``--width``/``-w`` argument to pass the line wrap width for string literals.
-
- All other command line arguments are forwarded to ``jq``. ``yq`` forwards the exit code ``jq`` produced,
- unless there was an error in YAML parsing, in which case the exit code is 1. See the `jq manual
- <https://stedolan.github.io/jq/manual/>`_ for more details on ``jq`` features and options.
+ Use the ``--width``/``-w`` argument to pass the line wrap width for string literals. All other command line arguments are
+ forwarded to ``jq``. ``yq`` forwards the exit code ``jq`` produced, unless there was an error in YAML parsing, in which case
+ the exit code is 1. See the `jq manual <https://stedolan.github.io/jq/manual/>`_ for more details on ``jq`` features and
+ options.
+
+ YAML `tags <http://www.yaml.org/spec/1.2/spec.html#id2764295>`_ in the input are ignored (any nested data is treated as
+ untagged). Key order is preserved.
+
+ XML support
+ -----------
+ ``yq`` also supports XML. The ``yq`` package installs an executable, ``xq``, which
+ `transcodes XML to JSON <https://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html>`_ using
+ `xmltodict <https://github.com/martinblech/xmltodict>`_ and pipes it to ``jq``. Roundtrip transcoding is available with
+ the ``xq --xml-output``/``xq -x`` option. Multiple XML documents can be passed in separate files/streams as
+ ``xq a.xml b.xml``. Entity expansion and DTD resolution is disabled to avoid XML parsing vulnerabilities.
.. admonition:: Compatibility note
@@ -59,6 +68,7 @@
* `Documentation (Read the Docs) <https://yq.readthedocs.io/en/latest/>`_
* `Package distribution (PyPI) <https://pypi.python.org/pypi/yq>`_
* `Change log <https://github.com/kislyuk/yq/blob/master/Changes.rst>`_
+ * `jq <https://stedolan.github.io/jq/>`_ - the command-line JSON processor utility powering ``yq``
Bugs
~~~~
@@ -91,3 +101,5 @@
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Provides-Extra: test
+Provides-Extra: toml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/yq.egg-info/SOURCES.txt new/yq-2.7.2/yq.egg-info/SOURCES.txt
--- old/yq-2.3.3/yq.egg-info/SOURCES.txt 2017-09-30 19:06:15.000000000 +0200
+++ new/yq-2.7.2/yq.egg-info/SOURCES.txt 2019-01-09 19:55:01.000000000 +0100
@@ -1,12 +1,14 @@
+LICENSE
+MANIFEST.in
README.rst
setup.cfg
setup.py
-scripts/yq
test/test.py
yq/__init__.py
yq/version.py
yq.egg-info/PKG-INFO
yq.egg-info/SOURCES.txt
yq.egg-info/dependency_links.txt
+yq.egg-info/entry_points.txt
yq.egg-info/requires.txt
yq.egg-info/top_level.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/yq.egg-info/entry_points.txt new/yq-2.7.2/yq.egg-info/entry_points.txt
--- old/yq-2.3.3/yq.egg-info/entry_points.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/yq-2.7.2/yq.egg-info/entry_points.txt 2019-01-09 19:55:01.000000000 +0100
@@ -0,0 +1,4 @@
+[console_scripts]
+xq = yq:xq_cli
+yq = yq:main
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yq-2.3.3/yq.egg-info/requires.txt new/yq-2.7.2/yq.egg-info/requires.txt
--- old/yq-2.3.3/yq.egg-info/requires.txt 2017-09-30 19:06:15.000000000 +0200
+++ new/yq-2.7.2/yq.egg-info/requires.txt 2019-01-09 19:55:01.000000000 +0100
@@ -1,7 +1,11 @@
setuptools
PyYAML>=3.11
+xmltodict>=0.11.0
[test]
coverage
flake8
wheel
+
+[toml]
+toml>=0.9.4
1
0
Hello community,
here is the log from the commit of package python-qrcode for openSUSE:Factory checked in at 2019-03-29 20:42:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-qrcode (Old)
and /work/SRC/openSUSE:Factory/.python-qrcode.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-qrcode"
Fri Mar 29 20:42:37 2019 rev:5 rq:689261 version:6.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-qrcode/python-qrcode.changes 2017-06-28 10:37:34.652417421 +0200
+++ /work/SRC/openSUSE:Factory/.python-qrcode.new.25356/python-qrcode.changes 2019-03-29 20:42:39.690678256 +0100
@@ -1,0 +2,9 @@
+Wed Mar 27 13:04:46 UTC 2019 - pgajdos(a)suse.com
+
+- version update to 6.1
+ * Fix short chunks of data not being optimized to the correct mode.
+ * Tests fixed for Python 3
+ * Fix optimize length being ignored in ``QRCode.add_data``.
+ * Better calculation of the best mask pattern and related optimizations.
+
+-------------------------------------------------------------------
Old:
----
qrcode-5.3.tar.gz
New:
----
qrcode-6.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-qrcode.spec ++++++
--- /var/tmp/diff_new_pack.4p44iw/_old 2019-03-29 20:42:41.126678211 +0100
+++ /var/tmp/diff_new_pack.4p44iw/_new 2019-03-29 20:42:41.130678211 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-qrcode
#
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 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,13 +12,13 @@
# 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/
#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-qrcode
-Version: 5.3
+Version: 6.1
Release: 0
Summary: QR Code image generator
License: BSD-3-Clause
++++++ qrcode-5.3.tar.gz -> qrcode-6.1.tar.gz ++++++
++++ 2118 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package python-testfixtures for openSUSE:Factory checked in at 2019-03-29 20:42:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-testfixtures (Old)
and /work/SRC/openSUSE:Factory/.python-testfixtures.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-testfixtures"
Fri Mar 29 20:42:35 2019 rev:6 rq:689260 version:6.6.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-testfixtures/python-testfixtures.changes 2019-02-27 17:27:57.935346241 +0100
+++ /work/SRC/openSUSE:Factory/.python-testfixtures.new.25356/python-testfixtures.changes 2019-03-29 20:42:36.950678340 +0100
@@ -1,0 +2,26 @@
+Tue Mar 26 22:09:06 UTC 2019 - John Vandenberg <jayvdb(a)gmail.com>
+
+- Add docs/*.txt to %docs
+- Remove tests from the runtime package
+- Update to v6.6.2
+ * popen.MockPopen.set_command is now symmetrical with
+ popen.MockPopen process instantiation in that both can be called with
+ either lists or strings, in the same way as subprocess.Popen.
+- from 6.6.1
+ * Fixed bugs where using 'not_there' to ensure a key or attribute
+ was not there but would be set by a test would result in the test
+ attribute or key being left behind.
+ * Add support for comparing functools.partial instances and fix
+ comparison of functions and other objects where vars() returns
+ an empty dict.
+- from v6.6.0
+ * Add the ability to ignore attributes of particular object types when
+ using `compare`.
+- from v6.5.2
+ * Fix bug when `compare` was used with objects that had __slots__ inherited
+ from a base class but where their __slots__ was an empty sequence.
+- from v6.5.1
+ * Fix bug when `compare` was used with objects that had __slots__ inherited
+ from a base class.
+
+-------------------------------------------------------------------
Old:
----
testfixtures-6.5.0.tar.gz
New:
----
testfixtures-6.6.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-testfixtures.spec ++++++
--- /var/tmp/diff_new_pack.v91Bb3/_old 2019-03-29 20:42:37.942678309 +0100
+++ /var/tmp/diff_new_pack.v91Bb3/_new 2019-03-29 20:42:37.946678309 +0100
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-testfixtures
-Version: 6.5.0
+Version: 6.6.2
Release: 0
Summary: A collection of helpers and mock objects for unit tests and doc tests
License: MIT
@@ -56,13 +56,14 @@
%prep
%setup -q -n testfixtures-%{version}
-cp docs/changes.txt changes.txt
+chmod a-x docs/*.txt
%build
%python_build
%install
%python_install
+%python_expand rm -r %{buildroot}%{$python_sitelib}/testfixtures/tests
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
@@ -71,7 +72,7 @@
%files %{python_files}
%license LICENSE.txt
-%doc README.rst changes.txt
+%doc README.rst docs/*.txt
%{python_sitelib}/*
%changelog
++++++ testfixtures-6.5.0.tar.gz -> testfixtures-6.6.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/.carthorse.yml new/testfixtures-6.6.2/.carthorse.yml
--- old/testfixtures-6.5.0/.carthorse.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/testfixtures-6.6.2/.carthorse.yml 2019-03-22 08:47:24.000000000 +0100
@@ -0,0 +1,10 @@
+carthorse:
+ version-from: setup.py
+ tag-format: "{version}"
+ when:
+ - version-not-tagged
+ actions:
+ - run: "sudo pip install -e .[build]"
+ - run: "sudo python setup.py sdist bdist_wheel"
+ - run: "twine upload -u chrisw -p $PYPI_PASS dist/*"
+ - create-tag
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/.circleci/config.yml new/testfixtures-6.6.2/.circleci/config.yml
--- old/testfixtures-6.5.0/.circleci/config.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/testfixtures-6.6.2/.circleci/config.yml 2019-03-22 08:47:24.000000000 +0100
@@ -0,0 +1,77 @@
+version: 2.1
+
+orbs:
+ python: cjw296/python-ci(a)1.1
+
+common: &common
+ jobs:
+ - python/pip-run-tests:
+ name: python27
+ image: circleci/python:2.7
+ - python/pip-run-tests:
+ name: python36
+ image: circleci/python:3.6
+ - python/pip-run-tests:
+ name: python37
+ image: circleci/python:3.7
+ - python/pip-run-tests:
+ name: python36-mock-backport
+ image: circleci/python:3.6
+ extra_packages: "mock"
+ - python/pip-run-tests:
+ name: python37-mock-backport
+ image: circleci/python:3.7
+ extra_packages: "mock"
+ - python/pip-run-tests:
+ name: python27-django-1-9
+ image: circleci/python:2.7
+ extra_packages: "'django<1.10'"
+ - python/pip-run-tests:
+ name: python36-django-1-11
+ image: circleci/python:3.6
+ extra_packages: "'django<1.12'"
+ - python/pip-run-tests:
+ name: python37-django-1-11
+ image: circleci/python:3.7
+ extra_packages: "'django<1.12'"
+ - python/pip-run-tests:
+ name: python36-django-latest
+ image: circleci/python:3.6
+ - python/pip-run-tests:
+ name: python37-django-latest
+ image: circleci/python:3.7
+
+ - python/coverage:
+ name: coverage
+ requires:
+ - python27
+ - python36
+ - python37
+ - python36-mock-backport
+ - python37-mock-backport
+ - python27-django-1-9
+ - python36-django-1-11
+ - python37-django-1-11
+ - python36-django-latest
+ - python37-django-latest
+
+ - python/release:
+ name: release
+ config: .carthorse.yml
+ requires:
+ - coverage
+ filters:
+ branches:
+ only: master
+
+workflows:
+ push:
+ <<: *common
+ periodic:
+ <<: *common
+ triggers:
+ - schedule:
+ cron: "0 1 * * *"
+ filters:
+ branches:
+ only: master
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/.readthedocs.yml new/testfixtures-6.6.2/.readthedocs.yml
--- old/testfixtures-6.5.0/.readthedocs.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/testfixtures-6.6.2/.readthedocs.yml 2019-03-22 08:47:24.000000000 +0100
@@ -0,0 +1,8 @@
+version: 2
+python:
+ version: 3.7
+ install:
+ - method: pip
+ path: .
+ extra_requirements:
+ - build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/.travis.yml new/testfixtures-6.6.2/.travis.yml
--- old/testfixtures-6.5.0/.travis.yml 2018-12-19 13:08:08.000000000 +0100
+++ new/testfixtures-6.6.2/.travis.yml 1970-01-01 01:00:00.000000000 +0100
@@ -1,90 +0,0 @@
-group: travis_latest
-dist: xenial
-sudo: true
-cache:
- directories:
- - $HOME/.cache/pip
-
-language: python
-
-env:
- global:
- # travis encrypt COVERALLS_REPO_TOKEN=...
- secure: "UOGwoOV0DuItLsE4yDnnm+UnYbmNUVJ+vU+ePEN17kRkFZyF9GYg+ZXr0uCAAdMC3okVaj6QrCk3OEDlUN8YKJzBIfn3pC3DB9CRneOWLwh+/D+iE6dtjBz+2MWthPFs3YLWlJYmF2TUrcj7ZI+DBAAbnm4JftX/uJi/ndht7Lo="
- matrix:
- - DJANGO_VERSION=latest
- - DJANGO_VERSION=1.11
- - DJANGO_VERSION=1.9
- - MOCK_BACKPORT=true
-
-python:
- - "2.7"
- - "3.6"
- - "3.7"
-
-matrix:
-
- exclude:
- - env: DJANGO_VERSION=latest
- python: "2.7"
- - env: MOCK_BACKPORT=true
- python: "2.7"
-
-# command to install dependencies
-install:
-# remove crap from Travis image:
-- "pip uninstall -y mock nose"
-# make sure we have the latest and greated:
-- "pip install --upgrade pip setuptools"
-# install the right versions of dependencies:
-- "pip install -Ue .[test]"
-- sh -c "if [ $DJANGO_VERSION = '1.11' ]; then pip install -U 'django<1.12'; fi"
-- sh -c "if [ $DJANGO_VERSION = '1.9' ]; then pip install -U 'django<1.10'; fi"
-- sh -c "if [ ${MOCK_BACKPORT:-'false'} = 'true' ]; then pip install -U 'mock'; fi"
-# show what we have:
-- "pip freeze"
-
-# command to run tests, e.g. python setup.py test
-script: coverage run -m pytest
-
-after_success:
- - coverage combine
- - "COVERALLS_PARALLEL=true coveralls"
-
-# tell coveralls so we can ge a post back for PRs
-notifications:
- webhooks: https://coveralls.io/webhook
-
-jobs:
- include:
-
- - stage: coverage
- if: type != pull_request
- python: 3.6
- env: DJANGO_VERSION=latest
- after_success: skip
-
- install: "pip install -U coveralls-check"
- script: "coveralls-check $TRAVIS_COMMIT --parallel-build-number $TRAVIS_BUILD_NUMBER --repo-token $COVERALLS_REPO_TOKEN"
-
- - stage: release
- if: tag IS present
- python: 3.6
- env: DJANGO_VERSION=latest
- script: skip
- # work around https://github.com/travis-ci/travis-ci/issues/8337:
- after_success: true
-
- install:
- - "pip install --upgrade pip setuptools"
- - "pip install -Ue .[build]"
- deploy:
- provider: pypi
- user: chrisw
- password:
- secure: QrmUWPegJzGIYGI8XGY7ztjHTbpMgVDLNV6f9fjjAoo8efOubJh/BASjWD3ESPlIo1j5tGCcSRP2MN1+30zBxq7a7oiCnthISx42DP6Ih+wLHFCu7uBm12AH96hIOQUAtQotNSwB9dJAJIKKom7xkrV/nStjbcqC7hosTZlTy6o=
- on:
- tags: true
- repo: Simplistix/testfixtures
- skip_cleanup: true
- distributions: "sdist bdist_wheel"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/PKG-INFO new/testfixtures-6.6.2/PKG-INFO
--- old/testfixtures-6.5.0/PKG-INFO 2019-01-28 23:53:02.000000000 +0100
+++ new/testfixtures-6.6.2/PKG-INFO 2019-03-22 08:47:36.000000000 +0100
@@ -1,12 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: testfixtures
-Version: 6.5.0
+Version: 6.6.2
Summary: A collection of helpers and mock objects for unit tests and doc tests.
Home-page: https://github.com/Simplistix/testfixtures
Author: Chris Withers
Author-email: chris(a)simplistix.co.uk
License: MIT
-Description-Content-Type: UNKNOWN
Description: ============
TestFixtures
============
@@ -76,3 +75,5 @@
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
+Provides-Extra: test
+Provides-Extra: build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/README.rst new/testfixtures-6.6.2/README.rst
--- old/testfixtures-6.5.0/README.rst 2017-09-01 23:33:17.000000000 +0200
+++ new/testfixtures-6.6.2/README.rst 2019-03-22 08:47:24.000000000 +0100
@@ -1,18 +1,15 @@
-|Travis|_ |Coveralls|_ |Docs|_
+|CircleCI|_ |Docs|_
-.. |Travis| image:: https://api.travis-ci.org/Simplistix/testfixtures.svg?branch=master
-.. _Travis: https://travis-ci.org/Simplistix/testfixtures
-
-.. |Coveralls| image:: https://coveralls.io/repos/Simplistix/testfixtures/badge.svg?branch=master
-.. _Coveralls: https://coveralls.io/r/Simplistix/testfixtures?branch=master
+.. |CircleCI| image:: https://circleci.com/gh/Simplistix/testfixtures/tree/master.svg?style=shield
+.. _CircleCI: https://circleci.com/gh/Simplistix/testfixtures/tree/master
.. |Docs| image:: https://readthedocs.org/projects/testfixtures/badge/?version=latest
.. _Docs: http://testfixtures.readthedocs.org/en/latest/
-TestFixtures
+Testfixtures
============
-TestFixtures is a collection of helpers and mock objects that are useful when
-writing unit tests or doc tests.
+Testfixtures is a collection of helpers and mock objects that are useful when
+writing automated tests in Python.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/docs/api.txt new/testfixtures-6.6.2/docs/api.txt
--- old/testfixtures-6.5.0/docs/api.txt 2019-01-28 23:20:16.000000000 +0100
+++ new/testfixtures-6.6.2/docs/api.txt 2019-03-22 08:47:24.000000000 +0100
@@ -48,6 +48,10 @@
.. autofunction:: testfixtures.comparison.compare_simple
+.. autofunction:: testfixtures.comparison.compare_object
+
+.. autofunction:: testfixtures.comparison.compare_exception
+
.. autofunction:: testfixtures.comparison.compare_with_type
.. autofunction:: testfixtures.comparison.compare_sequence
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/docs/changes.txt new/testfixtures-6.6.2/docs/changes.txt
--- old/testfixtures-6.5.0/docs/changes.txt 2019-01-28 23:25:22.000000000 +0100
+++ new/testfixtures-6.6.2/docs/changes.txt 2019-03-22 08:47:24.000000000 +0100
@@ -3,6 +3,40 @@
.. currentmodule:: testfixtures
+6.6.2 (22 Mar 2019)
+-------------------
+
+- :meth:`popen.MockPopen.set_command` is now symmetrical with
+ :class:`popen.MockPopen` process instantiation in that both can be called with
+ either lists or strings, in the same way as :class:`subprocess.Popen`.
+
+6.6.1 (13 Mar 2019)
+-------------------
+
+- Fixed bugs where using :attr:`not_there` to ensure a key or attribute was not there
+ but would be set by a test would result in the test attribute or key being left behind.
+
+- Add support for comparing :func:`~functools.partial` instances and fix comparison of
+ functions and other objects where ``vars()`` returns an empty :class:`dict`.
+
+6.6.0 (22 Feb 2019)
+-------------------
+
+- Add the ability to ignore attributes of particular object types when using
+ :func:`compare`.
+
+6.5.2 (18 Feb 2019)
+-------------------
+
+- Fix bug when :func:`compare` was used with objects that had ``__slots__`` inherited from a
+ base class but where their ``__slots__`` was an empty sequence.
+
+6.5.1 (18 Feb 2019)
+-------------------
+
+- Fix bug when :func:`compare` was used with objects that had ``__slots__`` inherited from a
+ base class.
+
6.5.0 (28 Jan 2019)
-------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/docs/conf.py new/testfixtures-6.6.2/docs/conf.py
--- old/testfixtures-6.5.0/docs/conf.py 2017-09-01 23:33:17.000000000 +0200
+++ new/testfixtures-6.6.2/docs/conf.py 2019-03-22 08:47:24.000000000 +0100
@@ -1,12 +1,11 @@
# -*- coding: utf-8 -*-
import datetime
import os
-import pkginfo
-import sys
import time
+import pkg_resources
+
on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
-pkg_info = pkginfo.Develop(os.path.join(os.path.dirname(__file__), '..'))
build_date = datetime.datetime.utcfromtimestamp(int(os.environ.get('SOURCE_DATE_EPOCH', time.time())))
extensions = [
@@ -23,9 +22,9 @@
# General
source_suffix = '.txt'
master_doc = 'index'
-project = pkg_info.name
+project = 'testfixtures'
copyright = '2008-2015 Simplistix Ltd, 2016-%s Chris Withers' % build_date.year
-version = release = pkg_info.version
+version = release = pkg_resources.get_distribution(project).version
exclude_trees = ['_build']
exclude_patterns = ['description.txt']
pygments_style = 'sphinx'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/docs/development.txt new/testfixtures-6.6.2/docs/development.txt
--- old/testfixtures-6.5.0/docs/development.txt 2017-09-01 23:33:17.000000000 +0200
+++ new/testfixtures-6.6.2/docs/development.txt 2019-03-22 08:47:24.000000000 +0100
@@ -58,10 +58,6 @@
Making a release
----------------
-To make a release, just update ``versions.txt``, update the change log, tag it
+To make a release, just update ``versions.txt``, update the change log
and push to https://github.com/Simplistix/testfixtures
-and Travis CI should take care of the rest.
-
-Once Travis CI is done, make sure to go to
-https://readthedocs.org/projects/testfixtures/versions/
-and make sure the new release is marked as an Active Version.
+and Carthorse should take care of the rest.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/requirements.txt new/testfixtures-6.6.2/requirements.txt
--- old/testfixtures-6.5.0/requirements.txt 2015-11-15 00:44:35.000000000 +0100
+++ new/testfixtures-6.6.2/requirements.txt 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
--e .[build]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/setup.py new/testfixtures-6.6.2/setup.py
--- old/testfixtures-6.5.0/setup.py 2019-01-28 18:20:45.000000000 +0100
+++ new/testfixtures-6.6.2/setup.py 2019-03-22 08:47:24.000000000 +0100
@@ -35,15 +35,14 @@
include_package_data=True,
extras_require=dict(
test=['pytest>=3.6',
+ 'pytest-cov',
+ 'pytest-django',
'mock;python_version<"3"',
'sybil',
- 'coverage',
- 'coveralls',
'zope.component',
'django<2;python_version<"3"',
'django;python_version>="3"',
- 'pytest-django',
'twisted'],
- build=['sphinx', 'pkginfo', 'setuptools-git', 'wheel', 'twine']
+ build=['sphinx', 'setuptools-git', 'wheel', 'twine']
)
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/comparison.py new/testfixtures-6.6.2/testfixtures/comparison.py
--- old/testfixtures-6.5.0/testfixtures/comparison.py 2019-01-28 18:16:09.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/comparison.py 2019-03-22 08:47:24.000000000 +0100
@@ -1,5 +1,6 @@
from collections import Iterable
from difflib import unified_diff
+from functools import partial
from pprint import pformat
from re import compile, MULTILINE
from types import GeneratorType
@@ -19,9 +20,12 @@
return context.label('x', repr(x)) + ' != ' + context.label('y', repr(y))
-def _extract_attrs(obj):
- slots = getattr(obj, '__slots__', None)
- if slots:
+def _extract_attrs(obj, ignore=None):
+ has_slots = getattr(obj, '__slots__', not_there) is not not_there
+ if has_slots:
+ slots = set()
+ for cls in type(obj).__mro__:
+ slots.update(getattr(cls, '__slots__', ()))
attrs = {}
for n in slots:
value = getattr(obj, n, not_there)
@@ -35,18 +39,30 @@
else:
if isinstance(obj, BaseException):
attrs['args'] = obj.args
+ if ignore is not None:
+ if isinstance(ignore, dict):
+ ignore = ignore.get(type(obj), ())
+ for attr in ignore:
+ attrs.pop(attr, None)
return attrs
def compare_object(x, y, context):
"""
Compare the two supplied objects based on their type and attributes.
+
+ :param ignore_attributes:
+
+ Either a sequence of strings containing attribute names to be ignored
+ when comparing or a mapping of type to sequence of strings containing
+ attribute names to be ignored when comparing that type.
"""
+ ignore_attributes = context.get_option('ignore_attributes', ())
if type(x) is not type(y) or isinstance(x, ClassType):
return compare_simple(x, y, context)
- x_attrs = _extract_attrs(x)
- y_attrs = _extract_attrs(y)
- if x_attrs is None or y_attrs is None:
+ x_attrs = _extract_attrs(x, ignore_attributes)
+ y_attrs = _extract_attrs(y, ignore_attributes)
+ if x_attrs is None or y_attrs is None or not (x_attrs and y_attrs):
return compare_simple(x, y, context)
if x_attrs != y_attrs:
return _compare_mapping(x_attrs, y_attrs, context, x,
@@ -321,6 +337,14 @@
return compare_text(repr(x), repr(y), context)
+def compare_partial(x, y, context):
+ x_attrs = dict(func=x.func, args=x.args, keywords=x.keywords)
+ y_attrs = dict(func=y.func, args=y.args, keywords=y.keywords)
+ if x_attrs != y_attrs:
+ return _compare_mapping(x_attrs, y_attrs, context, x,
+ 'attributes ', '.%s')
+
+
def _short_repr(obj):
repr_ = repr(obj)
if len(repr_) > 30:
@@ -341,6 +365,7 @@
mock_call.__class__: compare_call,
unittest_mock_call.__class__: compare_call,
BaseException: compare_exception,
+ partial: compare_partial,
}
if PY3:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/components.py new/testfixtures-6.6.2/testfixtures/components.py
--- old/testfixtures-6.5.0/testfixtures/components.py 2018-06-16 18:29:16.000000000 +0200
+++ new/testfixtures-6.6.2/testfixtures/components.py 2019-03-22 08:47:24.000000000 +0100
@@ -2,7 +2,7 @@
import warnings
from zope.component import getSiteManager
-from zope.component.registry import Components
+from zope.interface.registry import Components
class TestComponents:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/logcapture.py new/testfixtures-6.6.2/testfixtures/logcapture.py
--- old/testfixtures-6.5.0/testfixtures/logcapture.py 2018-06-16 18:29:16.000000000 +0200
+++ new/testfixtures-6.6.2/testfixtures/logcapture.py 2019-03-22 08:47:24.000000000 +0100
@@ -111,7 +111,7 @@
framework for the named loggers.
This will re-instate any existing handlers for those loggers
- that were removed during installation and retore their level
+ that were removed during installation and restore their level
that prior to installation.
"""
if self in self.instances:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/popen.py new/testfixtures-6.6.2/testfixtures/popen.py
--- old/testfixtures-6.5.0/testfixtures/popen.py 2019-01-09 09:16:37.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/popen.py 2019-03-22 08:47:24.000000000 +0100
@@ -1,3 +1,4 @@
+import pipes
from functools import wraps, partial
from itertools import chain
from subprocess import STDOUT, PIPE
@@ -8,6 +9,12 @@
from .mock import Mock, call
+def shell_join(command):
+ if not isinstance(command, basestring):
+ command = " ".join(pipes.quote(part) for part in command)
+ return command
+
+
class PopenBehaviour(object):
"""
An object representing the behaviour of a :class:`MockPopen` when
@@ -65,10 +72,7 @@
self.calls = []
self.all_calls = mock_class.all_calls
- if isinstance(args, basestring):
- cmd = args
- else:
- cmd = ' '.join(args)
+ cmd = shell_join(args)
behaviour = mock_class.commands.get(cmd, mock_class.default_behaviour)
if behaviour is None:
@@ -223,7 +227,7 @@
:param command: A string representing the command to be simulated.
"""
- self.commands[command] = self._resolve_behaviour(
+ self.commands[shell_join(command)] = self._resolve_behaviour(
stdout, stderr, returncode, pid, poll_count, behaviour
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/replace.py new/testfixtures-6.6.2/testfixtures/replace.py
--- old/testfixtures-6.5.0/testfixtures/replace.py 2018-06-16 18:29:16.000000000 +0200
+++ new/testfixtures-6.6.2/testfixtures/replace.py 2019-03-22 08:47:24.000000000 +0100
@@ -23,9 +23,15 @@
def _replace(self, container, name, method, value, strict=True):
if value is not_there:
if method == 'a':
- delattr(container, name)
+ try:
+ delattr(container, name)
+ except AttributeError:
+ pass
if method == 'i':
- del container[name]
+ try:
+ del container[name]
+ except KeyError:
+ pass
else:
if method == 'a':
setattr(container, name, value)
@@ -42,8 +48,6 @@
raise ValueError('target must contain at least one dot!')
if t_obj is not_there and strict:
raise AttributeError('Original %r not found' % attribute)
- if t_obj is not_there and replacement is not_there:
- return not_there
replacement_to_use = replacement
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/tests/test_compare.py new/testfixtures-6.6.2/testfixtures/tests/test_compare.py
--- old/testfixtures-6.5.0/testfixtures/tests/test_compare.py 2018-12-19 13:08:08.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/tests/test_compare.py 2019-03-22 08:47:24.000000000 +0100
@@ -1581,3 +1581,158 @@
"datetime.datetime(2001, 1, 1, 0, 0) != "
"datetime.datetime(2001, 1, 2, 0, 0)"
)
+
+ def test_inherited_slots(self):
+
+ class Parent(object):
+ __slots__ = ('a',)
+
+ class Child(Parent):
+ __slots__ = ('b',)
+
+ def __init__(self, a, b):
+ self.a, self.b = a, b
+
+ self.check_raises(
+ Child(1, 'x'),
+ Child(2, 'x'),
+ 'Child not as expected:\n'
+ '\n'
+ 'attributes same:\n'
+ "['b']\n"
+ '\n'
+ 'attributes differ:\n'
+ "'a': 1 != 2"
+ )
+
+ def test_empty_child_slots(self):
+
+ class Parent(object):
+ __slots__ = ('a',)
+
+ def __init__(self, a):
+ self.a = a
+
+ class Child(Parent):
+ __slots__ = ()
+
+ compare(Child(1), Child(1))
+
+ def test_partial_callable_different(self):
+
+ def foo(x): pass
+ def bar(y): pass
+
+ self.check_raises(
+ partial(foo),
+ partial(bar),
+ (
+ 'partial not as expected:\n'
+ '\n'
+ 'attributes same:\n'
+ "['args', 'keywords']\n"
+ '\n'
+ 'attributes differ:\n'
+ "'func': {foo} != {bar}\n"
+ '\n'
+ 'While comparing .func: {foo} != {bar}'
+ ).format(foo=hexsub(repr(foo)), bar=hexsub(repr(bar))))
+
+ def test_partial_args_different(self):
+
+ def foo(x): pass
+
+ self.check_raises(
+ partial(foo, 1),
+ partial(foo, 2),
+ 'partial not as expected:\n'
+ '\n'
+ 'attributes same:\n'
+ "['func', 'keywords']\n"
+ '\n'
+ 'attributes differ:\n'
+ "'args': (1,) != (2,)\n"
+ '\n'
+ 'While comparing .args: sequence not as expected:\n'
+ '\n'
+ 'same:\n'
+ '()\n'
+ '\n'
+ 'first:\n'
+ '(1,)\n'
+ '\n'
+ 'second:\n'
+ '(2,)'
+ )
+
+ def test_partial_kw_different(self):
+
+ def foo(x): pass
+
+ self.check_raises(
+ partial(foo, x=1, y=3),
+ partial(foo, x=2, z=4),
+ 'partial not as expected:\n'
+ '\n'
+ 'attributes same:\n'
+ "['args', 'func']\n"
+ '\n'
+ 'attributes differ:\n'
+ "'keywords': {'x': 1, 'y': 3} != {'x': 2, 'z': 4}\n"
+ '\n'
+ 'While comparing .keywords: dict not as expected:\n'
+ '\n'
+ 'in first but not second:\n'
+ "'y': 3\n"
+ '\n'
+ 'in second but not first:\n'
+ "'z': 4\n"
+ '\n'
+ 'values differ:\n'
+ "'x': 1 != 2"
+ )
+
+ def test_partial_equal(self):
+
+ def foo(x): pass
+
+ compare(partial(foo, 1, x=2), partial(foo, 1, x=2))
+
+
+class TestIgnore(CompareHelper):
+
+ class Parent(object):
+ def __init__(self, id, other):
+ self.id = id
+ self.other = other
+ def __repr__(self):
+ return '<{}:{}>'.format(type(self).__name__, self.id)
+
+ class Child(Parent): pass
+
+ def test_ignore_attributes(self):
+ compare(self.Parent(1, 3), self.Parent(2, 3), ignore_attributes={'id'})
+
+ def test_ignore_attributes_different_types(self):
+ self.check_raises(
+ self.Parent(1, 3),
+ self.Child(2, 3),
+ '<Parent:1> != <Child:2>',
+ ignore_attributes={'id'}
+ )
+
+ def test_ignore_attributes_per_type(self):
+ ignore = {self.Parent: {'id'}}
+ compare(self.Parent(1, 3), self.Parent(2, 3), ignore_attributes=ignore)
+ self.check_raises(
+ self.Child(1, 3),
+ self.Child(2, 3),
+ 'Child not as expected:\n'
+ '\n'
+ 'attributes same:\n'
+ "['other']\n"
+ '\n'
+ 'attributes differ:\n'
+ "'id': 1 != 2",
+ ignore_attributes=ignore
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/tests/test_popen.py new/testfixtures-6.6.2/testfixtures/tests/test_popen.py
--- old/testfixtures-6.5.0/testfixtures/tests/test_popen.py 2019-01-09 09:16:37.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/tests/test_popen.py 2019-03-22 08:47:24.000000000 +0100
@@ -599,6 +599,13 @@
call.Popen('a command', executable='/foo/bar')
])
+ def test_set_command_with_list(self):
+ Popen = MockPopen()
+ Popen.set_command(['a', 'command'])
+ Popen(['a', 'command'], stdout=PIPE, stderr=PIPE)
+ compare([call.Popen(['a', 'command'], stderr=-1, stdout=-1)],
+ actual=Popen.all_calls)
+
class IntegrationTests(TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/tests/test_popen_docs.py new/testfixtures-6.6.2/testfixtures/tests/test_popen_docs.py
--- old/testfixtures-6.5.0/testfixtures/tests/test_popen_docs.py 2018-12-19 13:08:08.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/tests/test_popen_docs.py 2019-03-22 08:47:24.000000000 +0100
@@ -5,7 +5,7 @@
def my_func():
- process = Popen('svn ls -R foo', stdout=PIPE, stderr=PIPE, shell=True)
+ process = Popen(['svn', 'ls', '-R', 'foo'], stdout=PIPE, stderr=PIPE)
out, err = process.communicate()
if process.returncode:
raise RuntimeError('something bad happened')
@@ -36,7 +36,7 @@
compare(my_func(), b'o')
# testing calls were in the right order and with the correct parameters:
- process = call.Popen('svn ls -R foo', shell=True, stderr=PIPE, stdout=PIPE)
+ process = call.Popen(['svn', 'ls', '-R', 'foo'], stderr=PIPE, stdout=PIPE)
compare(Popen.all_calls, expected=[
process,
process.communicate()
@@ -144,8 +144,8 @@
compare(my_func(), b'o')
# testing calls were in the right order and with the correct parameters:
- root_call = call.Popen('svn ls -R foo',
- shell=True, stderr=PIPE, stdout=PIPE)
+ root_call = call.Popen(['svn', 'ls', '-R', 'foo'],
+ stderr=PIPE, stdout=PIPE)
compare(Popen.all_calls, expected=[
root_call,
root_call.communicate()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/tests/test_replace.py new/testfixtures-6.6.2/testfixtures/tests/test_replace.py
--- old/testfixtures-6.5.0/testfixtures/tests/test_replace.py 2018-12-19 13:08:08.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/tests/test_replace.py 2019-03-22 08:47:24.000000000 +0100
@@ -246,6 +246,18 @@
test_something()
+ def test_replace_delattr_not_there_restored(self):
+
+ from testfixtures.tests import sample1
+
+ @replace('testfixtures.tests.sample1.foo',
+ not_there, strict=False)
+ def test_something(obj):
+ sample1.foo = 'bar'
+
+ test_something()
+ self.failIf(hasattr(sample1, 'foo'))
+
def test_replace_delattr_cant_remove(self):
with Replacer() as r:
with ShouldRaise(TypeError(
@@ -298,6 +310,19 @@
test_something()
+ self.assertEqual(sorted(someDict.keys()), ['complex_key', 'key'])
+
+ def test_replace_dict_ensure_key_not_there_restored(self):
+
+ from testfixtures.tests.sample1 import someDict
+
+ @replace('testfixtures.tests.sample1.someDict.badkey',
+ not_there, strict=False)
+ def test_something(obj):
+ someDict['badkey'] = 'some test value'
+
+ test_something()
+
self.assertEqual(sorted(someDict.keys()), ['complex_key', 'key'])
def test_replace_dict_not_there(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures/version.txt new/testfixtures-6.6.2/testfixtures/version.txt
--- old/testfixtures-6.5.0/testfixtures/version.txt 2019-01-28 23:25:22.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures/version.txt 2019-03-22 08:47:24.000000000 +0100
@@ -1 +1 @@
-6.5.0
+6.6.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures.egg-info/PKG-INFO new/testfixtures-6.6.2/testfixtures.egg-info/PKG-INFO
--- old/testfixtures-6.5.0/testfixtures.egg-info/PKG-INFO 2019-01-28 23:53:02.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures.egg-info/PKG-INFO 2019-03-22 08:47:36.000000000 +0100
@@ -1,12 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: testfixtures
-Version: 6.5.0
+Version: 6.6.2
Summary: A collection of helpers and mock objects for unit tests and doc tests.
Home-page: https://github.com/Simplistix/testfixtures
Author: Chris Withers
Author-email: chris(a)simplistix.co.uk
License: MIT
-Description-Content-Type: UNKNOWN
Description: ============
TestFixtures
============
@@ -76,3 +75,5 @@
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
+Provides-Extra: test
+Provides-Extra: build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures.egg-info/SOURCES.txt new/testfixtures-6.6.2/testfixtures.egg-info/SOURCES.txt
--- old/testfixtures-6.5.0/testfixtures.egg-info/SOURCES.txt 2019-01-28 23:53:02.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures.egg-info/SOURCES.txt 2019-03-22 08:47:36.000000000 +0100
@@ -1,11 +1,12 @@
+.carthorse.yml
.coveragerc
.gitignore
-.travis.yml
+.readthedocs.yml
LICENSE.txt
README.rst
-requirements.txt
setup.cfg
setup.py
+.circleci/config.yml
docs/Makefile
docs/api.txt
docs/changes.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/testfixtures-6.5.0/testfixtures.egg-info/requires.txt new/testfixtures-6.6.2/testfixtures.egg-info/requires.txt
--- old/testfixtures-6.5.0/testfixtures.egg-info/requires.txt 2019-01-28 23:53:02.000000000 +0100
+++ new/testfixtures-6.6.2/testfixtures.egg-info/requires.txt 2019-03-22 08:47:36.000000000 +0100
@@ -1,18 +1,16 @@
[build]
sphinx
-pkginfo
setuptools-git
wheel
twine
[test]
pytest>=3.6
+pytest-cov
+pytest-django
sybil
-coverage
-coveralls
zope.component
-pytest-django
twisted
[test:python_version < "3"]
1
0
Hello community,
here is the log from the commit of package python-sybil for openSUSE:Factory checked in at 2019-03-29 20:42:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sybil (Old)
and /work/SRC/openSUSE:Factory/.python-sybil.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-sybil"
Fri Mar 29 20:42:32 2019 rev:6 rq:689259 version:1.0.9
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-sybil/python-sybil.changes 2018-11-22 13:26:55.373912392 +0100
+++ /work/SRC/openSUSE:Factory/.python-sybil.new.25356/python-sybil.changes 2019-03-29 20:42:34.754678409 +0100
@@ -1,0 +2,8 @@
+Tue Mar 26 22:38:48 UTC 2019 - John Vandenberg <jayvdb(a)gmail.com>
+
+- Remove irrelevant and invalid runtime dependencies
+- Set pytest as a Recommends
+- Remove unnecessary build dependencies
+- Simplify %check routine
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-sybil.spec ++++++
--- /var/tmp/diff_new_pack.s712pg/_old 2019-03-29 20:42:35.322678391 +0100
+++ /var/tmp/diff_new_pack.s712pg/_new 2019-03-29 20:42:35.326678390 +0100
@@ -26,26 +26,14 @@
Url: https://github.com/cjw296/sybil
Source: https://files.pythonhosted.org/packages/source/s/sybil/sybil-%{version}.tar…
Patch0: sybil-pytest4.patch
-BuildRequires: %{python_module Sphinx}
BuildRequires: %{python_module nose}
-BuildRequires: %{python_module pkginfo}
BuildRequires: %{python_module pytest >= 3.5.0}
-BuildRequires: %{python_module python-coveralls}
BuildRequires: %{python_module setuptools-git}
BuildRequires: %{python_module setuptools}
-BuildRequires: %{python_module twine}
-BuildRequires: %{python_module virtualenv}
-BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
-Suggests: python-python-coveralls
+Recommends: python-pytest
Suggests: python-nose
-Suggests: python-pytest
-Suggests: python-sphinx
-Suggests: python-pkginfo
-Suggests: python-setuptools-git
-Suggests: python-twine
-Suggests: python-wheel
BuildArch: noarch
%python_subpackages
@@ -59,6 +47,7 @@
%prep
%setup -q -n sybil-%{version}
%patch0 -p1
+sed -i '/build=/d;/coveralls/d' setup.py
%build
%python_build
@@ -68,12 +57,7 @@
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-sed -i -e "s/'coveralls'/'python-coveralls'/" setup.py
-%{python_expand virtualenv-%$python_bin_suffix --system-site-packages --no-download testvenv-%$python_bin_suffix
-testvenv-%$python_bin_suffix/bin/pip install -e .[test,build]
-export PYTHONPATH=$PWD/testvenv-%$python_bin_suffix/lib/python%$python_bin_suffix/site-packages/:$PWD
-testvenv-%$python_bin_suffix/bin/python -m pytest && rm -Rf testvenv-%$python_bin_suffix
-}
+%python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} $python -m pytest
%files %{python_files}
%doc README.rst docs/changes.rst
1
0
Hello community,
here is the log from the commit of package python-py2pack for openSUSE:Factory checked in at 2019-03-29 20:42:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-py2pack (Old)
and /work/SRC/openSUSE:Factory/.python-py2pack.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-py2pack"
Fri Mar 29 20:42:30 2019 rev:48 rq:689256 version:0.8.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-py2pack/python-py2pack.changes 2018-12-07 14:39:32.638763115 +0100
+++ /work/SRC/openSUSE:Factory/.python-py2pack.new.25356/python-py2pack.changes 2019-03-29 20:42:31.674678504 +0100
@@ -1,0 +2,6 @@
+Tue Mar 26 15:43:09 UTC 2019 - John Vandenberg <jayvdb(a)gmail.com>
+
+- Fix fdupes
+- Install only Python 3 Sphinx for docs
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-py2pack.spec ++++++
--- /var/tmp/diff_new_pack.CqtZev/_old 2019-03-29 20:42:33.150678458 +0100
+++ /var/tmp/diff_new_pack.CqtZev/_new 2019-03-29 20:42:33.194678457 +0100
@@ -26,12 +26,14 @@
URL: https://github.com/openSUSE/py2pack
Source: https://files.pythonhosted.org/packages/source/p/py2pack/py2pack-%{version}…
BuildRequires: %{python_module Jinja2}
-BuildRequires: %{python_module Sphinx}
BuildRequires: %{python_module metaextract}
BuildRequires: %{python_module pbr}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module six}
-BuildRequires: %{python_module sphinxcontrib-programoutput}
+# SECTION doc requirements
+BuildRequires: python3-Sphinx
+BuildRequires: python3-sphinxcontrib-programoutput
+# /SECTION
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-Jinja2
@@ -70,6 +72,7 @@
%install
%python_install
%python_clone -a %{buildroot}%{_bindir}/py2pack
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
%post
%python_install_alternative py2pack
1
0
Hello community,
here is the log from the commit of package timescaledb for openSUSE:Factory checked in at 2019-03-29 20:41:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/timescaledb (Old)
and /work/SRC/openSUSE:Factory/.timescaledb.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "timescaledb"
Fri Mar 29 20:41:39 2019 rev:5 rq:670882 version:1.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/timescaledb/timescaledb.changes 2019-03-13 09:11:46.431408140 +0100
+++ /work/SRC/openSUSE:Factory/.timescaledb.new.25356/timescaledb.changes 2019-03-29 20:41:40.542680088 +0100
@@ -29,0 +30,23 @@
+Wed Jan 30 17:02:26 UTC 2019 - Bruno Friedmann <bruno(a)ioda-net.ch>
+
+- Update to release 1.2.0 (2019-01-29)
+ + Postgres 11 fully supported.
+ + Deprecation of adaptive chunking
+ + Advanced data lifecycle management : scheduled policies
+ support scheduled drop_chunks and reorder.
+ + Improved performance: support for ordered appends,
+ Note that ordered appends do not support ordering by time_bucket
+ at this time.
+ + first release to include Timescale-Licensed features.
+ LICENSE_TIMESCALE. This code can be found in tsl.
+ (tsl is not build on openSUSE)
+ + 1.1.1
+ - Fix issue when upgrading with pg_upgrade
+ - Fix a segfault that sometimes appeared in long COPYs
+ - Other bug and stability fixes
+- Packaging :
+ + Add -DAPACHE_ONLY=1 to avoid tsl code and submodules
+ + Multibuild : add postgresql11 now supported
+ + Deps : revisit BuildRequires
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ timescaledb.spec ++++++
--- /var/tmp/diff_new_pack.cuP6Kt/_old 2019-03-29 20:41:41.162680070 +0100
+++ /var/tmp/diff_new_pack.cuP6Kt/_new 2019-03-29 20:41:41.162680070 +0100
@@ -53,6 +53,9 @@
This build includes only Apache2 modules;
TSL (timescale licenced modules are not built).
+This build only Apache2 modules,
+TSL (timescale licenced modules are not build)
+
%prep
%setup -q -n %{sname}
# Remove static .so
1
0
Hello community,
here is the log from the commit of package python-iso8601 for openSUSE:Factory checked in at 2019-03-29 20:39:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-iso8601 (Old)
and /work/SRC/openSUSE:Factory/.python-iso8601.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-iso8601"
Fri Mar 29 20:39:27 2019 rev:15 rq:689817 version:0.1.11
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-iso8601/python-iso8601.changes 2019-01-15 13:16:19.468360161 +0100
+++ /work/SRC/openSUSE:Factory/.python-iso8601.new.25356/python-iso8601.changes 2019-03-29 20:39:29.994686647 +0100
@@ -1,0 +2,12 @@
+Fri Mar 29 11:37:21 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Downgrade to 0.1.11:
+ * Reverts back to avoid API change that caused iso8601.Utc not
+ working on py3 (Fedora and Deb both ship this version)
+
+-------------------------------------------------------------------
+Fri Mar 29 11:34:21 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Download the sources from pypi and run fdupes
+
+-------------------------------------------------------------------
Old:
----
iso8601-0.1.12.tar.gz
New:
----
iso8601-0.1.11.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-iso8601.spec ++++++
--- /var/tmp/diff_new_pack.IjH4ZD/_old 2019-03-29 20:39:30.538686593 +0100
+++ /var/tmp/diff_new_pack.IjH4ZD/_new 2019-03-29 20:39:30.542686592 +0100
@@ -18,15 +18,16 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-iso8601
-Version: 0.1.12
+Version: 0.1.11
Release: 0
Summary: Python module to parse ISO 8601 dates
License: MIT
Group: Development/Languages/Python
URL: http://code.google.com/p/pyiso8601/
-Source: iso8601-%{version}.tar.gz
+Source: https://files.pythonhosted.org/packages/source/i/iso8601/iso8601-%{version}…
BuildRequires: %{python_module pytest >= 2.4.2}
BuildRequires: %{python_module setuptools}
+BuildRequires: fdupes
BuildRequires: python-rpm-macros
BuildArch: noarch
%python_subpackages
@@ -43,9 +44,10 @@
%install
%python_install
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-%python_exec %{_bindir}/py.test --verbose iso8601
+%pytest
%files %{python_files}
%license LICENSE
++++++ iso8601-0.1.12.tar.gz -> iso8601-0.1.11.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iso8601-0.1.12/PKG-INFO new/iso8601-0.1.11/PKG-INFO
--- old/iso8601-0.1.12/PKG-INFO 2017-07-28 00:04:32.000000000 +0200
+++ new/iso8601-0.1.11/PKG-INFO 2015-11-03 17:11:42.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: iso8601
-Version: 0.1.12
+Version: 0.1.11
Summary: Simple module to parse ISO 8601 dates
Home-page: https://bitbucket.org/micktwomey/pyiso8601
Author: Michael Twomey
@@ -103,7 +103,6 @@
- Python 3.3
- Python 3.4
- Python 3.5
- - Python 3.6
- PyPy
- PyPy 3
@@ -116,11 +115,6 @@
Changes
=======
- 0.1.12
- ------
-
- * Fix class reference for iso8601.Utc in module docstring (thanks to felixschwarz in https://bitbucket.org/micktwomey/pyiso8601/pull-requests/7/fix-class-refere…)
-
0.1.11
------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iso8601-0.1.12/README.rst new/iso8601-0.1.11/README.rst
--- old/iso8601-0.1.12/README.rst 2017-07-27 23:51:06.000000000 +0200
+++ new/iso8601-0.1.11/README.rst 2015-11-03 17:03:37.000000000 +0100
@@ -95,7 +95,6 @@
- Python 3.3
- Python 3.4
- Python 3.5
-- Python 3.6
- PyPy
- PyPy 3
@@ -108,11 +107,6 @@
Changes
=======
-0.1.12
-------
-
-* Fix class reference for iso8601.Utc in module docstring (thanks to felixschwarz in https://bitbucket.org/micktwomey/pyiso8601/pull-requests/7/fix-class-refere…)
-
0.1.11
------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iso8601-0.1.12/dev-requirements.txt new/iso8601-0.1.11/dev-requirements.txt
--- old/iso8601-0.1.12/dev-requirements.txt 2017-07-27 23:52:52.000000000 +0200
+++ new/iso8601-0.1.11/dev-requirements.txt 2015-11-03 13:01:03.000000000 +0100
@@ -1,6 +1,5 @@
devpi>=1.2.1
pytest>=2.5.2
Sphinx>=1.2.1
-tox-pyenv>=1.0.3
tox>=1.7.0
wheel>=0.22.0
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iso8601-0.1.12/iso8601/iso8601.py new/iso8601-0.1.11/iso8601/iso8601.py
--- old/iso8601-0.1.12/iso8601/iso8601.py 2017-07-27 23:41:48.000000000 +0200
+++ new/iso8601-0.1.11/iso8601/iso8601.py 2015-11-03 13:07:12.000000000 +0100
@@ -3,18 +3,21 @@
Basic usage:
>>> import iso8601
>>> iso8601.parse_date("2007-01-25T12:00:00Z")
-datetime.datetime(2007, 1, 25, 12, 0, tzinfo=<iso8601.Utc ...>)
+datetime.datetime(2007, 1, 25, 12, 0, tzinfo=<iso8601.iso8601.Utc ...>)
>>>
"""
-import datetime
+from datetime import (
+ datetime,
+ timedelta,
+ tzinfo
+)
from decimal import Decimal
import sys
import re
-__all__ = ["parse_date", "ParseError", "UTC",
- "FixedOffset"]
+__all__ = ["parse_date", "ParseError", "UTC"]
if sys.version_info >= (3, 0, 0):
_basestring = str
@@ -70,69 +73,61 @@
class ParseError(Exception):
"""Raised when there is a problem parsing a date string"""
-if sys.version_info >= (3, 2, 0):
- UTC = datetime.timezone.utc
- def FixedOffset(offset_hours, offset_minutes, name):
- return datetime.timezone(
- datetime.timedelta(
- hours=offset_hours, minutes=offset_minutes),
- name)
-else:
- # Yoinked from python docs
- ZERO = datetime.timedelta(0)
- class Utc(datetime.tzinfo):
- """UTC Timezone
-
- """
- def utcoffset(self, dt):
- return ZERO
-
- def tzname(self, dt):
- return "UTC"
-
- def dst(self, dt):
- return ZERO
-
- def __repr__(self):
- return "<iso8601.Utc>"
-
- UTC = Utc()
-
- class FixedOffset(datetime.tzinfo):
- """Fixed offset in hours and minutes from UTC
-
- """
- def __init__(self, offset_hours, offset_minutes, name):
- self.__offset_hours = offset_hours # Keep for later __getinitargs__
- self.__offset_minutes = offset_minutes # Keep for later __getinitargs__
- self.__offset = datetime.timedelta(
- hours=offset_hours, minutes=offset_minutes)
- self.__name = name
-
- def __eq__(self, other):
- if isinstance(other, FixedOffset):
- return (
- (other.__offset == self.__offset)
- and
- (other.__name == self.__name)
- )
- return NotImplemented
-
- def __getinitargs__(self):
- return (self.__offset_hours, self.__offset_minutes, self.__name)
-
- def utcoffset(self, dt):
- return self.__offset
+# Yoinked from python docs
+ZERO = timedelta(0)
+class Utc(tzinfo):
+ """UTC Timezone
+
+ """
+ def utcoffset(self, dt):
+ return ZERO
+
+ def tzname(self, dt):
+ return "UTC"
+
+ def dst(self, dt):
+ return ZERO
+
+ def __repr__(self):
+ return "<iso8601.Utc>"
+
+UTC = Utc()
+
+class FixedOffset(tzinfo):
+ """Fixed offset in hours and minutes from UTC
+
+ """
+ def __init__(self, offset_hours, offset_minutes, name):
+ self.__offset_hours = offset_hours # Keep for later __getinitargs__
+ self.__offset_minutes = offset_minutes # Keep for later __getinitargs__
+ self.__offset = timedelta(hours=offset_hours, minutes=offset_minutes)
+ self.__name = name
+
+ def __eq__(self, other):
+ if isinstance(other, FixedOffset):
+ return (
+ (other.__offset == self.__offset)
+ and
+ (other.__name == self.__name)
+ )
+ if isinstance(other, tzinfo):
+ return other == self
+ return False
+
+ def __getinitargs__(self):
+ return (self.__offset_hours, self.__offset_minutes, self.__name)
- def tzname(self, dt):
- return self.__name
+ def utcoffset(self, dt):
+ return self.__offset
- def dst(self, dt):
- return ZERO
+ def tzname(self, dt):
+ return self.__name
- def __repr__(self):
- return "<FixedOffset %r %r>" % (self.__name, self.__offset)
+ def dst(self, dt):
+ return ZERO
+ def __repr__(self):
+ return "<FixedOffset %r %r>" % (self.__name, self.__offset)
def to_int(d, key, default_to_zero=False, default=None, required=True):
"""Pull a value from the dict and convert to int
@@ -200,7 +195,7 @@
groups["second_fraction"] = int(Decimal("0.%s" % (groups["second_fraction"] or 0)) * Decimal("1000000.0"))
try:
- return datetime.datetime(
+ return datetime(
year=to_int(groups, "year"),
month=to_int(groups, "month", default=to_int(groups, "monthdash", required=False, default=1)),
day=to_int(groups, "day", default=to_int(groups, "daydash", required=False, default=1)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iso8601-0.1.12/iso8601/test_iso8601.py new/iso8601-0.1.11/iso8601/test_iso8601.py
--- old/iso8601-0.1.12/iso8601/test_iso8601.py 2017-07-27 23:41:48.000000000 +0200
+++ new/iso8601-0.1.11/iso8601/test_iso8601.py 2015-11-03 13:01:03.000000000 +0100
@@ -12,10 +12,6 @@
def test_iso8601_regex():
assert iso8601.ISO8601_REGEX.match("2006-10-11T00:14:33Z")
-def test_fixedoffset_eq():
- # See https://bitbucket.org/micktwomey/pyiso8601/issues/19
- datetime.tzinfo() == iso8601.FixedOffset(2, 0, '+2:00')
-
def test_parse_no_timezone_different_default():
tz = iso8601.FixedOffset(2, 0, "test offset")
d = iso8601.parse_date("2007-01-01T08:00:00", default_timezone=tz)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iso8601-0.1.12/iso8601.egg-info/PKG-INFO new/iso8601-0.1.11/iso8601.egg-info/PKG-INFO
--- old/iso8601-0.1.12/iso8601.egg-info/PKG-INFO 2017-07-28 00:04:32.000000000 +0200
+++ new/iso8601-0.1.11/iso8601.egg-info/PKG-INFO 2015-11-03 17:11:42.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: iso8601
-Version: 0.1.12
+Version: 0.1.11
Summary: Simple module to parse ISO 8601 dates
Home-page: https://bitbucket.org/micktwomey/pyiso8601
Author: Michael Twomey
@@ -103,7 +103,6 @@
- Python 3.3
- Python 3.4
- Python 3.5
- - Python 3.6
- PyPy
- PyPy 3
@@ -116,11 +115,6 @@
Changes
=======
- 0.1.12
- ------
-
- * Fix class reference for iso8601.Utc in module docstring (thanks to felixschwarz in https://bitbucket.org/micktwomey/pyiso8601/pull-requests/7/fix-class-refere…)
-
0.1.11
------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iso8601-0.1.12/setup.cfg new/iso8601-0.1.11/setup.cfg
--- old/iso8601-0.1.12/setup.cfg 2017-07-28 00:04:32.000000000 +0200
+++ new/iso8601-0.1.11/setup.cfg 2015-11-03 17:11:42.000000000 +0100
@@ -1,4 +1,5 @@
[egg_info]
tag_build =
+tag_svn_revision = 0
tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iso8601-0.1.12/setup.py new/iso8601-0.1.11/setup.py
--- old/iso8601-0.1.12/setup.py 2017-07-27 23:41:48.000000000 +0200
+++ new/iso8601-0.1.11/setup.py 2015-08-10 16:04:15.000000000 +0200
@@ -9,7 +9,7 @@
setup(
name="iso8601",
- version="0.1.12",
+ version="0.1.11",
description=long_description.split("\n")[0],
long_description=long_description,
author="Michael Twomey",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iso8601-0.1.12/tox.ini new/iso8601-0.1.11/tox.ini
--- old/iso8601-0.1.12/tox.ini 2017-07-27 23:46:49.000000000 +0200
+++ new/iso8601-0.1.11/tox.ini 2015-11-03 16:37:45.000000000 +0100
@@ -1,5 +1,5 @@
[tox]
-envlist = py26,py27,py32,py33,py34,py35,py36,pypy,pypy3
+envlist = py26,py27,py32,py33,py34,py35,pypy,pypy3
[testenv]
deps=pytest>=2.4.2
1
0