openSUSE Commits
Threads by month
- ----- 2024 -----
- June
- 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
January 2016
- 1 participants
- 1523 discussions
Hello community,
here is the log from the commit of package fence-agents for openSUSE:Factory checked in at 2016-01-28 17:24:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fence-agents (Old)
and /work/SRC/openSUSE:Factory/.fence-agents.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fence-agents"
Changes:
--------
--- /work/SRC/openSUSE:Factory/fence-agents/fence-agents.changes 2016-01-15 10:41:21.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.fence-agents.new/fence-agents.changes 2016-01-28 17:25:38.000000000 +0100
@@ -1,0 +2,6 @@
+Wed Jan 27 10:27:41 UTC 2016 - kgronlund(a)suse.com
+
+- Package fence_dummy in fence-agents-devel package
+- Clean up package
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ fence-agents.spec ++++++
--- /var/tmp/diff_new_pack.bDgWKC/_old 2016-01-28 17:25:38.000000000 +0100
+++ /var/tmp/diff_new_pack.bDgWKC/_new 2016-01-28 17:25:38.000000000 +0100
@@ -27,15 +27,10 @@
Url: https://github.com/ClusterLabs/fence-agents
Source0: %{name}-%{version}.tar.gz
-Requires: python-curl
-Requires: python-openssl
-Requires: python-pexpect
-Requires: python-requests
-Requires: python-suds
-
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: autoconf
BuildRequires: automake
+BuildRequires: fdupes
BuildRequires: glibc-devel
BuildRequires: libtool
BuildRequires: libxml2-tools
@@ -53,20 +48,16 @@
BuildRequires: python-xml
BuildRequires: xz
-%package -n fence-agents-unsupported
-Summary: Fence Agents for Pacemaker from RHCS
-Group: Productivity/Clustering/HA
-Requires: %{name} = %{version}-%{release}
-# These are requirements of specific fencing agents; when moving the
-# agent over to the supported main package, make sure to also shift the
-# Requires if needed
Requires: net-snmp
Requires: openssh
Requires: perl-Net-Telnet
+Requires: python-curl
+Requires: python-openssl
+Requires: python-pexpect
+Requires: python-requests
+Requires: python-suds
Requires: sg3_utils
Requires: telnet
-# for fence_vmware_soap:
-Requires: python-suds
# This is required by fence_virsh. Per discussion on fedora-devel
# switching from package to file based require.
Requires: /usr/bin/virsh
@@ -75,83 +66,23 @@
# have changed Requires around. Make sure to get the right one.
Requires: /usr/bin/ipmitool
+%if 0%{?with_regression_tests}
+BuildRequires: time
+%endif
+
%description
Fence Agents is a collection of scripts to handle remote power
management for several devices.
+%package devel
+Summary: Fence Agents for Pacemaker from RHCS
+Group: Development/Tools/Other
+Requires: %{name} = %{version}
-
-Authors:
---------
- Abhijith Das <adas(a)redhat.com>
- Adam Manthei <amanthei(a)redhat.com>
- A. J. Lewis <alewis(a)redhat.com>
- Alasdair G. Kergon <agk(a)redhat.com>
- Andrew Price <andy(a)andrewprice.me.uk>
- Benjamin Marzinski <bmarzins(a)redhat.com>
- Bob Peterson <rpeterso(a)redhat.com>
- Chris Feist <cfeist(a)redhat.com>
- Christine Caulfield <ccaulfie(a)redhat.com>
- Daniel Phillips <phillips(a)redhat.com>
- David Teigland <teigland(a)redhat.com>
- Fabio M. Di Nitto <fdinitto(a)redhat.com>
- James Parsons <jparsons(a)redhat.com>
- Joel Becker <joel.becker(a)oracle.com>
- Jonathan Brassow <jbrassow(a)redhat.com>
- jparsons <jparsons(a)redhat.com>
- Ken Preslan <kpreslan(a)redhat.com>
- Lon Hohberger <lhh(a)redhat.com>
- Marc - A. Dahlhaus <mad(a)wol.de>
- Marek 'marx' Grac <mgrac(a)redhat.com>
- Mark Hlawatschek <hlawatschek(a)atix.de>
- Michael Conrad Tadpol Tilstra <mtilstra(a)redhat.com>
- Patrick Caulfield <pcaulfie(a)redhat.com>
- Robert Peterson <rpeterso(a)redhat.com>
- Ross Vandegrift <ross(a)kallisti.us>
- Ryan McCabe <rmccabe(a)redhat.com>
- Ryan O'Hara <rohara(a)redhat.com>
- Stanko Kupcevic <kupcevic(a)redhat.com>
- Steven Whitehouse <swhiteho(a)redhat.com>
- Wendy Cheng <wcheng(a)redhat.com>
-
-%description -n fence-agents-unsupported
+%description devel
Fence Agents is a collection of scripts to handle remote power
-management for several devices.
-
-
-
-Authors:
---------
- Abhijith Das <adas(a)redhat.com>
- Adam Manthei <amanthei(a)redhat.com>
- A. J. Lewis <alewis(a)redhat.com>
- Alasdair G. Kergon <agk(a)redhat.com>
- Andrew Price <andy(a)andrewprice.me.uk>
- Benjamin Marzinski <bmarzins(a)redhat.com>
- Bob Peterson <rpeterso(a)redhat.com>
- Chris Feist <cfeist(a)redhat.com>
- Christine Caulfield <ccaulfie(a)redhat.com>
- Daniel Phillips <phillips(a)redhat.com>
- David Teigland <teigland(a)redhat.com>
- Fabio M. Di Nitto <fdinitto(a)redhat.com>
- James Parsons <jparsons(a)redhat.com>
- Joel Becker <joel.becker(a)oracle.com>
- Jonathan Brassow <jbrassow(a)redhat.com>
- jparsons <jparsons(a)redhat.com>
- Ken Preslan <kpreslan(a)redhat.com>
- Lon Hohberger <lhh(a)redhat.com>
- Marc - A. Dahlhaus <mad(a)wol.de>
- Marek 'marx' Grac <mgrac(a)redhat.com>
- Mark Hlawatschek <hlawatschek(a)atix.de>
- Michael Conrad Tadpol Tilstra <mtilstra(a)redhat.com>
- Patrick Caulfield <pcaulfie(a)redhat.com>
- Robert Peterson <rpeterso(a)redhat.com>
- Ross Vandegrift <ross(a)kallisti.us>
- Ryan McCabe <rmccabe(a)redhat.com>
- Ryan O'Hara <rohara(a)redhat.com>
- Stanko Kupcevic <kupcevic(a)redhat.com>
- Steven Whitehouse <swhiteho(a)redhat.com>
- Wendy Cheng <wcheng(a)redhat.com>
+management for several devices. This package contains
+fence agents only suitable for development.
%prep
%setup -q -n %{name}-%{version}
@@ -168,42 +99,38 @@
## tree fix up
# fix libfence permissions
-chmod 0755 %{buildroot}%{_datadir}/fence/*.py
+chmod 0755 %{buildroot}%{_datadir}/fence/fenc*.py
# remove docs
rm -rf %{buildroot}/usr/share/doc/fence-agents
# create links to agents in the plugins dir
mkdir -p %{buildroot}%{plugin_dir}
ln -s %{_sbindir}/fence_cisco_ucs %{buildroot}%{plugin_dir}
+%fdupes %buildroot%{_sbindir}
+%fdupes %buildroot%{_datadir}/cluster
-%clean
-if
- [ -n "${RPM_BUILD_ROOT}" -a "${RPM_BUILD_ROOT}" != "/" ]
-then
- rm -rf $RPM_BUILD_ROOT
-fi
+%if 0%{?with_regression_tests}
+%check
+make check
+PYTHONPATH=fence/agents/lib python fence/agents/lib/tests/test_fencing.py
+%endif
%files
%defattr(-,root,root,-)
%doc doc/COPYING.* doc/COPYRIGHT doc/README.licence
-#%%dir %%{_sysconfdir}/cluster
%dir %{plugin_dir}
%dir %{_libdir}/stonith/plugins
%dir %{_libdir}/stonith
%{_datadir}/fence
%{_datadir}/cluster
-#%%{_sbindir}/fence_cisco_ucs
-#%%{_mandir}/man8/fence_cisco_ucs*
%{plugin_dir}/fence_cisco_ucs
-
-#%%files -n fence-agents-unsupported
-#%%defattr(-,root,root,-)
-#%%config(noreplace) %%{_sysconfdir}/cluster/fence_na.conf
%{_sbindir}/fence_*
-#%%exclude %%{_sbindir}/fence_cisco_ucs
%exclude %{_sbindir}/fence_dummy
%exclude %{_mandir}/man8/fence_dummy*
%{_mandir}/man8/fence_*
-#%%exclude %%{_mandir}/man8/fence_cisco_ucs*
%{_libexecdir}/fence_*
+%files devel
+%{_sbindir}/fence_dummy
+%{_mandir}/man8/fence_dummy*
+
%changelog
1
0
Hello community,
here is the log from the commit of package perl-Minion for openSUSE:Factory checked in at 2016-01-28 17:24:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Minion (Old)
and /work/SRC/openSUSE:Factory/.perl-Minion.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Minion"
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Minion/perl-Minion.changes 2016-01-22 01:09:53.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.perl-Minion.new/perl-Minion.changes 2016-01-28 17:25:36.000000000 +0100
@@ -1,0 +2,9 @@
+Wed Jan 27 10:13:10 UTC 2016 - coolo(a)suse.com
+
+- updated to 4.04
+ see /usr/share/doc/packages/perl-Minion/Changes
+
+ 4.04 2016-01-23
+ - Updated Minion::Backend::Pg to use new Mojo::Pg features.
+
+-------------------------------------------------------------------
Old:
----
Minion-4.03.tar.gz
New:
----
Minion-4.04.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Minion.spec ++++++
--- /var/tmp/diff_new_pack.LHSaYF/_old 2016-01-28 17:25:37.000000000 +0100
+++ /var/tmp/diff_new_pack.LHSaYF/_new 2016-01-28 17:25:37.000000000 +0100
@@ -17,7 +17,7 @@
Name: perl-Minion
-Version: 4.03
+Version: 4.04
Release: 0
%define cpan_name Minion
Summary: Job queue
++++++ Minion-4.03.tar.gz -> Minion-4.04.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-4.03/Changes new/Minion-4.04/Changes
--- old/Minion-4.03/Changes 2016-01-17 17:52:03.000000000 +0100
+++ new/Minion-4.04/Changes 2016-01-23 04:33:42.000000000 +0100
@@ -1,4 +1,7 @@
+4.04 2016-01-23
+ - Updated Minion::Backend::Pg to use new Mojo::Pg features.
+
4.03 2016-01-17
- Removed an unused index from Minion::Backend::Pg.
- Fixed a bug where the worker command would always watch the default queue.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-4.03/META.json new/Minion-4.04/META.json
--- old/Minion-4.03/META.json 2016-01-17 23:33:08.000000000 +0100
+++ new/Minion-4.04/META.json 2016-01-23 04:38:50.000000000 +0100
@@ -54,5 +54,5 @@
},
"x_IRC" : "irc://irc.perl.org/#mojo"
},
- "version" : "4.03"
+ "version" : "4.04"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-4.03/META.yml new/Minion-4.04/META.yml
--- old/Minion-4.03/META.yml 2016-01-17 23:33:08.000000000 +0100
+++ new/Minion-4.04/META.yml 2016-01-23 04:38:50.000000000 +0100
@@ -27,4 +27,4 @@
homepage: http://mojolicious.org
license: http://www.opensource.org/licenses/artistic-license-2.0
repository: https://github.com/kraih/minion.git
-version: '4.03'
+version: '4.04'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-4.03/lib/Minion/Backend/Pg.pm new/Minion-4.04/lib/Minion/Backend/Pg.pm
--- old/Minion-4.03/lib/Minion/Backend/Pg.pm 2016-01-17 23:30:50.000000000 +0100
+++ new/Minion-4.04/lib/Minion/Backend/Pg.pm 2016-01-23 04:33:36.000000000 +0100
@@ -74,9 +74,8 @@
sub new {
my $self = shift->SUPER::new(pg => Mojo::Pg->new(@_));
- my $pg = $self->pg->max_connections(1);
+ my $pg = $self->pg->auto_migrate(1)->max_connections(1);
$pg->migrations->name('minion')->from_data;
- $pg->once(connection => sub { shift->migrations->migrate });
return $self;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Minion-4.03/lib/Minion.pm new/Minion-4.04/lib/Minion.pm
--- old/Minion-4.03/lib/Minion.pm 2016-01-06 19:48:29.000000000 +0100
+++ new/Minion-4.04/lib/Minion.pm 2016-01-22 22:30:56.000000000 +0100
@@ -16,7 +16,7 @@
has remove_after => 864000;
has tasks => sub { {} };
-our $VERSION = '4.03';
+our $VERSION = '4.04';
sub add_task { ($_[0]->tasks->{$_[1]} = $_[2]) and return $_[0] }
1
0
Hello community,
here is the log from the commit of package easytag for openSUSE:Factory checked in at 2016-01-28 17:24:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/easytag (Old)
and /work/SRC/openSUSE:Factory/.easytag.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "easytag"
Changes:
--------
--- /work/SRC/openSUSE:Factory/easytag/easytag.changes 2015-08-31 22:59:41.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.easytag.new/easytag.changes 2016-01-28 17:25:32.000000000 +0100
@@ -1,0 +2,21 @@
+Tue Jan 26 08:00:11 UTC 2016 - zaitor(a)opensuse.org
+
+- Update to version 2.4.1:
+ + Opus parsing crash fix.
+ + Playlist writing crash fix.
+ + Handle FLAC files with an invalid sample rate.
+ + Fix generated playlist order.
+ + Consistently use the GLib filename encoding.
+ + Extensive refactoring of locale and encoding handling.
+ + Improve fallback legacy locale detection.
+ + CDDB fill fields fix.
+ + Fix CDDB search fields and categories settings handling.
+ + Use the correct encoding when writing ID3v2.4 tags.
+ + Fix a linking error on Mac OS X.
+ + Improve illegal character logic, especially for trailing
+ characters.
+ + Remove several outdated and unnecessary Windows compatibility
+ wrappers.
+ + Updated translations.
+
+-------------------------------------------------------------------
Old:
----
easytag-2.4.0.tar.xz
New:
----
easytag-2.4.1.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ easytag.spec ++++++
--- /var/tmp/diff_new_pack.e7q078/_old 2016-01-28 17:25:33.000000000 +0100
+++ /var/tmp/diff_new_pack.e7q078/_new 2016-01-28 17:25:33.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package easytag
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
@@ -17,7 +17,7 @@
Name: easytag
-Version: 2.4.0
+Version: 2.4.1
Release: 0
Summary: GTK+ tag editor for audio files
License: GPL-2.0+
@@ -38,7 +38,7 @@
BuildRequires: pkgconfig(gio-2.0) >= 2.38.0
BuildRequires: pkgconfig(gtk+-3.0) >= 3.10.0
BuildRequires: pkgconfig(id3tag)
-BuildRequires: pkgconfig(libnautilus-extension)
+BuildRequires: pkgconfig(libnautilus-extension) >= 3.0
BuildRequires: pkgconfig(ogg) >= 1.0
BuildRequires: pkgconfig(opusfile)
BuildRequires: pkgconfig(speex)
++++++ easytag-2.4.0.tar.xz -> easytag-2.4.1.tar.xz ++++++
++++ 80748 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package syncthing for openSUSE:Factory checked in at 2016-01-28 17:24:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/syncthing (Old)
and /work/SRC/openSUSE:Factory/.syncthing.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "syncthing"
Changes:
--------
--- /work/SRC/openSUSE:Factory/syncthing/syncthing.changes 2016-01-20 09:54:51.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.syncthing.new/syncthing.changes 2016-01-28 17:25:31.000000000 +0100
@@ -1,0 +2,7 @@
+Wed Jan 27 06:26:36 UTC 2016 - sor.alexei(a)meowr.ru
+
+- Update to 0.12.16:
+ * Don't require restart for usage reporting changes.
+ * Avoid spurious scans with inotify package.
+
+-------------------------------------------------------------------
Old:
----
syncthing-source-v0.12.15.tar.gz
New:
----
syncthing-source-v0.12.16.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ syncthing.spec ++++++
--- /var/tmp/diff_new_pack.dAaexx/_old 2016-01-28 17:25:32.000000000 +0100
+++ /var/tmp/diff_new_pack.dAaexx/_new 2016-01-28 17:25:32.000000000 +0100
@@ -17,7 +17,7 @@
Name: syncthing
-Version: 0.12.15
+Version: 0.12.16
Release: 0
Summary: FOSS Continuous File Synchronisation
License: MPL-2.0
++++++ syncthing-source-v0.12.15.tar.gz -> syncthing-source-v0.12.16.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/RELEASE new/syncthing/RELEASE
--- old/syncthing/RELEASE 2016-01-17 10:58:06.000000000 +0100
+++ new/syncthing/RELEASE 2016-01-24 08:14:53.000000000 +0100
@@ -1 +1 @@
-v0.12.15
+v0.12.16
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/build.go new/syncthing/build.go
--- old/syncthing/build.go 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/build.go 2016-01-24 08:14:48.000000000 +0100
@@ -26,6 +26,7 @@
"runtime"
"strconv"
"strings"
+ "text/template"
"time"
)
@@ -331,33 +332,32 @@
}
}
- control := `Package: syncthing
-Architecture: {{arch}}
-Depends: libc6
-Version: {{version}}
-Maintainer: Syncthing Release Management <release(a)syncthing.net>
-Description: Open Source Continuous File Synchronization
- Syncthing does bidirectional synchronization of files between two or
- more computers.
-`
- changelog := `syncthing ({{version}}); urgency=medium
-
- * Packaging of {{version}}.
-
- -- Jakob Borg <jakob(a)nym.se> {{date}}
-`
-
- control = strings.Replace(control, "{{arch}}", debarch, -1)
- control = strings.Replace(control, "{{version}}", version[1:], -1)
- changelog = strings.Replace(changelog, "{{arch}}", debarch, -1)
- changelog = strings.Replace(changelog, "{{version}}", version[1:], -1)
- changelog = strings.Replace(changelog, "{{date}}", time.Now().Format(time.RFC1123), -1)
-
os.MkdirAll("deb/DEBIAN", 0755)
- ioutil.WriteFile("deb/DEBIAN/control", []byte(control), 0644)
- ioutil.WriteFile("deb/DEBIAN/compat", []byte("9\n"), 0644)
- ioutil.WriteFile("deb/DEBIAN/changelog", []byte(changelog), 0644)
+ data := map[string]string{
+ "arch": debarch,
+ "version": version[1:],
+ "date": time.Now().Format(time.RFC1123),
+ }
+ for _, file := range listFiles("debian") {
+ tpl, err := template.New(filepath.Base(file)).ParseFiles(file)
+ if err != nil {
+ log.Fatal(err)
+ }
+ outFile := filepath.Join("deb/DEBIAN", filepath.Base(file))
+ out, err := os.Create(outFile)
+ if err != nil {
+ log.Fatal(err)
+ }
+ if err := tpl.Execute(out, data); err != nil {
+ log.Fatal(err)
+ }
+ if err := out.Close(); err != nil {
+ log.Fatal(err)
+ }
+ info, _ := os.Lstat(file)
+ os.Chmod(outFile, info.Mode())
+ }
}
func copyFile(src, dst string, perm os.FileMode) error {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/cmd/syncthing/gui.go new/syncthing/cmd/syncthing/gui.go
--- old/syncthing/cmd/syncthing/gui.go 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/cmd/syncthing/gui.go 2016-01-24 08:14:48.000000000 +0100
@@ -1220,7 +1220,7 @@
func (v jsonVersionVector) MarshalJSON() ([]byte, error) {
res := make([]string, len(v))
for i, c := range v {
- res[i] = fmt.Sprintf("%d:%d", c.ID, c.Value)
+ res[i] = fmt.Sprintf("%v:%d", c.ID, c.Value)
}
return json.Marshal(res)
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/cmd/syncthing/main.go new/syncthing/cmd/syncthing/main.go
--- old/syncthing/cmd/syncthing/main.go 2016-01-13 22:34:47.000000000 +0100
+++ new/syncthing/cmd/syncthing/main.go 2016-01-24 08:14:48.000000000 +0100
@@ -1206,7 +1206,7 @@
// short ID:s; that is, that the devices in the cluster all have unique
// initial 64 bits.
func checkShortIDs(cfg *config.Wrapper) error {
- exists := make(map[uint64]protocol.DeviceID)
+ exists := make(map[protocol.ShortID]protocol.DeviceID)
for deviceID := range cfg.Devices() {
shortID := deviceID.Short()
if otherID, ok := exists[shortID]; ok {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/debian/changelog new/syncthing/debian/changelog
--- old/syncthing/debian/changelog 1970-01-01 01:00:00.000000000 +0100
+++ new/syncthing/debian/changelog 2016-01-24 08:14:48.000000000 +0100
@@ -0,0 +1,5 @@
+syncthing ({{.version}}); urgency=medium
+
+ * Packaging of {{.version}}.
+
+ -- Syncthing Release Management <release(a)syncthing.net> {{.date}}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/debian/compat new/syncthing/debian/compat
--- old/syncthing/debian/compat 1970-01-01 01:00:00.000000000 +0100
+++ new/syncthing/debian/compat 2016-01-24 08:14:48.000000000 +0100
@@ -0,0 +1 @@
+9
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/debian/control new/syncthing/debian/control
--- old/syncthing/debian/control 1970-01-01 01:00:00.000000000 +0100
+++ new/syncthing/debian/control 2016-01-24 08:14:48.000000000 +0100
@@ -0,0 +1,8 @@
+Package: syncthing
+Architecture: {{.arch}}
+Depends: libc6, procps
+Version: {{.version}}
+Maintainer: Syncthing Release Management <release(a)syncthing.net>
+Description: Open Source Continuous File Synchronization
+ Syncthing does bidirectional synchronization of files between two or
+ more computers.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/debian/postinst new/syncthing/debian/postinst
--- old/syncthing/debian/postinst 1970-01-01 01:00:00.000000000 +0100
+++ new/syncthing/debian/postinst 2016-01-24 08:14:48.000000000 +0100
@@ -0,0 +1,6 @@
+#!/bin/bash
+set -euo pipefail
+
+if [[ ${1:-} == configure ]]; then
+ pkill -x -HUP syncthing || true
+fi
Files old/syncthing/extra/FAQ.pdf and new/syncthing/extra/FAQ.pdf differ
Files old/syncthing/extra/Getting-Started.pdf and new/syncthing/extra/Getting-Started.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/gui/default/assets/lang/lang-pt-BR.json new/syncthing/gui/default/assets/lang/lang-pt-BR.json
--- old/syncthing/gui/default/assets/lang/lang-pt-BR.json 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/gui/default/assets/lang/lang-pt-BR.json 2016-01-24 08:14:48.000000000 +0100
@@ -119,7 +119,7 @@
"Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Caminho para a pasta na máquina local. Será criado caso não exista. O caractere til (~) pode ser usado como um atalho para",
"Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "O caminho onde as versões serão salvas (deixe vazio para usar a pasta padrão .stversions dentro desta pasta).",
"Pause": "Pausar",
- "Paused": "Pausada",
+ "Paused": "Em pausa",
"Please consult the release notes before performing a major upgrade.": "Por favor, consulte as notas de lançamento antes de atualizar para uma versão \"major\".",
"Please set a GUI Authentication User and Password in the Settings dialog.": "Por favor, defina um nome de usuário e senha para acesso à interface web, nas configurações.",
"Please wait": "Aguarde",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/auto/gui.files.go new/syncthing/lib/auto/gui.files.go
--- old/syncthing/lib/auto/gui.files.go 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/lib/auto/gui.files.go 2016-01-24 08:14:48.000000000 +0100
@@ -5,7 +5,7 @@
)
const (
- AssetsBuildDate = "Sun, 17 Jan 2016 09:56:51 GMT"
+ AssetsBuildDate = "Sun, 24 Jan 2016 07:09:21 GMT"
)
func Assets() map[string][]byte {
@@ -43,7 +43,7 @@
assets["default/assets/lang/lang-nl.json"], _ = base64.StdEncoding.DecodeString("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")
assets["default/assets/lang/lang-nn.json"], _ = base64.StdEncoding.DecodeString("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")
assets["default/assets/lang/lang-pl.json"], _ = base64.StdEncoding.DecodeString("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")
- assets["default/assets/lang/lang-pt-BR.json"], _ = base64.StdEncoding.DecodeString("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")
+ assets["default/assets/lang/lang-pt-BR.json"], _ = base64.StdEncoding.DecodeString("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")
assets["default/assets/lang/lang-pt-PT.json"], _ = base64.StdEncoding.DecodeString("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")
assets["default/assets/lang/lang-ro-RO.json"], _ = base64.StdEncoding.DecodeString("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")
assets["default/assets/lang/lang-ru.json"], _ = base64.StdEncoding.DecodeString("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")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/model/model.go new/syncthing/lib/model/model.go
--- old/syncthing/lib/model/model.go 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/lib/model/model.go 2016-01-24 08:14:48.000000000 +0100
@@ -67,7 +67,7 @@
finder *db.BlockFinder
progressEmitter *ProgressEmitter
id protocol.DeviceID
- shortID uint64
+ shortID protocol.ShortID
cacheIgnoredFiles bool
protectedFiles []string
@@ -1323,15 +1323,14 @@
var unifySubs []string
nextSub:
for _, sub := range subs {
- for sub != "" {
- parent := filepath.Dir(sub)
- if parent == "." || parent == string(filepath.Separator) {
- parent = ""
- }
- if _, ok = fs.Get(protocol.LocalDeviceID, parent); ok {
+ for sub != "" && sub != ".stfolder" && sub != ".stignore" {
+ if _, ok = fs.Get(protocol.LocalDeviceID, sub); ok {
break
}
- sub = parent
+ sub = filepath.Dir(sub)
+ if sub == "." || sub == string(filepath.Separator) {
+ sub = ""
+ }
}
for _, us := range unifySubs {
if strings.HasPrefix(sub, us) {
@@ -1959,7 +1958,16 @@
}
}
- // All of the generic options require restart
+ // Some options don't require restart as those components handle it fine
+ // by themselves.
+ from.Options.URAccepted = to.Options.URAccepted
+ from.Options.URUniqueID = to.Options.URUniqueID
+ // All of the other generic options require restart. Or at least they may;
+ // removing this check requires going through those options carefully and
+ // making sure there are individual services that handle them correctly.
+ // This code is the "original" requires-restart check and protects other
+ // components that haven't yet been converted to VerifyConfig/CommitConfig
+ // handling.
if !reflect.DeepEqual(from.Options, to.Options) {
l.Debugln(m, "requires restart, options differ")
return false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/model/rwfolder.go new/syncthing/lib/model/rwfolder.go
--- old/syncthing/lib/model/rwfolder.go 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/lib/model/rwfolder.go 2016-01-24 08:14:48.000000000 +0100
@@ -87,7 +87,7 @@
ignorePerms bool
copiers int
pullers int
- shortID uint64
+ shortID protocol.ShortID
order config.PullOrder
maxConflicts int
sleep time.Duration
@@ -108,7 +108,7 @@
errorsMut sync.Mutex
}
-func newRWFolder(m *Model, shortID uint64, cfg config.FolderConfiguration) *rwFolder {
+func newRWFolder(m *Model, shortID protocol.ShortID, cfg config.FolderConfiguration) *rwFolder {
p := &rwFolder{
stateTracker: stateTracker{
folder: cfg.ID,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/osutil/rlimit_unix.go new/syncthing/lib/osutil/rlimit_unix.go
--- old/syncthing/lib/osutil/rlimit_unix.go 2015-10-28 10:58:15.000000000 +0100
+++ new/syncthing/lib/osutil/rlimit_unix.go 2016-01-24 08:14:48.000000000 +0100
@@ -13,7 +13,7 @@
// MaximizeOpenFileLimit tries to set the resoure limit RLIMIT_NOFILE (number
// of open file descriptors) to the max (hard limit), if the current (soft
// limit) is below the max. Returns the new (though possibly unchanged) limit,
-// or an error if it was could not be changed.
+// or an error if it could not be changed.
func MaximizeOpenFileLimit() (int, error) {
// Get the current limit on number of open files.
var lim syscall.Rlimit
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/protocol/deviceid.go new/syncthing/lib/protocol/deviceid.go
--- old/syncthing/lib/protocol/deviceid.go 2015-10-30 10:24:01.000000000 +0100
+++ new/syncthing/lib/protocol/deviceid.go 2016-01-24 08:14:48.000000000 +0100
@@ -16,6 +16,7 @@
)
type DeviceID [32]byte
+type ShortID uint64
var LocalDeviceID = DeviceID{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
@@ -69,14 +70,20 @@
}
// Short returns an integer representing bits 0-63 of the device ID.
-func (n DeviceID) Short() uint64 {
- return binary.BigEndian.Uint64(n[:])
+func (n DeviceID) Short() ShortID {
+ return ShortID(binary.BigEndian.Uint64(n[:]))
}
func (n *DeviceID) MarshalText() ([]byte, error) {
return []byte(n.String()), nil
}
+func (s ShortID) String() string {
+ var bs [8]byte
+ binary.BigEndian.PutUint64(bs[:], uint64(s))
+ return base32.StdEncoding.EncodeToString(bs[:])[:7]
+}
+
func (n *DeviceID) UnmarshalText(bs []byte) error {
id := string(bs)
id = strings.Trim(id, "=")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/protocol/deviceid_test.go new/syncthing/lib/protocol/deviceid_test.go
--- old/syncthing/lib/protocol/deviceid_test.go 2015-10-30 10:24:01.000000000 +0100
+++ new/syncthing/lib/protocol/deviceid_test.go 2016-01-24 08:14:48.000000000 +0100
@@ -74,3 +74,25 @@
t.Error("Compare error")
}
}
+
+func TestShortIDString(t *testing.T) {
+ id, _ := DeviceIDFromString(formatted)
+
+ sid := id.Short().String()
+ if len(sid) != 7 {
+ t.Errorf("Wrong length for short ID: got %d, want 7", len(sid))
+ }
+
+ want := formatted[:len(sid)]
+ if sid != want {
+ t.Errorf("Wrong short ID: got %q, want %q", sid, want)
+ }
+}
+
+func TestDeviceIDFromBytes(t *testing.T) {
+ id0, _ := DeviceIDFromString(formatted)
+ id1 := DeviceIDFromBytes(id0[:])
+ if id1.String() != formatted {
+ t.Errorf("Wrong device ID, got %q, want %q", id1, formatted)
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/protocol/protocol_test.go new/syncthing/lib/protocol/protocol_test.go
--- old/syncthing/lib/protocol/protocol_test.go 2016-01-13 22:34:47.000000000 +0100
+++ new/syncthing/lib/protocol/protocol_test.go 2016-01-24 08:14:48.000000000 +0100
@@ -36,7 +36,7 @@
os.Exit(m.Run())
}
-func TestHeaderFunctions(t *testing.T) {
+func TestHeaderEncodeDecode(t *testing.T) {
f := func(ver, id, typ int) bool {
ver = int(uint(ver) % 16)
id = int(uint(id) % 4096)
@@ -50,6 +50,26 @@
}
}
+func TestHeaderMarshalUnmarshal(t *testing.T) {
+ f := func(ver, id, typ int) bool {
+ ver = int(uint(ver) % 16)
+ id = int(uint(id) % 4096)
+ typ = int(uint(typ) % 256)
+ buf := new(bytes.Buffer)
+ xw := xdr.NewWriter(buf)
+ h0 := header{version: ver, msgID: id, msgType: typ}
+ h0.encodeXDR(xw)
+
+ xr := xdr.NewReader(buf)
+ var h1 header
+ h1.decodeXDR(xr)
+ return h0 == h1
+ }
+ if err := quick.Check(f, nil); err != nil {
+ t.Error(err)
+ }
+}
+
func TestHeaderLayout(t *testing.T) {
var e, a uint32
@@ -321,3 +341,47 @@
case <-time.After(250 * time.Millisecond):
}
}
+
+func TestFileInfoSize(t *testing.T) {
+ fi := FileInfo{
+ Blocks: []BlockInfo{
+ {Size: 42},
+ {Offset: 42, Size: 23},
+ {Offset: 42 + 23, Size: 34},
+ },
+ }
+
+ size := fi.Size()
+ want := int64(42 + 23 + 34)
+ if size != want {
+ t.Errorf("Incorrect size reported, got %d, want %d", size, want)
+ }
+
+ size = fi.Size() // Cached, this time
+ if size != want {
+ t.Errorf("Incorrect cached size reported, got %d, want %d", size, want)
+ }
+
+ fi.CachedSize = 8
+ want = 8
+ size = fi.Size() // Ensure it came from the cache
+ if size != want {
+ t.Errorf("Incorrect cached size reported, got %d, want %d", size, want)
+ }
+
+ fi.CachedSize = 0
+ fi.Flags = FlagDirectory
+ want = 128
+ size = fi.Size() // Directories are 128 bytes large
+ if size != want {
+ t.Errorf("Incorrect cached size reported, got %d, want %d", size, want)
+ }
+
+ fi.CachedSize = 0
+ fi.Flags = FlagDeleted
+ want = 128
+ size = fi.Size() // Also deleted files
+ if size != want {
+ t.Errorf("Incorrect cached size reported, got %d, want %d", size, want)
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/protocol/vector.go new/syncthing/lib/protocol/vector.go
--- old/syncthing/lib/protocol/vector.go 2015-10-30 10:24:01.000000000 +0100
+++ new/syncthing/lib/protocol/vector.go 2016-01-24 08:14:48.000000000 +0100
@@ -10,31 +10,31 @@
// Counter represents a single counter in the version vector.
type Counter struct {
- ID uint64
+ ID ShortID
Value uint64
}
// Update returns a Vector with the index for the specific ID incremented by
// one. If it is possible, the vector v is updated and returned. If it is not,
// a copy will be created, updated and returned.
-func (v Vector) Update(ID uint64) Vector {
+func (v Vector) Update(id ShortID) Vector {
for i := range v {
- if v[i].ID == ID {
+ if v[i].ID == id {
// Update an existing index
v[i].Value++
return v
- } else if v[i].ID > ID {
+ } else if v[i].ID > id {
// Insert a new index
nv := make(Vector, len(v)+1)
copy(nv, v[:i])
- nv[i].ID = ID
+ nv[i].ID = id
nv[i].Value = 1
copy(nv[i+1:], v[i:])
return nv
}
}
// Append a new index
- return append(v, Counter{ID, 1})
+ return append(v, Counter{id, 1})
}
// Merge returns the vector containing the maximum indexes from v and b. If it
@@ -105,7 +105,7 @@
}
// Counter returns the current value of the given counter ID.
-func (v Vector) Counter(id uint64) uint64 {
+func (v Vector) Counter(id ShortID) uint64 {
for _, c := range v {
if c.ID == id {
return c.Value
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/protocol/vector_xdr.go new/syncthing/lib/protocol/vector_xdr.go
--- old/syncthing/lib/protocol/vector_xdr.go 2015-10-30 10:24:01.000000000 +0100
+++ new/syncthing/lib/protocol/vector_xdr.go 2016-01-24 08:14:48.000000000 +0100
@@ -21,7 +21,7 @@
func (v Vector) EncodeXDRInto(w xdrWriter) (int, error) {
w.WriteUint32(uint32(len(v)))
for i := range v {
- w.WriteUint64(v[i].ID)
+ w.WriteUint64(uint64(v[i].ID))
w.WriteUint64(v[i].Value)
}
return 4 + 16*len(v), nil
@@ -35,7 +35,7 @@
}
n := make(Vector, l)
for i := range n {
- n[i].ID = r.ReadUint64()
+ n[i].ID = ShortID(r.ReadUint64())
n[i].Value = r.ReadUint64()
}
*v = n
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/scanner/walk.go new/syncthing/lib/scanner/walk.go
--- old/syncthing/lib/scanner/walk.go 2015-11-22 15:59:05.000000000 +0100
+++ new/syncthing/lib/scanner/walk.go 2016-01-24 08:14:48.000000000 +0100
@@ -69,7 +69,7 @@
// Number of routines to use for hashing
Hashers int
// Our vector clock id
- ShortID uint64
+ ShortID protocol.ShortID
// Optional progress tick interval which defines how often FolderScanProgress
// events are emitted. Negative number means disabled.
ProgressTickIntervalS int
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/lib/upgrade/upgrade_supported.go new/syncthing/lib/upgrade/upgrade_supported.go
--- old/syncthing/lib/upgrade/upgrade_supported.go 2015-11-29 08:58:55.000000000 +0100
+++ new/syncthing/lib/upgrade/upgrade_supported.go 2016-01-24 08:14:48.000000000 +0100
@@ -56,7 +56,7 @@
return nil
}
if resp.StatusCode > 299 {
- l.Infoln("API call returned HTTP error: %s", resp.Status)
+ l.Infoln("API call returned HTTP error:", resp.Status)
return nil
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-bep.7 new/syncthing/man/syncthing-bep.7
--- old/syncthing/man/syncthing-bep.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-bep.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-BEP" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-BEP" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-bep \- Block Exchange Protocol v1
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-config.5 new/syncthing/man/syncthing-config.5
--- old/syncthing/man/syncthing-config.5 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-config.5 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-CONFIG" "5" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-CONFIG" "5" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-config \- Syncthing Configuration
.
@@ -348,6 +348,19 @@
The word \fBdynamic\fP means to use local and global discovery to find the
device.
.UNINDENT
+.SH IGNOREDDEVICE ELEMENT
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+<ignoredDevice>5SYI2FS\-LW6YAXI\-JJDYETS\-NDBBPIO\-256MWBO\-XDPXWVG\-24QPUM4\-PDW4UQU</ignoredDevice>
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+This optional element lists device IDs that have been specifically ignored. One element must be present for each device ID. Connection attempts from these devices are logged to the console but never displayed in the web GUI.
.SH GUI ELEMENT
.INDENT 0.0
.INDENT 3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-device-ids.7 new/syncthing/man/syncthing-device-ids.7
--- old/syncthing/man/syncthing-device-ids.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-device-ids.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-DEVICE-IDS" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-DEVICE-IDS" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-device-ids \- Understanding Device IDs
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-event-api.7 new/syncthing/man/syncthing-event-api.7
--- old/syncthing/man/syncthing-event-api.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-event-api.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-EVENT-API" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-EVENT-API" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-event-api \- Event API
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-faq.7 new/syncthing/man/syncthing-faq.7
--- old/syncthing/man/syncthing-faq.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-faq.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-FAQ" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-FAQ" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-faq \- Frequently Asked Questions
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-globaldisco.7 new/syncthing/man/syncthing-globaldisco.7
--- old/syncthing/man/syncthing-globaldisco.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-globaldisco.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-GLOBALDISCO" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-GLOBALDISCO" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-globaldisco \- Global Discovery Protocol v3
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-localdisco.7 new/syncthing/man/syncthing-localdisco.7
--- old/syncthing/man/syncthing-localdisco.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-localdisco.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-LOCALDISCO" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-LOCALDISCO" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-localdisco \- Local Discovery Protocol v3
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-networking.7 new/syncthing/man/syncthing-networking.7
--- old/syncthing/man/syncthing-networking.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-networking.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-NETWORKING" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-NETWORKING" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-networking \- Firewall Setup
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-relay.7 new/syncthing/man/syncthing-relay.7
--- old/syncthing/man/syncthing-relay.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-relay.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-RELAY" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-RELAY" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-relay \- Relay Protocol v1
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-rest-api.7 new/syncthing/man/syncthing-rest-api.7
--- old/syncthing/man/syncthing-rest-api.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-rest-api.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-REST-API" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-REST-API" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-rest-api \- REST API
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-security.7 new/syncthing/man/syncthing-security.7
--- old/syncthing/man/syncthing-security.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-security.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-SECURITY" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-SECURITY" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-security \- Security Principles
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-stignore.5 new/syncthing/man/syncthing-stignore.5
--- old/syncthing/man/syncthing-stignore.5 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-stignore.5 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING-STIGNORE" "5" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING-STIGNORE" "5" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing-stignore \- Prevent files from being synchronized to other nodes
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing-versioning.7 new/syncthing/man/syncthing-versioning.7
--- old/syncthing/man/syncthing-versioning.7 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing-versioning.7 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "TODO" "7" "January 17, 2016" "v0.12" "Syncthing"
+.TH "TODO" "7" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
Todo \- Keep automatic backups of deleted files by other nodes
.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing/man/syncthing.1 new/syncthing/man/syncthing.1
--- old/syncthing/man/syncthing.1 2016-01-17 10:58:01.000000000 +0100
+++ new/syncthing/man/syncthing.1 2016-01-24 08:14:48.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH "SYNCTHING" "1" "January 17, 2016" "v0.12" "Syncthing"
+.TH "SYNCTHING" "1" "January 20, 2016" "v0.12" "Syncthing"
.SH NAME
syncthing \- Syncthing
.
1
0
Hello community,
here is the log from the commit of package ghc-file-embed for openSUSE:Factory checked in at 2016-01-28 17:24:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-file-embed (Old)
and /work/SRC/openSUSE:Factory/.ghc-file-embed.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-file-embed"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-file-embed/ghc-file-embed.changes 2015-11-26 17:03:40.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-file-embed.new/ghc-file-embed.changes 2016-01-28 17:25:30.000000000 +0100
@@ -1,0 +2,6 @@
+Fri Jan 22 08:46:18 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.0.9.1
+* embedStringFile
+
+-------------------------------------------------------------------
Old:
----
file-embed-0.0.9.tar.gz
New:
----
file-embed-0.0.9.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-file-embed.spec ++++++
--- /var/tmp/diff_new_pack.2xHCuS/_old 2016-01-28 17:25:30.000000000 +0100
+++ /var/tmp/diff_new_pack.2xHCuS/_new 2016-01-28 17:25:30.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package ghc-file-embed
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
@@ -21,7 +21,7 @@
%bcond_without tests
Name: ghc-file-embed
-Version: 0.0.9
+Version: 0.0.9.1
Release: 0
Summary: Use Template Haskell to embed file contents directly
License: BSD-2-Clause
++++++ file-embed-0.0.9.tar.gz -> file-embed-0.0.9.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-embed-0.0.9/Data/FileEmbed.hs new/file-embed-0.0.9.1/Data/FileEmbed.hs
--- old/file-embed-0.0.9/Data/FileEmbed.hs 2015-08-14 06:52:02.000000000 +0200
+++ new/file-embed-0.0.9.1/Data/FileEmbed.hs 2016-01-20 08:30:52.000000000 +0100
@@ -3,7 +3,7 @@
{-# LANGUAGE OverloadedStrings #-}
-- | This module uses template Haskell. Following is a simplified explanation of usage for those unfamiliar with calling Template Haskell functions.
--
--- The function @embedFile@ in this modules embeds a file into the exceutable
+-- The function @embedFile@ in this modules embeds a file into the executable
-- that you can use it at runtime. A file is represented as a @ByteString@.
-- However, as you can see below, the type signature indicates a value of type
-- @Q Exp@ will be returned. In order to convert this into a @ByteString@, you
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-embed-0.0.9/file-embed.cabal new/file-embed-0.0.9.1/file-embed.cabal
--- old/file-embed-0.0.9/file-embed.cabal 2015-08-14 06:52:02.000000000 +0200
+++ new/file-embed-0.0.9.1/file-embed.cabal 2016-01-20 08:30:52.000000000 +0100
@@ -1,5 +1,5 @@
name: file-embed
-version: 0.0.9
+version: 0.0.9.1
license: BSD3
license-file: LICENSE
author: Michael Snoyman <michael(a)snoyman.com>
@@ -32,7 +32,6 @@
hs-source-dirs: test
build-depends: base
, file-embed
- , HUnit
, filepath
source-repository head
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-embed-0.0.9/test/main.hs new/file-embed-0.0.9.1/test/main.hs
--- old/file-embed-0.0.9/test/main.hs 2015-08-14 06:52:02.000000000 +0200
+++ new/file-embed-0.0.9.1/test/main.hs 2016-01-20 08:30:52.000000000 +0100
@@ -1,10 +1,15 @@
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
+import Control.Monad (unless)
import Data.FileEmbed
-import Test.HUnit ((@?=))
import System.FilePath ((</>))
+infix 1 @?=
+
+(@?=) :: (Eq a, Show a) => a -> a -> IO ()
+actual @?= expected = unless (actual == expected) (error $ "expected: " ++ show expected ++ "\n but got: " ++ show actual)
+
main :: IO ()
main = do
let received = $(embedDir "test/sample")
1
0
Hello community,
here is the log from the commit of package sysdig for openSUSE:Factory checked in at 2016-01-28 17:24:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sysdig (Old)
and /work/SRC/openSUSE:Factory/.sysdig.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sysdig"
Changes:
--------
--- /work/SRC/openSUSE:Factory/sysdig/sysdig.changes 2015-12-25 13:06:10.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.sysdig.new/sysdig.changes 2016-01-28 17:25:27.000000000 +0100
@@ -1,0 +2,26 @@
+Tue Jan 26 19:36:57 UTC 2016 - mpluskal(a)suse.com
+
+- Update to 0.7.1
+ * Fix sysdig-probe compilation for kernel < 3.4.0
+ * Fix compilation on OSX
+- Changes for 0.7.0
+ * Fix sysdig-probe for kernel 4.4
+ * Fix a remotely possible deadlock during ioctl calls
+ * Fix Kubernetes support when data returned from the API server
+ is particularly big
+ * Minor bugfixes
+ * Spectrogram views in csysdig: spectro_all (System call latency
+ spectrogram) and spectro_file (File I/O latency spectrogram)
+ * Ability to authenticate to a Kubernetes API server using a
+ certificate, via -K <file_name> or --k8s-api-cert=<file_name>.
+ Can also be specified via the environment variable
+ SYSDIG_K8S_API_CERT
+ * Ability to sort columns in csysdig views using the keyboard
+ * --filter-proclist: apply the filter to the process table
+ * -M: add the possibility to stop collecting after X seconds
+ evt.latency.quantized: 10-base log of the delta between an
+ exit event and the correspondent enter event evt.latency.human:
+ delta between an exit event and the correspondent enter event,
+ as a human readable string (e.g. 10.3ms)
+
+-------------------------------------------------------------------
Old:
----
sysdig-0.6.0.tar.gz
New:
----
sysdig-0.7.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ sysdig.spec ++++++
--- /var/tmp/diff_new_pack.Bu3dtp/_old 2016-01-28 17:25:28.000000000 +0100
+++ /var/tmp/diff_new_pack.Bu3dtp/_new 2016-01-28 17:25:28.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package sysdig
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
@@ -17,7 +17,7 @@
Name: sysdig
-Version: 0.6.0
+Version: 0.7.1
Release: 0
Summary: System-level exploration
License: GPL-2.0
++++++ sysdig-0.6.0.tar.gz -> sysdig-0.7.1.tar.gz ++++++
++++ 10208 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package icedtea-web for openSUSE:Factory checked in at 2016-01-28 17:24:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/icedtea-web (Old)
and /work/SRC/openSUSE:Factory/.icedtea-web.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "icedtea-web"
Changes:
--------
--- /work/SRC/openSUSE:Factory/icedtea-web/icedtea-web.changes 2015-11-12 19:40:43.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.icedtea-web.new/icedtea-web.changes 2016-01-28 17:25:26.000000000 +0100
@@ -1,0 +2,14 @@
+Mon Jan 18 08:12:44 UTC 2016 - fstrba(a)suse.com
+
+- Let java-VERSION-openjdk-plugin supplement java-VERSION-openjdk
+ only and not the generic java-openjdk (bsc#929464)
+
+-------------------------------------------------------------------
+Wed Jan 13 08:26:03 UTC 2016 - fstrba(a)suse.com
+
+- Added patch:
+ * icedtea-web-1.6.1-HexDumpEncoder.patch
+ - Adapt to the move of HexDumpEncoder from sun.misc to
+ sun.security.utils from jdk-9+99.
+
+-------------------------------------------------------------------
@@ -111 +125 @@
-- Update to 1.5.2
+- Update to 1.5.2 (fate#318956)
java-1_7_0-openjdk-plugin.changes: same change
java-1_8_0-openjdk-plugin.changes: same change
New:
----
icedtea-web-1.6.1-HexDumpEncoder.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ icedtea-web.spec ++++++
--- /var/tmp/diff_new_pack.ZQVHLI/_old 2016-01-28 17:25:27.000000000 +0100
+++ /var/tmp/diff_new_pack.ZQVHLI/_new 2016-01-28 17:25:27.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package icedtea-web
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
++++++ java-1_7_0-openjdk-plugin.spec ++++++
--- /var/tmp/diff_new_pack.ZQVHLI/_old 2016-01-28 17:25:27.000000000 +0100
+++ /var/tmp/diff_new_pack.ZQVHLI/_new 2016-01-28 17:25:27.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package java-1_7_0-openjdk-plugin
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
@@ -34,6 +34,7 @@
Url: http://icedtea.classpath.org
Source0: http://icedtea.classpath.org/download/source/icedtea-web-%{version}.tar.gz
Patch0: icedtea-web-1.6.1-doInit.patch
+Patch1: icedtea-web-1.6.1-HexDumpEncoder.patch
Patch1000: icedtea-web-suse-desktop-files.patch
BuildRequires: %{java_name}-devel >= %{javaver}
# IcedTeaPlugin build requirements.
@@ -56,8 +57,8 @@
# Postun requires alternatives to uninstall tool alternatives.
Requires(postun): update-alternatives
Suggests: icedtea-web-javadoc
-# bnc#737105/FATE#313084
-Supplements: packageand(browser(npapi):java-openjdk)
+# bnc#737105/FATE#313084/bsc#929464
+Supplements: packageand(browser(npapi):%{java_name})
Provides: icedtea-web = %{version}-%{release}
Provides: java-plugin = %{javaver}
Obsoletes: icedtea-web < %{version}-%{release}
@@ -83,6 +84,7 @@
%prep
%setup -q -n icedtea-web-%{version}
%patch0 -p1
+%patch1 -p1
%patch1000 -p1
%build
java-1_8_0-openjdk-plugin.spec: same change
++++++ icedtea-web-1.6.1-HexDumpEncoder.patch ++++++
--- a/acinclude.m4 Thu Jan 14 12:22:37 2016 +0100
+++ b/acinclude.m4 Thu Jan 14 16:28:48 2016 +0100
@@ -500,6 +500,55 @@
AC_PROVIDE([$0])dnl
])
+dnl Macro to check for a Java class HexDumpEncoder
+AC_DEFUN([IT_CHECK_FOR_HEXDUMPENCODER],[
+AC_REQUIRE([IT_FIND_JAVAC])
+AC_REQUIRE([IT_FIND_JAVA])
+AC_CACHE_CHECK([if HexDumpEncoder is available], it_cv_HEXDUMPENCODER, [
+CLASS=sun/applet/Test.java
+BYTECODE=$(echo $CLASS|sed 's#\.java##')
+mkdir -p tmp.$$/$(dirname $CLASS)
+cd tmp.$$
+cat << \EOF > $CLASS
+[/* [#]line __oline__ "configure" */
+package sun.applet;
+
+import sun.misc.*;
+import sun.security.util.*;
+
+public class Test
+{
+ public static void main(String[] args)
+ throws Exception
+ {
+ try {
+ System.out.println(Class.forName("sun.misc.HexDumpEncoder"));
+ } catch (ClassNotFoundException e) {
+ System.out.println(Class.forName("sun.security.util.HexDumpEncoder"));
+ }
+ }
+}
+]
+EOF
+if $JAVAC -cp . $JAVACFLAGS -nowarn $CLASS >&AS_MESSAGE_LOG_FD 2>&1; then
+ if $JAVA -classpath . $BYTECODE >&AS_MESSAGE_LOG_FD 2>&1; then
+ it_cv_HEXDUMPENCODER=yes;
+ else
+ it_cv_HEXDUMPENCODER=no;
+ fi
+else
+ it_cv_HEXDUMPENCODER=no;
+fi
+])
+rm -f $CLASS *.class
+cd ..
+# should be rmdir but has to be rm -rf due to sun.applet usage
+rm -rf tmp.$$
+if test x"${it_cv_HEXDUMPENCODER}" = "xno"; then
+ AC_MSG_ERROR([HexDumpEncoder not found.])
+fi
+])
+
AC_DEFUN_ONCE([IT_CHECK_FOR_MERCURIAL],
[
AC_PATH_TOOL([HG],[hg])
--- a/configure.ac Thu Jan 14 12:22:37 2016 +0100
+++ b/configure.ac Thu Jan 14 16:28:48 2016 +0100
@@ -68,7 +68,7 @@
dnl PR46074 (gcc) - Missing java.net cookie code required by IcedTea plugin
dnl IT563 - NetX uses sun.security code
-dnl IT605 - NetX depends on sun.misc.HexDumpEncoder
+dnl IT605 - NetX depends on sun.misc HexDumpEncoder or sun.security.util.HexDumpEncoder
dnl IT570 - NetX depends on sun.applet.AppletViewPanel
dnl IT571 - NetX depends on com.sun.net.ssl.internal.ssl.X509ExtendedTrustManager.java
dnl IT573 - Plugin depends on sun.awt,X11.XEmbeddedFrame.java
@@ -83,7 +83,7 @@
IT_CHECK_FOR_CLASS(SUN_SECURITY_UTIL_SECURITYCONSTANTS, [sun.security.util.SecurityConstants])
IT_CHECK_FOR_CLASS(SUN_SECURITY_UTIL_HOSTNAMECHECKER, [sun.security.util.HostnameChecker])
IT_CHECK_FOR_CLASS(SUN_SECURITY_X509_X500NAME, [sun.security.x509.X500Name])
-IT_CHECK_FOR_CLASS(SUN_MISC_HEXDUMPENCODER, [sun.misc.HexDumpEncoder])
+IT_CHECK_FOR_HEXDUMPENCODER
IT_CHECK_FOR_CLASS(SUN_SECURITY_VALIDATOR_VALIDATOREXCEPTION, [sun.security.validator.ValidatorException])
IT_CHECK_FOR_CLASS(COM_SUN_NET_SSL_INTERNAL_SSL_X509EXTENDEDTRUSTMANAGER,
[com.sun.net.ssl.internal.ssl.X509ExtendedTrustManager])
--- a/netx/net/sourceforge/jnlp/security/dialogs/CertsInfoPane.java Thu Jan 14 12:22:37 2016 +0100
+++ b/netx/net/sourceforge/jnlp/security/dialogs/CertsInfoPane.java Thu Jan 14 16:28:48 2016 +0100
@@ -43,8 +43,15 @@
import java.security.cert.CertPath;
import java.security.cert.X509Certificate;
import java.security.MessageDigest;
+/**
+ * Do not remove this two unused imports, nor expands its "*" call.
+ * It is workaround to allow itw to run on jdk8 and older and also on jdk9 and newer
+ */
-import sun.misc.HexDumpEncoder;
+// jdk8 is using sun.misc.HexDumpEncoder,
+import sun.misc.*;
+// jdk9 is using sun.security.util.HexDumpEncoder
+import sun.security.util.*;
import sun.security.x509.*;
import javax.swing.*;
import javax.swing.event.*;
1
0
Hello community,
here is the log from the commit of package java-1_9_0-openjdk for openSUSE:Factory checked in at 2016-01-28 17:24:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/java-1_9_0-openjdk (Old)
and /work/SRC/openSUSE:Factory/.java-1_9_0-openjdk.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "java-1_9_0-openjdk"
Changes:
--------
--- /work/SRC/openSUSE:Factory/java-1_9_0-openjdk/java-1_9_0-openjdk.changes 2015-11-26 17:01:35.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.java-1_9_0-openjdk.new/java-1_9_0-openjdk.changes 2016-01-28 17:25:15.000000000 +0100
@@ -1,0 +2,29 @@
+Tue Jan 26 16:04:42 UTC 2016 - fstrba(a)suse.com
+
+- Upgrade to upstream tag jdk-9+102
+
+-------------------------------------------------------------------
+Thu Jan 14 12:05:59 UTC 2016 - fstrba(a)suse.com
+
+- Added patch:
+ * hotspot-nowerror.patch: disable warnings being errors in
+ hostspot. It causes unnecessary build failure on some
+ architectures.
+
+-------------------------------------------------------------------
+Tue Jan 12 06:19:39 UTC 2016 - fstrba(a)suse.com
+
+- Upgrade to upstream tag jdk-9+100
+
+-------------------------------------------------------------------
+Fri Nov 20 08:17:53 UTC 2015 - fstrba(a)suse.com
+
+- Upgrade to upstream tag jdk9-b93
+- Removed patches:
+ * fix-system-jpeg-loading.patch
+ - integrated upstream
+- Added patch:
+ * fix-zero-k_entry.patch
+ - backport upstream fix
+
+-------------------------------------------------------------------
Old:
----
106c06398f7a.tar.bz2
34b77a618e98.tar.bz2
53cb98d68a1a.tar.bz2
6a5c99506f44.tar.bz2
a3415b57507c.tar.bz2
f7d70caad89a.tar.bz2
fcabfb3c38ac.tar.bz2
fe772cbc64f4.tar.bz2
fix-system-jpeg-loading.patch
New:
----
0868b93587cc.tar.bz2
6149fc30cd71.tar.bz2
6406ecf5d394.tar.bz2
6eb3c8132e48.tar.bz2
9c4662334d93.tar.bz2
9dcf193c0b6c.tar.bz2
d5239fc1b697.tar.bz2
e56208758885.tar.bz2
hotspot-nowerror.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ java-1_9_0-openjdk.spec ++++++
--- /var/tmp/diff_new_pack.R5HAPQ/_old 2016-01-28 17:25:17.000000000 +0100
+++ /var/tmp/diff_new_pack.R5HAPQ/_new 2016-01-28 17:25:17.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package java
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
@@ -29,25 +29,25 @@
%global syslibdir %{_libdir}
%global archname %{name}
# Standard JPackage naming and versioning defines.
-%global majorver 1
-%global minorver 9
-%global microver 0
-%global updatever 0
-%global buildver b92
+%global majorver 9
+%global minorver 0
+%global securityver 0
+%global patchver 0
+%global buildver 102
%global root_project jdk9
%global root_repository jdk9
-%global root_revision 106c06398f7a
-%global corba_revision f7d70caad89a
-%global hotspot_revision 53cb98d68a1a
-%global jaxp_revision fcabfb3c38ac
-%global jaxws_revision fe772cbc64f4
-%global jdk_revision 6a5c99506f44
-%global langtools_revision a3415b57507c
-%global nashorn_revision 34b77a618e98
+%global root_revision 6406ecf5d394
+%global corba_revision 9c4662334d93
+%global hotspot_revision d5239fc1b697
+%global jaxp_revision 9dcf193c0b6c
+%global jaxws_revision 0868b93587cc
+%global jdk_revision 6eb3c8132e48
+%global langtools_revision 6149fc30cd71
+%global nashorn_revision e56208758885
%global icedtea_sound_version 1.0.1
# priority must be 6 digits in total
%global priority 1905
-%global javaver %{majorver}.%{minorver}.%{microver}
+%global javaver 1.%{majorver}.0
# Standard JPackage directories and symbolic links.
%global sdklnk java-%{javaver}-openjdk
%global archname %{sdklnk}
@@ -155,8 +155,8 @@
%global tapsetroot %{_datadir}/systemtap
%global tapsetdir %{tapsetroot}/tapset/%{_build_cpu}
%endif
-Name: java-%{majorver}_%{minorver}_%{microver}-openjdk
-Version: %{javaver}.%{updatever}~%{buildver}
+Name: java-1_%{majorver}_0-openjdk
+Version: %{majorver}.%{minorver}.%{securityver}.%{patchver}~%{buildver}
Release: 0
Summary: OpenJDK Runtime Environment
License: Apache-1.1 and Apache-2.0 and GPL-1.0+ and GPL-2.0 and GPL-2.0-with-classpath-exception and LGPL-2.0 and MPL-1.0 and MPL-1.1 and SUSE-Public-Domain and W3C
@@ -206,6 +206,8 @@
Patch12: adlc-parser.patch
# Fix: implicit-pointer-decl
Patch13: implicit-pointer-decl.patch
+# Disable -Werror in hotspot
+Patch14: hotspot-nowerror.patch
#
# OpenJDK specific patches
#
@@ -214,8 +216,6 @@
Patch101: s390-size_t.patch
# Patch for PPC/PPC64
Patch103: ppc-zero-hotspot.patch
-# Patches for system libraries
-Patch203: fix-system-jpeg-loading.patch
BuildRequires: alsa-lib-devel
BuildRequires: autoconf
BuildRequires: automake
@@ -290,7 +290,7 @@
%if %{bootcycle}
BuildRequires: java-1.8.0-devel >= 1.8.0
%else
-BuildRequires: java-devel >= %{javaver}
+BuildRequires: java-devel >= %{majorver}.0.0.0
%endif
# runtime certificates generation available in 11.3+ - bnc#596177
%if 0%{?suse_version} >= 1130
@@ -462,8 +462,6 @@
rm -rvf jdk/src/java.desktop/share/native/liblcms/cms*
rm -rvf jdk/src/java.desktop/share/native/liblcms/lcms2*
-%patch203 -p1
-
%if %{with_pulseaudio}
%patch0 -p1
%patch1 -p1
@@ -477,6 +475,7 @@
%patch10 -p1
%patch12 -p1
%patch13 -p1
+%patch14 -p1
# s390 build fixes
++++++ 106c06398f7a.tar.bz2 -> 0868b93587cc.tar.bz2 ++++++
++++ 707731 lines of diff (skipped)
++++++ 106c06398f7a.tar.bz2 -> 6149fc30cd71.tar.bz2 ++++++
++++ 930038 lines of diff (skipped)
++++++ 106c06398f7a.tar.bz2 -> 6406ecf5d394.tar.bz2 ++++++
++++ 30744 lines of diff (skipped)
++++++ 106c06398f7a.tar.bz2 -> 6eb3c8132e48.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/java-1_9_0-openjdk/106c06398f7a.tar.bz2 /work/SRC/openSUSE:Factory/.java-1_9_0-openjdk.new/6eb3c8132e48.tar.bz2 differ: char 11, line 1
++++++ 53cb98d68a1a.tar.bz2 -> 9c4662334d93.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/java-1_9_0-openjdk/53cb98d68a1a.tar.bz2 /work/SRC/openSUSE:Factory/.java-1_9_0-openjdk.new/9c4662334d93.tar.bz2 differ: char 11, line 1
++++++ 106c06398f7a.tar.bz2 -> 9dcf193c0b6c.tar.bz2 ++++++
++++ 855102 lines of diff (skipped)
++++++ 106c06398f7a.tar.bz2 -> d5239fc1b697.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/java-1_9_0-openjdk/106c06398f7a.tar.bz2 /work/SRC/openSUSE:Factory/.java-1_9_0-openjdk.new/d5239fc1b697.tar.bz2 differ: char 11, line 1
++++++ 106c06398f7a.tar.bz2 -> e56208758885.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/java-1_9_0-openjdk/106c06398f7a.tar.bz2 /work/SRC/openSUSE:Factory/.java-1_9_0-openjdk.new/e56208758885.tar.bz2 differ: char 11, line 1
++++++ hotspot-nowerror.patch ++++++
--- jdk9/hotspot/make/linux/makefiles/gcc.make 2016-01-14 12:13:43.947734277 +0100
+++ jdk9/hotspot/make/linux/makefiles/gcc.make 2016-01-14 12:14:38.850498622 +0100
@@ -203,7 +203,7 @@
endif
# Compiler warnings are treated as errors
-WARNINGS_ARE_ERRORS = -Werror
+WARNINGS_ARE_ERRORS =
ifeq ($(USE_CLANG), true)
# However we need to clean the code up before we can unrestrictedly enable this option with Clang
1
0
Hello community,
here is the log from the commit of package fsharp for openSUSE:Factory checked in at 2016-01-28 17:24:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fsharp (Old)
and /work/SRC/openSUSE:Factory/.fsharp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fsharp"
Changes:
--------
--- /work/SRC/openSUSE:Factory/fsharp/fsharp.changes 2015-12-13 09:40:13.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.fsharp.new/fsharp.changes 2016-01-28 17:25:11.000000000 +0100
@@ -1,0 +2,5 @@
+Tue Jan 26 17:37:24 UTC 2016 - idonmez(a)suse.com
+
+- Ship xbuild files
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ fsharp.spec ++++++
--- /var/tmp/diff_new_pack.OclFTl/_old 2016-01-28 17:25:13.000000000 +0100
+++ /var/tmp/diff_new_pack.OclFTl/_new 2016-01-28 17:25:13.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package fsharp
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
@@ -54,7 +54,6 @@
%makeinstall
rm -rf ${RPM_BUILD_ROOT}%{_prefix}/lib/mono/monodroid
rm -rf ${RPM_BUILD_ROOT}%{_prefix}/lib/mono/monotouch
-rm -rf ${RPM_BUILD_ROOT}%{_prefix}/lib/mono/xbuild
#fix script-without-shebang warnings
find %{buildroot}%{_prefix}/lib/mono -iname "*.Fsharp.Targets" -type f -print0 | xargs -0 chmod -v -x
@@ -121,5 +120,6 @@
%{_prefix}/lib/mono/gac/policy.3.47.FSharp.Core/
%{_prefix}/lib/mono/gac/policy.3.7.FSharp.Core/
%{_prefix}/lib/mono/gac/policy.3.78.FSharp.Core/
+%{_prefix}/lib/mono/xbuild
%changelog
1
0
Hello community,
here is the log from the commit of package python-certifi for openSUSE:Factory checked in at 2016-01-28 17:24:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-certifi (Old)
and /work/SRC/openSUSE:Factory/.python-certifi.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-certifi"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-certifi/python-certifi.changes 2015-09-30 05:52:11.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-certifi.new/python-certifi.changes 2016-01-28 17:25:10.000000000 +0100
@@ -1,0 +2,5 @@
+Fri Jan 22 12:22:53 UTC 2016 - michael(a)stroeder.com
+
+- Update to version 2015.11.20.1
+
+-------------------------------------------------------------------
Old:
----
certifi-2015.9.6.2.tar.gz
New:
----
certifi-2015.11.20.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-certifi.spec ++++++
--- /var/tmp/diff_new_pack.Q2pgVM/_old 2016-01-28 17:25:11.000000000 +0100
+++ /var/tmp/diff_new_pack.Q2pgVM/_new 2016-01-28 17:25:11.000000000 +0100
@@ -16,7 +16,7 @@
Name: python-certifi
-Version: 2015.9.6.2
+Version: 2015.11.20.1
Release: 0
License: MPL-2.0
Summary: Python package for providing Mozilla's CA Bundle
++++++ certifi-2015.9.6.2.tar.gz -> certifi-2015.11.20.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certifi-2015.9.6.2/PKG-INFO new/certifi-2015.11.20.1/PKG-INFO
--- old/certifi-2015.9.6.2/PKG-INFO 2015-09-07 17:43:22.000000000 +0200
+++ new/certifi-2015.11.20.1/PKG-INFO 2015-11-30 12:18:08.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: certifi
-Version: 2015.9.6.2
+Version: 2015.11.20.1
Summary: Python package for providing Mozilla's CA Bundle.
Home-page: http://certifi.io/
Author: Kenneth Reitz
@@ -16,7 +16,7 @@
Installation
------------
- `certifi` is available on PyPI. Simply install it with `pip`::
+ ``certifi`` is available on PyPI. Simply install it with ``pip``::
$ pip install certifi
@@ -32,6 +32,24 @@
Enjoy!
+ 1024-bit Root Certificates
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Browsers and certificate authorities have concluded that 1024-bit keys are
+ unacceptably weak for certificates, particularly root certificates. For this
+ reason, Mozilla has removed any weak (i.e. 1024-bit key) certificate from its
+ bundle, replacing it with an equivalent strong (i.e. 2048-bit or greater key)
+ certifiate from the same CA. Because Mozilla removed these certificates from
+ its bundle, ``certifi`` removed them as well.
+
+ Unfortunately, old versions of OpenSSL (less than 1.0.2) sometimes fail to
+ validate certificate chains that use the strong roots. For this reason, if you
+ fail to validate a certificate using the ``certifi.where()`` mechanism, you can
+ intentionally re-add the 1024-bit roots back into your bundle by calling
+ ``certifi.old_where()`` instead. This is not recommended in production: if at
+ all possible you should upgrade to a newer OpenSSL. However, if you have no
+ other option, this may work for you.
+
.. _`Certifi`: http://certifi.io/en/latest/
.. _`Requests`: http://docs.python-requests.org/en/latest/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certifi-2015.9.6.2/README.rst new/certifi-2015.11.20.1/README.rst
--- old/certifi-2015.9.6.2/README.rst 2015-04-23 20:12:52.000000000 +0200
+++ new/certifi-2015.11.20.1/README.rst 2015-11-15 22:00:19.000000000 +0100
@@ -8,7 +8,7 @@
Installation
------------
-`certifi` is available on PyPI. Simply install it with `pip`::
+``certifi`` is available on PyPI. Simply install it with ``pip``::
$ pip install certifi
@@ -24,5 +24,23 @@
Enjoy!
+1024-bit Root Certificates
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Browsers and certificate authorities have concluded that 1024-bit keys are
+unacceptably weak for certificates, particularly root certificates. For this
+reason, Mozilla has removed any weak (i.e. 1024-bit key) certificate from its
+bundle, replacing it with an equivalent strong (i.e. 2048-bit or greater key)
+certifiate from the same CA. Because Mozilla removed these certificates from
+its bundle, ``certifi`` removed them as well.
+
+Unfortunately, old versions of OpenSSL (less than 1.0.2) sometimes fail to
+validate certificate chains that use the strong roots. For this reason, if you
+fail to validate a certificate using the ``certifi.where()`` mechanism, you can
+intentionally re-add the 1024-bit roots back into your bundle by calling
+``certifi.old_where()`` instead. This is not recommended in production: if at
+all possible you should upgrade to a newer OpenSSL. However, if you have no
+other option, this may work for you.
+
.. _`Certifi`: http://certifi.io/en/latest/
.. _`Requests`: http://docs.python-requests.org/en/latest/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certifi-2015.9.6.2/certifi/__init__.py new/certifi-2015.11.20.1/certifi/__init__.py
--- old/certifi-2015.9.6.2/certifi/__init__.py 2015-09-07 17:41:55.000000000 +0200
+++ new/certifi-2015.11.20.1/certifi/__init__.py 2015-11-30 12:17:07.000000000 +0100
@@ -1,3 +1,3 @@
from .core import where, old_where
-__version__ = "2015.09.06.2"
+__version__ = "2015.11.20.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certifi-2015.9.6.2/certifi/cacert.pem new/certifi-2015.11.20.1/certifi/cacert.pem
--- old/certifi-2015.9.6.2/certifi/cacert.pem 2015-09-06 04:50:26.000000000 +0200
+++ new/certifi-2015.11.20.1/certifi/cacert.pem 2015-11-20 10:12:33.000000000 +0100
@@ -1,31 +1,4 @@
-# Issuer: O=Equifax OU=Equifax Secure Certificate Authority
-# Subject: O=Equifax OU=Equifax Secure Certificate Authority
-# Label: "Equifax Secure CA"
-# Serial: 903804111
-# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4
-# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a
-# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
-
# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
# Label: "GlobalSign Root CA"
@@ -117,38 +90,6 @@
TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
-----END CERTIFICATE-----
-# Issuer: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
-# Subject: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
-# Label: "Verisign Class 4 Public Primary Certification Authority - G3"
-# Serial: 314531972711909413743075096039378935511
-# MD5 Fingerprint: db:c8:f2:27:2e:b1:ea:6a:29:23:5d:fe:56:3e:33:df
-# SHA1 Fingerprint: c8:ec:8c:87:92:69:cb:4b:ab:39:e9:8d:7e:57:67:f3:14:95:73:9d
-# SHA256 Fingerprint: e3:89:36:0d:0f:db:ae:b3:d2:50:58:4b:47:30:31:4e:22:2f:39:c1:56:a0:20:14:4e:8d:96:05:61:79:15:06
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
# Label: "Entrust.net Premium 2048 Secure Server CA"
@@ -910,40 +851,6 @@
iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
-----END CERTIFICATE-----
-# Issuer: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
-# Subject: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
-# Label: "UTN DATACorp SGC Root CA"
-# Serial: 91374294542884689855167577680241077609
-# MD5 Fingerprint: b3:a5:3e:77:21:6d:ac:4a:c0:c9:fb:d5:41:3d:ca:06
-# SHA1 Fingerprint: 58:11:9f:0e:12:82:87:ea:50:fd:d9:87:45:6f:4f:78:dc:fa:d6:d4
-# SHA256 Fingerprint: 85:fb:2f:91:dd:12:27:5a:01:45:b6:36:53:4f:84:02:4a:d6:8b:69:b8:ee:88:68:4f:f7:11:37:58:05:b3:48
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
# Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
# Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
# Label: "UTN USERFirst Hardware Root CA"
@@ -1507,39 +1414,6 @@
9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
-----END CERTIFICATE-----
-# Issuer: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005
-# Subject: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005
-# Label: "TURKTRUST Certificate Services Provider Root 2"
-# Serial: 1
-# MD5 Fingerprint: 37:a5:6e:d4:b1:25:84:97:b7:fd:56:15:7a:f9:a2:00
-# SHA1 Fingerprint: b4:35:d4:e1:11:9d:1c:66:90:a7:49:eb:b3:94:bd:63:7b:a7:82:b7
-# SHA256 Fingerprint: c4:70:cf:54:7e:23:02:b9:77:fb:29:dd:71:a8:9a:7b:6c:1f:60:77:7b:03:29:f5:60:17:f3:28:bf:4f:6b:e6
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
------END CERTIFICATE-----
-
# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG
# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG
# Label: "SwissSign Gold CA - G2"
@@ -3362,37 +3236,6 @@
IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
-----END CERTIFICATE-----
-# Issuer: CN=A-Trust-nQual-03 O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH OU=A-Trust-nQual-03
-# Subject: CN=A-Trust-nQual-03 O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH OU=A-Trust-nQual-03
-# Label: "A-Trust-nQual-03"
-# Serial: 93214
-# MD5 Fingerprint: 49:63:ae:27:f4:d5:95:3d:d8:db:24:86:b8:9c:07:53
-# SHA1 Fingerprint: d3:c0:63:f2:19:ed:07:3e:34:ad:5d:75:0b:32:76:29:ff:d5:9a:f2
-# SHA256 Fingerprint: 79:3c:bf:45:59:b9:fd:e3:8a:b2:2d:f1:68:69:f6:98:81:ae:14:c4:b0:13:9a:c7:88:a7:8a:1a:fc:ca:02:fb
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
-VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
-bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
-dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
-MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
-dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
-ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
-EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
-lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
-znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
-2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
-k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
-2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
-VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
-KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
-8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
-FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
-DNuxUCAKGkq6ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA
# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA
# Label: "TWCA Root Certification Authority"
@@ -5227,3 +5070,83 @@
8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nMcyrDflOR1m749fPH0FFNjkulW+YZFzvW
gQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVrhkIGuUE=
-----END CERTIFICATE-----
+
+# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed
+# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed
+# Label: "OISTE WISeKey Global Root GB CA"
+# Serial: 157768595616588414422159278966750757568
+# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d
+# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed
+# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6
+-----BEGIN CERTIFICATE-----
+MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt
+MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg
+Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i
+YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x
+CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG
+b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh
+bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3
+HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx
+WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX
+1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk
+u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P
+99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r
+M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB
+BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh
+cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5
+gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO
+ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf
+aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
+Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
+-----END CERTIFICATE-----
+
+# Issuer: CN=Certification Authority of WoSign G2 O=WoSign CA Limited
+# Subject: CN=Certification Authority of WoSign G2 O=WoSign CA Limited
+# Label: "Certification Authority of WoSign G2"
+# Serial: 142423943073812161787490648904721057092
+# MD5 Fingerprint: c8:1c:7d:19:aa:cb:71:93:f2:50:f8:52:a8:1e:ba:60
+# SHA1 Fingerprint: fb:ed:dc:90:65:b7:27:20:37:bc:55:0c:9c:56:de:bb:f2:78:94:e1
+# SHA256 Fingerprint: d4:87:a5:6f:83:b0:74:82:e8:5e:96:33:94:c1:ec:c2:c9:e5:1d:09:03:ee:94:6b:02:c3:01:58:1e:d9:9e:16
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBY
+MQswCQYDVQQGEwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNV
+BAMTJENlcnRpZmljYXRpb24gQXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDEx
+MDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgxCzAJBgNVBAYTAkNOMRowGAYDVQQK
+ExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPX
+JYY1kBaiXW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgO
+gHzKtB0TiGsOqCR3A9DuW/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg
+5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg95k4ot+vElbGs/V6r+kHLXZ1L3PR8du9n
+fwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BKv0mUYQs4kI9dJGwlezt5
+2eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJ
+KoZIhvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8
+fHulwqZm46qwtyeYP0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G
+3CE4Q3RM+zD4F3LBMvzIkRfEzFg3TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yy
+SrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu+sif/a+RZQp4OBXllxcU3fng
+LDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+7Q9LGOHSJDy7
+XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=
+-----END CERTIFICATE-----
+
+# Issuer: CN=CA WoSign ECC Root O=WoSign CA Limited
+# Subject: CN=CA WoSign ECC Root O=WoSign CA Limited
+# Label: "CA WoSign ECC Root"
+# Serial: 138625735294506723296996289575837012112
+# MD5 Fingerprint: 80:c6:53:ee:61:82:28:72:f0:ff:21:b9:17:ca:b2:20
+# SHA1 Fingerprint: d2:7a:d2:be:ed:94:c0:a1:3c:c7:25:21:ea:5d:71:be:81:19:f3:2b
+# SHA256 Fingerprint: 8b:45:da:1c:06:f7:91:eb:0c:ab:f2:6b:e5:88:f5:fb:23:16:5c:2e:61:4b:f8:85:56:2d:0d:ce:50:b2:9b:02
+-----BEGIN CERTIFICATE-----
+MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQsw
+CQYDVQQGEwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMT
+EkNBIFdvU2lnbiBFQ0MgUm9vdDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4
+NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEb
+MBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZIzj0CAQYFK4EEACID
+YgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiUt5v8
+KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES
+1ns2o0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
+FgQUqv3VWqP2h4syhf3RMluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB
+1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0Daupn75OcsqF1NnstTJFGG+rrQIwfcf3
+aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYua/GRspBl9JrmkO5K
+-----END CERTIFICATE-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certifi-2015.9.6.2/certifi/old_root.pem new/certifi-2015.11.20.1/certifi/old_root.pem
--- old/certifi-2015.9.6.2/certifi/old_root.pem 2015-04-28 19:31:53.000000000 +0200
+++ new/certifi-2015.11.20.1/certifi/old_root.pem 2015-11-30 12:11:07.000000000 +0100
@@ -385,3 +385,30 @@
3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
-----END CERTIFICATE-----
+
+# Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
+# Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
+# Label: "Equifax Secure Certificate Authority"
+# Serial: 903804111
+# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4
+# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a
+# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
+UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
+dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
+MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
+dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
+BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
+cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
+AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
+MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
+aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
+ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
+IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
+MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
+A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
+7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
+1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
+-----END CERTIFICATE-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certifi-2015.9.6.2/certifi/weak.pem new/certifi-2015.11.20.1/certifi/weak.pem
--- old/certifi-2015.9.6.2/certifi/weak.pem 2015-09-06 05:19:56.000000000 +0200
+++ new/certifi-2015.11.20.1/certifi/weak.pem 2015-11-30 12:12:06.000000000 +0100
@@ -1,31 +1,4 @@
-# Issuer: O=Equifax OU=Equifax Secure Certificate Authority
-# Subject: O=Equifax OU=Equifax Secure Certificate Authority
-# Label: "Equifax Secure CA"
-# Serial: 903804111
-# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4
-# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a
-# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
-
# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
# Label: "GlobalSign Root CA"
@@ -117,38 +90,6 @@
TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
-----END CERTIFICATE-----
-# Issuer: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
-# Subject: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
-# Label: "Verisign Class 4 Public Primary Certification Authority - G3"
-# Serial: 314531972711909413743075096039378935511
-# MD5 Fingerprint: db:c8:f2:27:2e:b1:ea:6a:29:23:5d:fe:56:3e:33:df
-# SHA1 Fingerprint: c8:ec:8c:87:92:69:cb:4b:ab:39:e9:8d:7e:57:67:f3:14:95:73:9d
-# SHA256 Fingerprint: e3:89:36:0d:0f:db:ae:b3:d2:50:58:4b:47:30:31:4e:22:2f:39:c1:56:a0:20:14:4e:8d:96:05:61:79:15:06
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
-
# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
# Label: "Entrust.net Premium 2048 Secure Server CA"
@@ -910,40 +851,6 @@
iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
-----END CERTIFICATE-----
-# Issuer: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
-# Subject: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
-# Label: "UTN DATACorp SGC Root CA"
-# Serial: 91374294542884689855167577680241077609
-# MD5 Fingerprint: b3:a5:3e:77:21:6d:ac:4a:c0:c9:fb:d5:41:3d:ca:06
-# SHA1 Fingerprint: 58:11:9f:0e:12:82:87:ea:50:fd:d9:87:45:6f:4f:78:dc:fa:d6:d4
-# SHA256 Fingerprint: 85:fb:2f:91:dd:12:27:5a:01:45:b6:36:53:4f:84:02:4a:d6:8b:69:b8:ee:88:68:4f:f7:11:37:58:05:b3:48
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
-
# Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
# Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
# Label: "UTN USERFirst Hardware Root CA"
@@ -1507,39 +1414,6 @@
9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
-----END CERTIFICATE-----
-# Issuer: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005
-# Subject: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005
-# Label: "TURKTRUST Certificate Services Provider Root 2"
-# Serial: 1
-# MD5 Fingerprint: 37:a5:6e:d4:b1:25:84:97:b7:fd:56:15:7a:f9:a2:00
-# SHA1 Fingerprint: b4:35:d4:e1:11:9d:1c:66:90:a7:49:eb:b3:94:bd:63:7b:a7:82:b7
-# SHA256 Fingerprint: c4:70:cf:54:7e:23:02:b9:77:fb:29:dd:71:a8:9a:7b:6c:1f:60:77:7b:03:29:f5:60:17:f3:28:bf:4f:6b:e6
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
------END CERTIFICATE-----
-
# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG
# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG
# Label: "SwissSign Gold CA - G2"
@@ -3362,37 +3236,6 @@
IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
-----END CERTIFICATE-----
-# Issuer: CN=A-Trust-nQual-03 O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH OU=A-Trust-nQual-03
-# Subject: CN=A-Trust-nQual-03 O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH OU=A-Trust-nQual-03
-# Label: "A-Trust-nQual-03"
-# Serial: 93214
-# MD5 Fingerprint: 49:63:ae:27:f4:d5:95:3d:d8:db:24:86:b8:9c:07:53
-# SHA1 Fingerprint: d3:c0:63:f2:19:ed:07:3e:34:ad:5d:75:0b:32:76:29:ff:d5:9a:f2
-# SHA256 Fingerprint: 79:3c:bf:45:59:b9:fd:e3:8a:b2:2d:f1:68:69:f6:98:81:ae:14:c4:b0:13:9a:c7:88:a7:8a:1a:fc:ca:02:fb
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
-VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
-bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
-dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
-MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
-dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
-ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
-EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
-lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
-znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
-2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
-k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
-2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
-VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
-KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
-8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
-FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
-DNuxUCAKGkq6ahq97BvIxYSazQ==
------END CERTIFICATE-----
-
# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA
# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA
# Label: "TWCA Root Certification Authority"
@@ -5227,6 +5070,86 @@
8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nMcyrDflOR1m749fPH0FFNjkulW+YZFzvW
gQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVrhkIGuUE=
-----END CERTIFICATE-----
+
+# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed
+# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed
+# Label: "OISTE WISeKey Global Root GB CA"
+# Serial: 157768595616588414422159278966750757568
+# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d
+# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed
+# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6
+-----BEGIN CERTIFICATE-----
+MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt
+MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg
+Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i
+YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x
+CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG
+b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh
+bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3
+HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx
+WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX
+1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk
+u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P
+99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r
+M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB
+BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh
+cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5
+gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO
+ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf
+aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
+Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
+-----END CERTIFICATE-----
+
+# Issuer: CN=Certification Authority of WoSign G2 O=WoSign CA Limited
+# Subject: CN=Certification Authority of WoSign G2 O=WoSign CA Limited
+# Label: "Certification Authority of WoSign G2"
+# Serial: 142423943073812161787490648904721057092
+# MD5 Fingerprint: c8:1c:7d:19:aa:cb:71:93:f2:50:f8:52:a8:1e:ba:60
+# SHA1 Fingerprint: fb:ed:dc:90:65:b7:27:20:37:bc:55:0c:9c:56:de:bb:f2:78:94:e1
+# SHA256 Fingerprint: d4:87:a5:6f:83:b0:74:82:e8:5e:96:33:94:c1:ec:c2:c9:e5:1d:09:03:ee:94:6b:02:c3:01:58:1e:d9:9e:16
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBY
+MQswCQYDVQQGEwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNV
+BAMTJENlcnRpZmljYXRpb24gQXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDEx
+MDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgxCzAJBgNVBAYTAkNOMRowGAYDVQQK
+ExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPX
+JYY1kBaiXW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgO
+gHzKtB0TiGsOqCR3A9DuW/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg
+5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg95k4ot+vElbGs/V6r+kHLXZ1L3PR8du9n
+fwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BKv0mUYQs4kI9dJGwlezt5
+2eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJ
+KoZIhvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8
+fHulwqZm46qwtyeYP0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G
+3CE4Q3RM+zD4F3LBMvzIkRfEzFg3TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yy
+SrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu+sif/a+RZQp4OBXllxcU3fng
+LDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+7Q9LGOHSJDy7
+XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=
+-----END CERTIFICATE-----
+
+# Issuer: CN=CA WoSign ECC Root O=WoSign CA Limited
+# Subject: CN=CA WoSign ECC Root O=WoSign CA Limited
+# Label: "CA WoSign ECC Root"
+# Serial: 138625735294506723296996289575837012112
+# MD5 Fingerprint: 80:c6:53:ee:61:82:28:72:f0:ff:21:b9:17:ca:b2:20
+# SHA1 Fingerprint: d2:7a:d2:be:ed:94:c0:a1:3c:c7:25:21:ea:5d:71:be:81:19:f3:2b
+# SHA256 Fingerprint: 8b:45:da:1c:06:f7:91:eb:0c:ab:f2:6b:e5:88:f5:fb:23:16:5c:2e:61:4b:f8:85:56:2d:0d:ce:50:b2:9b:02
+-----BEGIN CERTIFICATE-----
+MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQsw
+CQYDVQQGEwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMT
+EkNBIFdvU2lnbiBFQ0MgUm9vdDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4
+NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEb
+MBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZIzj0CAQYFK4EEACID
+YgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiUt5v8
+KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES
+1ns2o0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
+FgQUqv3VWqP2h4syhf3RMluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB
+1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0Daupn75OcsqF1NnstTJFGG+rrQIwfcf3
+aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYua/GRspBl9JrmkO5K
+-----END CERTIFICATE-----
# Issuer: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
# Subject: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
# Label: "Entrust.net Secure Server CA"
@@ -5614,3 +5537,30 @@
3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
-----END CERTIFICATE-----
+
+# Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
+# Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
+# Label: "Equifax Secure Certificate Authority"
+# Serial: 903804111
+# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4
+# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a
+# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
+UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
+dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
+MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
+dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
+BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
+cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
+AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
+MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
+aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
+ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
+IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
+MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
+A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
+7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
+1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
+-----END CERTIFICATE-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/certifi-2015.9.6.2/certifi.egg-info/PKG-INFO new/certifi-2015.11.20.1/certifi.egg-info/PKG-INFO
--- old/certifi-2015.9.6.2/certifi.egg-info/PKG-INFO 2015-09-07 17:43:22.000000000 +0200
+++ new/certifi-2015.11.20.1/certifi.egg-info/PKG-INFO 2015-11-30 12:18:08.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: certifi
-Version: 2015.9.6.2
+Version: 2015.11.20.1
Summary: Python package for providing Mozilla's CA Bundle.
Home-page: http://certifi.io/
Author: Kenneth Reitz
@@ -16,7 +16,7 @@
Installation
------------
- `certifi` is available on PyPI. Simply install it with `pip`::
+ ``certifi`` is available on PyPI. Simply install it with ``pip``::
$ pip install certifi
@@ -32,6 +32,24 @@
Enjoy!
+ 1024-bit Root Certificates
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Browsers and certificate authorities have concluded that 1024-bit keys are
+ unacceptably weak for certificates, particularly root certificates. For this
+ reason, Mozilla has removed any weak (i.e. 1024-bit key) certificate from its
+ bundle, replacing it with an equivalent strong (i.e. 2048-bit or greater key)
+ certifiate from the same CA. Because Mozilla removed these certificates from
+ its bundle, ``certifi`` removed them as well.
+
+ Unfortunately, old versions of OpenSSL (less than 1.0.2) sometimes fail to
+ validate certificate chains that use the strong roots. For this reason, if you
+ fail to validate a certificate using the ``certifi.where()`` mechanism, you can
+ intentionally re-add the 1024-bit roots back into your bundle by calling
+ ``certifi.old_where()`` instead. This is not recommended in production: if at
+ all possible you should upgrade to a newer OpenSSL. However, if you have no
+ other option, this may work for you.
+
.. _`Certifi`: http://certifi.io/en/latest/
.. _`Requests`: http://docs.python-requests.org/en/latest/
1
0
Hello community,
here is the log from the commit of package WALinuxAgent for openSUSE:Factory checked in at 2016-01-28 17:24:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/WALinuxAgent (Old)
and /work/SRC/openSUSE:Factory/.WALinuxAgent.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "WALinuxAgent"
Changes:
--------
--- /work/SRC/openSUSE:Factory/WALinuxAgent/WALinuxAgent.changes 2015-10-30 13:43:20.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.WALinuxAgent.new/WALinuxAgent.changes 2016-01-28 17:25:09.000000000 +0100
@@ -1,0 +2,15 @@
+Tue Jan 19 13:55:14 UTC 2016 - rjschwei(a)suse.com
+
+- Update to version 2.0.17 (bsc#962589)
+ + add the support for the rdma driver installing/updating.
+ (this in only for SUSE)
+- From 2.0.16
+ + Handle 410 when reporting health
+ + Add timeout to http request
+ + Fix multiple issues with extension handling
+- From 2.0.15
+ + FreeBSD - fix default gateway
+ + Oracle - fix distro name detection
+ + Redhat - Port "chpasswd" from 2.1
+
+-------------------------------------------------------------------
Old:
----
WALinuxAgent-2.0.14.tar.gz
New:
----
WALinuxAgent-2.0.17.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ WALinuxAgent.spec ++++++
--- /var/tmp/diff_new_pack.cXI367/_old 2016-01-28 17:25:10.000000000 +0100
+++ /var/tmp/diff_new_pack.cXI367/_new 2016-01-28 17:25:10.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package WALinuxAgent
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
@@ -20,7 +20,7 @@
Summary: The Microsoft Azure Linux Agent
License: Apache-2.0
Group: System/Daemons
-Version: 2.0.14
+Version: 2.0.17
Release: 0
Url: https://github.com/Azure/WALinuxAgent
Source0: https://github.com/Azure/%{name}/archive/%{name}-%{version}.tar.gz
++++++ WALinuxAgent-2.0.14.tar.gz -> WALinuxAgent-2.0.17.tar.gz ++++++
++++ 2453 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package ocl-icd for openSUSE:Factory checked in at 2016-01-28 17:24:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ocl-icd (Old)
and /work/SRC/openSUSE:Factory/.ocl-icd.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ocl-icd"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ocl-icd/ocl-icd.changes 2015-09-08 17:58:17.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.ocl-icd.new/ocl-icd.changes 2016-01-28 17:25:09.000000000 +0100
@@ -1,0 +2,6 @@
+Tue Jan 26 11:33:59 UTC 2016 - mpluskal(a)suse.com
+
+- Update to 2.2.7
+ * See NEWS for full list of changes
+
+-------------------------------------------------------------------
Old:
----
ocl-icd-2.2.7.tar.gz
New:
----
ocl-icd-2.2.8.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ocl-icd.spec ++++++
--- /var/tmp/diff_new_pack.MzFYxj/_old 2016-01-28 17:25:09.000000000 +0100
+++ /var/tmp/diff_new_pack.MzFYxj/_new 2016-01-28 17:25:09.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package ocl-icd
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
@@ -17,16 +17,17 @@
Name: ocl-icd
-Version: 2.2.7
+Version: 2.2.8
Release: 0
Summary: OpenCL ICD Bindings
License: BSD-2-Clause
Group: System/Libraries
Url: https://forge.imag.fr/projects/ocl-icd/
-Source: https://forge.imag.fr/frs/download.php/667/%{name}-%{version}.tar.gz
+Source: https://forge.imag.fr/frs/download.php/698/%{name}-%{version}.tar.gz
BuildRequires: opencl-headers >= 1.2
BuildRequires: pkg-config
BuildRequires: ruby
+BuildRequires: pkgconfig(egl)
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
++++++ ocl-icd-2.2.7.tar.gz -> ocl-icd-2.2.8.tar.gz ++++++
++++ 2497 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package python-pyzmq for openSUSE:Factory checked in at 2016-01-28 17:24:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyzmq (Old)
and /work/SRC/openSUSE:Factory/.python-pyzmq.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyzmq"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyzmq/python-pyzmq.changes 2015-09-17 09:18:44.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-pyzmq.new/python-pyzmq.changes 2016-01-28 17:25:07.000000000 +0100
@@ -1,0 +2,28 @@
+Tue Jan 26 11:42:18 UTC 2016 - toddrme2178(a)gmail.com
+
+- update to version 15.2.0:
+ * FIX: handle multiple events in a single register call in
+ :mod:`zmq.asyncio`
+ * FIX: unicode/bytes bug in password prompt in :mod:`zmq.ssh` on
+ Python 3
+ * FIX: workaround gevent monkeypatches in garbage collection thread
+ * update bundled minitornado from tornado-4.3.
+ * improved inspection by setting binding=True in cython compile
+ options
+ * add asyncio Authenticator implementation in
+ :mod:`zmq.auth.asyncio`
+ * workaround overflow bug in libzmq preventing receiving messages
+ larger than MAX_INT
+- update to version 15.1.0:
+ * FIX: Remove inadvertant tornado dependency when using
+ :mod:`zmq.asyncio`
+ * FIX: 15.0 Python 3.5 wheels didn't work on Windows
+ * Add GSSAPI support to Authenticators
+ * Support new constants defined in upcoming libzmq-4.2.dev
+- update to version 15.0.0:
+ * add :mod:`asyncio` support via :mod:`zmq.asyncio`
+ * add :mod:`tornado` future support via :mod:`zmq.eventloop.future`
+ * trigger bundled libzmq if system libzmq is found to be < 3. System
+ libzmq 2 can be forced by explicitly requesting --zmq=/prefix/.
+
+-------------------------------------------------------------------
Old:
----
pyzmq-14.7.0.tar.gz
New:
----
pyzmq-15.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pyzmq.spec ++++++
--- /var/tmp/diff_new_pack.amLfde/_old 2016-01-28 17:25:08.000000000 +0100
+++ /var/tmp/diff_new_pack.amLfde/_new 2016-01-28 17:25:08.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-pyzmq
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
@@ -17,7 +17,7 @@
Name: python-pyzmq
-Version: 14.7.0
+Version: 15.2.0
Release: 0
Summary: Python bindings for 0MQ
License: LGPL-3.0+ and BSD-3-Clause
@@ -28,21 +28,19 @@
# PATCH-FIX-OPENSUSE skip_test_tracker.patch
Patch1: skip_test_tracker.patch
BuildRequires: python-Cython
-BuildRequires: python-devel
-BuildRequires: python-setuptools
-BuildRequires: zeromq-devel
-%if 0%{?suse_version} && 0%{?suse_version} <= 1110
BuildRequires: python-cffi
+BuildRequires: python-devel
BuildRequires: python-gevent
BuildRequires: python-numpy
BuildRequires: python-paramiko
BuildRequires: python-pexpect
BuildRequires: python-py
+BuildRequires: python-setuptools
BuildRequires: python-simplejson
BuildRequires: python-tornado
+BuildRequires: zeromq-devel
# Test requirements
BuildRequires: python-nose
-%endif
Requires: python
Recommends: python-cffi
Recommends: python-gevent
@@ -85,22 +83,28 @@
%install
python setup.py install --prefix=%{_prefix} --root=%{buildroot}
-# uses NETLINK which does not exist under linux mode..
-%if !0%{?qemu_user_space_build:1}
-%check
-python setup.py build_ext --inplace
-python setup.py test
-%endif
+# Disable tests, they are so slow that OBS thinks the build died.
+#%check
+## Remove non-deterministic authentication test
+## This fails to connect randomly
+# rm -rf zmq/tests/test_auth.py
+#
+# pthon3 setup.py build_ext --inplace
+# python3 setup.py test
%files
%defattr(-,root,root,-)
%doc AUTHORS.md COPYING.BSD COPYING.LESSER README.md examples docs
%{python_sitearch}/zmq/
-%{python_sitearch}/pyzmq-%{version}-py%{py_ver}.egg-info
+%{python_sitearch}/pyzmq-%{version}-py*.egg-info
%exclude %{python_sitearch}/zmq/utils/*.h
+%exclude %{python_sitearch}/zmq/backend/cffi/_verify.c
+%exclude %{python_sitearch}/zmq/backend/cffi/_cdefs.h
%files devel
%defattr(-,root,root,-)
%{python_sitearch}/zmq/utils/*.h
+%{python_sitearch}/zmq/backend/cffi/_verify.c
+%{python_sitearch}/zmq/backend/cffi/_cdefs.h
%changelog
++++++ pyzmq-14.7.0.tar.gz -> pyzmq-15.2.0.tar.gz ++++++
++++ 32684 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package ghc for openSUSE:Factory checked in at 2016-01-28 17:24:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc (Old)
and /work/SRC/openSUSE:Factory/.ghc.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc/ghc.changes 2016-01-08 15:23:28.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc.new/ghc.changes 2016-01-28 17:25:06.000000000 +0100
@@ -1,0 +2,9 @@
+Tue Jan 26 08:22:59 UTC 2016 - mimi.vx(a)gmail.com
+
+- update Cabal to 1.22.7.0
+- refresh u_Cabal_update.patch
+* Backport #3012 to the 1.22 branch
+* Add foldl' import
+* The Cabal part for fully gcc-like response files
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc.spec ++++++
--- /var/tmp/diff_new_pack.nFgc01/_old 2016-01-28 17:25:07.000000000 +0100
+++ /var/tmp/diff_new_pack.nFgc01/_new 2016-01-28 17:25:07.000000000 +0100
@@ -125,7 +125,7 @@
%global ghc_pkg_c_deps ghc-compiler = %{ghc_version_override}-%{release}
%if %{defined ghclibdir}
-%ghc_lib_subpackage Cabal 1.22.6.0
+%ghc_lib_subpackage Cabal 1.22.7.0
%ghc_lib_subpackage array 0.5.1.0
%ghc_lib_subpackage -c gmp-devel,libffi-devel base 4.8.2.0
%ghc_lib_subpackage binary 0.7.5.0
++++++ u_Cabal_update.patch ++++++
--- /var/tmp/diff_new_pack.nFgc01/_old 2016-01-28 17:25:07.000000000 +0100
+++ /var/tmp/diff_new_pack.nFgc01/_new 2016-01-28 17:25:07.000000000 +0100
@@ -1,14 +1,23 @@
diff --git a/ghc-7.10.3.old/libraries/Cabal/Cabal/Cabal.cabal b/ghc-7.10.3/libraries/Cabal/Cabal/Cabal.cabal
-index b498ca0..f3b3c32 100644
+index b498ca0..bf64bd5 100644
--- a/ghc-7.10.3.old/libraries/Cabal/Cabal/Cabal.cabal
+++ b/ghc-7.10.3/libraries/Cabal/Cabal/Cabal.cabal
@@ -1,5 +1,5 @@
name: Cabal
-version: 1.22.5.0
-+version: 1.22.6.0
++version: 1.22.7.0
copyright: 2003-2006, Isaac Jones
2005-2011, Duncan Coutts
license: BSD3
+@@ -19,7 +19,7 @@ description:
+ organizing, and cataloging Haskell libraries and tools.
+ category: Distribution
+ cabal-version: >=1.10
+-build-type: Custom
++build-type: Simple
+ -- Even though we do use the default Setup.lhs it's vital to bootstrapping
+ -- that we build Setup.lhs using our own local Cabal source code.
+
@@ -145,7 +145,7 @@ library
if flag(bundled-binary-generic)
build-depends: binary >= 0.5 && < 0.7
@@ -77,6 +86,66 @@
-- Build static/dynamic object files for TH, if needed.
when compileForTH $
+diff --git a/ghc-7.10.3.old/libraries/Cabal/Cabal/Distribution/Simple/Haddock.hs b/ghc-7.10.3/libraries/Cabal/Cabal/Distribution/Simple/Haddock.hs
+index 095d6b8..2d09292 100644
+--- a/ghc-7.10.3.old/libraries/Cabal/Cabal/Distribution/Simple/Haddock.hs
++++ b/ghc-7.10.3/libraries/Cabal/Cabal/Distribution/Simple/Haddock.hs
+@@ -84,14 +84,16 @@ import Language.Haskell.Extension
+
+
+ import Control.Monad ( when, forM_ )
++import Data.Char ( isSpace )
+ import Data.Either ( rights )
+ import Data.Monoid
++import Data.Foldable ( foldl' )
+ import Data.Maybe ( fromMaybe, listToMaybe )
+
+ import System.Directory (doesFileExist)
+ import System.FilePath ( (</>), (<.>)
+ , normalise, splitPath, joinPath, isAbsolute )
+-import System.IO (hClose, hPutStrLn, hSetEncoding, utf8)
++import System.IO (hClose, hPutStr, hPutStrLn, hSetEncoding, utf8)
+ import Distribution.Version
+
+ -- ------------------------------------------------------------------------------
+@@ -467,7 +469,7 @@ renderArgs :: Verbosity
+ -> IO a
+ renderArgs verbosity tmpFileOpts version comp args k = do
+ let haddockSupportsUTF8 = version >= Version [2,14,4] []
+- haddockSupportsResponseFiles = version > Version [2,16,1] []
++ haddockSupportsResponseFiles = version > Version [2,16,2] []
+ createDirectoryIfMissingVerbose verbosity True outputDir
+ withTempFileEx tmpFileOpts outputDir "haddock-prologue.txt" $
+ \prologueFileName h -> do
+@@ -482,7 +484,7 @@ renderArgs verbosity tmpFileOpts version comp args k = do
+ withTempFileEx tmpFileOpts outputDir "haddock-response.txt" $
+ \responseFileName hf -> do
+ when haddockSupportsUTF8 (hSetEncoding hf utf8)
+- mapM_ (hPutStrLn hf) renderedArgs
++ hPutStr hf $ unlines $ map escapeArg renderedArgs
+ hClose hf
+ let respFile = "@" ++ responseFileName
+ k ([respFile], result)
+@@ -500,6 +502,19 @@ renderArgs verbosity tmpFileOpts version comp args k = do
+ pkgstr = display $ packageName pkgid
+ pkgid = arg argPackageName
+ arg f = fromFlag $ f args
++ -- Support a gcc-like response file syntax. Each separate
++ -- argument and its possible parameter(s), will be separated in the
++ -- response file by an actual newline; all other whitespace,
++ -- single quotes, double quotes, and the character used for escaping
++ -- (backslash) are escaped. The called program will need to do a similar
++ -- inverse operation to de-escape and re-constitute the argument list.
++ escape cs c
++ | isSpace c
++ || '\\' == c
++ || '\'' == c
++ || '"' == c = c:'\\':cs -- n.b., our caller must reverse the result
++ | otherwise = c:cs
++ escapeArg = reverse . foldl' escape []
+
+ renderPureArgs :: Version -> Compiler -> HaddockArgs -> [String]
+ renderPureArgs version comp args = concat
diff --git a/ghc-7.10.3.old/libraries/Cabal/Cabal/Distribution/Version.hs b/ghc-7.10.3/libraries/Cabal/Cabal/Distribution/Version.hs
index 1123749..e5c2e28 100644
--- a/ghc-7.10.3.old/libraries/Cabal/Cabal/Distribution/Version.hs
@@ -124,10 +193,16 @@
{-# DEPRECATED AnyVersion "Use 'anyVersion', 'foldVersionRange' or 'asVersionIntervals'" #-}
{-# DEPRECATED ThisVersion "use 'thisVersion', 'foldVersionRange' or 'asVersionIntervals'" #-}
diff --git a/ghc-7.10.3.old/libraries/Cabal/Cabal/changelog b/ghc-7.10.3/libraries/Cabal/Cabal/changelog
-index f5fb8ff..e3ab68c 100644
+index f5fb8ff..57b3450 100644
--- a/ghc-7.10.3.old/libraries/Cabal/Cabal/changelog
+++ b/ghc-7.10.3/libraries/Cabal/Cabal/changelog
-@@ -1,3 +1,6 @@
+@@ -1,3 +1,12 @@
++1.22.7.0 Ryan Thomas <ryan(a)ryant.org> January 2016
++ * Backport #3012 to the 1.22 branch
++ * Cabal.cabal: change build-type to Simple
++ * Add foldl' import
++ * The Cabal part for fully gcc-like response files
++
+1.22.6.0
+ * Relax upper bound to allow upcoming binary-0.8
+
1
0
Hello community,
here is the log from the commit of package ghc-aeson-extra for openSUSE:Factory checked in at 2016-01-28 17:24:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-aeson-extra (Old)
and /work/SRC/openSUSE:Factory/.ghc-aeson-extra.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-aeson-extra"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-aeson-extra/ghc-aeson-extra.changes 2016-01-07 00:25:04.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-aeson-extra.new/ghc-aeson-extra.changes 2016-01-28 17:25:05.000000000 +0100
@@ -1,0 +2,5 @@
+Wed Jan 20 10:02:25 UTC 2016 - mimi.vx(a)gmail.com
+
+- relax base-compat constraints
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-aeson-extra.spec ++++++
--- /var/tmp/diff_new_pack.hPadA5/_old 2016-01-28 17:25:06.000000000 +0100
+++ /var/tmp/diff_new_pack.hPadA5/_new 2016-01-28 17:25:06.000000000 +0100
@@ -79,6 +79,7 @@
%prep
%setup -q -n %{pkg_name}-%{version}
+cabal-tweak-dep-ver base-compat '<0.9' '<0.10'
%build
%ghc_lib_build
1
0
Hello community,
here is the log from the commit of package ghc-yaml for openSUSE:Factory checked in at 2016-01-28 17:24:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-yaml (Old)
and /work/SRC/openSUSE:Factory/.ghc-yaml.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-yaml"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-yaml/ghc-yaml.changes 2015-12-09 22:17:35.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-yaml.new/ghc-yaml.changes 2016-01-28 17:25:04.000000000 +0100
@@ -1,0 +2,6 @@
+Wed Jan 20 13:48:32 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.8.15.3
+* Give a warning when compiling with GHCJS
+
+-------------------------------------------------------------------
Old:
----
yaml-0.8.15.2.tar.gz
New:
----
yaml-0.8.15.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-yaml.spec ++++++
--- /var/tmp/diff_new_pack.ZQQJNm/_old 2016-01-28 17:25:05.000000000 +0100
+++ /var/tmp/diff_new_pack.ZQQJNm/_new 2016-01-28 17:25:05.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package ghc-yaml
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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,7 +18,7 @@
%global pkg_name yaml
Name: ghc-yaml
-Version: 0.8.15.2
+Version: 0.8.15.3
Release: 0
Summary: Support for parsing and rendering YAML documents
License: BSD-3-Clause
@@ -69,7 +69,6 @@
%setup -q -n %{pkg_name}-%{version}
%build
-
%define cabal_configure_options -f system-libyaml
%ghc_lib_build
++++++ yaml-0.8.15.2.tar.gz -> yaml-0.8.15.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yaml-0.8.15.2/ChangeLog.md new/yaml-0.8.15.3/ChangeLog.md
--- old/yaml-0.8.15.2/ChangeLog.md 2015-11-29 17:03:39.000000000 +0100
+++ new/yaml-0.8.15.3/ChangeLog.md 2016-01-18 15:53:27.000000000 +0100
@@ -1,3 +1,7 @@
+## 0.8.15.3
+
+* Give a warning when compiling with GHCJS
+
## 0.8.15.2
* Canonicalise Monad instances [#76](https://github.com/snoyberg/yaml/pull/76)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yaml-0.8.15.2/Data/Yaml.hs new/yaml-0.8.15.3/Data/Yaml.hs
--- old/yaml-0.8.15.2/Data/Yaml.hs 2015-11-29 17:03:39.000000000 +0100
+++ new/yaml-0.8.15.3/Data/Yaml.hs 2016-01-18 15:53:27.000000000 +0100
@@ -16,7 +16,11 @@
--
-- For documentation on the @aeson@ types, functions, classes, and
-- operators, please see the @Data.Aeson@ module of the @aeson@ package.
+#if (defined (ghcjs_HOST_OS))
+module Data.Yaml {-# WARNING "GHCJS is not supported yet (will break at runtime once called)." #-}
+#else
module Data.Yaml
+#endif
( -- * Types
Value (..)
, Parser
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yaml-0.8.15.2/yaml.cabal new/yaml-0.8.15.3/yaml.cabal
--- old/yaml-0.8.15.2/yaml.cabal 2015-11-29 17:03:39.000000000 +0100
+++ new/yaml-0.8.15.3/yaml.cabal 2016-01-18 15:53:27.000000000 +0100
@@ -1,5 +1,5 @@
name: yaml
-version: 0.8.15.2
+version: 0.8.15.3
license: BSD3
license-file: LICENSE
author: Michael Snoyman <michael(a)snoyman.com>, Anton Ageev <antage(a)gmail.com>,Kirill Simonov
1
0
Hello community,
here is the log from the commit of package ghc-warp for openSUSE:Factory checked in at 2016-01-28 17:24:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-warp (Old)
and /work/SRC/openSUSE:Factory/.ghc-warp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-warp"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-warp/ghc-warp.changes 2016-01-07 00:25:06.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-warp.new/ghc-warp.changes 2016-01-28 17:25:03.000000000 +0100
@@ -1,0 +2,16 @@
+Wed Jan 20 13:45:15 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 3.2.2
+* Throwing errno for pread
+* Add back warpVersion
+* Major version up due to breaking changes. This is because the HTTP/2 code was
+ started over with Warp 3.1.3 due to performance issue
+* runHTTP2, runHTTP2Env, runHTTP2Settings and runHTTP2SettingsSocket were removed
+ from the Network.Wai.Handler.Warp module.
+* The performance of HTTP/2 was drastically improved. Now the performance of HTTP/2
+ is almost the same as that of HTTP/1.1.
+* The logic to handle files in HTTP/2 is now identical to that in HTTP/1.1.
+* Internal stuff was removed from the Network.Wai.Handler.Warp module
+ according to the plan.
+
+-------------------------------------------------------------------
Old:
----
warp-3.1.12.tar.gz
New:
----
warp-3.2.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-warp.spec ++++++
--- /var/tmp/diff_new_pack.YUriPL/_old 2016-01-28 17:25:04.000000000 +0100
+++ /var/tmp/diff_new_pack.YUriPL/_new 2016-01-28 17:25:04.000000000 +0100
@@ -21,7 +21,7 @@
%bcond_with tests
Name: ghc-warp
-Version: 3.1.12
+Version: 3.2.2
Release: 0
Summary: A fast, light-weight web server for WAI applications
License: MIT
++++++ warp-3.1.12.tar.gz -> warp-3.2.2.tar.gz ++++++
++++ 3295 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package ghc-wai for openSUSE:Factory checked in at 2016-01-28 17:24:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-wai (Old)
and /work/SRC/openSUSE:Factory/.ghc-wai.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-wai"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-wai/ghc-wai.changes 2015-12-23 08:49:27.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-wai.new/ghc-wai.changes 2016-01-28 17:25:02.000000000 +0100
@@ -1,0 +2,12 @@
+Wed Jan 20 12:01:48 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 3.2.0
+* Major version up due to breaking changes. We chose 3.2.0, not 3.1.0 for
+ consistency with Warp 3.2.0.
+* The Network.Wai.HTTP2 module was removed.
+* tryGetFileSize, hContentRange, hAcceptRanges, contentRangeHeader and
+ chooseFilePart, adjustForFilePart and parseByteRanges were removed from
+ the Network.Wai.Internal module.
+* New fields for Request: requestHeaderReferer and requestHeaderUserAgent.
+
+-------------------------------------------------------------------
Old:
----
wai-3.0.5.0.tar.gz
New:
----
wai-3.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-wai.spec ++++++
--- /var/tmp/diff_new_pack.aeeLVy/_old 2016-01-28 17:25:03.000000000 +0100
+++ /var/tmp/diff_new_pack.aeeLVy/_new 2016-01-28 17:25:03.000000000 +0100
@@ -21,7 +21,7 @@
%bcond_with tests
Name: ghc-wai
-Version: 3.0.5.0
+Version: 3.2.0
Release: 0
Summary: Web Application Interface
License: MIT
++++++ wai-3.0.5.0.tar.gz -> wai-3.2.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-3.0.5.0/Network/Wai/HTTP2.hs new/wai-3.2.0/Network/Wai/HTTP2.hs
--- old/wai-3.0.5.0/Network/Wai/HTTP2.hs 2015-12-07 10:08:37.000000000 +0100
+++ new/wai-3.2.0/Network/Wai/HTTP2.hs 1970-01-01 01:00:00.000000000 +0100
@@ -1,272 +0,0 @@
-{-# LANGUAGE OverloadedStrings, RankNTypes #-}
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE DeriveDataTypeable #-}
-
--- | An HTTP\/2-aware variant of the 'Network.Wai.Application' type. Compared
--- to the original, this exposes the new functionality of server push and
--- trailers, allows stream fragments to be sent in the form of file ranges, and
--- allows the stream body to produce a value to be used in constructing the
--- trailers. Existing @Applications@ can be faithfully upgraded to HTTP\/2
--- with 'promoteApplication' or served transparently over both protocols with
--- the normal Warp 'Network.Wai.Handler.Warp.run' family of functions.
---
--- An 'HTTP2Application' takes a 'Request' and a 'PushFunc' and produces a
--- 'Responder' that will push any associated resources and send the response
--- body. The response is always a stream of 'Builder's and file chunks.
--- Equivalents of the 'Network.Wai.responseBuilder' family of functions are
--- provided for creating 'Responder's conveniently.
---
--- Pushed streams are handled by an IO action that triggers a server push. It
--- returns @True@ if the @PUSH_PROMISE@ frame was sent, @False@ if not. Note
--- this means it will still return @True@ if the client reset or ignored the
--- stream. This gives handlers the freedom to implement their own heuristics
--- for whether to actually push a resource, while also allowing middleware and
--- frameworks to trigger server pushes automatically.
-
-module Network.Wai.HTTP2
- (
- -- * Applications
- HTTP2Application
- -- * Responder
- , Responder(..)
- , RespondFunc
- , Body
- , Chunk(..)
- , Trailers
- -- * Server push
- , PushFunc
- , PushPromise(..)
- , promiseHeaders
- -- * Conveniences
- , promoteApplication
- -- ** Responders
- , respond
- , respondCont
- , respondIO
- , respondFile
- , respondFilePart
- , respondNotFound
- , respondWith
- -- ** Stream Bodies
- , streamFilePart
- , streamBuilder
- , streamSimple
- ) where
-
-import Blaze.ByteString.Builder (Builder)
-import Blaze.ByteString.Builder.ByteString (fromByteString)
-import Control.Exception (Exception, throwIO)
-import Control.Monad.Trans.Cont (ContT(..))
-import Data.ByteString (ByteString)
-#if __GLASGOW_HASKELL__ < 709
-import Data.Functor ((<$>))
-#endif
-import Data.IORef (newIORef, readIORef, writeIORef)
-#if __GLASGOW_HASKELL__ < 709
-import Data.Monoid (mempty)
-#endif
-import Data.Typeable (Typeable)
-import qualified Network.HTTP.Types as H
-
-import Network.Wai (Application)
-import Network.Wai.Internal
- ( FilePart(..)
- , Request(requestHeaders)
- , Response(..)
- , ResponseReceived(..)
- , StreamingBody
- , adjustForFilePart
- , chooseFilePart
- , tryGetFileSize
- )
-
--- | Headers sent after the end of a data stream, as defined by section 4.1.2 of
--- the HTTP\/1.1 spec (RFC 7230), and section 8.1 of the HTTP\/2 spec.
-type Trailers = [H.Header]
-
--- | The synthesized request and headers of a pushed stream.
-data PushPromise = PushPromise
- { promisedMethod :: H.Method
- , promisedPath :: ByteString
- , promisedAuthority :: ByteString
- , promisedScheme :: ByteString
- , promisedHeader :: H.RequestHeaders
- }
-
--- | The HTTP\/2-aware equivalent of 'Network.Wai.Application'.
-type HTTP2Application = Request -> PushFunc -> Responder
-
--- | Part of a streaming response -- either a 'Builder' or a range of a file.
-data Chunk = FileChunk FilePath FilePart | BuilderChunk Builder
-
--- | The streaming body of a response. Equivalent to
--- 'Network.Wai.StreamingBody' except that it can also write file ranges and
--- return the stream's trailers.
-type Body = (Chunk -> IO ()) -> IO () -> IO Trailers
-
--- | Given to 'Responders'; provide a status, headers, and a stream body, and
--- we'll give you a token proving you called the 'RespondFunc'.
-type RespondFunc s = H.Status -> H.ResponseHeaders -> Body -> IO s
-
--- | The result of an 'HTTP2Application'; or, alternately, an application
--- that's independent of the request. This is a continuation-passing style
--- function that first provides a response by calling the given respond
--- function, then returns the request's 'Trailers'.
---
--- The respond function is similar to the one in 'Network.Wai.Application', but
--- it only takes a streaming body, the status and headers are curried, and it
--- also produces trailers for the stream.
-newtype Responder = Responder
- { runResponder :: forall s. RespondFunc s -> IO s }
-
--- | A function given to an 'HTTP2Application' to initiate a server-pushed
--- stream. Its argument is the same as the result of an 'HTTP2Application', so
--- you can either implement the response inline, or call your own application
--- to create the response.
---
--- The result is 'True' if the @PUSH_PROMISE@ frame will be sent, or 'False' if
--- it will not. This can happen if server push is disabled, the concurrency
--- limit of server-initiated streams is reached, or the associated stream has
--- already been closed.
---
--- This function shall ensure that stream data provided after it returns will
--- be sent after the @PUSH_PROMISE@ frame, so that servers can implement the
--- requirement that any pushed stream for a resource be initiated before
--- sending DATA frames that reference it.
-type PushFunc = PushPromise -> Responder -> IO Bool
-
--- | Create the 'H.RequestHeaders' corresponding to the given 'PushPromise'.
---
--- This is primarily useful for WAI handlers like Warp, and application
--- implementers are unlikely to use it directly.
-promiseHeaders :: PushPromise -> H.RequestHeaders
-promiseHeaders p =
- [ (":method", promisedMethod p)
- , (":path", promisedPath p)
- , (":authority", promisedAuthority p)
- , (":scheme", promisedScheme p)
- ] ++ promisedHeader p
-
--- | Create a response body consisting of a single range of a file. Does not
--- set Content-Length or Content-Range headers. For that, use
--- 'respondFilePart' or 'respondFile'.
-streamFilePart :: FilePath -> FilePart -> Body
-streamFilePart path part write _ = write (FileChunk path part) >> return []
-
--- | Respond with a single range of a file, adding the Accept-Ranges,
--- Content-Length and Content-Range headers and changing the status to 206 as
--- appropriate.
---
--- If you want the range to be inferred automatically from the Range header,
--- use 'respondFile' instead. On the other hand, if you want to avoid the
--- automatic header and status adjustments, use 'respond' and 'streamFilePart'
--- directly.
-respondFilePart :: H.Status -> H.ResponseHeaders -> FilePath -> FilePart -> Responder
-respondFilePart s h path part = Responder $ \k -> do
- let (s', h') = adjustForFilePart s h part
- k s' h' $ streamFilePart path part
-
--- | Serve the requested range of the specified file (based on the Range
--- header), using the given 'H.Status' and 'H.ResponseHeaders' as a base. If
--- the file is not accessible, the status will be replaced with 404 and a
--- default not-found message will be served. If a partial file is requested,
--- the status will be replaced with 206 and the Content-Range header will be
--- added. The Content-Length header will always be added.
-respondFile :: H.Status -> H.ResponseHeaders -> FilePath -> H.RequestHeaders -> Responder
-respondFile s h path reqHdrs = Responder $ \k -> do
- fileSize <- tryGetFileSize path
- case fileSize of
- Left _ -> runResponder (respondNotFound h) k
- Right size -> runResponder (respondFileExists s h path size reqHdrs) k
-
--- As 'respondFile', but with prior knowledge of the file's existence and size.
-respondFileExists :: H.Status -> H.ResponseHeaders -> FilePath -> Integer -> H.RequestHeaders -> Responder
-respondFileExists s h path size reqHdrs =
- respondFilePart s h path $ chooseFilePart size $ lookup H.hRange reqHdrs
-
--- | Respond with a minimal 404 page with the given headers.
-respondNotFound :: H.ResponseHeaders -> Responder
-respondNotFound h = Responder $ \k -> k H.notFound404 h' $
- streamBuilder $ fromByteString "File not found."
- where
- contentType = (H.hContentType, "text/plain; charset=utf-8")
- h' = contentType:filter ((/=H.hContentType) . fst) h
-
--- | Construct a 'Responder' that will just call the 'RespondFunc' with the
--- given arguments.
-respond :: H.Status -> H.ResponseHeaders -> Body -> Responder
-respond s h b = Responder $ \k -> k s h b
-
--- | Fold the given bracketing action into a 'Responder'. Note the first
--- argument is isomorphic to @Codensity IO a@ or @forall s. ContT s IO a@, and
--- is the type of a partially-applied 'Control.Exception.bracket' or
--- @with@-style function.
---
--- > respondWith (bracket acquire release) $
--- > \x -> respondNotFound [("x", show x)]
---
--- is equivalent to
---
--- > Responder $ \k -> bracket acquire release $
--- > \x -> runResponder (respondNotFound [("x", show x)] k
---
--- This is morally equivalent to ('>>=') on 'Codensity' 'IO'.
-respondWith :: (forall s. (a -> IO s) -> IO s) -> (a -> Responder) -> Responder
-respondWith with f = respondCont $ f <$> ContT with
-
--- | Fold the 'ContT' into the contained 'Responder'.
-respondCont :: (forall r. ContT r IO Responder) -> Responder
-respondCont cont = Responder $ \k -> runContT cont $ \r -> runResponder r k
-
--- | Fold the 'IO' into the contained 'Responder'.
-respondIO :: IO Responder -> Responder
-respondIO io = Responder $ \k -> io >>= \r -> runResponder r k
-
--- | Create a response body consisting of a single builder.
-streamBuilder :: Builder -> Body
-streamBuilder builder write _ = write (BuilderChunk builder) >> return []
-
--- | Create a response body of a stream of 'Builder's.
-streamSimple :: StreamingBody -> Body
-streamSimple body write flush = body (write . BuilderChunk) flush >> return []
-
--- | Use a normal WAI 'Response' to send the response. Useful if you're
--- sharing code between HTTP\/2 applications and HTTP\/1 applications.
---
--- The 'Request' is used to determine the right file range to serve for
--- 'ResponseFile'.
-promoteResponse :: Request -> Response -> Responder
-promoteResponse req response = case response of
- (ResponseBuilder s h b) ->
- Responder $ \k -> k s h (streamBuilder b)
- (ResponseStream s h body) ->
- Responder $ \k -> k s h (streamSimple body)
- (ResponseRaw _ fallback) -> promoteResponse req fallback
- (ResponseFile s h path mpart) -> maybe
- (respondFile s h path $ requestHeaders req)
- (respondFilePart s h path)
- mpart
-
--- | An 'Network.Wai.Application' we tried to promote neither called its
--- respond action nor raised; this is only possible if it imported the
--- 'ResponseReceived' constructor and used it to lie about having called the
--- action.
-data RespondNeverCalled = RespondNeverCalled deriving (Show, Typeable)
-
-instance Exception RespondNeverCalled
-
--- | Promote a normal WAI 'Application' to an 'HTTP2Application' by ignoring
--- the HTTP/2-specific features.
-promoteApplication :: Application -> HTTP2Application
-promoteApplication app req _ = Responder $ \k -> do
- -- In HTTP2Applications, the Responder is required to ferry a value of
- -- arbitrary type from the RespondFunc back to the caller of the
- -- application, but in Application the type is fixed to ResponseReceived.
- -- To add this extra power to an Application, we have to squirrel it away
- -- in an IORef as a hack.
- ref <- newIORef Nothing
- let k' r = do
- writeIORef ref . Just =<< runResponder (promoteResponse req r) k
- return ResponseReceived
- ResponseReceived <- app req k'
- readIORef ref >>= maybe (throwIO RespondNeverCalled) return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-3.0.5.0/Network/Wai/Internal.hs new/wai-3.2.0/Network/Wai/Internal.hs
--- old/wai-3.0.5.0/Network/Wai/Internal.hs 2015-12-07 10:08:37.000000000 +0100
+++ new/wai-3.2.0/Network/Wai/Internal.hs 2015-12-30 01:24:47.000000000 +0100
@@ -1,7 +1,6 @@
{-# OPTIONS_HADDOCK not-home #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE CPP #-}
-{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
-- | Internal constructors and helper functions. Note that no guarantees are
@@ -9,25 +8,17 @@
module Network.Wai.Internal where
import Blaze.ByteString.Builder (Builder)
-import Control.Exception (IOException, try)
import qualified Data.ByteString as B hiding (pack)
-import qualified Data.ByteString.Builder as B
-import qualified Data.ByteString.Char8 as B (pack, readInteger)
-import qualified Data.ByteString.Lazy as L
#if __GLASGOW_HASKELL__ < 709
import Data.Functor ((<$>))
#endif
-import Data.Maybe (listToMaybe)
import Data.Text (Text)
import Data.Typeable (Typeable)
import Data.Vault.Lazy (Vault)
import Data.Word (Word64)
import qualified Network.HTTP.Types as H
-import qualified Network.HTTP.Types.Header as HH
import Network.Socket (SockAddr)
-import Numeric (showInt)
import Data.List (intercalate)
-import qualified System.PosixCompat.Files as P
-- | Information on the request sent by the client. This abstracts away the
-- details of the underlying implementation.
@@ -93,6 +84,14 @@
--
-- Since 2.0.0
, requestHeaderRange :: Maybe B.ByteString
+ -- | The value of the Referer header in a HTTP request.
+ --
+ -- Since 3.2.0
+ , requestHeaderReferer :: Maybe B.ByteString
+ -- | The value of the User-Agent header in a HTTP request.
+ --
+ -- Since 3.2.0
+ , requestHeaderUserAgent :: Maybe B.ByteString
}
deriving (Typeable)
@@ -157,91 +156,3 @@
-- Since 3.0.0
data ResponseReceived = ResponseReceived
deriving Typeable
-
--- | Look up the size of a file in 'Right' or the 'IOException' in 'Left'.
-tryGetFileSize :: FilePath -> IO (Either IOException Integer)
-tryGetFileSize path =
- fmap (fromIntegral . P.fileSize) <$> try (P.getFileStatus path)
-
--- | \"Content-Range\".
-hContentRange :: H.HeaderName
-hContentRange = "Content-Range"
-
--- | \"Accept-Ranges\".
-hAcceptRanges :: H.HeaderName
-hAcceptRanges = "Accept-Ranges"
-
--- | @contentRangeHeader beg end total@ constructs a Content-Range 'H.Header'
--- for the range specified.
-contentRangeHeader :: Integer -> Integer -> Integer -> H.Header
-contentRangeHeader beg end total = (hContentRange, range)
- where
- range = B.pack
- -- building with ShowS
- $ 'b' : 'y': 't' : 'e' : 's' : ' '
- : (if beg > end then ('*':) else
- showInt beg
- . ('-' :)
- . showInt end)
- ( '/'
- : showInt total "")
-
--- | Given the full size of a file and optionally a Range header value,
--- determine the range to serve by parsing the range header and obeying it, or
--- serving the whole file if it's absent or malformed.
-chooseFilePart :: Integer -> Maybe B.ByteString -> FilePart
-chooseFilePart size Nothing = FilePart 0 size size
-chooseFilePart size (Just range) = case parseByteRanges range >>= listToMaybe of
- -- Range is broken
- Nothing -> FilePart 0 size size
- Just hrange -> checkRange hrange
- where
- checkRange (H.ByteRangeFrom beg) = fromRange beg (size - 1)
- checkRange (H.ByteRangeFromTo beg end) = fromRange beg (min (size - 1) end)
- checkRange (H.ByteRangeSuffix count) = fromRange (max 0 (size - count)) (size - 1)
-
- fromRange beg end = FilePart beg (end - beg + 1) size
-
--- | Adjust the given 'H.Status' and 'H.ResponseHeaders' based on the given
--- 'FilePart'. This means replacing the status with 206 if the response is
--- partial, and adding the Content-Length and Accept-Ranges (always) and
--- Content-Range (if appropriate) headers.
-adjustForFilePart :: H.Status -> H.ResponseHeaders -> FilePart -> (H.Status, H.ResponseHeaders)
-adjustForFilePart s h part = (s', h'')
- where
- off = filePartOffset part
- len = filePartByteCount part
- size = filePartFileSize part
-
- contentRange = contentRangeHeader off (off + len - 1) size
- lengthBS = L.toStrict $ B.toLazyByteString $ B.integerDec len
- s' = if filePartByteCount part /= size then H.partialContent206 else s
- h' = (H.hContentLength, lengthBS):(hAcceptRanges, "bytes"):h
- h'' = (if len == size then id else (contentRange:)) h'
-
--- | Parse the value of a Range header into a 'HH.ByteRanges'.
-parseByteRanges :: B.ByteString -> Maybe HH.ByteRanges
-parseByteRanges bs1 = do
- bs2 <- stripPrefix "bytes=" bs1
- (r, bs3) <- range bs2
- ranges (r:) bs3
- where
- range bs2 = do
- (i, bs3) <- B.readInteger bs2
- if i < 0 -- has prefix "-" ("-0" is not valid, but here treated as "0-")
- then Just (HH.ByteRangeSuffix (negate i), bs3)
- else do
- bs4 <- stripPrefix "-" bs3
- case B.readInteger bs4 of
- Just (j, bs5) | j >= i -> Just (HH.ByteRangeFromTo i j, bs5)
- _ -> Just (HH.ByteRangeFrom i, bs4)
- ranges front bs3
- | B.null bs3 = Just (front [])
- | otherwise = do
- bs4 <- stripPrefix "," bs3
- (r, bs5) <- range bs4
- ranges (front . (r:)) bs5
-
- stripPrefix x y
- | x `B.isPrefixOf` y = Just (B.drop (B.length x) y)
- | otherwise = Nothing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-3.0.5.0/Network/Wai.hs new/wai-3.2.0/Network/Wai.hs
--- old/wai-3.0.5.0/Network/Wai.hs 2015-12-07 10:08:37.000000000 +0100
+++ new/wai-3.2.0/Network/Wai.hs 2015-12-30 01:24:47.000000000 +0100
@@ -59,6 +59,8 @@
, requestBodyLength
, requestHeaderHost
, requestHeaderRange
+ , requestHeaderReferer
+ , requestHeaderUserAgent
, strictRequestBody
, lazyRequestBody
-- * Response
@@ -274,6 +276,8 @@
, requestBodyLength = KnownLength 0
, requestHeaderHost = Nothing
, requestHeaderRange = Nothing
+ , requestHeaderReferer = Nothing
+ , requestHeaderUserAgent = Nothing
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wai-3.0.5.0/wai.cabal new/wai-3.2.0/wai.cabal
--- old/wai-3.0.5.0/wai.cabal 2015-12-07 10:08:37.000000000 +0100
+++ new/wai-3.2.0/wai.cabal 2015-12-30 01:24:47.000000000 +0100
@@ -1,5 +1,5 @@
Name: wai
-Version: 3.0.5.0
+Version: 3.2.0
Synopsis: Web Application Interface.
Description: Provides a common protocol for communication between web applications and web servers.
description: API docs and the README are available at <http://www.stackage.org/package/wai>.
@@ -27,10 +27,8 @@
, http-types >= 0.7
, text >= 0.7
, transformers >= 0.0
- , unix-compat >= 0.2
, vault >= 0.3 && < 0.4
Exposed-modules: Network.Wai
- Network.Wai.HTTP2
Network.Wai.Internal
ghc-options: -Wall
1
0
Hello community,
here is the log from the commit of package ghc-temporary for openSUSE:Factory checked in at 2016-01-28 17:24:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-temporary (Old)
and /work/SRC/openSUSE:Factory/.ghc-temporary.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-temporary"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-temporary/ghc-temporary.changes 2015-05-21 08:12:12.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-temporary.new/ghc-temporary.changes 2016-01-28 17:25:01.000000000 +0100
@@ -1,0 +2,5 @@
+Tue Jan 26 10:04:40 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 1.2.0.4
+
+-------------------------------------------------------------------
Old:
----
temporary-1.2.0.3.tar.gz
New:
----
temporary-1.2.0.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-temporary.spec ++++++
--- /var/tmp/diff_new_pack.JUVaOB/_old 2016-01-28 17:25:02.000000000 +0100
+++ /var/tmp/diff_new_pack.JUVaOB/_new 2016-01-28 17:25:02.000000000 +0100
@@ -19,7 +19,7 @@
%global pkg_name temporary
Name: ghc-temporary
-Version: 1.2.0.3
+Version: 1.2.0.4
Release: 0
Summary: Haskell portable temporary file and directory support
License: BSD-3-Clause
++++++ temporary-1.2.0.3.tar.gz -> temporary-1.2.0.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/temporary-1.2.0.3/System/IO/Temp.hs new/temporary-1.2.0.4/System/IO/Temp.hs
--- old/temporary-1.2.0.3/System/IO/Temp.hs 2014-05-11 14:22:06.000000000 +0200
+++ new/temporary-1.2.0.4/System/IO/Temp.hs 2016-01-24 22:49:53.000000000 +0100
@@ -20,7 +20,7 @@
import Distribution.Compat.TempFile
--- | Create and use a temporary directory in the system standard temporary directory.
+-- | Create and use a temporary file in the system standard temporary directory.
--
-- Behaves exactly the same as 'withTempFile', except that the parent temporary directory
-- will be that returned by 'getTemporaryDirectory'.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/temporary-1.2.0.3/temporary.cabal new/temporary-1.2.0.4/temporary.cabal
--- old/temporary-1.2.0.3/temporary.cabal 2014-05-11 14:22:06.000000000 +0200
+++ new/temporary-1.2.0.4/temporary.cabal 2016-01-24 23:33:16.000000000 +0100
@@ -1,5 +1,5 @@
name: temporary
-version: 1.2.0.3
+version: 1.2.0.4
cabal-version: >= 1.6
synopsis: Portable temporary file and directory support for Windows and Unix, based on code from Cabal
description: The functions for creating temporary files and directories in the base library are quite limited. The unixutils
@@ -14,10 +14,14 @@
(c) 2005-2009, Duncan Coutts
author: Isaac Jones <ijones(a)syntaxpolice.org>
Duncan Coutts <duncan(a)haskell.org>
-maintainer: Max Bolingbroke <batterseapower(a)hotmail.com>
-homepage: http://www.github.com/batterseapower/temporary
+maintainer: Mateusz Kowalczyk <fuuzetsu(a)fuuzetsu.co.uk>, Roman Cheplyaka <roma(a)ro-che.info>
+homepage: http://www.github.com/feuerbach/temporary
build-type: Simple
+source-repository head
+ type: git
+ location: git://github.com/feuerbach/temporary.git
+
Library
exposed-modules: System.IO.Temp
other-modules: Distribution.Compat.Exception
1
0
Hello community,
here is the log from the commit of package ghc-tar for openSUSE:Factory checked in at 2016-01-28 17:24:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-tar (Old)
and /work/SRC/openSUSE:Factory/.ghc-tar.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-tar"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-tar/ghc-tar.changes 2015-11-26 17:03:15.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-tar.new/ghc-tar.changes 2016-01-28 17:25:01.000000000 +0100
@@ -1,0 +2,26 @@
+Fri Jan 15 10:17:58 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.5.0.1
+* Change type of Index.serialise to be simply strict bytestring.
+* Preserve file timestamps on unpack
+
+-------------------------------------------------------------------
+Mon Jan 11 08:26:53 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.4.5.0
+* revert accidental minor API change in 0.4.x series (the type of the owner and
+ group name strings). The 0.4.3.0 and 0.4.4.0 releases contained the accidental
+ API change.
+* Add a handy foldlEntries function
+* Build and warning fixes for GHC 7.10 and 8.0
+* New Index module function toList to get all index entries
+* New Index function unfinalise to extend existing index
+ + 9x faster reading
+ + 9x faster index construction
+ + 24x faster index extension
+* More compact entry types, using ByteStrings
+* More Eq and Show instances
+* Greater QC test coverage
+* Fix minor bug in reading non-standard v7 format entries
+
+-------------------------------------------------------------------
Old:
----
tar-0.4.2.2.tar.gz
New:
----
tar-0.5.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-tar.spec ++++++
--- /var/tmp/diff_new_pack.vxtEhM/_old 2016-01-28 17:25:01.000000000 +0100
+++ /var/tmp/diff_new_pack.vxtEhM/_new 2016-01-28 17:25:01.000000000 +0100
@@ -20,7 +20,7 @@
%bcond_with tests
Name: ghc-tar
-Version: 0.4.2.2
+Version: 0.5.0.1
Release: 0
Summary: Reading, writing and manipulating ".tar" archive files
Group: System/Libraries
@@ -35,6 +35,8 @@
# Begin cabal-rpm deps:
BuildRequires: ghc-array-devel
BuildRequires: ghc-bytestring-devel
+BuildRequires: ghc-containers-devel
+BuildRequires: ghc-deepseq-devel
BuildRequires: ghc-directory-devel
BuildRequires: ghc-filepath-devel
BuildRequires: ghc-time-devel
++++++ tar-0.4.2.2.tar.gz -> tar-0.5.0.1.tar.gz ++++++
++++ 2847 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package ghc-pipes for openSUSE:Factory checked in at 2016-01-28 17:24:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-pipes (Old)
and /work/SRC/openSUSE:Factory/.ghc-pipes.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-pipes"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-pipes/ghc-pipes.changes 2015-11-18 22:34:41.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-pipes.new/ghc-pipes.changes 2016-01-28 17:24:59.000000000 +0100
@@ -1,0 +2,5 @@
+Wed Jan 20 10:03:51 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 4.1.8
+
+-------------------------------------------------------------------
Old:
----
pipes-4.1.7.tar.gz
New:
----
pipes-4.1.8.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-pipes.spec ++++++
--- /var/tmp/diff_new_pack.0t2vo8/_old 2016-01-28 17:25:00.000000000 +0100
+++ /var/tmp/diff_new_pack.0t2vo8/_new 2016-01-28 17:25:00.000000000 +0100
@@ -21,7 +21,7 @@
%bcond_with tests
Name: ghc-pipes
-Version: 4.1.7
+Version: 4.1.8
Release: 0
Summary: Compositional pipelines
License: BSD-3-Clause
++++++ pipes-4.1.7.tar.gz -> pipes-4.1.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipes-4.1.7/pipes.cabal new/pipes-4.1.8/pipes.cabal
--- old/pipes-4.1.7/pipes.cabal 2015-11-08 21:06:24.000000000 +0100
+++ new/pipes-4.1.8/pipes.cabal 2016-01-18 19:05:18.000000000 +0100
@@ -1,5 +1,5 @@
Name: pipes
-Version: 4.1.7
+Version: 4.1.8
Cabal-Version: >= 1.10
Build-Type: Simple
License: BSD3
@@ -44,7 +44,7 @@
HS-Source-Dirs: src
Build-Depends:
base >= 4.4 && < 5 ,
- transformers >= 0.2.0.0 && < 0.5,
+ transformers >= 0.2.0.0 && < 0.6,
mmorph >= 1.0.0 && < 1.1,
mtl >= 2.1 && < 2.3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipes-4.1.7/src/Pipes/Internal.hs new/pipes-4.1.8/src/Pipes/Internal.hs
--- old/pipes-4.1.7/src/Pipes/Internal.hs 2015-11-08 21:06:24.000000000 +0100
+++ new/pipes-4.1.8/src/Pipes/Internal.hs 2016-01-18 19:05:17.000000000 +0100
@@ -84,10 +84,10 @@
Respond b fb' -> Respond b (\b' -> go (fb' b'))
M m -> M (m >>= \p' -> return (go p'))
Pure f -> fmap f px
- (*>) = (>>)
+ m *> k = m >>= (\_ -> k)
instance Monad m => Monad (Proxy a' a b' b m) where
- return = Pure
+ return = pure
(>>=) = _bind
_bind
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipes-4.1.7/src/Pipes.hs new/pipes-4.1.8/src/Pipes.hs
--- old/pipes-4.1.7/src/Pipes.hs 2015-11-08 21:06:24.000000000 +0100
+++ new/pipes-4.1.8/src/Pipes.hs 2016-01-18 19:05:17.000000000 +0100
@@ -408,7 +408,7 @@
yield (f x) ) ) )
instance (Monad m) => Monad (ListT m) where
- return a = Select (yield a)
+ return = pure
m >>= f = Select (for (enumerate m) (\a -> enumerate (f a)))
fail _ = mzero
1
0
Hello community,
here is the log from the commit of package ghc-profunctors for openSUSE:Factory checked in at 2016-01-28 17:24:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-profunctors (Old)
and /work/SRC/openSUSE:Factory/.ghc-profunctors.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-profunctors"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-profunctors/ghc-profunctors.changes 2015-12-09 22:17:20.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-profunctors.new/ghc-profunctors.changes 2016-01-28 17:25:00.000000000 +0100
@@ -1,0 +2,10 @@
+Wed Jan 20 11:55:47 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 5.2
+* Renamed Cotambara to TambaraChoice and Pastro to PastroChoice.
+* Added a true Cotambara and Copastro construction for (co)freely generating
+ costrength, along with CotambaraSum and CopastroSum variants.
+* Engaged in a fair bit of bikeshedding about the module structure for lesser used
+ modules in this package.
+
+-------------------------------------------------------------------
Old:
----
profunctors-5.1.2.tar.gz
New:
----
profunctors-5.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-profunctors.spec ++++++
--- /var/tmp/diff_new_pack.gkDvTD/_old 2016-01-28 17:25:00.000000000 +0100
+++ /var/tmp/diff_new_pack.gkDvTD/_new 2016-01-28 17:25:00.000000000 +0100
@@ -19,7 +19,7 @@
%global pkg_name profunctors
Name: ghc-profunctors
-Version: 5.1.2
+Version: 5.2
Release: 0
Summary: Profunctors
License: BSD-3-Clause
@@ -32,6 +32,7 @@
BuildRequires: ghc-Cabal-devel
BuildRequires: ghc-rpm-macros
# Begin cabal-rpm deps:
+BuildRequires: ghc-base-orphans-devel
BuildRequires: ghc-bifunctors-devel
BuildRequires: ghc-comonad-devel
BuildRequires: ghc-distributive-devel
++++++ profunctors-5.1.2.tar.gz -> profunctors-5.2.tar.gz ++++++
++++ 2590 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package ghc-optparse-applicative for openSUSE:Factory checked in at 2016-01-28 17:24:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-optparse-applicative (Old)
and /work/SRC/openSUSE:Factory/.ghc-optparse-applicative.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-optparse-applicative"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-optparse-applicative/ghc-optparse-applicative.changes 2016-01-08 15:22:53.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-optparse-applicative.new/ghc-optparse-applicative.changes 2016-01-28 17:24:58.000000000 +0100
@@ -1,0 +2,7 @@
+Wed Jan 20 09:59:00 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.12.1.0
+* Improve subparser contexts to improve usage error texts
+* Fixed bugs
+
+-------------------------------------------------------------------
Old:
----
optparse-applicative-0.12.0.0.tar.gz
New:
----
optparse-applicative-0.12.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-optparse-applicative.spec ++++++
--- /var/tmp/diff_new_pack.shnxZg/_old 2016-01-28 17:24:59.000000000 +0100
+++ /var/tmp/diff_new_pack.shnxZg/_new 2016-01-28 17:24:59.000000000 +0100
@@ -18,7 +18,7 @@
%global pkg_name optparse-applicative
Name: ghc-optparse-applicative
-Version: 0.12.0.0
+Version: 0.12.1.0
Release: 0
Summary: Utilities and combinators for parsing command line options
Group: System/Libraries
++++++ optparse-applicative-0.12.0.0.tar.gz -> optparse-applicative-0.12.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.12.0.0/CHANGELOG.md new/optparse-applicative-0.12.1.0/CHANGELOG.md
--- old/optparse-applicative-0.12.0.0/CHANGELOG.md 2015-09-25 12:00:41.000000000 +0200
+++ new/optparse-applicative-0.12.1.0/CHANGELOG.md 2016-01-19 10:57:20.000000000 +0100
@@ -1,3 +1,17 @@
+## Version 0.12.1.0 (18 Jan 2016)
+
+- Updated dependency bounds.
+
+- Improve subparser contexts to improve usage error texts
+
+- Doc
+
+- Fixed bugs
+ * \# 164 - Invalid options and invalid arguments after parser has succeeded
+ not displaying
+ * \# 146 - multi-word filename completion is broken
+
+
## Version 0.12.0.0 (17 Sep 2015)
- Add "missing" error condition descriptions when required flags and arguments
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.12.0.0/Options/Applicative/BashCompletion.hs new/optparse-applicative-0.12.1.0/Options/Applicative/BashCompletion.hs
--- old/optparse-applicative-0.12.0.0/Options/Applicative/BashCompletion.hs 2015-09-25 12:00:41.000000000 +0200
+++ new/optparse-applicative-0.12.1.0/Options/Applicative/BashCompletion.hs 2016-01-19 10:57:20.000000000 +0100
@@ -78,6 +78,7 @@
[ "_" ++ progn ++ "()"
, "{"
, " local cmdline"
+ , " local IFS=$'\n'"
, " CMDLINE=(--bash-completion-index $COMP_CWORD)"
, ""
, " for arg in ${COMP_WORDS[@]}; do"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.12.0.0/Options/Applicative/Common.hs new/optparse-applicative-0.12.1.0/Options/Applicative/Common.hs
--- old/optparse-applicative-0.12.0.0/Options/Applicative/Common.hs 2015-09-25 12:00:41.000000000 +0200
+++ new/optparse-applicative-0.12.1.0/Options/Applicative/Common.hs 2016-01-19 10:57:20.000000000 +0100
@@ -52,7 +52,7 @@
OptDescStyle (..)
) where
-import Control.Applicative (pure, (<*>), (<$>), (<|>), (<$))
+import Control.Applicative (pure, (<*>), (<*), (*>), (<$>), (<|>), (<$))
import Control.Arrow (left)
import Control.Monad (guard, mzero, msum, when, liftM)
import Control.Monad.Trans.Class (lift)
@@ -102,14 +102,13 @@
return result
CmdReader _ f ->
flip fmap (f arg) $ \subp -> StateT $ \args -> do
- setContext (Just arg) subp
prefs <- getPrefs
let runSubparser
| prefBacktrack prefs = \i a ->
runParser (getPolicy i) (infoParser i) a
| otherwise = \i a
-> (,) <$> runParserInfo i a <*> pure []
- runSubparser subp args
+ enterContext arg subp *> runSubparser subp args <* exitContext
_ -> Nothing
optMatches :: MonadP m => Bool -> OptReader a -> OptWord -> Maybe (StateT Args m a)
@@ -243,8 +242,9 @@
runParserFully :: MonadP m => ArgPolicy -> Parser a -> Args -> m a
runParserFully policy p args = do
(r, args') <- runParser policy p args
- guard $ null args'
- return r
+ case args' of
+ [] -> return r
+ a:_ -> parseError a
-- | The default value of a 'Parser'. This function returns an error if any of
-- the options don't have a default value.
@@ -258,13 +258,11 @@
= Left $ Leaf (f (OptHelpInfo m d) opt)
| otherwise
= Left $ MultNode []
-evalParser m d f (MultP p1 p2) = case evalParser m d f p1 <*> evalParser m d f p2 of
- Right a -> Right a
- Left _ -> case (evalParser m d f p1, evalParser m d f p2) of
- (Left a', Left b') -> Left $ MultNode [a', b']
- (Left a', _) -> Left $ MultNode [a']
- (_, Left b') -> Left $ MultNode [b']
- _ -> Left $ MultNode []
+evalParser m d f (MultP p1 p2) = case (evalParser m d f p1, evalParser m d f p2) of
+ (Right a', Right b') -> Right $ a' b'
+ (Left a', Left b') -> Left $ MultNode [a', b']
+ (Left a', _) -> Left $ MultNode [a']
+ (_, Left b') -> Left $ MultNode [b']
evalParser m d f (AltP p1 p2) = case (evalParser m d f p1, evalParser m d f p2) of
(Right a', _) -> Right a'
(_, Right b') -> Right b'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.12.0.0/Options/Applicative/Extra.hs new/optparse-applicative-0.12.1.0/Options/Applicative/Extra.hs
--- old/optparse-applicative-0.12.0.0/Options/Applicative/Extra.hs 2015-09-25 12:00:41.000000000 +0200
+++ new/optparse-applicative-0.12.1.0/Options/Applicative/Extra.hs 2016-01-19 10:57:20.000000000 +0100
@@ -44,6 +44,9 @@
, help "Show this help text"
, hidden ]
+-- | Builder for a command parser with a \"helper\" option attached.
+-- Used in the same way as `subparser`, but includes a \"--help|-h\" inside
+-- the subcommand.
hsubparser :: Mod CommandFields a -> Parser a
hsubparser m = mkParser d g rdr
where
@@ -133,7 +136,7 @@
--
-- @handleParseResult . Failure $ parserFailure pprefs pinfo ShowHelpText mempty@
parserFailure :: ParserPrefs -> ParserInfo a
- -> ParseError -> Context
+ -> ParseError -> [Context]
-> ParserFailure ParserHelp
parserFailure pprefs pinfo msg ctx = ParserFailure $ \progn ->
let h = with_context ctx pinfo $ \names pinfo' -> mconcat
@@ -149,12 +152,12 @@
ShowHelpText -> ExitSuccess
InfoMsg _ -> ExitSuccess
- with_context :: Context
+ with_context :: [Context]
-> ParserInfo a
-> (forall b . [String] -> ParserInfo b -> c)
-> c
- with_context NullContext i f = f [] i
- with_context (Context n i) _ f = f n i
+ with_context [] i f = f [] i
+ with_context c@(Context _ i:_) _ f = f (contextNames c) i
usage_help progn names i = case msg of
InfoMsg _ -> mempty
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.12.0.0/Options/Applicative/Internal.hs new/optparse-applicative-0.12.1.0/Options/Applicative/Internal.hs
--- old/optparse-applicative-0.12.0.0/Options/Applicative/Internal.hs 2015-09-25 12:00:41.000000000 +0200
+++ new/optparse-applicative-0.12.1.0/Options/Applicative/Internal.hs 2016-01-19 10:57:20.000000000 +0100
@@ -17,6 +17,7 @@
, runCompletion
, SomeParser(..)
, ComplError(..)
+ , contextNames
, ListT
, takeListT
@@ -35,15 +36,13 @@
(runExcept, runExceptT, withExcept, ExceptT(..), throwE, catchE)
import Control.Monad.Trans.Reader
(mapReaderT, runReader, runReaderT, Reader, ReaderT, ask)
-import Control.Monad.Trans.Writer (runWriterT, WriterT, tell)
-import Control.Monad.Trans.State (StateT, get, put, evalStateT)
-import Data.Maybe (maybeToList)
-import Data.Monoid (Monoid(..))
+import Control.Monad.Trans.State (StateT, get, put, modify, evalStateT, runStateT)
import Options.Applicative.Types
class (Alternative m, MonadPlus m) => MonadP m where
- setContext :: Maybe String -> ParserInfo a -> m ()
+ enterContext :: String -> ParserInfo a -> m ()
+ exitContext :: m ()
getPrefs :: m ParserPrefs
missingArgP :: ParseError -> Completer -> m a
@@ -51,7 +50,7 @@
errorP :: ParseError -> m a
exitP :: Parser b -> Either ParseError a -> m a
-newtype P a = P (ExceptT ParseError (WriterT Context (Reader ParserPrefs)) a)
+newtype P a = P (ExceptT ParseError (StateT [Context] (Reader ParserPrefs)) a)
instance Functor P where
fmap f (P m) = P $ fmap f m
@@ -74,20 +73,16 @@
data Context
- = forall a . Context [String] (ParserInfo a)
- | NullContext
+ = forall a . Context String (ParserInfo a)
-contextNames :: Context -> [String]
-contextNames (Context ns _) = ns
-contextNames NullContext = []
-
-instance Monoid Context where
- mempty = NullContext
- mappend c (Context ns i) = Context (contextNames c ++ ns) i
- mappend c _ = c
+contextNames :: [Context] -> [String]
+contextNames ns =
+ let go (Context n _) = n
+ in reverse $ go <$> ns
instance MonadP P where
- setContext name = P . lift . tell . Context (maybeToList name)
+ enterContext name pinfo = P $ lift $ modify $ (:) $ Context name pinfo
+ exitContext = P $ lift $ modify $ drop 1
getPrefs = P . lift . lift $ ask
missingArgP e _ = errorP e
@@ -101,8 +96,8 @@
hoistEither :: MonadP m => Either ParseError a -> m a
hoistEither = either errorP return
-runP :: P a -> ParserPrefs -> (Either ParseError a, Context)
-runP (P p) = runReader . runWriterT . runExceptT $ p
+runP :: P a -> ParserPrefs -> (Either ParseError a, [Context])
+runP (P p) = runReader . flip runStateT [] . runExceptT $ p
uncons :: [a] -> Maybe (a, [a])
uncons [] = Nothing
@@ -165,7 +160,8 @@
mplus (Completion x) (Completion y) = Completion $ mplus x y
instance MonadP Completion where
- setContext _ _ = return ()
+ enterContext _ _ = return ()
+ exitContext = return ()
getPrefs = Completion $ lift ask
missingArgP _ = Completion . lift . lift . ComplOption
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/optparse-applicative-0.12.0.0/optparse-applicative.cabal new/optparse-applicative-0.12.1.0/optparse-applicative.cabal
--- old/optparse-applicative-0.12.0.0/optparse-applicative.cabal 2015-09-25 12:00:41.000000000 +0200
+++ new/optparse-applicative-0.12.1.0/optparse-applicative.cabal 2016-01-19 10:57:20.000000000 +0100
@@ -1,5 +1,5 @@
name: optparse-applicative
-version: 0.12.0.0
+version: 0.12.1.0
synopsis: Utilities and combinators for parsing command line options
description:
Here is a simple example of an applicative option parser:
@@ -110,7 +110,7 @@
Options.Applicative.Internal
ghc-options: -Wall
build-depends: base == 4.*,
- transformers >= 0.2 && < 0.5,
- transformers-compat >= 0.3 && < 0.5,
- process >= 1.0 && < 1.4,
+ transformers >= 0.2 && < 0.6,
+ transformers-compat >= 0.3 && < 0.6,
+ process >= 1.0 && < 1.5,
ansi-wl-pprint >= 0.6.6 && < 0.7
1
0
Hello community,
here is the log from the commit of package ghc-OpenGLRaw for openSUSE:Factory checked in at 2016-01-28 17:24:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-OpenGLRaw (Old)
and /work/SRC/openSUSE:Factory/.ghc-OpenGLRaw.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-OpenGLRaw"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-OpenGLRaw/ghc-OpenGLRaw.changes 2016-01-05 21:55:49.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-OpenGLRaw.new/ghc-OpenGLRaw.changes 2016-01-28 17:24:57.000000000 +0100
@@ -1,0 +2,10 @@
+Mon Jan 11 07:53:35 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 3.1.0.0
+* Changed the type of GL_FALSE and GL_TRUE to GLboolean, leading to fewer
+ fromIntegral calls in user code.
+* Added deprecated functions mkGLDEBUGPROC, mkGLDEBUGPROCAMD, mkGLDEBUGPROCARB,
+ mkGLDEBUGPROCKHR for gl compatibility.
+* Updated OpenGL registry to r32348.
+
+-------------------------------------------------------------------
Old:
----
OpenGLRaw-3.0.0.0.tar.gz
New:
----
OpenGLRaw-3.1.0.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-OpenGLRaw.spec ++++++
--- /var/tmp/diff_new_pack.jcXhkN/_old 2016-01-28 17:24:57.000000000 +0100
+++ /var/tmp/diff_new_pack.jcXhkN/_new 2016-01-28 17:24:58.000000000 +0100
@@ -20,7 +20,7 @@
%global pkg_name OpenGLRaw
Name: ghc-OpenGLRaw
-Version: 3.0.0.0
+Version: 3.1.0.0
Release: 0
Summary: A raw binding for the OpenGL graphics system
License: BSD-3-Clause
++++++ OpenGLRaw-3.0.0.0.tar.gz -> OpenGLRaw-3.1.0.0.tar.gz ++++++
++++ 25983 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package ghc-MonadRandom for openSUSE:Factory checked in at 2016-01-28 17:23:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-MonadRandom (Old)
and /work/SRC/openSUSE:Factory/.ghc-MonadRandom.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-MonadRandom"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-MonadRandom/ghc-MonadRandom.changes 2016-01-22 01:08:31.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-MonadRandom.new/ghc-MonadRandom.changes 2016-01-28 17:24:54.000000000 +0100
@@ -1,0 +2,6 @@
+Wed Jan 20 09:49:57 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.4.2.2
+* Allow transformers-0.5.
+
+-------------------------------------------------------------------
Old:
----
MonadRandom-0.4.2.1.tar.gz
New:
----
MonadRandom-0.4.2.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-MonadRandom.spec ++++++
--- /var/tmp/diff_new_pack.25nlEK/_old 2016-01-28 17:24:55.000000000 +0100
+++ /var/tmp/diff_new_pack.25nlEK/_new 2016-01-28 17:24:55.000000000 +0100
@@ -19,7 +19,7 @@
%global pkg_name MonadRandom
Name: ghc-MonadRandom
-Version: 0.4.2.1
+Version: 0.4.2.2
Release: 0
Summary: Random-number generation monad
License: MIT
++++++ MonadRandom-0.4.2.1.tar.gz -> MonadRandom-0.4.2.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MonadRandom-0.4.2.1/CHANGES.markdown new/MonadRandom-0.4.2.2/CHANGES.markdown
--- old/MonadRandom-0.4.2.1/CHANGES.markdown 2016-01-17 00:40:44.000000000 +0100
+++ new/MonadRandom-0.4.2.2/CHANGES.markdown 2016-01-18 18:09:08.000000000 +0100
@@ -1,3 +1,8 @@
+0.4.2.2 (18 January 2016)
+-------------------------
+
+ - Allow `transformers-0.5`.
+
0.4.2.1 (16 January 2016)
-------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/MonadRandom-0.4.2.1/MonadRandom.cabal new/MonadRandom-0.4.2.2/MonadRandom.cabal
--- old/MonadRandom-0.4.2.1/MonadRandom.cabal 2016-01-17 00:40:44.000000000 +0100
+++ new/MonadRandom-0.4.2.2/MonadRandom.cabal 2016-01-18 18:09:08.000000000 +0100
@@ -1,5 +1,5 @@
name: MonadRandom
-version: 0.4.2.1
+version: 0.4.2.2
synopsis: Random-number generation monad.
description: Support for computations which consume random values.
license: OtherLicense
@@ -11,6 +11,13 @@
build-type: Simple
cabal-version: >=1.10
extra-source-files: CHANGES.markdown
+tested-with:
+ GHC==7.4.2,
+ GHC==7.6.3,
+ GHC==7.8.4,
+ GHC==7.10.3,
+ GHC==8.0.1
+
source-repository head
type: git
location: git://github.com/byorgey/MonadRandom.git
@@ -18,7 +25,7 @@
library
exposed-modules: Control.Monad.Random, Control.Monad.Random.Class
build-depends: base >= 2 && < 5,
- transformers >= 0.3 && < 0.5,
+ transformers >= 0.3 && < 0.6,
transformers-compat >= 0.4 && < 0.6,
mtl >= 2.1 && < 2.3,
random
1
0
Hello community,
here is the log from the commit of package ghc-mono-traversable for openSUSE:Factory checked in at 2016-01-28 17:24:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-mono-traversable (Old)
and /work/SRC/openSUSE:Factory/.ghc-mono-traversable.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-mono-traversable"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-mono-traversable/ghc-mono-traversable.changes 2016-01-07 00:25:17.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-mono-traversable.new/ghc-mono-traversable.changes 2016-01-28 17:24:56.000000000 +0100
@@ -1,0 +2,6 @@
+Tue Jan 26 09:50:06 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.10.1
+* Allow comonad-5
+
+-------------------------------------------------------------------
Old:
----
mono-traversable-0.10.0.1.tar.gz
New:
----
mono-traversable-0.10.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-mono-traversable.spec ++++++
--- /var/tmp/diff_new_pack.QDsQN7/_old 2016-01-28 17:24:56.000000000 +0100
+++ /var/tmp/diff_new_pack.QDsQN7/_new 2016-01-28 17:24:56.000000000 +0100
@@ -20,7 +20,7 @@
%bcond_with tests
Name: ghc-mono-traversable
-Version: 0.10.0.1
+Version: 0.10.1
Release: 0
Summary: Type classes for mapping, folding, and traversing monomorphic containers
Group: System/Libraries
++++++ mono-traversable-0.10.0.1.tar.gz -> mono-traversable-0.10.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mono-traversable-0.10.0.1/ChangeLog.md new/mono-traversable-0.10.1/ChangeLog.md
--- old/mono-traversable-0.10.0.1/ChangeLog.md 2015-12-13 09:10:48.000000000 +0100
+++ new/mono-traversable-0.10.1/ChangeLog.md 2016-01-18 13:20:42.000000000 +0100
@@ -1,3 +1,7 @@
+## 0.10.1
+
+* Allow comonad-5 [#86](https://github.com/snoyberg/mono-traversable/issues/86)
+
## 0.10.0.1
* Instance for Data.Sequence.Seq is incorrect. [#83](https://github.com/snoyberg/mono-traversable/issues/83)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mono-traversable-0.10.0.1/mono-traversable.cabal new/mono-traversable-0.10.1/mono-traversable.cabal
--- old/mono-traversable-0.10.0.1/mono-traversable.cabal 2015-12-13 09:10:48.000000000 +0100
+++ new/mono-traversable-0.10.1/mono-traversable.cabal 2016-01-18 13:20:42.000000000 +0100
@@ -1,5 +1,5 @@
name: mono-traversable
-version: 0.10.0.1
+version: 0.10.1
synopsis: Type classes for mapping, folding, and traversing monomorphic containers
description: Monomorphic variants of the Functor, Foldable, and Traversable typeclasses. If you understand Haskell's basic typeclasses, you understand mono-traversable. In addition to what you are used to, it adds on an IsSequence typeclass and has code for marking data structures as non-empty.
homepage: https://github.com/snoyberg/mono-traversable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mono-traversable-0.10.0.1/src/Data/MonoTraversable.hs new/mono-traversable-0.10.1/src/Data/MonoTraversable.hs
--- old/mono-traversable-0.10.0.1/src/Data/MonoTraversable.hs 2015-12-13 09:10:48.000000000 +0100
+++ new/mono-traversable-0.10.1/src/Data/MonoTraversable.hs 2016-01-18 13:20:42.000000000 +0100
@@ -1,4 +1,5 @@
{-# LANGUAGE ConstrainedClassMethods #-}
+{-# LANGUAGE CPP #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
@@ -68,7 +69,9 @@
import Control.Comonad.Store (StoreT)
import Control.Comonad.Env (EnvT)
import Control.Comonad.Traced (TracedT)
+#if !MIN_VERSION_comonad(5,0,0)
import Data.Functor.Coproduct (Coproduct)
+#endif
import Control.Monad.Trans.Writer (WriterT)
import qualified Control.Monad.Trans.Writer.Strict as Strict (WriterT)
import Control.Monad.Trans.State (StateT(..))
@@ -151,7 +154,9 @@
type instance Element (EnvT e w a) = a
type instance Element (StoreT s w a) = a
type instance Element (TracedT m w a) = a
+#if !MIN_VERSION_comonad(5,0,0)
type instance Element (Coproduct f g a) = a
+#endif
-- | Monomorphic containers that can be mapped over.
class MonoFunctor mono where
@@ -198,7 +203,9 @@
instance Functor w => MonoFunctor (EnvT e w a)
instance Functor w => MonoFunctor (StoreT s w a)
instance Functor w => MonoFunctor (TracedT m w a)
+#if !MIN_VERSION_comonad(5,0,0)
instance (Functor f, Functor g) => MonoFunctor (Coproduct f g a)
+#endif
instance Arrow a => MonoFunctor (WrappedArrow a b c)
instance Functor f => MonoFunctor (MaybeApply f a)
instance Functor f => MonoFunctor (WrappedApplicative f a)
@@ -1274,7 +1281,9 @@
instance Comonad w => MonoComonad (EnvT e w a)
instance Comonad w => MonoComonad (StoreT s w a)
instance (Comonad w, Monoid m) => MonoComonad (TracedT m w a)
+#if !MIN_VERSION_comonad(5,0,0)
instance (Comonad f, Comonad g) => MonoComonad (Coproduct f g a)
+#endif
-- Not Comonad
instance MonoComonad (ViewL a) where
1
0
Hello community,
here is the log from the commit of package ghc-memory for openSUSE:Factory checked in at 2016-01-28 17:23:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-memory (Old)
and /work/SRC/openSUSE:Factory/.ghc-memory.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-memory"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-memory/ghc-memory.changes 2016-01-07 00:25:18.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-memory.new/ghc-memory.changes 2016-01-28 17:24:53.000000000 +0100
@@ -1,0 +2,5 @@
+Fri Jan 15 10:04:57 UTC 2016 - mimi.vx(a)gmail.com
+
+- update 0.11
+
+-------------------------------------------------------------------
Old:
----
memory-0.10.tar.gz
New:
----
memory-0.11.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-memory.spec ++++++
--- /var/tmp/diff_new_pack.UOWviT/_old 2016-01-28 17:24:54.000000000 +0100
+++ /var/tmp/diff_new_pack.UOWviT/_new 2016-01-28 17:24:54.000000000 +0100
@@ -21,7 +21,7 @@
%bcond_with tests
Name: ghc-memory
-Version: 0.10
+Version: 0.11
Release: 0
Summary: Memory and related abtraction stuff
License: BSD-3-Clause
++++++ memory-0.10.tar.gz -> memory-0.11.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memory-0.10/Data/ByteArray/ScrubbedBytes.hs new/memory-0.11/Data/ByteArray/ScrubbedBytes.hs
--- old/memory-0.10/Data/ByteArray/ScrubbedBytes.hs 2015-09-08 15:28:21.000000000 +0200
+++ new/memory-0.11/Data/ByteArray/ScrubbedBytes.hs 2016-01-12 23:28:28.000000000 +0100
@@ -64,10 +64,29 @@
| otherwise = IO $ \s ->
case newAlignedPinnedByteArray# sz 8# s of
(# s1, mbarr #) ->
- let !scrubber = getScrubber sz
+ let !scrubber = (getScrubber sz) (byteArrayContents# (unsafeCoerce# mbarr))
!mba = ScrubbedBytes mbarr
- in case mkWeak# mbarr () (scrubber (byteArrayContents# (unsafeCoerce# mbarr)) >> touchScrubbedBytes mba) s1 of
+ in case mkWeak# mbarr () (finalize scrubber mba) s1 of
(# s2, _ #) -> (# s2, mba #)
+ where
+#if __GLASGOW_HASKELL__ > 800
+ finalize :: (State# RealWorld -> State# RealWorld) -> ScrubbedBytes -> State# RealWorld -> State# RealWorld
+ finalize scrubber mba@(ScrubbedBytes _) = \s1 ->
+ case scrubber s1 of
+ s2 -> touch# mba s2
+#elif __GLASGOW_HASKELL__ >= 800
+ finalize :: (State# RealWorld -> State# RealWorld) -> ScrubbedBytes -> State# RealWorld -> (# State# RealWorld, () #)
+ finalize scrubber mba@(ScrubbedBytes _) = \s1 ->
+ case scrubber s1 of
+ s2 -> case touch# mba s2 of
+ s3 -> (# s3, () #)
+#else
+ finalize :: (State# RealWorld -> State# RealWorld) -> ScrubbedBytes -> IO ()
+ finalize scrubber mba@(ScrubbedBytes _) = IO $ \s1 -> do
+ case scrubber s1 of
+ s2 -> case touch# mba s2 of
+ s3 -> (# s3, () #)
+#endif
scrubbedBytesAllocRet :: Int -> (Ptr p -> IO a) -> IO (a, ScrubbedBytes)
scrubbedBytesAllocRet sz f = do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memory-0.10/Data/Memory/Internal/CompatPrim.hs new/memory-0.11/Data/Memory/Internal/CompatPrim.hs
--- old/memory-0.10/Data/Memory/Internal/CompatPrim.hs 2015-09-08 15:28:21.000000000 +0200
+++ new/memory-0.11/Data/Memory/Internal/CompatPrim.hs 2016-01-12 23:28:28.000000000 +0100
@@ -75,10 +75,10 @@
-> (Int# -> a) -- ^ if it divided by 8, the argument is the number of 8 bytes words
-> (Int# -> a) -- ^ if it doesn't, just the number of bytes
-> a
-#if __GLASGOW_HASKELL__ >= 740
+#if __GLASGOW_HASKELL__ > 704
eitherDivideBy8# v f8 f1 =
- let !(# q, r #) = quotRemInt v 8#
- in if booleanPrim (r ==# 0)
+ let !(# q, r #) = quotRemInt# v 8#
+ in if booleanPrim (r ==# 0#)
then f8 q
else f1 v
#else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memory-0.10/Data/Memory/Internal/Scrubber.hs new/memory-0.11/Data/Memory/Internal/Scrubber.hs
--- old/memory-0.10/Data/Memory/Internal/Scrubber.hs 2015-09-08 15:28:21.000000000 +0200
+++ new/memory-0.11/Data/Memory/Internal/Scrubber.hs 2016-01-12 23:28:28.000000000 +0100
@@ -15,10 +15,9 @@
) where
import GHC.Prim
-import GHC.IO
import Data.Memory.Internal.CompatPrim (booleanPrim)
-getScrubber :: Int# -> (Addr# -> IO ())
+getScrubber :: Int# -> (Addr# -> State# RealWorld -> State# RealWorld)
getScrubber sz
| booleanPrim (sz ==# 4#) = scrub4
| booleanPrim (sz ==# 8#) = scrub8
@@ -26,31 +25,31 @@
| booleanPrim (sz ==# 32#) = scrub32
| otherwise = scrubBytes sz
where
- scrub4 a = IO $ \s -> (# writeWord32OffAddr# a 0# 0## s, () #)
+ scrub4 a = \s -> writeWord32OffAddr# a 0# 0## s
#if WORD_SIZE_IN_BITS == 64
- scrub8 a = IO $ \s -> (# writeWord64OffAddr# a 0# 0## s, () #)
- scrub16 a = IO $ \s1 ->
+ scrub8 a = \s -> writeWord64OffAddr# a 0# 0## s
+ scrub16 a = \s1 ->
let !s2 = writeWord64OffAddr# a 0# 0## s1
!s3 = writeWord64OffAddr# a 1# 0## s2
- in (# s3, () #)
- scrub32 a = IO $ \s1 ->
+ in s3
+ scrub32 a = \s1 ->
let !s2 = writeWord64OffAddr# a 0# 0## s1
!s3 = writeWord64OffAddr# a 1# 0## s2
!s4 = writeWord64OffAddr# a 2# 0## s3
!s5 = writeWord64OffAddr# a 3# 0## s4
- in (# s5, () #)
+ in s5
#else
- scrub8 a = IO $ \s1 ->
+ scrub8 a = \s1 ->
let !s2 = writeWord32OffAddr# a 0# 0## s1
!s3 = writeWord32OffAddr# a 1# 0## s2
- in (# s3, () #)
- scrub16 a = IO $ \s1 ->
+ in s3
+ scrub16 a = \s1 ->
let !s2 = writeWord32OffAddr# a 0# 0## s1
!s3 = writeWord32OffAddr# a 1# 0## s2
!s4 = writeWord32OffAddr# a 2# 0## s3
!s5 = writeWord32OffAddr# a 3# 0## s4
- in (# s5, () #)
- scrub32 a = IO $ \s1 ->
+ in s5
+ scrub32 a = \s1 ->
let !s2 = writeWord32OffAddr# a 0# 0## s1
!s3 = writeWord32OffAddr# a 1# 0## s2
!s4 = writeWord32OffAddr# a 2# 0## s3
@@ -59,11 +58,11 @@
!s7 = writeWord32OffAddr# a 5# 0## s6
!s8 = writeWord32OffAddr# a 6# 0## s7
!s9 = writeWord32OffAddr# a 7# 0## s8
- in (# s9, () #)
+ in s9
#endif
-scrubBytes :: Int# -> Addr# -> IO ()
-scrubBytes sz8 addr = IO $ \s -> (# loop sz8 addr s, () #)
+scrubBytes :: Int# -> Addr# -> State# RealWorld -> State# RealWorld
+scrubBytes sz8 addr = \s -> loop sz8 addr s
where loop :: Int# -> Addr# -> State# RealWorld -> State# RealWorld
loop n a s
| booleanPrim (n ==# 0#) = s
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/memory-0.10/memory.cabal new/memory-0.11/memory.cabal
--- old/memory-0.10/memory.cabal 2015-09-08 15:28:21.000000000 +0200
+++ new/memory-0.11/memory.cabal 2016-01-12 23:28:28.000000000 +0100
@@ -1,5 +1,5 @@
Name: memory
-Version: 0.10
+Version: 0.11
Synopsis: memory and related abstraction stuff
Description:
Chunk of memory, polymorphic byte array management and manipulation
@@ -13,6 +13,8 @@
* Aliasing with endianness support.
.
* Encoding : Base16, Base32, Base64.
+ .
+ * Hashing : FNV, SipHash
License: BSD3
License-file: LICENSE
Copyright: Vincent Hanquez <vincent(a)snarc.org>
1
0
Hello community,
here is the log from the commit of package ghc-lifted-async for openSUSE:Factory checked in at 2016-01-28 17:23:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-lifted-async (Old)
and /work/SRC/openSUSE:Factory/.ghc-lifted-async.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-lifted-async"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-lifted-async/ghc-lifted-async.changes 2015-12-01 09:19:32.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-lifted-async.new/ghc-lifted-async.changes 2016-01-28 17:24:49.000000000 +0100
@@ -1,0 +2,10 @@
+Wed Jan 20 09:54:36 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.8.0.1
+* Relax upper bound for constraints
+* Drop Monad instance for Concurrently
+* Expose STM operations
+* Relax upper bound for base
+* Add Monoid and Semigroup instances for Concurrently
+
+-------------------------------------------------------------------
Old:
----
lifted-async-0.7.0.2.tar.gz
New:
----
lifted-async-0.8.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-lifted-async.spec ++++++
--- /var/tmp/diff_new_pack.VCDfbf/_old 2016-01-28 17:24:53.000000000 +0100
+++ /var/tmp/diff_new_pack.VCDfbf/_new 2016-01-28 17:24:53.000000000 +0100
@@ -21,7 +21,7 @@
%bcond_with tests
Name: ghc-lifted-async
-Version: 0.7.0.2
+Version: 0.8.0.1
Release: 0
Summary: Run lifted IO operations asynchronously and wait for their results
License: BSD-3-Clause
++++++ lifted-async-0.7.0.2.tar.gz -> lifted-async-0.8.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lifted-async-0.7.0.2/CHANGELOG.md new/lifted-async-0.8.0.1/CHANGELOG.md
--- old/lifted-async-0.7.0.2/CHANGELOG.md 2015-11-27 02:28:01.000000000 +0100
+++ new/lifted-async-0.8.0.1/CHANGELOG.md 2016-01-17 22:16:51.000000000 +0100
@@ -1,3 +1,14 @@
+## v0.8.0.1 - 2015-01-17
+
+* Relax upper bound for constraints
+
+## v0.8.0 - 2016-01-10
+
+* Drop Monad instance for Concurrently
+* Expose STM operations
+* Relax upper bound for base and async
+* Add Monoid and Semigroup instances for Concurrently
+
## v0.7.0.2 - 2015-11-26
* Relax upper bound for the constraints package
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lifted-async-0.7.0.2/lifted-async.cabal new/lifted-async-0.8.0.1/lifted-async.cabal
--- old/lifted-async-0.7.0.2/lifted-async.cabal 2015-11-27 02:28:01.000000000 +0100
+++ new/lifted-async-0.8.0.1/lifted-async.cabal 2016-01-17 22:16:51.000000000 +0100
@@ -1,5 +1,5 @@
name: lifted-async
-version: 0.7.0.2
+version: 0.8.0.1
synopsis: Run lifted IO operations asynchronously and wait for their results
homepage: https://github.com/maoe/lifted-async
bug-reports: https://github.com/maoe/lifted-async/issues
@@ -7,7 +7,7 @@
license-file: LICENSE
author: Mitsutoshi Aoe
maintainer: Mitsutoshi Aoe <maoe(a)foldr.in>
-copyright: Copyright (C) 2012-2015 Mitsutoshi Aoe
+copyright: Copyright (C) 2012-2016 Mitsutoshi Aoe
category: Concurrency
build-type: Simple
cabal-version: >= 1.8
@@ -34,14 +34,14 @@
Control.Concurrent.Async.Lifted
Control.Concurrent.Async.Lifted.Safe
build-depends:
- base >= 4.5 && < 4.9
- , async >= 2.0.1 && < 2.1
+ base >= 4.5 && < 4.10
+ , async >= 2.0.1 && < 2.2
, lifted-base >= 0.2 && < 0.3
, transformers-base >= 0.4 && < 0.5
if flag(monad-control-1)
build-depends: monad-control == 1.0.*
if impl(ghc >= 7.8)
- build-depends: constraints >= 0.2 && < 0.7
+ build-depends: constraints >= 0.2 && < 0.9
else
build-depends: constraints >= 0.2 && < 0.6
else
@@ -114,5 +114,5 @@
source-repository this
type: git
- tag: v0.7.0.2
+ tag: v0.8.0.1
location: https://github.com/maoe/lifted-async.git
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lifted-async-0.7.0.2/src/Control/Concurrent/Async/Lifted/Safe.hs new/lifted-async-0.8.0.1/src/Control/Concurrent/Async/Lifted/Safe.hs
--- old/lifted-async-0.7.0.2/src/Control/Concurrent/Async/Lifted/Safe.hs 2015-11-27 02:28:01.000000000 +0100
+++ new/lifted-async-0.8.0.1/src/Control/Concurrent/Async/Lifted/Safe.hs 2016-01-17 22:16:51.000000000 +0100
@@ -53,6 +53,16 @@
, Unsafe.waitEither_
, waitBoth
+#if MIN_VERSION_async(2, 1, 0)
+ -- ** Waiting for multiple 'Async's in STM
+ , A.waitAnySTM
+ , A.waitAnyCatchSTM
+ , A.waitEitherSTM
+ , A.waitEitherCatchSTM
+ , A.waitEitherSTM_
+ , A.waitBothSTM
+#endif
+
-- ** Linking
, Unsafe.link, Unsafe.link2
@@ -89,6 +99,11 @@
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 710
import Data.Traversable
#endif
+#if !MIN_VERSION_base(4, 8, 0)
+import Data.Monoid (Monoid(mappend, mempty))
+#elif MIN_VERSION_base(4, 9, 0)
+import Data.Semigroup (Semigroup((<>)))
+#endif
-- | Generalized version of 'A.async'.
async
@@ -366,8 +381,20 @@
\\ (inst :: Forall (Pure m) :- Pure m a)
\\ (inst :: Forall (Pure m) :- Pure m b)
-instance (MonadBaseControl IO m, Forall (Pure m)) =>
- Monad (Concurrently m) where
- return = Concurrently . return
- Concurrently a >>= f = Concurrently $ a >>= runConcurrently . f
+#if MIN_VERSION_base(4, 9, 0)
+instance (MonadBaseControl IO m, Semigroup a, Forall (Pure m)) =>
+ Semigroup (Concurrently m a) where
+ (<>) = liftA2 (<>)
+
+instance (MonadBaseControl IO m, Semigroup a, Monoid a, Forall (Pure m)) =>
+ Monoid (Concurrently m a) where
+ mempty = pure mempty
+ mappend = (<>)
+#else
+instance (MonadBaseControl IO m, Monoid a, Forall (Pure m)) =>
+ Monoid (Concurrently m a) where
+ mempty = pure mempty
+ mappend = liftA2 mappend
+#endif
+
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lifted-async-0.7.0.2/src/Control/Concurrent/Async/Lifted.hs new/lifted-async-0.8.0.1/src/Control/Concurrent/Async/Lifted.hs
--- old/lifted-async-0.7.0.2/src/Control/Concurrent/Async/Lifted.hs 2015-11-27 02:28:01.000000000 +0100
+++ new/lifted-async-0.8.0.1/src/Control/Concurrent/Async/Lifted.hs 2016-01-17 22:16:51.000000000 +0100
@@ -49,11 +49,21 @@
, waitEither_
, waitBoth
+#if MIN_VERSION_async(2, 1, 0)
+ -- ** Waiting for multiple 'Async's in STM
+ , A.waitAnySTM
+ , A.waitAnyCatchSTM
+ , A.waitEitherSTM
+ , A.waitEitherCatchSTM
+ , A.waitEitherSTM_
+ , A.waitBothSTM
+#endif
+
-- ** Linking
, link, link2
-- * Convenient utilities
- , race, race_, concurrently, mapConcurrently
+ , race, race_, concurrently, mapConcurrently, forConcurrently
, Concurrently(..)
) where
@@ -73,6 +83,11 @@
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 710
import Data.Traversable
#endif
+#if !MIN_VERSION_base(4, 8, 0)
+import Data.Monoid (Monoid(mappend, mempty))
+#elif MIN_VERSION_base(4, 9, 0)
+import Data.Semigroup (Semigroup((<>)))
+#endif
-- | Generalized version of 'A.async'.
async :: MonadBaseControl IO m => m a -> m (Async (StM m a))
@@ -352,6 +367,14 @@
-> m (t b)
mapConcurrently f = runConcurrently . traverse (Concurrently . f)
+-- | Generalized version of 'A.forConcurrently'.
+forConcurrently
+ :: (Traversable t, MonadBaseControl IO m)
+ => t a
+ -> (a -> m b)
+ -> m (t b)
+forConcurrently = flip mapConcurrently
+
-- | Generalized version of 'A.Concurrently'.
--
-- A value of type @'Concurrently' m a@ is an IO-based operation that can be
@@ -385,9 +408,20 @@
Concurrently as <|> Concurrently bs =
Concurrently $ either id id <$> race as bs
-instance MonadBaseControl IO m => Monad (Concurrently m) where
- return = Concurrently . return
- Concurrently a >>= f = Concurrently $ a >>= runConcurrently . f
+#if MIN_VERSION_base(4, 9, 0)
+instance (MonadBaseControl IO m, Semigroup a) =>
+ Semigroup (Concurrently m a) where
+ (<>) = liftA2 (<>)
+
+instance (MonadBaseControl IO m, Semigroup a, Monoid a) =>
+ Monoid (Concurrently m a) where
+ mempty = pure mempty
+ mappend = (<>)
+#else
+instance (MonadBaseControl IO m, Monoid a) => Monoid (Concurrently m a) where
+ mempty = pure mempty
+ mappend = liftA2 mappend
+#endif
sequenceEither :: MonadBaseControl IO m => Either e (StM m a) -> m (Either e a)
sequenceEither = either (return . Left) (liftM Right . restoreM)
1
0
Hello community,
here is the log from the commit of package ghc-JuicyPixels for openSUSE:Factory checked in at 2016-01-28 17:23:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-JuicyPixels (Old)
and /work/SRC/openSUSE:Factory/.ghc-JuicyPixels.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-JuicyPixels"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-JuicyPixels/ghc-JuicyPixels.changes 2015-12-09 22:16:50.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-JuicyPixels.new/ghc-JuicyPixels.changes 2016-01-28 17:24:47.000000000 +0100
@@ -1,0 +2,11 @@
+Tue Jan 26 09:39:22 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 3.2.7
+* Addition: convertRGB8 and convertRGBA8 helper functions
+* Addition: new output colorspace for JPEG format: Y, RGB & CMYK
+* Addition: RGBA8 bitmap reading (thanks to mtolly)
+* Enhancement: Optimized JPG & Tiff reading (thanks to Calvin Beck)
+* Enhancement: INLINE SPECIALIZE for pixelMap (Pixel8 -> Pixel8) (thx to Calvin Beck)
+* Fix: GHC 8.0 compilation (thanks to phadej)
+
+-------------------------------------------------------------------
Old:
----
JuicyPixels-3.2.6.4.tar.gz
New:
----
JuicyPixels-3.2.7.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-JuicyPixels.spec ++++++
--- /var/tmp/diff_new_pack.bDE1ez/_old 2016-01-28 17:24:49.000000000 +0100
+++ /var/tmp/diff_new_pack.bDE1ez/_new 2016-01-28 17:24:49.000000000 +0100
@@ -20,7 +20,7 @@
# no useful debuginfo for Haskell packages without C sources
%global debug_package %{nil}
Name: ghc-JuicyPixels
-Version: 3.2.6.4
+Version: 3.2.7
Release: 0
Summary: Picture loading/serialization
License: BSD-3-Clause
++++++ JuicyPixels-3.2.6.4.tar.gz -> JuicyPixels-3.2.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/JuicyPixels.cabal new/JuicyPixels-3.2.7/JuicyPixels.cabal
--- old/JuicyPixels-3.2.6.4/JuicyPixels.cabal 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/JuicyPixels.cabal 2016-01-25 23:33:57.000000000 +0100
@@ -1,5 +1,5 @@
Name: JuicyPixels
-Version: 3.2.6.4
+Version: 3.2.7
Synopsis: Picture loading/serialization (in png, jpeg, bitmap, gif, tga, tiff and radiance)
Description:
<<data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADABAMAAACg8nE0AAAAElBMVEUAAABJqDSTWEL/qyb///8AAABH/1GTAAAAAXRSTlMAQObYZgAAAN5JREFUeF7s1sEJgFAQxFBbsAV72v5bEVYWPwT/XDxmCsi7zvHXavYREBDI3XP2GgICqBBYuwIC+/rVayPUAyAg0HvIXBcQoDFDGnUBgWQQ2Bx3AYFaRoBpAQHWb3bt2ARgGAiCYFFuwf3X5HA/McgGJWI2FdykCv4aBYzmKwDwvl6NVmUAAK2vlwEALK7fo88GANB6HQsAAAAAAAAA7P94AQCzswEAAAAAAAAAAAAAAAAAAICzh4UAO4zWAYBfRutHA4Bn5C69JhowAMGoBaMWDG0wCkbBKBgFo2AUAACPmegUST/IJAAAAABJRU5ErkJggg==>>
@@ -28,7 +28,7 @@
Source-Repository this
Type: git
Location: git://github.com/Twinside/Juicy.Pixels.git
- Tag: v3.2.6.4
+ Tag: v3.2.7
Flag Mmap
Description: Enable the file loading via mmap (memory map)
@@ -52,11 +52,10 @@
Codec.Picture.ColorQuant
Ghc-options: -O3 -Wall
- Ghc-prof-options: -rtsopts -Wall -prof -auto-all
Build-depends: base >= 4.5 && < 5,
bytestring >= 0.9 && < 0.11,
mtl >= 1.1 && < 2.3,
- binary >= 0.5 && < 0.8,
+ binary >= 0.5 && < 0.9,
zlib >= 0.5.3.1 && < 0.7,
transformers >= 0.2,
vector >= 0.9 && < 0.12,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/README.md new/JuicyPixels-3.2.7/README.md
--- old/JuicyPixels-3.2.6.4/README.md 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/README.md 2016-01-25 23:33:57.000000000 +0100
@@ -52,6 +52,7 @@
- Bitmap (.bmp) (mainly used as a debug output format)
* Reading
+ - 32bits (RGBA) images
- 24bits (RGB) images
- 8bits (greyscale & paletted) images
@@ -62,10 +63,12 @@
* Metadata (reading/writing): DPI information
- - Jpeg (.jpg, .jpeg)
+ - Jpeg (.jpg, .jpeg)
* Reading normal and interlaced baseline DCT image
- YCbCr (default) CMYK/YCbCrK/RGB colorspaces
+
* Writing non-interlaced JPG
+ - YCbCr (favored), Y, RGB & CMYK colorspaces
* Metadata:
- Reading and writing DpiX & DpiY from JFIF header.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/changelog new/JuicyPixels-3.2.7/changelog
--- old/JuicyPixels-3.2.6.4/changelog 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/changelog 2016-01-25 23:33:57.000000000 +0100
@@ -1,7 +1,20 @@
Change log
==========
-v3.2.6.3 December 2015
+v3.2.7 January 2016
+-------------------
+ * Addition: convertRGB8 and convertRGBA8 helper functions
+ * Addition: new output colorspace for JPEG format: Y, RGB & CMYK
+ * Addition: RGBA8 bitmap reading (thanks to mtolly)
+ * Enhancement: Optimized JPG & Tiff reading (thanks to Calvin Beck)
+ * Enhancement: INLINE SPECIALIZE for pixelMap (Pixel8 -> Pixel8) (thx to Calvin Beck)
+ * Fix: GHC 8.0 compilation (thanks to phadej)
+
+v3.2.6.5 December 2015
+----------------------
+ * Fix: Compilation on GHC 7.6/7.8
+
+v3.2.6.4 December 2015
----------------------
* Fix: previous broken bugfix.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/src/Codec/Picture/BitWriter.hs new/JuicyPixels-3.2.7/src/Codec/Picture/BitWriter.hs
--- old/JuicyPixels-3.2.6.4/src/Codec/Picture/BitWriter.hs 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/src/Codec/Picture/BitWriter.hs 2016-01-25 23:33:57.000000000 +0100
@@ -1,4 +1,5 @@
{-# LANGUAGE Rank2Types #-}
+{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
-- | This module implement helper functions to read & write data
-- at bits level.
@@ -9,7 +10,9 @@
, getNextBitsLSBFirst
, getNextBitsMSBFirst
, getNextBitJpg
+ , getNextIntJpg
, setDecodedString
+ , setDecodedStringMSB
, setDecodedStringJpg
, runBoolReader
@@ -33,6 +36,7 @@
import Control.Monad( when )
import Control.Monad.ST( ST )
import qualified Control.Monad.Trans.State.Strict as S
+import Data.Int ( Int32 )
import Data.Word( Word8, Word32 )
import Data.Bits( (.&.), (.|.), unsafeShiftR, unsafeShiftL )
@@ -42,6 +46,7 @@
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as L
+
--------------------------------------------------
---- Reader
--------------------------------------------------
@@ -93,8 +98,8 @@
BoolState idx _ chain <- S.get
when (idx /= 7) (setDecodedStringJpg chain)
-{-# INLINE getNextBitJpg #-}
getNextBitJpg :: BoolReader s Bool
+{-# INLINE getNextBitJpg #-}
getNextBitJpg = do
BoolState idx v chain <- S.get
let val = (v .&. (1 `unsafeShiftL` idx)) /= 0
@@ -103,25 +108,51 @@
else S.put $ BoolState (idx - 1) v chain
return val
-{-# INLINE getNextBitMSB #-}
-getNextBitMSB :: BoolReader s Bool
-getNextBitMSB = do
+getNextIntJpg :: Int -> BoolReader s Int32
+{-# INLINE getNextIntJpg #-}
+getNextIntJpg = go 0 where
+ go !acc !0 = return acc
+ go !acc !n = do
BoolState idx v chain <- S.get
- let val = (v .&. (1 `unsafeShiftL` (7 - idx))) /= 0
- if idx == 7
- then setDecodedString chain
- else S.put $ BoolState (idx + 1) v chain
- return val
+ let !leftBits = 1 + fromIntegral idx
+ if n >= leftBits then do
+ setDecodedStringJpg chain
+ let !remaining = n - leftBits
+ !mask = (1 `unsafeShiftL` leftBits) - 1
+ !finalV = fromIntegral v .&. mask
+ !theseBits = finalV `unsafeShiftL` remaining
+ go (acc .|. theseBits) remaining
+ else do
+ let !remaining = leftBits - n
+ !mask = (1 `unsafeShiftL` n) - 1
+ !finalV = fromIntegral v `unsafeShiftR` remaining
+ S.put $ BoolState (fromIntegral remaining - 1) v chain
+ return $ (finalV .&. mask) .|. acc
+
+
+setDecodedStringMSB :: B.ByteString -> BoolReader s ()
+setDecodedStringMSB str = case B.uncons str of
+ Nothing -> S.put $ BoolState 8 0 B.empty
+ Just (v, rest) -> S.put $ BoolState 8 v rest
+
{-# INLINE getNextBitsMSBFirst #-}
getNextBitsMSBFirst :: Int -> BoolReader s Word32
-getNextBitsMSBFirst = aux 0
- where aux acc 0 = return acc
- aux acc n = do
- bit <- getNextBitMSB
- let nextVal | bit = (acc `unsafeShiftL` 1) .|. 1
- | otherwise = acc `unsafeShiftL` 1
- aux nextVal (n - 1)
+getNextBitsMSBFirst requested = go 0 requested where
+ go :: Word32 -> Int -> BoolReader s Word32
+ go !acc !0 = return acc
+ go !acc !n = do
+ BoolState idx v chain <- S.get
+ let !leftBits = fromIntegral idx
+ if n >= leftBits then do
+ setDecodedStringMSB chain
+ let !theseBits = fromIntegral v `unsafeShiftL` (n - leftBits)
+ go (acc .|. theseBits) (n - leftBits)
+ else do
+ let !remaining = leftBits - n
+ !mask = (1 `unsafeShiftL` remaining) - 1
+ S.put $ BoolState (fromIntegral remaining) (v .&. mask) chain
+ return $ (fromIntegral v `unsafeShiftR` remaining) .|. acc
{-# INLINE getNextBitsLSBFirst #-}
getNextBitsLSBFirst :: Int -> BoolReader s Word32
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/src/Codec/Picture/Bitmap.hs new/JuicyPixels-3.2.7/src/Codec/Picture/Bitmap.hs
--- old/JuicyPixels-3.2.6.4/src/Codec/Picture/Bitmap.hs 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/src/Codec/Picture/Bitmap.hs 2016-01-25 23:33:56.000000000 +0100
@@ -41,6 +41,7 @@
, getWord8
, getWord16le
, getWord32le
+ , getWord32be
, bytesRead
, skip
)
@@ -253,6 +254,34 @@
inner 0 0 initialIndex
VS.unsafeFreeze buff
+decodeImageRGBA8 :: BmpInfoHeader -> (Int, Int, Int, Int) -> B.ByteString -> Image PixelRGBA8
+decodeImageRGBA8 (BmpInfoHeader { width = w, height = h }) (posR, posG, posB, posA) str = Image wi hi stArray where
+ wi = fromIntegral w
+ hi = abs $ fromIntegral h
+ stArray = runST $ do
+ arr <- M.new (fromIntegral $ w * abs h * 4)
+ if h > 0 then
+ foldM_ (readLine arr) 0 [0 .. hi - 1]
+ else
+ foldM_ (readLine arr) 0 [hi - 1, hi - 2 .. 0]
+ VS.unsafeFreeze arr
+
+ stride = linePadding 32 wi -- will be 0
+
+ readLine :: forall s. M.MVector s Word8 -> Int -> Int -> ST s Int
+ readLine arr readIndex line = inner readIndex writeIndex where
+ lastIndex = wi * (hi - 1 - line + 1) * 4
+ writeIndex = wi * (hi - 1 - line) * 4
+
+ inner readIdx writeIdx | writeIdx >= lastIndex = return $ readIdx + stride
+ inner readIdx writeIdx = do
+ -- 32-bit BMP pixels are BGRA
+ (arr `M.unsafeWrite` writeIdx ) (str `B.index` (readIdx + posR))
+ (arr `M.unsafeWrite` (writeIdx + 1)) (str `B.index` (readIdx + posG))
+ (arr `M.unsafeWrite` (writeIdx + 2)) (str `B.index` (readIdx + posB))
+ (arr `M.unsafeWrite` (writeIdx + 3)) (str `B.index` (readIdx + posA))
+ inner (readIdx + 4) (writeIdx + 4)
+
decodeImageRGB8 :: BmpInfoHeader -> B.ByteString -> Image PixelRGB8
decodeImageRGB8 (BmpInfoHeader { width = w, height = h }) str = Image wi hi stArray where
wi = fromIntegral w
@@ -322,6 +351,8 @@
-- | Try to decode a bitmap image.
-- Right now this function can output the following pixel types :
--
+-- * PixelRGBA8
+--
-- * PixelRGB8
--
-- * Pixel8
@@ -349,27 +380,49 @@
paletteColorCount
| colorCount bmpHeader == 0 = 2 ^ bpp
| otherwise = fromIntegral $ colorCount bmpHeader
+ getData = do
+ readed' <- bytesRead
+ skip . fromIntegral $ dataOffset hdr - fromIntegral readed'
+ getRemainingBytes
+ addMetadata i = (i, metadataOfHeader bmpHeader)
- table <- if bpp > 8
- then return V.empty
- else V.replicateM paletteColorCount pixelGet
-
- readed' <- bytesRead
-
- skip . fromIntegral $ dataOffset hdr - fromIntegral readed'
- rest <- getRemainingBytes
- let addMetadata i = (i, metadataOfHeader bmpHeader)
case (bitPerPixel bmpHeader, planes bmpHeader,
bitmapCompression bmpHeader) of
- -- (32, 1, 0) -> {- ImageRGBA8 <$>-} fail "Meuh"
- (24, 1, 0) -> return . addMetadata . ImageRGB8 $ decodeImageRGB8 bmpHeader rest
- ( 8, 1, 0) ->
- let indexer v = table V.! fromIntegral v in
- return . addMetadata . ImageRGB8 . pixelMap indexer $ decodeImageY8 bmpHeader rest
+ (32, 1, 0) -> do
+ rest <- getData
+ return . addMetadata . ImageRGBA8 $ decodeImageRGBA8 bmpHeader (2, 1, 0, 3) rest
+ -- (2, 1, 0, 3) means BGRA pixel order
+ (32, 1, 3) -> do
+ posRed <- getBitfield
+ posGreen <- getBitfield
+ posBlue <- getBitfield
+ posAlpha <- getBitfield
+ rest <- getData
+ return . addMetadata . ImageRGBA8 $
+ decodeImageRGBA8 bmpHeader (posRed, posGreen, posBlue, posAlpha) rest
+ (24, 1, 0) -> do
+ rest <- getData
+ return . addMetadata . ImageRGB8 $ decodeImageRGB8 bmpHeader rest
+ ( 8, 1, 0) -> do
+ table <- V.replicateM paletteColorCount pixelGet
+ rest <- getData
+ let indexer v = table V.! fromIntegral v
+ return . addMetadata . ImageRGB8 . pixelMap indexer $ decodeImageY8 bmpHeader rest
a -> fail $ "Can't handle BMP file " ++ show a
+getBitfield :: Get Int
+getBitfield = do
+ w32 <- getWord32be
+ case w32 of
+ 0xFF000000 -> return 0
+ 0x00FF0000 -> return 1
+ 0x0000FF00 -> return 2
+ 0x000000FF -> return 3
+ _ -> fail $
+ "Codec.Picture.Bitmap.getBitfield: unsupported bitfield of " ++ show w32
+
-- | Write an image in a file use the bitmap format.
writeBitmap :: (BmpEncodable pixel)
=> FilePath -> Image pixel -> IO ()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/src/Codec/Picture/Gif/LZW.hs new/JuicyPixels-3.2.7/src/Codec/Picture/Gif/LZW.hs
--- old/JuicyPixels-3.2.6.4/src/Codec/Picture/Gif/LZW.hs 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/src/Codec/Picture/Gif/LZW.hs 2016-01-25 23:33:57.000000000 +0100
@@ -1,191 +1,194 @@
-{-# LANGUAGE CPP #-}
-module Codec.Picture.Gif.LZW( decodeLzw, decodeLzwTiff ) where
-
-#if !MIN_VERSION_base(4,8,0)
-import Control.Applicative( (<$>) )
-#endif
-
-import Data.Word( Word8 )
-import Control.Monad( when, unless )
-
-import Data.Bits( (.&.) )
-
-import Control.Monad.ST( ST )
-import Control.Monad.Trans.Class( MonadTrans, lift )
-
-import Foreign.Storable ( Storable )
-
-import qualified Data.ByteString as B
-import qualified Data.Vector.Storable.Mutable as M
-
-import Codec.Picture.BitWriter
-
-{-# INLINE (.!!!.) #-}
-(.!!!.) :: (Storable a) => M.STVector s a -> Int -> ST s a
-(.!!!.) = M.unsafeRead
- {-M.read-}
-
-{-# INLINE (..!!!..) #-}
-(..!!!..) :: (MonadTrans t, Storable a)
- => M.STVector s a -> Int -> t (ST s) a
-(..!!!..) v idx = lift $ v .!!!. idx
-
-{-# INLINE (.<-.) #-}
-(.<-.) :: (Storable a) => M.STVector s a -> Int -> a -> ST s ()
-(.<-.) = M.unsafeWrite
- {-M.write-}
-
-{-# INLINE (..<-..) #-}
-(..<-..) :: (MonadTrans t, Storable a)
- => M.STVector s a -> Int -> a -> t (ST s) ()
-(..<-..) v idx = lift . (v .<-. idx)
-
-
-duplicateData :: (Show a, MonadTrans t, Storable a)
- => M.STVector s a -> M.STVector s a
- -> Int -> Int -> Int -> t (ST s) ()
-duplicateData src dest sourceIndex size destIndex = lift $ aux sourceIndex destIndex
- where endIndex = sourceIndex + size
- aux i _ | i == endIndex = return ()
- aux i j = do
- src .!!!. i >>= (dest .<-. j)
- aux (i + 1) (j + 1)
-
-rangeSetter :: (Storable a, Num a)
- => Int -> M.STVector s a
- -> ST s (M.STVector s a)
-rangeSetter count vec = aux 0
- where aux n | n == count = return vec
- aux n = (vec .<-. n) (fromIntegral n) >> aux (n + 1)
-
-decodeLzw :: B.ByteString -> Int -> Int -> M.STVector s Word8
- -> BoolReader s ()
-decodeLzw str maxBitKey initialKey outVec = do
- setDecodedString str
- lzw GifVariant maxBitKey initialKey 0 outVec
-
-isOldTiffLZW :: B.ByteString -> Bool
-isOldTiffLZW str = firstByte == 0 && secondByte == 1
- where firstByte = str `B.index` 0
- secondByte = (str `B.index` 1) .&. 1
-
-decodeLzwTiff :: B.ByteString -> M.STVector s Word8 -> Int
- -> BoolReader s()
-decodeLzwTiff str outVec initialWriteIdx = do
- setDecodedString str
- let variant | isOldTiffLZW str = OldTiffVariant
- | otherwise = TiffVariant
- lzw variant 12 9 initialWriteIdx outVec
-
-data TiffVariant =
- GifVariant
- | TiffVariant
- | OldTiffVariant
- deriving Eq
-
--- | Gif image constraint from spec-gif89a, code size max : 12 bits.
-lzw :: TiffVariant -> Int -> Int -> Int -> M.STVector s Word8
- -> BoolReader s ()
-lzw variant nMaxBitKeySize initialKeySize initialWriteIdx outVec = do
- -- Allocate buffer of maximum size.
- lzwData <- lift (M.replicate maxDataSize 0) >>= resetArray
- lzwOffsetTable <- lift (M.replicate tableEntryCount 0) >>= resetArray
- lzwSizeTable <- lift $ M.replicate tableEntryCount 0
- lift $ lzwSizeTable `M.set` 1
-
- let firstVal code = do
- dataOffset <- lzwOffsetTable ..!!!.. code
- lzwData ..!!!.. dataOffset
-
- writeString at code = do
- dataOffset <- lzwOffsetTable ..!!!.. code
- dataSize <- lzwSizeTable ..!!!.. code
-
- when (at + dataSize <= maxWrite) $
- duplicateData lzwData outVec dataOffset dataSize at
-
- return dataSize
-
- addString pos at code val = do
- dataOffset <- lzwOffsetTable ..!!!.. code
- dataSize <- lzwSizeTable ..!!!.. code
-
- when (pos < tableEntryCount) $ do
- (lzwOffsetTable ..<-.. pos) at
- (lzwSizeTable ..<-.. pos) $ dataSize + 1
-
- when (at + dataSize + 1 <= maxDataSize) $ do
- duplicateData lzwData lzwData dataOffset dataSize at
- (lzwData ..<-.. (at + dataSize)) val
-
- return $ dataSize + 1
-
- maxWrite = M.length outVec
- loop outWriteIdx writeIdx dicWriteIdx codeSize oldCode code
- | outWriteIdx >= maxWrite = return ()
- | code == endOfInfo = return ()
- | code == clearCode = do
- toOutput <- getNextCode startCodeSize
- unless (toOutput == endOfInfo) $ do
- dataSize <- writeString outWriteIdx toOutput
- getNextCode startCodeSize >>=
- loop (outWriteIdx + dataSize)
- firstFreeIndex firstFreeIndex startCodeSize toOutput
-
- | otherwise = do
- (written, dicAdd) <-
- if code >= writeIdx then do
- c <- firstVal oldCode
- wroteSize <- writeString outWriteIdx oldCode
- (outVec ..<-.. (outWriteIdx + wroteSize)) c
- addedSize <- addString writeIdx dicWriteIdx oldCode c
- return (wroteSize + 1, addedSize)
- else do
- wroteSize <- writeString outWriteIdx code
- c <- firstVal code
- addedSize <- addString writeIdx dicWriteIdx oldCode c
- return (wroteSize, addedSize)
-
- let new_code_size = updateCodeSize codeSize $ writeIdx + 1
- getNextCode new_code_size >>=
- loop (outWriteIdx + written)
- (writeIdx + 1)
- (dicWriteIdx + dicAdd)
- new_code_size
- code
-
- getNextCode startCodeSize >>=
- loop initialWriteIdx firstFreeIndex firstFreeIndex startCodeSize 0
-
- where tableEntryCount = 2 ^ min 12 nMaxBitKeySize
- maxDataSize = tableEntryCount `div` 2 * (1 + tableEntryCount) + 1
-
- isNewTiff = variant == TiffVariant
- (switchOffset, isTiffVariant) = case variant of
- GifVariant -> (0, False)
- TiffVariant -> (1, True)
- OldTiffVariant -> (0, True)
-
- initialElementCount = 2 ^ initialKeySize :: Int
- clearCode | isTiffVariant = 256
- | otherwise = initialElementCount
-
- endOfInfo | isTiffVariant = 257
- | otherwise = clearCode + 1
-
- startCodeSize
- | isTiffVariant = initialKeySize
- | otherwise = initialKeySize + 1
-
- firstFreeIndex = endOfInfo + 1
-
- resetArray a = lift $ rangeSetter initialElementCount a
-
- updateCodeSize codeSize writeIdx
- | writeIdx == 2 ^ codeSize - switchOffset = min 12 $ codeSize + 1
- | otherwise = codeSize
-
- getNextCode s
- | isNewTiff = fromIntegral <$> getNextBitsMSBFirst s
- | otherwise = fromIntegral <$> getNextBitsLSBFirst s
-
+{-# LANGUAGE CPP #-}
+module Codec.Picture.Gif.LZW( decodeLzw, decodeLzwTiff ) where
+
+#if !MIN_VERSION_base(4,8,0)
+import Control.Applicative( (<$>) )
+#endif
+
+import Data.Word( Word8 )
+import Control.Monad( when, unless )
+
+import Data.Bits( (.&.) )
+
+import Control.Monad.ST( ST )
+import Control.Monad.Trans.Class( MonadTrans, lift )
+
+import Foreign.Storable ( Storable )
+
+import qualified Data.ByteString as B
+import qualified Data.Vector.Storable.Mutable as M
+
+import Codec.Picture.BitWriter
+
+{-# INLINE (.!!!.) #-}
+(.!!!.) :: (Storable a) => M.STVector s a -> Int -> ST s a
+(.!!!.) = M.unsafeRead
+ {-M.read-}
+
+{-# INLINE (..!!!..) #-}
+(..!!!..) :: (MonadTrans t, Storable a)
+ => M.STVector s a -> Int -> t (ST s) a
+(..!!!..) v idx = lift $ v .!!!. idx
+
+{-# INLINE (.<-.) #-}
+(.<-.) :: (Storable a) => M.STVector s a -> Int -> a -> ST s ()
+(.<-.) = M.unsafeWrite
+ {-M.write-}
+
+{-# INLINE (..<-..) #-}
+(..<-..) :: (MonadTrans t, Storable a)
+ => M.STVector s a -> Int -> a -> t (ST s) ()
+(..<-..) v idx = lift . (v .<-. idx)
+
+
+duplicateData :: (Show a, MonadTrans t, Storable a)
+ => M.STVector s a -> M.STVector s a
+ -> Int -> Int -> Int -> t (ST s) ()
+duplicateData src dest sourceIndex size destIndex = lift $ aux sourceIndex destIndex
+ where endIndex = sourceIndex + size
+ aux i _ | i == endIndex = return ()
+ aux i j = do
+ src .!!!. i >>= (dest .<-. j)
+ aux (i + 1) (j + 1)
+
+rangeSetter :: (Storable a, Num a)
+ => Int -> M.STVector s a
+ -> ST s (M.STVector s a)
+rangeSetter count vec = aux 0
+ where aux n | n == count = return vec
+ aux n = (vec .<-. n) (fromIntegral n) >> aux (n + 1)
+
+decodeLzw :: B.ByteString -> Int -> Int -> M.STVector s Word8
+ -> BoolReader s ()
+decodeLzw str maxBitKey initialKey outVec = do
+ setDecodedString str
+ lzw GifVariant maxBitKey initialKey 0 outVec
+
+isOldTiffLZW :: B.ByteString -> Bool
+isOldTiffLZW str = firstByte == 0 && secondByte == 1
+ where firstByte = str `B.index` 0
+ secondByte = (str `B.index` 1) .&. 1
+
+decodeLzwTiff :: B.ByteString -> M.STVector s Word8 -> Int
+ -> BoolReader s()
+decodeLzwTiff str outVec initialWriteIdx = do
+ if isOldTiffLZW str then
+ setDecodedString str
+ else
+ setDecodedStringMSB str
+ let variant | isOldTiffLZW str = OldTiffVariant
+ | otherwise = TiffVariant
+ lzw variant 12 9 initialWriteIdx outVec
+
+data TiffVariant =
+ GifVariant
+ | TiffVariant
+ | OldTiffVariant
+ deriving Eq
+
+-- | Gif image constraint from spec-gif89a, code size max : 12 bits.
+lzw :: TiffVariant -> Int -> Int -> Int -> M.STVector s Word8
+ -> BoolReader s ()
+lzw variant nMaxBitKeySize initialKeySize initialWriteIdx outVec = do
+ -- Allocate buffer of maximum size.
+ lzwData <- lift (M.replicate maxDataSize 0) >>= resetArray
+ lzwOffsetTable <- lift (M.replicate tableEntryCount 0) >>= resetArray
+ lzwSizeTable <- lift $ M.replicate tableEntryCount 0
+ lift $ lzwSizeTable `M.set` 1
+
+ let firstVal code = do
+ dataOffset <- lzwOffsetTable ..!!!.. code
+ lzwData ..!!!.. dataOffset
+
+ writeString at code = do
+ dataOffset <- lzwOffsetTable ..!!!.. code
+ dataSize <- lzwSizeTable ..!!!.. code
+
+ when (at + dataSize <= maxWrite) $
+ duplicateData lzwData outVec dataOffset dataSize at
+
+ return dataSize
+
+ addString pos at code val = do
+ dataOffset <- lzwOffsetTable ..!!!.. code
+ dataSize <- lzwSizeTable ..!!!.. code
+
+ when (pos < tableEntryCount) $ do
+ (lzwOffsetTable ..<-.. pos) at
+ (lzwSizeTable ..<-.. pos) $ dataSize + 1
+
+ when (at + dataSize + 1 <= maxDataSize) $ do
+ duplicateData lzwData lzwData dataOffset dataSize at
+ (lzwData ..<-.. (at + dataSize)) val
+
+ return $ dataSize + 1
+
+ maxWrite = M.length outVec
+ loop outWriteIdx writeIdx dicWriteIdx codeSize oldCode code
+ | outWriteIdx >= maxWrite = return ()
+ | code == endOfInfo = return ()
+ | code == clearCode = do
+ toOutput <- getNextCode startCodeSize
+ unless (toOutput == endOfInfo) $ do
+ dataSize <- writeString outWriteIdx toOutput
+ getNextCode startCodeSize >>=
+ loop (outWriteIdx + dataSize)
+ firstFreeIndex firstFreeIndex startCodeSize toOutput
+
+ | otherwise = do
+ (written, dicAdd) <-
+ if code >= writeIdx then do
+ c <- firstVal oldCode
+ wroteSize <- writeString outWriteIdx oldCode
+ (outVec ..<-.. (outWriteIdx + wroteSize)) c
+ addedSize <- addString writeIdx dicWriteIdx oldCode c
+ return (wroteSize + 1, addedSize)
+ else do
+ wroteSize <- writeString outWriteIdx code
+ c <- firstVal code
+ addedSize <- addString writeIdx dicWriteIdx oldCode c
+ return (wroteSize, addedSize)
+
+ let new_code_size = updateCodeSize codeSize $ writeIdx + 1
+ getNextCode new_code_size >>=
+ loop (outWriteIdx + written)
+ (writeIdx + 1)
+ (dicWriteIdx + dicAdd)
+ new_code_size
+ code
+
+ getNextCode startCodeSize >>=
+ loop initialWriteIdx firstFreeIndex firstFreeIndex startCodeSize 0
+
+ where tableEntryCount = 2 ^ min 12 nMaxBitKeySize
+ maxDataSize = tableEntryCount `div` 2 * (1 + tableEntryCount) + 1
+
+ isNewTiff = variant == TiffVariant
+ (switchOffset, isTiffVariant) = case variant of
+ GifVariant -> (0, False)
+ TiffVariant -> (1, True)
+ OldTiffVariant -> (0, True)
+
+ initialElementCount = 2 ^ initialKeySize :: Int
+ clearCode | isTiffVariant = 256
+ | otherwise = initialElementCount
+
+ endOfInfo | isTiffVariant = 257
+ | otherwise = clearCode + 1
+
+ startCodeSize
+ | isTiffVariant = initialKeySize
+ | otherwise = initialKeySize + 1
+
+ firstFreeIndex = endOfInfo + 1
+
+ resetArray a = lift $ rangeSetter initialElementCount a
+
+ updateCodeSize codeSize writeIdx
+ | writeIdx == 2 ^ codeSize - switchOffset = min 12 $ codeSize + 1
+ | otherwise = codeSize
+
+ getNextCode s
+ | isNewTiff = fromIntegral <$> getNextBitsMSBFirst s
+ | otherwise = fromIntegral <$> getNextBitsLSBFirst s
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/src/Codec/Picture/Jpg/Common.hs new/JuicyPixels-3.2.7/src/Codec/Picture/Jpg/Common.hs
--- old/JuicyPixels-3.2.6.4/src/Codec/Picture/Jpg/Common.hs 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/src/Codec/Picture/Jpg/Common.hs 2016-01-25 23:33:57.000000000 +0100
@@ -23,11 +23,10 @@
import Control.Applicative( pure, (<$>) )
#endif
-import Control.Monad( replicateM, when )
+import Control.Monad( when )
import Control.Monad.ST( ST, runST )
import Data.Bits( unsafeShiftL, unsafeShiftR, (.&.) )
import Data.Int( Int16, Int32 )
-import Data.List( foldl' )
import Data.Maybe( fromMaybe )
import Data.Word( Word8 )
import qualified Data.Vector.Storable as VS
@@ -174,8 +173,7 @@
-- | Unpack an int of the given size encoded from MSB to LSB.
unpackInt :: Int -> BoolReader s Int32
-unpackInt bitCount = packInt <$> replicateM bitCount getNextBitJpg
-
+unpackInt = getNextIntJpg
{-# INLINE rasterMap #-}
rasterMap :: (Monad m)
@@ -187,11 +185,6 @@
where columner x | x >= width = liner (y + 1)
columner x = f x y >> columner (x + 1)
-packInt :: [Bool] -> Int32
-packInt = foldl' bitStep 0
- where bitStep acc True = (acc `unsafeShiftL` 1) + 1
- bitStep acc False = acc `unsafeShiftL` 1
-
pixelClamp :: Int16 -> Word8
pixelClamp n = fromIntegral . min 255 $ max 0 n
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/src/Codec/Picture/Jpg/Types.hs new/JuicyPixels-3.2.7/src/Codec/Picture/Jpg/Types.hs
--- old/JuicyPixels-3.2.6.4/src/Codec/Picture/Jpg/Types.hs 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/src/Codec/Picture/Jpg/Types.hs 2016-01-25 23:33:57.000000000 +0100
@@ -427,7 +427,8 @@
getByteString (fromIntegral size - 2)
putFrame :: JpgFrame -> Put
-putFrame (JpgAdobeAPP14 _adobe) = return ()
+putFrame (JpgAdobeAPP14 adobe) =
+ put (JpgAppSegment 14) >> putWord16be 14 >> put adobe
putFrame (JpgJFIF jfif) =
put (JpgAppSegment 0) >> putWord16be (14+2) >> put jfif
putFrame (JpgExif _exif) =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/src/Codec/Picture/Jpg.hs new/JuicyPixels-3.2.7/src/Codec/Picture/Jpg.hs
--- old/JuicyPixels-3.2.6.4/src/Codec/Picture/Jpg.hs 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/src/Codec/Picture/Jpg.hs 2016-01-25 23:33:56.000000000 +0100
@@ -11,7 +11,9 @@
, decodeJpegWithMetadata
, encodeJpegAtQuality
, encodeJpegAtQualityWithMetadata
+ , encodeDirectJpegAtQualityWithMetadata
, encodeJpeg
+ , JpgEncodable
) where
#if !MIN_VERSION_base(4,8,0)
@@ -546,6 +548,8 @@
--
-- * PixelRGB8
--
+-- * PixelCMYK8
+--
-- * PixelYCbCr8
--
decodeJpeg :: B.ByteString -> Either String DynamicImage
@@ -623,7 +627,8 @@
frozen <- unsafeFreezeImage fImg
return (st, imageData frozen)
-extractBlock :: Image PixelYCbCr8 -- ^ Source image
+extractBlock :: forall s px. (PixelBaseComponent px ~ Word8)
+ => Image px -- ^ Source image
-> MutableMacroBlock s Int16 -- ^ Mutable block where to put extracted block
-> Int -- ^ Plane
-> Int -- ^ X sampling factor
@@ -741,6 +746,22 @@
, prepareHuffmanTable AcComponent 1 defaultAcChromaHuffmanTable
]
+lumaQuantTableAtQuality :: Int -> QuantificationTable
+lumaQuantTableAtQuality qual = scaleQuantisationMatrix qual defaultLumaQuantizationTable
+
+chromaQuantTableAtQuality :: Int -> QuantificationTable
+chromaQuantTableAtQuality qual =
+ scaleQuantisationMatrix qual defaultChromaQuantizationTable
+
+zigzaggedQuantificationSpec :: Int -> [JpgQuantTableSpec]
+zigzaggedQuantificationSpec qual =
+ [ JpgQuantTableSpec { quantPrecision = 0, quantDestination = 0, quantTable = luma }
+ , JpgQuantTableSpec { quantPrecision = 0, quantDestination = 1, quantTable = chroma }
+ ]
+ where
+ luma = zigZagReorderForwardv $ lumaQuantTableAtQuality qual
+ chroma = zigZagReorderForwardv $ chromaQuantTableAtQuality qual
+
-- | Function to call to encode an image to jpeg.
-- The quality factor should be between 0 and 100 (100 being
-- the best quality).
@@ -749,6 +770,203 @@
-> L.ByteString -- ^ Encoded JPEG
encodeJpegAtQuality quality = encodeJpegAtQualityWithMetadata quality mempty
+-- | Record gathering all information to encode a component
+-- from the source image. Previously was a huge tuple
+-- burried in the code
+data EncoderState = EncoderState
+ { _encComponentIndex :: !Int
+ , _encBlockWidth :: !Int
+ , _encBlockHeight :: !Int
+ , _encQuantTable :: !QuantificationTable
+ , _encDcHuffman :: !HuffmanWriterCode
+ , _encAcHuffman :: !HuffmanWriterCode
+ }
+
+
+-- | Helper type class describing all JPG-encodable pixel types
+class (Pixel px, PixelBaseComponent px ~ Word8) => JpgEncodable px where
+ additionalBlocks :: Image px -> [JpgFrame]
+ additionalBlocks _ = []
+
+ componentsOfColorSpace :: Image px -> [JpgComponent]
+
+ encodingState :: Int -> Image px -> V.Vector EncoderState
+
+ imageHuffmanTables :: Image px -> [(JpgHuffmanTableSpec, HuffmanPackedTree)]
+ imageHuffmanTables _ = defaultHuffmanTables
+
+ scanSpecificationOfColorSpace :: Image px -> [JpgScanSpecification]
+
+ quantTableSpec :: Image px -> Int -> [JpgQuantTableSpec]
+ quantTableSpec _ qual = take 1 $ zigzaggedQuantificationSpec qual
+
+ maximumSubSamplingOf :: Image px -> Int
+ maximumSubSamplingOf _ = 1
+
+instance JpgEncodable Pixel8 where
+ scanSpecificationOfColorSpace _ =
+ [ JpgScanSpecification { componentSelector = 1
+ , dcEntropyCodingTable = 0
+ , acEntropyCodingTable = 0
+ }
+ ]
+
+ componentsOfColorSpace _ =
+ [ JpgComponent { componentIdentifier = 1
+ , horizontalSamplingFactor = 1
+ , verticalSamplingFactor = 1
+ , quantizationTableDest = 0
+ }
+ ]
+
+ imageHuffmanTables _ =
+ [ prepareHuffmanTable DcComponent 0 defaultDcLumaHuffmanTable
+ , prepareHuffmanTable AcComponent 0 defaultAcLumaHuffmanTable
+ ]
+
+ encodingState qual _ = V.singleton EncoderState
+ { _encComponentIndex = 0
+ , _encBlockWidth = 1
+ , _encBlockHeight = 1
+ , _encQuantTable = zigZagReorderForwardv $ lumaQuantTableAtQuality qual
+ , _encDcHuffman = makeInverseTable defaultDcLumaHuffmanTree
+ , _encAcHuffman = makeInverseTable defaultAcLumaHuffmanTree
+ }
+
+
+instance JpgEncodable PixelYCbCr8 where
+ maximumSubSamplingOf _ = 2
+ quantTableSpec _ qual = zigzaggedQuantificationSpec qual
+ scanSpecificationOfColorSpace _ =
+ [ JpgScanSpecification { componentSelector = 1
+ , dcEntropyCodingTable = 0
+ , acEntropyCodingTable = 0
+ }
+ , JpgScanSpecification { componentSelector = 2
+ , dcEntropyCodingTable = 1
+ , acEntropyCodingTable = 1
+ }
+ , JpgScanSpecification { componentSelector = 3
+ , dcEntropyCodingTable = 1
+ , acEntropyCodingTable = 1
+ }
+ ]
+
+ componentsOfColorSpace _ =
+ [ JpgComponent { componentIdentifier = 1
+ , horizontalSamplingFactor = 2
+ , verticalSamplingFactor = 2
+ , quantizationTableDest = 0
+ }
+ , JpgComponent { componentIdentifier = 2
+ , horizontalSamplingFactor = 1
+ , verticalSamplingFactor = 1
+ , quantizationTableDest = 1
+ }
+ , JpgComponent { componentIdentifier = 3
+ , horizontalSamplingFactor = 1
+ , verticalSamplingFactor = 1
+ , quantizationTableDest = 1
+ }
+ ]
+
+ encodingState qual _ = V.fromListN 3 [lumaState, chromaState, chromaState { _encComponentIndex = 2 }]
+ where
+ lumaState = EncoderState
+ { _encComponentIndex = 0
+ , _encBlockWidth = 2
+ , _encBlockHeight = 2
+ , _encQuantTable = zigZagReorderForwardv $ lumaQuantTableAtQuality qual
+ , _encDcHuffman = makeInverseTable defaultDcLumaHuffmanTree
+ , _encAcHuffman = makeInverseTable defaultAcLumaHuffmanTree
+ }
+ chromaState = EncoderState
+ { _encComponentIndex = 1
+ , _encBlockWidth = 1
+ , _encBlockHeight = 1
+ , _encQuantTable = zigZagReorderForwardv $ chromaQuantTableAtQuality qual
+ , _encDcHuffman = makeInverseTable defaultDcChromaHuffmanTree
+ , _encAcHuffman = makeInverseTable defaultAcChromaHuffmanTree
+ }
+
+instance JpgEncodable PixelRGB8 where
+ additionalBlocks _ = [] where
+ _adobe14 = JpgAdobeApp14
+ { _adobeDctVersion = 100
+ , _adobeFlag0 = 0
+ , _adobeFlag1 = 0
+ , _adobeTransform = AdobeUnknown
+ }
+
+ imageHuffmanTables _ =
+ [ prepareHuffmanTable DcComponent 0 defaultDcLumaHuffmanTable
+ , prepareHuffmanTable AcComponent 0 defaultAcLumaHuffmanTable
+ ]
+
+ scanSpecificationOfColorSpace _ = fmap build "RGB" where
+ build c = JpgScanSpecification
+ { componentSelector = fromIntegral $ fromEnum c
+ , dcEntropyCodingTable = 0
+ , acEntropyCodingTable = 0
+ }
+
+ componentsOfColorSpace _ = fmap build "RGB" where
+ build c = JpgComponent
+ { componentIdentifier = fromIntegral $ fromEnum c
+ , horizontalSamplingFactor = 1
+ , verticalSamplingFactor = 1
+ , quantizationTableDest = 0
+ }
+
+ encodingState qual _ = V.fromListN 3 $ fmap build [0 .. 2] where
+ build ix = EncoderState
+ { _encComponentIndex = ix
+ , _encBlockWidth = 1
+ , _encBlockHeight = 1
+ , _encQuantTable = zigZagReorderForwardv $ lumaQuantTableAtQuality qual
+ , _encDcHuffman = makeInverseTable defaultDcLumaHuffmanTree
+ , _encAcHuffman = makeInverseTable defaultAcLumaHuffmanTree
+ }
+
+instance JpgEncodable PixelCMYK8 where
+ additionalBlocks _ = [] where
+ _adobe14 = JpgAdobeApp14
+ { _adobeDctVersion = 100
+ , _adobeFlag0 = 32768
+ , _adobeFlag1 = 0
+ , _adobeTransform = AdobeYCck
+ }
+
+ imageHuffmanTables _ =
+ [ prepareHuffmanTable DcComponent 0 defaultDcLumaHuffmanTable
+ , prepareHuffmanTable AcComponent 0 defaultAcLumaHuffmanTable
+ ]
+
+ scanSpecificationOfColorSpace _ = fmap build "CMYK" where
+ build c = JpgScanSpecification
+ { componentSelector = fromIntegral $ fromEnum c
+ , dcEntropyCodingTable = 0
+ , acEntropyCodingTable = 0
+ }
+
+ componentsOfColorSpace _ = fmap build "CMYK" where
+ build c = JpgComponent
+ { componentIdentifier = fromIntegral $ fromEnum c
+ , horizontalSamplingFactor = 1
+ , verticalSamplingFactor = 1
+ , quantizationTableDest = 0
+ }
+
+ encodingState qual _ = V.fromListN 4 $ fmap build [0 .. 3] where
+ build ix = EncoderState
+ { _encComponentIndex = ix
+ , _encBlockWidth = 1
+ , _encBlockHeight = 1
+ , _encQuantTable = zigZagReorderForwardv $ lumaQuantTableAtQuality qual
+ , _encDcHuffman = makeInverseTable defaultDcLumaHuffmanTree
+ , _encAcHuffman = makeInverseTable defaultAcLumaHuffmanTree
+ }
+
-- | Equivalent to 'encodeJpegAtQuality', but will store the following
-- metadatas in the file using a JFIF block:
--
@@ -759,121 +977,86 @@
-> Metadatas
-> Image PixelYCbCr8 -- ^ Image to encode
-> L.ByteString -- ^ Encoded JPEG
-encodeJpegAtQualityWithMetadata quality metas img@(Image { imageWidth = w, imageHeight = h }) = encode finalImage
- where finalImage = JpgImage $
- encodeMetadatas metas ++
- [ JpgQuantTable quantTables
- , JpgScans JpgBaselineDCTHuffman hdr
- , JpgHuffmanTable defaultHuffmanTables
- , JpgScanBlob scanHeader encodedImage
- ]
-
- outputComponentCount = 3
-
- scanHeader = scanHeader'{ scanLength = fromIntegral $ calculateSize scanHeader' }
- scanHeader' = JpgScanHeader
- { scanLength = 0
- , scanComponentCount = outputComponentCount
- , scans = [ JpgScanSpecification { componentSelector = 1
- , dcEntropyCodingTable = 0
- , acEntropyCodingTable = 0
- }
- , JpgScanSpecification { componentSelector = 2
- , dcEntropyCodingTable = 1
- , acEntropyCodingTable = 1
- }
- , JpgScanSpecification { componentSelector = 3
- , dcEntropyCodingTable = 1
- , acEntropyCodingTable = 1
- }
- ]
-
- , spectralSelection = (0, 63)
- , successiveApproxHigh = 0
- , successiveApproxLow = 0
- }
-
- hdr = hdr' { jpgFrameHeaderLength = fromIntegral $ calculateSize hdr' }
- hdr' = JpgFrameHeader { jpgFrameHeaderLength = 0
- , jpgSamplePrecision = 8
- , jpgHeight = fromIntegral h
- , jpgWidth = fromIntegral w
- , jpgImageComponentCount = outputComponentCount
- , jpgComponents = [
- JpgComponent { componentIdentifier = 1
- , horizontalSamplingFactor = 2
- , verticalSamplingFactor = 2
- , quantizationTableDest = 0
- }
- , JpgComponent { componentIdentifier = 2
- , horizontalSamplingFactor = 1
- , verticalSamplingFactor = 1
- , quantizationTableDest = 1
- }
- , JpgComponent { componentIdentifier = 3
- , horizontalSamplingFactor = 1
- , verticalSamplingFactor = 1
- , quantizationTableDest = 1
- }
- ]
- }
-
- lumaQuant = scaleQuantisationMatrix (fromIntegral quality)
- defaultLumaQuantizationTable
- chromaQuant = scaleQuantisationMatrix (fromIntegral quality)
- defaultChromaQuantizationTable
-
- zigzagedLumaQuant = zigZagReorderForwardv lumaQuant
- zigzagedChromaQuant = zigZagReorderForwardv chromaQuant
- quantTables = [ JpgQuantTableSpec { quantPrecision = 0, quantDestination = 0
- , quantTable = zigzagedLumaQuant }
- , JpgQuantTableSpec { quantPrecision = 0, quantDestination = 1
- , quantTable = zigzagedChromaQuant }
- ]
-
- encodedImage = runST $ do
- let horizontalMetaBlockCount =
- w `divUpward` (dctBlockSize * maxSampling)
- verticalMetaBlockCount =
- h `divUpward` (dctBlockSize * maxSampling)
- maxSampling = 2
- lumaSamplingSize = ( maxSampling, maxSampling, zigzagedLumaQuant
- , makeInverseTable defaultDcLumaHuffmanTree
- , makeInverseTable defaultAcLumaHuffmanTree)
- chromaSamplingSize = ( maxSampling - 1, maxSampling - 1, zigzagedChromaQuant
- , makeInverseTable defaultDcChromaHuffmanTree
- , makeInverseTable defaultAcChromaHuffmanTree)
- componentDef = [lumaSamplingSize, chromaSamplingSize, chromaSamplingSize]
-
- imageComponentCount = length componentDef
-
- dc_table <- M.replicate 3 0
- block <- createEmptyMutableMacroBlock
- workData <- createEmptyMutableMacroBlock
- zigzaged <- createEmptyMutableMacroBlock
- writeState <- newWriteStateRef
-
- -- It's ugly, I know, be avoid allocation
- let blockDecoder mx my = component $ zip [0..] componentDef
- where component [] = return ()
- component ((comp, (sizeX, sizeY, table, dc, ac)) : comp_rest) =
- rasterMap sizeX sizeY decoder >> component comp_rest
- where xSamplingFactor = maxSampling - sizeX + 1
- ySamplingFactor = maxSampling - sizeY + 1
- extractor = extractBlock img block xSamplingFactor ySamplingFactor imageComponentCount
-
- decoder subX subY = do
- let blockY = my * sizeY + subY
- blockX = mx * sizeX + subX
- prev_dc <- dc_table `M.unsafeRead` comp
- (dc_coeff, neo_block) <- extractor comp blockX blockY >>=
- encodeMacroBlock table workData zigzaged prev_dc
- (dc_table `M.unsafeWrite` comp) $ fromIntegral dc_coeff
- serializeMacroBlock writeState dc ac neo_block
-
- rasterMap
- horizontalMetaBlockCount verticalMetaBlockCount
- blockDecoder
+encodeJpegAtQualityWithMetadata = encodeDirectJpegAtQualityWithMetadata
+
+-- | Equivalent to 'encodeJpegAtQuality', but will store the following
+-- metadatas in the file using a JFIF block:
+--
+-- * 'Codec.Picture.Metadata.DpiX'
+-- * 'Codec.Picture.Metadata.DpiY'
+--
+-- This function also allow to create JPEG files with the following color
+-- space:
+--
+-- * Y (Pixel8) for greyscale.
+-- * RGB (PixelRGB8) with no color downsampling on any plane
+-- * CMYK (PixelCMYK8) with no color downsampling on any plane
+--
+encodeDirectJpegAtQualityWithMetadata :: forall px. (JpgEncodable px)
+ => Word8 -- ^ Quality factor
+ -> Metadatas
+ -> Image px -- ^ Image to encode
+ -> L.ByteString -- ^ Encoded JPEG
+encodeDirectJpegAtQualityWithMetadata quality metas img = encode finalImage where
+ !w = imageWidth img
+ !h = imageHeight img
+ finalImage = JpgImage $
+ encodeMetadatas metas ++
+ additionalBlocks img ++
+ [ JpgQuantTable $ quantTableSpec img (fromIntegral quality)
+ , JpgScans JpgBaselineDCTHuffman hdr
+ , JpgHuffmanTable $ imageHuffmanTables img
+ , JpgScanBlob scanHeader encodedImage
+ ]
+
+ !outputComponentCount = componentCount (undefined :: px)
+
+ scanHeader = scanHeader'{ scanLength = fromIntegral $ calculateSize scanHeader' }
+ scanHeader' = JpgScanHeader
+ { scanLength = 0
+ , scanComponentCount = fromIntegral outputComponentCount
+ , scans = scanSpecificationOfColorSpace img
+ , spectralSelection = (0, 63)
+ , successiveApproxHigh = 0
+ , successiveApproxLow = 0
+ }
+
+ hdr = hdr' { jpgFrameHeaderLength = fromIntegral $ calculateSize hdr' }
+ hdr' = JpgFrameHeader
+ { jpgFrameHeaderLength = 0
+ , jpgSamplePrecision = 8
+ , jpgHeight = fromIntegral h
+ , jpgWidth = fromIntegral w
+ , jpgImageComponentCount = fromIntegral outputComponentCount
+ , jpgComponents = componentsOfColorSpace img
+ }
+
+ !maxSampling = maximumSubSamplingOf img
+ !horizontalMetaBlockCount = w `divUpward` (dctBlockSize * maxSampling)
+ !verticalMetaBlockCount = h `divUpward` (dctBlockSize * maxSampling)
+ !componentDef = encodingState (fromIntegral quality) img
+
+ encodedImage = runST $ do
+ dc_table <- M.replicate outputComponentCount 0
+ block <- createEmptyMutableMacroBlock
+ workData <- createEmptyMutableMacroBlock
+ zigzaged <- createEmptyMutableMacroBlock
+ writeState <- newWriteStateRef
+
+ rasterMap horizontalMetaBlockCount verticalMetaBlockCount $ \mx my ->
+ V.forM_ componentDef $ \(EncoderState comp sizeX sizeY table dc ac) ->
+ let !xSamplingFactor = maxSampling - sizeX + 1
+ !ySamplingFactor = maxSampling - sizeY + 1
+ !extractor = extractBlock img block xSamplingFactor ySamplingFactor outputComponentCount
+ in
+ rasterMap sizeX sizeY $ \subX subY -> do
+ let !blockY = my * sizeY + subY
+ !blockX = mx * sizeX + subX
+ prev_dc <- dc_table `M.unsafeRead` comp
+ extracted <- extractor comp blockX blockY
+ (dc_coeff, neo_block) <- encodeMacroBlock table workData zigzaged prev_dc extracted
+ (dc_table `M.unsafeWrite` comp) $ fromIntegral dc_coeff
+ serializeMacroBlock writeState dc ac neo_block
- finalizeBoolWriter writeState
+ finalizeBoolWriter writeState
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/src/Codec/Picture/Saving.hs new/JuicyPixels-3.2.7/src/Codec/Picture/Saving.hs
--- old/JuicyPixels-3.2.6.4/src/Codec/Picture/Saving.hs 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/src/Codec/Picture/Saving.hs 2016-01-25 23:33:57.000000000 +0100
@@ -1,4 +1,5 @@
{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE CPP #-}
-- | Helper functions to save dynamic images to other file format
-- with automatic color space/sample format conversion done automatically.
module Codec.Picture.Saving( imageToJpg
@@ -10,6 +11,10 @@
, imageToTga
) where
+#if !MIN_VERSION_base(4,8,0)
+import Data.Monoid( mempty )
+#endif
+
import Data.Bits( unsafeShiftR )
import Data.Word( Word8, Word16 )
import qualified Data.ByteString.Lazy as L
@@ -94,9 +99,13 @@
-- | This function will try to do anything to encode an image
-- as JPEG, make all color conversion and such. Equivalent
-- of 'decodeImage' for jpeg encoding
+-- Save Y or YCbCr Jpeg only, all other colorspaces are converted.
+-- To save a RGB or CMYK JPEG file, use the
+-- 'Codec.Picture.Jpg.encodeDirectJpegAtQualityWithMetadata' function
imageToJpg :: Int -> DynamicImage -> L.ByteString
imageToJpg quality dynImage =
let encodeAtQuality = encodeJpegAtQuality (fromIntegral quality)
+ encodeWithMeta = encodeDirectJpegAtQualityWithMetadata (fromIntegral quality) mempty
in case dynImage of
ImageYCbCr8 img -> encodeAtQuality img
ImageCMYK8 img -> imageToJpg quality . ImageRGB8 $ convertImage img
@@ -105,10 +114,8 @@
ImageRGBF img -> imageToJpg quality . ImageRGB8 $ toStandardDef img
ImageRGBA8 img -> encodeAtQuality (convertImage $ dropAlphaLayer img)
ImageYF img -> imageToJpg quality . ImageY8 $ greyScaleToStandardDef img
- ImageY8 img -> encodeAtQuality . convertImage
- $ (promoteImage img :: Image PixelRGB8)
- ImageYA8 img -> encodeAtQuality $
- convertImage (promoteImage $ dropAlphaLayer img :: Image PixelRGB8)
+ ImageY8 img -> encodeWithMeta img
+ ImageYA8 img -> encodeWithMeta $ dropAlphaLayer img
ImageY16 img -> imageToJpg quality . ImageY8 $ from16to8 img
ImageYA16 img -> imageToJpg quality . ImageYA8 $ from16to8 img
ImageRGB16 img -> imageToJpg quality . ImageRGB8 $ from16to8 img
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/src/Codec/Picture/Types.hs new/JuicyPixels-3.2.7/src/Codec/Picture/Types.hs
--- old/JuicyPixels-3.2.6.4/src/Codec/Picture/Types.hs 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/src/Codec/Picture/Types.hs 2016-01-25 23:33:57.000000000 +0100
@@ -739,7 +739,7 @@
-> Int -- ^ Height in pixels
-> m (MutableImage (PrimState m) px)
{-# INLINE generateMutableImage #-}
-generateMutableImage f w h = MutableImage w h <$> generated where
+generateMutableImage f w h = MutableImage w h `liftM` generated where
compCount = componentCount (undefined :: px)
generated = do
@@ -897,6 +897,7 @@
{-# SPECIALIZE INLINE pixelMap :: (PixelRGB8 -> PixelRGBA8) -> Image PixelRGB8 -> Image PixelRGBA8 #-}
{-# SPECIALIZE INLINE pixelMap :: (PixelRGBA8 -> PixelRGBA8) -> Image PixelRGBA8 -> Image PixelRGBA8 #-}
{-# SPECIALIZE INLINE pixelMap :: (Pixel8 -> PixelRGB8) -> Image Pixel8 -> Image PixelRGB8 #-}
+{-# SPECIALIZE INLINE pixelMap :: (Pixel8 -> Pixel8) -> Image Pixel8 -> Image Pixel8 #-}
pixelMap f Image { imageWidth = w, imageHeight = h, imageData = vec } =
Image w h pixels
where sourceComponentCount = componentCount (undefined :: a)
@@ -1105,9 +1106,10 @@
instance LumaPlaneExtractable PixelRGBA8 where
{-# INLINE computeLuma #-}
- computeLuma (PixelRGBA8 r g b _) = floor $ 0.3 * toRational r +
- 0.59 * toRational g +
- 0.11 * toRational b
+ computeLuma (PixelRGBA8 r g b _) =
+ floor $ (0.3 :: Double) * fromIntegral r
+ + 0.59 * fromIntegral g
+ + 0.11 * fromIntegral b
instance LumaPlaneExtractable PixelYCbCr8 where
{-# INLINE computeLuma #-}
@@ -1570,9 +1572,11 @@
instance LumaPlaneExtractable PixelRGB16 where
{-# INLINE computeLuma #-}
- computeLuma (PixelRGB16 r g b) = floor $ 0.3 * toRational r +
- 0.59 * toRational g +
- 0.11 * toRational b
+ computeLuma (PixelRGB16 r g b) =
+ floor $ (0.3 :: Double) * fromIntegral r
+ + 0.59 * fromIntegral g
+ + 0.11 * fromIntegral b
+
--------------------------------------------------
---- PixelRGB8 instances
--------------------------------------------------
@@ -1654,9 +1658,10 @@
instance LumaPlaneExtractable PixelRGB8 where
{-# INLINE computeLuma #-}
- computeLuma (PixelRGB8 r g b) = floor $ 0.3 * toRational r +
- 0.59 * toRational g +
- 0.11 * toRational b
+ computeLuma (PixelRGB8 r g b) =
+ floor $ (0.3 :: Double) * fromIntegral r
+ + 0.59 * fromIntegral g
+ + 0.11 * fromIntegral b
--------------------------------------------------
---- PixelRGBA8 instances
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/JuicyPixels-3.2.6.4/src/Codec/Picture.hs new/JuicyPixels-3.2.7/src/Codec/Picture.hs
--- old/JuicyPixels-3.2.6.4/src/Codec/Picture.hs 2015-12-02 22:38:14.000000000 +0100
+++ new/JuicyPixels-3.2.7/src/Codec/Picture.hs 2016-01-25 23:33:56.000000000 +0100
@@ -1,7 +1,10 @@
{-# LANGUAGE CPP #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TupleSections #-}
+{-# LANGUAGE FlexibleInstances #-}
-- | Main module for image import/export into various image formats.
--
-- To use the library without thinking about it, look after 'decodeImage' and
@@ -23,6 +26,10 @@
, generateFoldImage
, withImage
+ -- * RGB helper functions
+ , convertRGB8
+ , convertRGBA8
+
-- * Lens compatibility
, Traversal
, imagePixels
@@ -138,6 +145,7 @@
import Control.Applicative( (<$>) )
#endif
+import Data.Bits( unsafeShiftR )
import Control.DeepSeq( NFData, deepseq )
import qualified Control.Exception as Exc ( catch, IOException )
import Codec.Picture.Metadata( Metadatas )
@@ -200,6 +208,7 @@
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as L
+import qualified Data.Vector.Storable as VS
-- | Return the first Right thing, accumulating error
eitherLoad :: c -> [(String, c -> Either String b)] -> Either String b
@@ -263,6 +272,7 @@
readImageWithMetadata :: FilePath -> IO (Either String (DynamicImage, Metadatas))
readImageWithMetadata = withImageDecoder decodeImageWithMetadata
+
-- | If you want to decode an image in a bytestring without even thinking
-- in term of format or whatever, this is the function to use. It will try
-- to decode in each known format and if one decoding succeeds, it will return
@@ -270,6 +280,85 @@
decodeImage :: B.ByteString -> Either String DynamicImage
decodeImage = fmap fst . decodeImageWithMetadata
+class Decimable px1 px2 where
+ decimateBitDepth :: Image px1 -> Image px2
+
+decimateWord16 :: ( Pixel px1, Pixel px2
+ , PixelBaseComponent px1 ~ Pixel16
+ , PixelBaseComponent px2 ~ Pixel8
+ ) => Image px1 -> Image px2
+decimateWord16 (Image w h da) =
+ Image w h $ VS.map (\v -> fromIntegral $ v `unsafeShiftR` 8) da
+
+decimateFloat :: ( Pixel px1, Pixel px2
+ , PixelBaseComponent px1 ~ PixelF
+ , PixelBaseComponent px2 ~ Pixel8
+ ) => Image px1 -> Image px2
+decimateFloat (Image w h da) =
+ Image w h $ VS.map (floor . (255*) . max 0 . min 1) da
+
+instance Decimable Pixel16 Pixel8 where
+ decimateBitDepth = decimateWord16
+
+instance Decimable PixelYA16 PixelYA8 where
+ decimateBitDepth = decimateWord16
+
+instance Decimable PixelRGB16 PixelRGB8 where
+ decimateBitDepth = decimateWord16
+
+instance Decimable PixelRGBA16 PixelRGBA8 where
+ decimateBitDepth = decimateWord16
+
+instance Decimable PixelCMYK16 PixelCMYK8 where
+ decimateBitDepth = decimateWord16
+
+instance Decimable PixelF Pixel8 where
+ decimateBitDepth = decimateFloat
+
+instance Decimable PixelRGBF PixelRGB8 where
+ decimateBitDepth = decimateFloat
+
+-- | Convert by any mean possible a dynamic image to an image
+-- in RGBA. The process can lose precision while converting from
+-- 16bits pixels or Floating point pixels.
+convertRGBA8 :: DynamicImage -> Image PixelRGBA8
+convertRGBA8 dynImage = case dynImage of
+ ImageY8 img -> promoteImage img
+ ImageY16 img -> promoteImage (decimateBitDepth img :: Image Pixel8)
+ ImageYF img -> promoteImage (decimateBitDepth img :: Image Pixel8)
+ ImageYA8 img -> promoteImage img
+ ImageYA16 img -> promoteImage (decimateBitDepth img :: Image PixelYA8)
+ ImageRGB8 img -> promoteImage img
+ ImageRGB16 img -> promoteImage (decimateBitDepth img :: Image PixelRGB8)
+ ImageRGBF img -> promoteImage (decimateBitDepth img :: Image PixelRGB8)
+ ImageRGBA8 img -> promoteImage img
+ ImageRGBA16 img -> decimateBitDepth img
+ ImageYCbCr8 img -> promoteImage (convertImage img :: Image PixelRGB8)
+ ImageCMYK8 img -> promoteImage (convertImage img :: Image PixelRGB8)
+ ImageCMYK16 img ->
+ promoteImage (convertImage (decimateBitDepth img :: Image PixelCMYK8) :: Image PixelRGB8)
+
+-- | Convert by any mean possible a dynamic image to an image
+-- in RGB. The process can lose precision while converting from
+-- 16bits pixels or Floating point pixels. Any alpha layer will
+-- be dropped
+convertRGB8 :: DynamicImage -> Image PixelRGB8
+convertRGB8 dynImage = case dynImage of
+ ImageY8 img -> promoteImage img
+ ImageY16 img -> promoteImage (decimateBitDepth img :: Image Pixel8)
+ ImageYF img -> promoteImage (decimateBitDepth img :: Image Pixel8)
+ ImageYA8 img -> promoteImage img
+ ImageYA16 img -> promoteImage (decimateBitDepth img :: Image PixelYA8)
+ ImageRGB8 img -> img
+ ImageRGB16 img -> decimateBitDepth img
+ ImageRGBF img -> decimateBitDepth img :: Image PixelRGB8
+ ImageRGBA8 img -> dropAlphaLayer img
+ ImageRGBA16 img -> dropAlphaLayer (decimateBitDepth img :: Image PixelRGBA8)
+ ImageYCbCr8 img -> convertImage img
+ ImageCMYK8 img -> convertImage img
+ ImageCMYK16 img -> convertImage (decimateBitDepth img :: Image PixelCMYK8)
+
+
-- | Equivalent to 'decodeImage', but also provide potential metadatas
-- present in the given file.
decodeImageWithMetadata :: B.ByteString -> Either String (DynamicImage, Metadatas)
@@ -306,7 +395,7 @@
readJpeg :: FilePath -> IO (Either String DynamicImage)
readJpeg = withImageDecoder decodeJpeg
--- | Try to load a .bmp file. The colorspace would be RGB or Y.
+-- | Try to load a .bmp file. The colorspace would be RGB, RGBA or Y.
readBitmap :: FilePath -> IO (Either String DynamicImage)
readBitmap = withImageDecoder decodeBitmap
1
0
Hello community,
here is the log from the commit of package ghc-HUnit for openSUSE:Factory checked in at 2016-01-28 17:23:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-HUnit (Old)
and /work/SRC/openSUSE:Factory/.ghc-HUnit.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-HUnit"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-HUnit/ghc-HUnit.changes 2016-01-22 01:08:35.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-HUnit.new/ghc-HUnit.changes 2016-01-28 17:24:47.000000000 +0100
@@ -1,0 +2,5 @@
+Fri Jan 22 10:12:18 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 1.3.1.1
+
+-------------------------------------------------------------------
Old:
----
HUnit-1.3.1.0.tar.gz
New:
----
HUnit-1.3.1.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-HUnit.spec ++++++
--- /var/tmp/diff_new_pack.1TwUXh/_old 2016-01-28 17:24:47.000000000 +0100
+++ /var/tmp/diff_new_pack.1TwUXh/_new 2016-01-28 17:24:47.000000000 +0100
@@ -19,7 +19,7 @@
%global pkg_name HUnit
Name: ghc-HUnit
-Version: 1.3.1.0
+Version: 1.3.1.1
Release: 0
Summary: A unit testing framework for Haskell
License: BSD-3-Clause
@@ -75,6 +75,6 @@
%files devel -f %{name}-devel.files
%defattr(-,root,root,-)
-%doc examples README.md doc
+%doc examples README.md
%changelog
++++++ HUnit-1.3.1.0.tar.gz -> HUnit-1.3.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HUnit-1.3.1.0/CHANGELOG.md new/HUnit-1.3.1.1/CHANGELOG.md
--- old/HUnit-1.3.1.0/CHANGELOG.md 1970-01-01 01:00:00.000000000 +0100
+++ new/HUnit-1.3.1.1/CHANGELOG.md 2016-01-19 17:16:50.000000000 +0100
@@ -0,0 +1,19 @@
+## Changes
+
+#### 1.3.1.1
+
+- Various updates to metadata and documentation removing outdated information and making other things more visible
+
+### 1.3.1.0
+
+- add minimal support for GHC 8.0
+
+### 1.3.0.0
+
+- removed support for old compilers
+
+- add source locations for failing assertions (GHC >= 7.10.2 only)
+
+#### 1.2.5.2
+
+- Added support for GHC 7.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HUnit-1.3.1.0/HUnit.cabal new/HUnit-1.3.1.1/HUnit.cabal
--- old/HUnit-1.3.1.0/HUnit.cabal 2016-01-11 10:04:20.000000000 +0100
+++ new/HUnit-1.3.1.1/HUnit.cabal 2016-01-19 17:16:50.000000000 +0100
@@ -1,23 +1,22 @@
Name: HUnit
-Version: 1.3.1.0
+Version: 1.3.1.1
Cabal-Version: >= 1.8
License: BSD3
License-File: LICENSE
Author: Dean Herington
Maintainer: Simon Hengel <sol(a)typeful.net>
Stability: stable
-Homepage: http://hunit.sourceforge.net/
+Homepage: https://github.com/hspec/HUnit#readme
Category: Testing
Synopsis: A unit testing framework for Haskell
Description:
HUnit is a unit testing framework for Haskell, inspired by the
JUnit tool for Java, see: <http://www.junit.org>.
Build-Type: Simple
-Data-Files:
- doc/Guide.html
- examples/Example.hs
- prologue.txt
+Extra-Source-Files:
+ CHANGELOG.md
README.md
+ examples/Example.hs
source-repository head
type: git
@@ -38,7 +37,7 @@
Test-Suite tests
Type: exitcode-stdio-1.0
Main-Is: HUnitTests.hs
- HS-Source-Dirs: tests
+ HS-Source-Dirs: tests, examples
Build-Depends:
base == 4.*,
deepseq,
@@ -49,4 +48,5 @@
HUnitTestBase
HUnitTestExtended
TerminalTest
+ Example
GHC-Options: -Wall
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HUnit-1.3.1.0/README.md new/HUnit-1.3.1.1/README.md
--- old/HUnit-1.3.1.0/README.md 2016-01-11 10:04:20.000000000 +0100
+++ new/HUnit-1.3.1.1/README.md 2016-01-19 17:16:50.000000000 +0100
@@ -1,28 +1,545 @@
-# HUnit
+# HUnit User's Guide
-HUnit is a unit testing framework for Haskell, inspired by the JUnit
-tool for Java. HUnit is free software; see its "License" file for
-details. HUnit is available at <http://hunit.sourceforge.net>.
+HUnit is a unit testing framework for Haskell, inspired by the JUnit tool for Java. This
+guide describes how to use HUnit, assuming you are familiar with Haskell, though not
+necessarily with JUnit. You can obtain HUnit, including this guide, at
+[https://github.com/hspec/HUnit](https://github.com/hspec/HUnit)
-HUnit 1.1.1 consists of a number of files. Besides Haskell source files
-in Test/HUnit (whose names end in ".hs" or ".lhs"), these files include:
+## Introduction
+A test-centered methodology for software development is most effective when tests are
+easy to create, change, and execute. The [JUnit](www.junit.org) tool
+pioneered support for test-first development in [Java](http://java.sun.com).
+HUnit is an adaptation of JUnit to Haskell, a general-purpose, purely functional
+programming language. (To learn more about Haskell, see www.haskell.org](http://www.haskell.org).
+With HUnit, as with JUnit, you can easily create tests, name them, group them into
+suites, and execute them, with the framework checking the results automatically. Test
+specification in HUnit is even more concise and flexible than in JUnit, thanks to the
+nature of the Haskell language. HUnit currently includes only a text-based test
+controller, but the framework is designed for easy extension. (Would anyone care to
+write a graphical test controller for HUnit?)
+
+The next section helps you get started using HUnit in simple ways. Subsequent sections
+give details on [writing tests](#writing-tests) and [running tests](#running-tests).
+The document concludes with a section describing HUnit's [constituent files](#constituent-files)
+and a section giving [references](#references) to further information.
+
+## Getting Started
+
+In the Haskell module where your tests will reside, import module `Test.HUnit`:
+
+```haskell
+import Test.HUnit
+```
+
+Define test cases as appropriate:
+
+```haskell
+test1 = TestCase (assertEqual "for (foo 3)," (1,2) (foo 3))
+test2 = TestCase (do (x,y) <- partA 3
+ assertEqual "for the first result of partA," 5 x
+ b <- partB y
+ assertBool ("(partB " ++ show y ++ ") failed") b)
+```
+
+Name the test cases and group them together:
+
+```haskell
+tests = TestList [TestLabel "test1" test1, TestLabel "test2" test2]
+```
+
+Run the tests as a group. At a Haskell interpreter prompt, apply the
+function `runTestTT` to the collected tests. (The `TT` suggests
+**T**ext orientation with output to the **T**erminal.)
+
+```haskell
+> runTestTT tests
+Cases: 2 Tried: 2 Errors: 0 Failures: 0
+>
+```
+
+If the tests are proving their worth, you might see:
+
+```haskell
+> runTestTT tests
+### Failure in: 0:test1
+for (foo 3),
+expected: (1,2)
+ but got: (1,3)
+Cases: 2 Tried: 2 Errors: 0 Failures: 1
+>
+```
+
+Isn't that easy?
+
+You can specify tests even more succinctly using operators and
+overloaded functions that HUnit provides:
+
+```haskell
+tests = test [ "test1" ~: "(foo 3)" ~: (1,2) ~=? (foo 3),
+ "test2" ~: do (x, y) <- partA 3
+ assertEqual "for the first result of partA," 5 x
+ partB y @? "(partB " ++ show y ++ ") failed" ]
+```
+
+Assuming the same test failures as before, you would see:
+
+```haskell
+> runTestTT tests
+### Failure in: 0:test1:(foo 3)
+expected: (1,2)
+ but got: (1,3)
+Cases: 2 Tried: 2 Errors: 0 Failures: 1
+>
+```
+
+## Writing Tests
+
+Tests are specified compositionally. [Assertions](#assertions) are
+combined to make a [test case](#test-case), and test cases are combined
+into [tests](#tests). HUnit also provides [advanced
+features](#advanced-features) for more convenient test specification.
+
+### Assertions
+
+ The basic building block of a test is an **assertion**.
+
+```haskell
+type Assertion = IO ()
+```
+
+An assertion is an `IO` computation that always produces a void result. Why is an assertion an `IO` computation? So that programs with real-world side effects can be tested. How does an assertion assert anything if it produces no useful result? The answer is that an assertion can signal failure by calling `assertFailure`.
+
+```haskell
+assertFailure :: String -> Assertion
+assertFailure msg = ioError (userError ("HUnit:" ++ msg))
+```
+
+`(assertFailure msg)` raises an exception. The string argument identifies the
+ failure. The failure message is prefixed by "`HUnit:`" to mark it as an HUnit
+ assertion failure message. The HUnit test framework interprets such an exception as
+ indicating failure of the test whose execution raised the exception. (Note: The details
+ concerning the implementation of `assertFailure` are subject to change and should
+ not be relied upon.)
+
+`assertFailure` can be used directly, but it is much more common to use it
+ indirectly through other assertion functions that conditionally assert failure.
+
+```haskell
+assertBool :: String -> Bool -> Assertion
+assertBool msg b = unless b (assertFailure msg)
+
+assertString :: String -> Assertion
+assertString s = unless (null s) (assertFailure s)
+
+assertEqual :: (Eq a, Show a) => String -> a -> a -> Assertion
+assertEqual preface expected actual =
+ unless (actual == expected) (assertFailure msg)
+ where msg = (if null preface then "" else preface ++ "\n") ++
+ "expected: " ++ show expected ++ "\n but got: " ++ show actual
+```
+
+With `assertBool` you give the assertion condition and failure message separately.
+ With `assertString` the two are combined. With `assertEqual` you provide a
+ "preface", an expected value, and an actual value; the failure message shows the two
+ unequal values and is prefixed by the preface. Additional ways to create assertions are
+ described later under [Avanced Features](#advanced-features)
+
+Since assertions are `IO` computations, they may be combined--along with other
+ `IO` computations--using `(>>=)`, `(>>)`, and the `do`
+ notation. As long as its result is of type `(IO ())`, such a combination
+ constitutes a single, collective assertion, incorporating any number of constituent
+ assertions. The important features of such a collective assertion are that it fails if
+ any of its constituent assertions is executed and fails, and that the first constituent
+ assertion to fail terminates execution of the collective assertion. Such behavior is
+ essential to specifying a test case.
+
+### Test Case
+
+A **test case** is the unit of test execution. That is, distinct test cases are
+ executed independently. The failure of one is independent of the failure of any other.
+
+A test case consists of a single, possibly collective, assertion. The possibly multiple
+ constituent assertions in a test case's collective assertion are **not** independent.
+ Their interdependence may be crucial to specifying correct operation for a test. A test
+ case may involve a series of steps, each concluding in an assertion, where each step
+ must succeed in order for the test case to continue. As another example, a test may
+ require some "set up" to be performed that must be undone ("torn down" in JUnit
+ parlance) once the test is complete. In this case, you could use Haskell's
+ `IO.bracket` function to achieve the desired effect.
+
+You can make a test case from an assertion by applying the `TestCase` constructor.
+ For example, `(TestCase (return ()))` is a test case that never
+ fails, and `(TestCase (assertEqual "for x," 3 x))`
+ is a test case that checks that the value of `x` is 3. Additional ways
+ to create test cases are described later under [Advanced Features](#advanced-eatures).
+
+### Tests
+
+As soon as you have more than one test, you'll want to name them to tell them apart. As
+ soon as you have more than several tests, you'll want to group them to process them more
+ easily. So, naming and grouping are the two keys to managing collections of tests.
+
+In tune with the "composite" design pattern [1], a
+ **test** is defined as a package of test cases. Concretely, a test is either a single
+ test case, a group of tests, or either of the first two identified by a label.
+
+```haskell
+data Test = TestCase Assertion
+ | TestList [Test]
+ | TestLabel String Test
+```
+
+There are three important features of this definition to note:
+
+
+* A `TestList` consists of a list of tests rather than a list of test cases.
+ This means that the structure of a `Test` is actually a tree. Using a
+ hierarchy helps organize tests just as it helps organize files in a file system.
+* A `TestLabel` is attached to a test rather than to a test case. This means
+ that all nodes in the test tree, not just test case (leaf) nodes, can be labeled.
+ Hierarchical naming helps organize tests just as it helps organize files in a file
+ system.
+* A `TestLabel` is separate from both `TestCase` and `TestList`.
+ This means that labeling is optional everywhere in the tree. Why is this a good
+ thing? Because of the hierarchical structure of a test, each constituent test case
+ is uniquely identified by its path in the tree, ignoring all labels. Sometimes a
+ test case's path (or perhaps its subpath below a certain node) is a perfectly
+ adequate "name" for the test case (perhaps relative to a certain node). In this
+ case, creating a label for the test case is both unnecessary and inconvenient.
+
+
+The number of test cases that a test comprises can be computed with `testCaseCount`.
+
+```haskell
+testCaseCount :: Test -> Int
+```
+
+As mentioned above, a test is identified by its **path** in the test hierarchy.
+
+```haskell
+data Node = ListItem Int | Label String
+ deriving (Eq, Show, Read)
+
+type Path = [Node] -- Node order is from test case to root.
+```
+
+Each occurrence of `TestList` gives rise to a `ListItem` and each
+ occurrence of `TestLabel` gives rise to a `Label`. The `ListItem`s
+ by themselves ensure uniqueness among test case paths, while the `Label`s allow
+ you to add mnemonic names for individual test cases and collections of them.
+
+Note that the order of nodes in a path is reversed from what you might expect: The first
+ node in the list is the one deepest in the tree. This order is a concession to
+ efficiency: It allows common path prefixes to be shared.
+
+The paths of the test cases that a test comprises can be computed with
+ `testCasePaths`. The paths are listed in the order in which the corresponding
+ test cases would be executed.
+
+```haskell
+testCasePaths :: Test -> [Path]
+```
+
+The three variants of `Test` can be constructed simply by applying
+ `TestCase`, `TestList`, and `TestLabel` to appropriate arguments.
+ Additional ways to create tests are described later under [Advanced Features](#advanced-features).
+
+The design of the type `Test` provides great conciseness, flexibility, and
+ convenience in specifying tests. Moreover, the nature of Haskell significantly augments
+ these qualities:
+
+* Combining assertions and other code to construct test cases is easy with the
+ `IO` monad.
+* Using overloaded functions and special operators (see below), specification of
+ assertions and tests is extremely compact.
+* Structuring a test tree by value, rather than by name as in JUnit, provides for more
+ convenient, flexible, and robust test suite specification. In particular, a test
+ suite can more easily be computed "on the fly" than in other test frameworks.
+* Haskell's powerful abstraction facilities provide unmatched support for test
+ refactoring.
+
+### Advanced Features
+
+HUnit provides additional features for specifying assertions and tests more conveniently
+ and concisely. These facilities make use of Haskell type classes.
+
+The following operators can be used to construct assertions.
+
+```haskell
+infix 1 @?, @=?, @?=
+
+(@?) :: (AssertionPredicable t) => t -> String -> Assertion
+pred @? msg = assertionPredicate pred >>= assertBool msg
+
+(@=?) :: (Eq a, Show a) => a -> a -> Assertion
+expected @=? actual = assertEqual "" expected actual
+
+(@?=) :: (Eq a, Show a) => a -> a -> Assertion
+actual @?= expected = assertEqual "" expected actual
+```
+
+You provide a boolean condition and failure message separately to `(@?)`, as for
+ `assertBool`, but in a different order. The `(@=?)` and `(@?=)`
+ operators provide shorthands for `assertEqual` when no preface is required. They
+ differ only in the order in which the expected and actual values are provided. (The
+ actual value--the uncertain one--goes on the "?" side of the operator.)
+
+The `(@?)` operator's first argument is something from which an assertion
+ predicate can be made, that is, its type must be `AssertionPredicable`.
+
+```haskell
+type AssertionPredicate = IO Bool
+
+class AssertionPredicable t
+ where assertionPredicate :: t -> AssertionPredicate
+
+instance AssertionPredicable Bool
+ where assertionPredicate = return
+
+instance (AssertionPredicable t) => AssertionPredicable (IO t)
+ where assertionPredicate = (>>= assertionPredicate)
+```
+
+The overloaded `assert` function in the `Assertable` type class constructs
+ an assertion.
+
+```haskell
+class Assertable t
+ where assert :: t -> Assertion
+
+instance Assertable ()
+ where assert = return
+
+instance Assertable Bool
+ where assert = assertBool ""
+
+instance (ListAssertable t) => Assertable [t]
+ where assert = listAssert
+
+instance (Assertable t) => Assertable (IO t)
+ where assert = (>>= assert)
+```
+
+The `ListAssertable` class allows `assert` to be applied to `[Char]`
+ (that is, `String`).
+
+```haskell
+class ListAssertable t
+ where listAssert :: [t] -> Assertion
+
+instance ListAssertable Char
+ where listAssert = assertString
+```
+
+With the above declarations, `(assert ())`,
+ `(assert True)`, and `(assert "")` (as well as
+ `IO` forms of these values, such as `(return ())`) are all
+ assertions that never fail, while `(assert False)` and
+ `(assert "some failure message")` (and their
+ `IO` forms) are assertions that always fail. You may define additional
+ instances for the type classes `Assertable`, `ListAssertable`, and
+ `AssertionPredicable` if that should be useful in your application.
+
+The overloaded `test` function in the `Testable` type class constructs a
+ test.
+
+```haskell
+class Testable t
+ where test :: t -> Test
+
+instance Testable Test
+ where test = id
+
+instance (Assertable t) => Testable (IO t)
+ where test = TestCase . assert
+
+instance (Testable t) => Testable [t]
+ where test = TestList . map test
+```
+
+The `test` function makes a test from either an `Assertion` (using
+ `TestCase`), a list of `Testable` items (using `TestList`), or
+ a `Test` (making no change).
+
+The following operators can be used to construct tests.
+
+```haskell
+infix 1 ~?, ~=?, ~?=
+infixr 0 ~:
+
+(~?) :: (AssertionPredicable t) => t -> String -> Test
+pred ~? msg = TestCase (pred @? msg)
+
+(~=?) :: (Eq a, Show a) => a -> a -> Test
+expected ~=? actual = TestCase (expected @=? actual)
+
+(~?=) :: (Eq a, Show a) => a -> a -> Test
+actual ~?= expected = TestCase (actual @?= expected)
+
+(~:) :: (Testable t) => String -> t -> Test
+label ~: t = TestLabel label (test t)
+```
+
+`(~?)`, `(~=?)`, and `(~?=)` each make an assertion, as for
+ `(@?)`, `(@=?)`, and `(@?=)`, respectively, and then a test case
+ from that assertion. `(~:)` attaches a label to something that is
+ `Testable`. You may define additional instances for the type class
+ `Testable` should that be useful.
+
+## Running Tests
+
+HUnit is structured to support multiple test controllers. The first
+ subsection below describes the [test execution](#test-execution)
+ characteristics common to all test controllers. The second subsection
+ describes the text-based controller that is included with HUnit.
+
+## Test Execution
+
+All test controllers share a common test execution model. They differ only in how the
+ results of test execution are shown.
+
+The execution of a test (a value of type `Test`) involves the serial execution (in
+ the `IO` monad) of its constituent test cases. The test cases are executed in a
+ depth-first, left-to-right order. During test execution, four counts of test cases are
+ maintained:
+
+```haskell
+data Counts = Counts { cases, tried, errors, failures :: Int }
+ deriving (Eq, Show, Read)
```
- * README.md -- this file
- * doc/Guide.html -- user's guide, in HTML format
- * LICENSE -- license for use of HUnit
+
+
+* `cases` is the number of test cases included in the test. This number is a
+ static property of a test and remains unchanged during test execution.
+* `tried` is the number of test cases that have been executed so far during the
+ test execution.
+* `errors` is the number of test cases whose execution ended with an unexpected
+ exception being raised. Errors indicate problems with test cases, as opposed to the
+ code under test.
+* `failures` is the number of test cases whose execution asserted failure.
+ Failures indicate problems with the code under test.
+
+
+Why is there no count for test case successes? The technical reason is that the counts
+ are maintained such that the number of test case successes is always equal to
+ `(tried - (errors + failures))`. The
+ psychosocial reason is that, with test-centered development and the expectation that
+ test failures will be few and short-lived, attention should be focused on the failures
+ rather than the successes.
+
+As test execution proceeds, three kinds of reporting event are communicated to the test
+ controller. (What the controller does in response to the reporting events depends on the
+ controller.)
+
+* *start* -- Just prior to initiation of a test case, the path of the test case
+ and the current counts (excluding the current test case) are reported.
+* *error* -- When a test case terminates with an error, the error message is
+ reported, along with the test case path and current counts (including the current
+ test case).
+* *failure* -- When a test case terminates with a failure, the failure message is
+ reported, along with the test case path and current counts (including the current
+ test case).
+
+Typically, a test controller shows *error* and *failure* reports immediately
+ but uses the *start* report merely to update an indication of overall test
+ execution progress.
+
+### Text-Based Controller
+
+A text-based test controller is included with HUnit.
+
+```haskell
+runTestText :: PutText st -> Test -> IO (Counts, st)
+```
+
+`runTestText` is generalized on a *reporting scheme* given as its first
+ argument. During execution of the test given as its second argument, the controller
+ creates a string for each reporting event and processes it according to the reporting
+ scheme. When test execution is complete, the controller returns the final counts along
+ with the final state for the reporting scheme.
+
+The strings for the three kinds of reporting event are as follows.
+
+* A *start* report is the result of the function `showCounts` applied to
+ the counts current immediately prior to initiation of the test case being started.
+* An *error* report is of the form
+ "`Error in: *path*\n*message*`",
+ where *path* is the path of the test case in error, as shown by
+ `showPath`, and *message* is a message describing the error. If the path
+ is empty, the report has the form "`Error:\n*message*`".
+* A *failure* report is of the form
+ "`Failure in: *path*\n*message*`", where
+ *path* is the path of the test case in error, as shown by
+ `showPath`, and *message* is the failure message. If the path is empty,
+ the report has the form "`Failure:\n*message*`".
+
+The function `showCounts` shows a set of counts.
+
+```haskell
+showCounts :: Counts -> String
+```
+
+The form of its result is
+`Cases: *cases* Tried: *tried* Errors: *errors* Failures: *failures*`
+where *cases*, *tried*, *errors*, and *failures* are the count values.
+
+The function `showPath` shows a test case path.
+
+```haskell
+ showPath :: Path -> String
+```
+
+The nodes in the path are reversed (so that the path reads from the root down to the test
+ case), and the representations for the nodes are joined by '`:`' separators. The
+ representation for `(ListItem *n*)` is `(show n)`. The representation
+ for `(Label *label*)` is normally *label*. However, if *label*
+ contains a colon or if `(show *label*)` is different from *label*
+ surrounded by quotation marks--that is, if any ambiguity could exist--then `(Label
+ *label*)` is represented as `(show *label*)`.
+
+HUnit includes two reporting schemes for the text-based test controller. You may define
+ others if you wish.
+
+```haskell
+putTextToHandle :: Handle -> Bool -> PutText Int
+```
+
+`putTextToHandle` writes error and failure reports, plus a report of the final
+ counts, to the given handle. Each of these reports is terminated by a newline. In
+ addition, if the given flag is `True`, it writes start reports to the handle as
+ well. A start report, however, is not terminated by a newline. Before the next report is
+ written, the start report is "erased" with an appropriate sequence of carriage return
+ and space characters. Such overwriting realizes its intended effect on terminal devices.
+
+```haskell
+putTextToShowS :: PutText ShowS
+```
+
+`putTextToShowS` ignores start reports and simply accumulates error and failure
+ reports, terminating them with newlines. The accumulated reports are returned (as the
+ second element of the pair returned by `runTestText`) as a `ShowS`
+ function (that is, one with type `(String -> String)`) whose
+ first argument is a string to be appended to the accumulated report lines.
+
+HUnit provides a shorthand for the most common use of the text-based test controller.
+
+```haskell
+runTestTT :: Test -> IO Counts
```
-See the user's guide for more information.
+`runTestTT` invokes `runTestText`, specifying `(putTextToHandle stderr
+True)` for the reporting scheme, and returns the final counts from the
+test execution.
-## Changes
+## References
-### 1.3.1.0
+* [1] Gamma, E., et al. Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, Reading, MA, 1995: The classic book describing design patterns in an object-oriented context.
-- add minimal support for GHC 8.0
+* [junit.org](http://www.junit.org): Web page for JUnit, the tool after which HUnit is modeled.
-### 1.3.0.0
+* [http://junit.sourceforge.net/doc/testinfected/testing.htm](http://junit.sou…: A good introduction to test-first development and the use of JUnit.
-- removed support for old compilers
+* [http://junit.sourceforge.net/doc/cookstour/cookstour.htm](http://junit.sour…: A description of the internal structure of JUnit. Makes for an interesting comparison between JUnit and HUnit.
-- add source locations for failing assertions (GHC >= 7.10.2 only)
+The HUnit software and this guide were written by Dean Herington [heringto@cs.unc.edu](mailto:heringto@cs.unc.edu)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HUnit-1.3.1.0/doc/Guide.html new/HUnit-1.3.1.1/doc/Guide.html
--- old/HUnit-1.3.1.0/doc/Guide.html 2016-01-11 10:04:20.000000000 +0100
+++ new/HUnit-1.3.1.1/doc/Guide.html 1970-01-01 01:00:00.000000000 +0100
@@ -1,539 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd" xml:lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <meta name="Author" content="Dean Herington"/>
- <meta name="KeyWords" content="HUnit, unit testing, test-first development, Haskell, JUnit"/>
- <title>HUnit 1.0 User's Guide</title>
- </head>
- <body>
-
- <h1>HUnit 1.2 User's Guide</h1>
-
- <p>HUnit is a unit testing framework for Haskell, inspired by the JUnit tool for Java. This
- guide describes how to use HUnit, assuming you are familiar with Haskell, though not
- necessarily with JUnit. You can obtain HUnit, including this guide, at <a
- href="http://code.haskell.org/HUnit">http://code.haskell.org/HUnit</a>.</p>
-
- <h2>Introduction</h2>
-
- <p>A test-centered methodology for software development is most effective when tests are
- easy to create, change, and execute. The <a href="http://www.junit.org">JUnit</a> tool
- pioneered support for test-first development in <a href="http://java.sun.com">Java</a>.
- HUnit is an adaptation of JUnit to Haskell, a general-purpose, purely functional
- programming language. (To learn more about Haskell, see <a href="http://www.haskell.org"
- >http://www.haskell.org</a>.)</p>
-
- <p>With HUnit, as with JUnit, you can easily create tests, name them, group them into
- suites, and execute them, with the framework checking the results automatically. Test
- specification in HUnit is even more concise and flexible than in JUnit, thanks to the
- nature of the Haskell language. HUnit currently includes only a text-based test
- controller, but the framework is designed for easy extension. (Would anyone care to
- write a graphical test controller for HUnit?)</p>
-
- <p>The next section helps you get started using HUnit in simple ways. Subsequent sections
- give details on <a href="#WritingTests">writing tests</a> and <a href="#RunningTests"
- >running tests</a>. The document concludes with a section describing HUnit's <a
- href="#ConstituentFiles">constituent files</a> and a section giving <a
- href="#References">references</a> to further information.</p>
-
- <h2 id="GettingStarted">Getting Started</h2>
-
- <p>In the Haskell module where your tests will reside, import module <tt>Test.HUnit</tt>:</p>
- <pre>
- import Test.HUnit
-</pre>
- <p>Define test cases as appropriate:</p>
- <pre>
- test1 = TestCase (assertEqual "for (foo 3)," (1,2) (foo 3))
- test2 = TestCase (do (x,y) <- partA 3
- assertEqual "for the first result of partA," 5 x
- b <- partB y
- assertBool ("(partB " ++ show y ++ ") failed") b)
-</pre>
- <p>Name the test cases and group them together:</p>
- <pre>
- tests = TestList [TestLabel "test1" test1, TestLabel "test2" test2]
-</pre>
- <p>Run the tests as a group. At a Haskell interpreter prompt, apply the function
- <tt>runTestTT</tt> to the collected tests. (The "<tt>TT</tt>" suggests
- <strong>T</strong>ext orientation with output to the <strong>T</strong>erminal.)</p>
- <pre>
- > runTestTT tests
- Cases: 2 Tried: 2 Errors: 0 Failures: 0
- >
-</pre>
- <p>If the tests are proving their worth, you might see:</p>
- <pre>
- > runTestTT tests
- ### Failure in: 0:test1
- for (foo 3),
- expected: (1,2)
- but got: (1,3)
- Cases: 2 Tried: 2 Errors: 0 Failures: 1
- >
-</pre>
- <p>Isn't that easy?</p>
-
- <p>You can specify tests even more succinctly using operators and overloaded functions that
- HUnit provides:</p>
- <pre>
- tests = test [ "test1" ~: "(foo 3)" ~: (1,2) ~=? (foo 3),
- "test2" ~: do (x, y) <- partA 3
- assertEqual "for the first result of partA," 5 x
- partB y @? "(partB " ++ show y ++ ") failed" ]
-</pre>
- <p>Assuming the same test failures as before, you would see:</p>
- <pre>
- > runTestTT tests
- ### Failure in: 0:test1:(foo 3)
- expected: (1,2)
- but got: (1,3)
- Cases: 2 Tried: 2 Errors: 0 Failures: 1
- >
-</pre>
-
- <h2 id="WritingTests">Writing Tests</h2>
-
- <p>Tests are specified compositionally. <a href="#Assertions">Assertions</a> are combined to
- make a <a href="#TestCase">test case</a>, and test cases are combined into <a
- href="#Tests">tests</a>. HUnit also provides <a href="#AdvancedFeatures">advanced
- features</a> for more convenient test specification.</p>
-
- <h3 id="Assertions">Assertions</h3>
-
- <p>The basic building block of a test is an <b>assertion</b>.</p>
- <pre>
- type Assertion = IO ()
-</pre>
- <p>An assertion is an <tt>IO</tt> computation that always produces a void result. Why is an
- assertion an <tt>IO</tt> computation? So that programs with real-world side effects can
- be tested. How does an assertion assert anything if it produces no useful result? The
- answer is that an assertion can signal failure by calling <tt>assertFailure</tt>.</p>
- <pre>
- assertFailure :: String -> Assertion
- assertFailure msg = ioError (userError ("HUnit:" ++ msg))
-</pre>
- <p><tt>(assertFailure msg)</tt> raises an exception. The string argument identifies the
- failure. The failure message is prefixed by "<tt>HUnit:</tt>" to mark it as an HUnit
- assertion failure message. The HUnit test framework interprets such an exception as
- indicating failure of the test whose execution raised the exception. (Note: The details
- concerning the implementation of <tt>assertFailure</tt> are subject to change and should
- not be relied upon.)</p>
-
- <p><tt>assertFailure</tt> can be used directly, but it is much more common to use it
- indirectly through other assertion functions that conditionally assert failure.</p>
- <pre>
- assertBool :: String -> Bool -> Assertion
- assertBool msg b = unless b (assertFailure msg)
-
- assertString :: String -> Assertion
- assertString s = unless (null s) (assertFailure s)
-
- assertEqual :: (Eq a, Show a) => String -> a -> a -> Assertion
- assertEqual preface expected actual =
- unless (actual == expected) (assertFailure msg)
- where msg = (if null preface then "" else preface ++ "\n") ++
- "expected: " ++ show expected ++ "\n but got: " ++ show actual
-</pre>
- <p>With <tt>assertBool</tt> you give the assertion condition and failure message separately.
- With <tt>assertString</tt> the two are combined. With <tt>assertEqual</tt> you provide a
- "preface", an expected value, and an actual value; the failure message shows the two
- unequal values and is prefixed by the preface. Additional ways to create assertions are
- described later under <a href="#AdvancedFeatures">Advanced Features</a>.</p>
-
- <p>Since assertions are <tt>IO</tt> computations, they may be combined--along with other
- <tt>IO</tt> computations--using <tt>(>>=)</tt>, <tt>(>>)</tt>, and the <tt>do</tt>
- notation. As long as its result is of type <tt>(IO ())</tt>, such a combination
- constitutes a single, collective assertion, incorporating any number of constituent
- assertions. The important features of such a collective assertion are that it fails if
- any of its constituent assertions is executed and fails, and that the first constituent
- assertion to fail terminates execution of the collective assertion. Such behavior is
- essential to specifying a test case.</p>
-
- <h3 id="TestCase">Test Case</h3>
-
- <p>A <b>test case</b> is the unit of test execution. That is, distinct test cases are
- executed independently. The failure of one is independent of the failure of any other.</p>
-
- <p>A test case consists of a single, possibly collective, assertion. The possibly multiple
- constituent assertions in a test case's collective assertion are <b>not</b> independent.
- Their interdependence may be crucial to specifying correct operation for a test. A test
- case may involve a series of steps, each concluding in an assertion, where each step
- must succeed in order for the test case to continue. As another example, a test may
- require some "set up" to be performed that must be undone ("torn down" in JUnit
- parlance) once the test is complete. In this case, you could use Haskell's
- <tt>IO.bracket</tt> function to achieve the desired effect.</p>
-
- <p>You can make a test case from an assertion by applying the <tt>TestCase</tt> constructor.
- For example, <tt>(TestCase (return ()))</tt> is a test case that never
- fails, and
- <tt>(TestCase (assertEqual "for x," 3 x))</tt>
- is a test case that checks that the value of <tt>x</tt> is 3. Additional ways
- to create test cases are described later under <a href="#AdvancedFeatures">Advanced
- Features</a>.</p>
-
- <h3 id="Tests">Tests</h3>
-
- <p>As soon as you have more than one test, you'll want to name them to tell them apart. As
- soon as you have more than several tests, you'll want to group them to process them more
- easily. So, naming and grouping are the two keys to managing collections of tests.</p>
-
- <p>In tune with the "composite" design pattern [<a href="#DesignPatterns">1</a>], a
- <b>test</b> is defined as a package of test cases. Concretely, a test is either a single
- test case, a group of tests, or either of the first two identified by a label.</p>
- <pre>
- data Test = TestCase Assertion
- | TestList [Test]
- | TestLabel String Test
-</pre>
- <p>There are three important features of this definition to note:</p>
- <ul>
- <li>A <tt>TestList</tt> consists of a list of tests rather than a list of test cases.
- This means that the structure of a <tt>Test</tt> is actually a tree. Using a
- hierarchy helps organize tests just as it helps organize files in a file system.</li>
- <li>A <tt>TestLabel</tt> is attached to a test rather than to a test case. This means
- that all nodes in the test tree, not just test case (leaf) nodes, can be labeled.
- Hierarchical naming helps organize tests just as it helps organize files in a file
- system.</li>
- <li>A <tt>TestLabel</tt> is separate from both <tt>TestCase</tt> and <tt>TestList</tt>.
- This means that labeling is optional everywhere in the tree. Why is this a good
- thing? Because of the hierarchical structure of a test, each constituent test case
- is uniquely identified by its path in the tree, ignoring all labels. Sometimes a
- test case's path (or perhaps its subpath below a certain node) is a perfectly
- adequate "name" for the test case (perhaps relative to a certain node). In this
- case, creating a label for the test case is both unnecessary and inconvenient.</li>
- </ul>
- <p>The number of test cases that a test comprises can be computed with
- <tt>testCaseCount</tt>.</p>
- <pre>
- testCaseCount :: Test -> Int
-</pre>
- <p>As mentioned above, a test is identified by its <b>path</b> in the test hierarchy.</p>
- <pre>
- data Node = ListItem Int | Label String
- deriving (Eq, Show, Read)
-
- type Path = [Node] -- Node order is from test case to root.
-</pre>
- <p>Each occurrence of <tt>TestList</tt> gives rise to a <tt>ListItem</tt> and each
- occurrence of <tt>TestLabel</tt> gives rise to a <tt>Label</tt>. The <tt>ListItem</tt>s
- by themselves ensure uniqueness among test case paths, while the <tt>Label</tt>s allow
- you to add mnemonic names for individual test cases and collections of them.</p>
-
- <p>Note that the order of nodes in a path is reversed from what you might expect: The first
- node in the list is the one deepest in the tree. This order is a concession to
- efficiency: It allows common path prefixes to be shared.</p>
-
- <p>The paths of the test cases that a test comprises can be computed with
- <tt>testCasePaths</tt>. The paths are listed in the order in which the corresponding
- test cases would be executed.</p>
- <pre>
- testCasePaths :: Test -> [Path]
-</pre>
-
- <p>The three variants of <tt>Test</tt> can be constructed simply by applying
- <tt>TestCase</tt>, <tt>TestList</tt>, and <tt>TestLabel</tt> to appropriate arguments.
- Additional ways to create tests are described later under <a href="#AdvancedFeatures"
- >Advanced Features</a>.</p>
-
- <p>The design of the type <tt>Test</tt> provides great conciseness, flexibility, and
- convenience in specifying tests. Moreover, the nature of Haskell significantly augments
- these qualities:</p>
- <ul>
- <li>Combining assertions and other code to construct test cases is easy with the
- <tt>IO</tt> monad.</li>
- <li>Using overloaded functions and special operators (see below), specification of
- assertions and tests is extremely compact.</li>
- <li>Structuring a test tree by value, rather than by name as in JUnit, provides for more
- convenient, flexible, and robust test suite specification. In particular, a test
- suite can more easily be computed "on the fly" than in other test frameworks.</li>
- <li>Haskell's powerful abstraction facilities provide unmatched support for test
- refactoring.</li>
- </ul>
-
- <h3 id="AdvancedFeatures">Advanced Features</h3>
-
- <p>HUnit provides additional features for specifying assertions and tests more conveniently
- and concisely. These facilities make use of Haskell type classes.</p>
-
- <p>The following operators can be used to construct assertions.</p>
- <pre>
- infix 1 @?, @=?, @?=
-
- (@?) :: (AssertionPredicable t) => t -> String -> Assertion
- pred @? msg = assertionPredicate pred >>= assertBool msg
-
- (@=?) :: (Eq a, Show a) => a -> a -> Assertion
- expected @=? actual = assertEqual "" expected actual
-
- (@?=) :: (Eq a, Show a) => a -> a -> Assertion
- actual @?= expected = assertEqual "" expected actual
-</pre>
- <p>You provide a boolean condition and failure message separately to <tt>(@?)</tt>, as for
- <tt>assertBool</tt>, but in a different order. The <tt>(@=?)</tt> and <tt>(@?=)</tt>
- operators provide shorthands for <tt>assertEqual</tt> when no preface is required. They
- differ only in the order in which the expected and actual values are provided. (The
- actual value--the uncertain one--goes on the "?" side of the operator.)</p>
-
- <p>The <tt>(@?)</tt> operator's first argument is something from which an assertion
- predicate can be made, that is, its type must be <tt>AssertionPredicable</tt>.</p>
- <pre>
- type AssertionPredicate = IO Bool
-
- class AssertionPredicable t
- where assertionPredicate :: t -> AssertionPredicate
-
- instance AssertionPredicable Bool
- where assertionPredicate = return
-
- instance (AssertionPredicable t) => AssertionPredicable (IO t)
- where assertionPredicate = (>>= assertionPredicate)
-</pre>
- <p>The overloaded <tt>assert</tt> function in the <tt>Assertable</tt> type class constructs
- an assertion.</p>
- <pre>
- class Assertable t
- where assert :: t -> Assertion
-
- instance Assertable ()
- where assert = return
-
- instance Assertable Bool
- where assert = assertBool ""
-
- instance (ListAssertable t) => Assertable [t]
- where assert = listAssert
-
- instance (Assertable t) => Assertable (IO t)
- where assert = (>>= assert)
-</pre>
- <p>The <tt>ListAssertable</tt> class allows <tt>assert</tt> to be applied to <tt>[Char]</tt>
- (that is, <tt>String</tt>).</p>
- <pre>
- class ListAssertable t
- where listAssert :: [t] -> Assertion
-
- instance ListAssertable Char
- where listAssert = assertString
-</pre>
- <p>With the above declarations, <tt>(assert ())</tt>,
- <tt>(assert True)</tt>, and <tt>(assert "")</tt> (as well as
- <tt>IO</tt> forms of these values, such as <tt>(return ())</tt>) are all
- assertions that never fail, while <tt>(assert False)</tt> and
- <tt>(assert "some failure message")</tt> (and their
- <tt>IO</tt> forms) are assertions that always fail. You may define additional
- instances for the type classes <tt>Assertable</tt>, <tt>ListAssertable</tt>, and
- <tt>AssertionPredicable</tt> if that should be useful in your application.</p>
-
- <p>The overloaded <tt>test</tt> function in the <tt>Testable</tt> type class constructs a
- test.</p>
- <pre>
- class Testable t
- where test :: t -> Test
-
- instance Testable Test
- where test = id
-
- instance (Assertable t) => Testable (IO t)
- where test = TestCase . assert
-
- instance (Testable t) => Testable [t]
- where test = TestList . map test
-</pre>
- <p>The <tt>test</tt> function makes a test from either an <tt>Assertion</tt> (using
- <tt>TestCase</tt>), a list of <tt>Testable</tt> items (using <tt>TestList</tt>), or
- a <tt>Test</tt> (making no change).</p>
-
- <p>The following operators can be used to construct tests.</p>
- <pre>
- infix 1 ~?, ~=?, ~?=
- infixr 0 ~:
-
- (~?) :: (AssertionPredicable t) => t -> String -> Test
- pred ~? msg = TestCase (pred @? msg)
-
- (~=?) :: (Eq a, Show a) => a -> a -> Test
- expected ~=? actual = TestCase (expected @=? actual)
-
- (~?=) :: (Eq a, Show a) => a -> a -> Test
- actual ~?= expected = TestCase (actual @?= expected)
-
- (~:) :: (Testable t) => String -> t -> Test
- label ~: t = TestLabel label (test t)
-</pre>
- <p><tt>(~?)</tt>, <tt>(~=?)</tt>, and <tt>(~?=)</tt> each make an assertion, as for
- <tt>(@?)</tt>, <tt>(@=?)</tt>, and <tt>(@?=)</tt>, respectively, and then a test case
- from that assertion. <tt>(~:)</tt> attaches a label to something that is
- <tt>Testable</tt>. You may define additional instances for the type class
- <tt>Testable</tt> should that be useful.</p>
-
- <h2 id="RunningTests">Running Tests</h2>
-
- <p>HUnit is structured to support multiple test controllers. The first subsection below
- describes the <a href="#TestExecution">test execution</a> characteristics common to all
- test controllers. The second subsection describes the <a href="#Text-BasedController"
- >text-based controller</a> that is included with HUnit.</p>
-
- <h3 id="TestExecution">Test Execution</h3>
-
- <p>All test controllers share a common test execution model. They differ only in how the
- results of test execution are shown.</p>
-
- <p>The execution of a test (a value of type <tt>Test</tt>) involves the serial execution (in
- the <tt>IO</tt> monad) of its constituent test cases. The test cases are executed in a
- depth-first, left-to-right order. During test execution, four counts of test cases are
- maintained:</p>
- <pre>
- data Counts = Counts { cases, tried, errors, failures :: Int }
- deriving (Eq, Show, Read)
-</pre>
- <ul>
- <li><tt>cases</tt> is the number of test cases included in the test. This number is a
- static property of a test and remains unchanged during test execution.</li>
- <li><tt>tried</tt> is the number of test cases that have been executed so far during the
- test execution.</li>
- <li><tt>errors</tt> is the number of test cases whose execution ended with an unexpected
- exception being raised. Errors indicate problems with test cases, as opposed to the
- code under test.</li>
- <li><tt>failures</tt> is the number of test cases whose execution asserted failure.
- Failures indicate problems with the code under test.</li>
- </ul>
- <p>Why is there no count for test case successes? The technical reason is that the counts
- are maintained such that the number of test case successes is always equal to
- <tt>(tried - (errors + failures))</tt>. The
- psychosocial reason is that, with test-centered development and the expectation that
- test failures will be few and short-lived, attention should be focused on the failures
- rather than the successes.</p>
-
- <p>As test execution proceeds, three kinds of reporting event are communicated to the test
- controller. (What the controller does in response to the reporting events depends on the
- controller.)</p>
- <ul>
- <li><i>start</i> -- Just prior to initiation of a test case, the path of the test case
- and the current counts (excluding the current test case) are reported.</li>
- <li><i>error</i> -- When a test case terminates with an error, the error message is
- reported, along with the test case path and current counts (including the current
- test case).</li>
- <li><i>failure</i> -- When a test case terminates with a failure, the failure message is
- reported, along with the test case path and current counts (including the current
- test case).</li>
- </ul>
- <p>Typically, a test controller shows <i>error</i> and <i>failure</i> reports immediately
- but uses the <i>start</i> report merely to update an indication of overall test
- execution progress.</p>
-
- <h3 id="Text-BasedController">Text-Based Controller</h3>
-
- <p>A text-based test controller is included with HUnit.</p>
- <pre>
- runTestText :: PutText st -> Test -> IO (Counts, st)
-</pre>
- <p><tt>runTestText</tt> is generalized on a <i>reporting scheme</i> given as its first
- argument. During execution of the test given as its second argument, the controller
- creates a string for each reporting event and processes it according to the reporting
- scheme. When test execution is complete, the controller returns the final counts along
- with the final state for the reporting scheme.</p>
-
- <p>The strings for the three kinds of reporting event are as follows.</p>
- <ul>
- <li>A <i>start</i> report is the result of the function <tt>showCounts</tt> applied to
- the counts current immediately prior to initiation of the test case being started.</li>
- <li>An <i>error</i> report is of the form
- "<tt>Error in: <i>path</i>\n<i>message</i></tt>",
- where <i>path</i> is the path of the test case in error, as shown by
- <tt>showPath</tt>, and <i>message</i> is a message describing the error. If the path
- is empty, the report has the form "<tt>Error:\n<i>message</i></tt>".</li>
- <li>A <i>failure</i> report is of the form
- "<tt>Failure in: <i>path</i>\n<i>message</i></tt>", where
- <i>path</i> is the path of the test case in error, as shown by
- <tt>showPath</tt>, and <i>message</i> is the failure message. If the path is empty,
- the report has the form "<tt>Failure:\n<i>message</i></tt>".</li>
- </ul>
-
- <p>The function <tt>showCounts</tt> shows a set of counts.</p>
- <pre>
- showCounts :: Counts -> String
-</pre>
- <p>The form of its result is
- "<tt>Cases: <i>cases</i> Tried: <i>tried</i> Errors: <i>errors</i> Failures: <i>failures</i></tt>"
- where <i>cases</i>, <i>tried</i>, <i>errors</i>, and <i>failures</i> are the count
- values.</p>
-
- <p>The function <tt>showPath</tt> shows a test case path.</p>
- <pre>
- showPath :: Path -> String
-</pre>
- <p>The nodes in the path are reversed (so that the path reads from the root down to the test
- case), and the representations for the nodes are joined by '<tt>:</tt>' separators. The
- representation for <tt>(ListItem <i>n</i>)</tt> is <tt>(show n)</tt>. The representation
- for <tt>(Label <i>label</i>)</tt> is normally <i>label</i>. However, if <i>label</i>
- contains a colon or if <tt>(show <i>label</i>)</tt> is different from <i>label</i>
- surrounded by quotation marks--that is, if any ambiguity could exist--then <tt>(Label
- <i>label</i>)</tt> is represented as <tt>(show <i>label</i>)</tt>.</p>
-
- <p>HUnit includes two reporting schemes for the text-based test controller. You may define
- others if you wish.</p>
- <pre>
- putTextToHandle :: Handle -> Bool -> PutText Int
-</pre>
- <p><tt>putTextToHandle</tt> writes error and failure reports, plus a report of the final
- counts, to the given handle. Each of these reports is terminated by a newline. In
- addition, if the given flag is <tt>True</tt>, it writes start reports to the handle as
- well. A start report, however, is not terminated by a newline. Before the next report is
- written, the start report is "erased" with an appropriate sequence of carriage return
- and space characters. Such overwriting realizes its intended effect on terminal devices.</p>
- <pre>
- putTextToShowS :: PutText ShowS
-</pre>
- <p><tt>putTextToShowS</tt> ignores start reports and simply accumulates error and failure
- reports, terminating them with newlines. The accumulated reports are returned (as the
- second element of the pair returned by <tt>runTestText</tt>) as a <tt>ShowS</tt>
- function (that is, one with type <tt>(String -> String)</tt>) whose
- first argument is a string to be appended to the accumulated report lines.</p>
-
- <p>HUnit provides a shorthand for the most common use of the text-based test controller.</p>
- <pre>
- runTestTT :: Test -> IO Counts
-</pre>
- <p><tt>runTestTT</tt> invokes <tt>runTestText</tt>, specifying <tt>(putTextToHandle stderr
- True)</tt> for the reporting scheme, and returns the final counts from the test
- execution.</p>
-
-
- <h2 id="References">References</h2>
-
- <dl>
-
- <dt id="DesignPatterns">[1] Gamma, E., et al. Design Patterns: Elements of Reusable
- Object-Oriented Software, Addison-Wesley, Reading, MA, 1995.</dt>
- <dd>The classic book describing design patterns in an object-oriented context.</dd>
-
- <dt>
- <a href="http://www.junit.org">http://www.junit.org</a>
- </dt>
- <dd>Web page for JUnit, the tool after which HUnit is modeled.</dd>
-
- <dt>
- <a href="http://junit.sourceforge.net/doc/testinfected/testing.htm">
- http://junit.sourceforge.net/doc/testinfected/testing.htm</a>
- </dt>
- <dd>A good introduction to test-first development and the use of JUnit.</dd>
-
- <dt>
- <a href="http://junit.sourceforge.net/doc/cookstour/cookstour.htm">
- http://junit.sourceforge.net/doc/cookstour/cookstour.htm</a>
- </dt>
- <dd>A description of the internal structure of JUnit. Makes for an interesting
- comparison between JUnit and HUnit.</dd>
-
- </dl>
-
- <hr/>
-
- <p>The HUnit software and this guide were written by Dean Herington (<a
- href="mailto:heringto@cs.unc.edu">heringto(a)cs.unc.edu</a>).</p>
- </body>
-</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HUnit-1.3.1.0/examples/Example.hs new/HUnit-1.3.1.1/examples/Example.hs
--- old/HUnit-1.3.1.0/examples/Example.hs 2016-01-11 10:04:20.000000000 +0100
+++ new/HUnit-1.3.1.1/examples/Example.hs 2016-01-19 17:16:50.000000000 +0100
@@ -1,9 +1,9 @@
-- Example.hs -- Examples from HUnit user's guide
--
-- For more examples, check out the tests directory. It contains unit tests
--- for HUnit.
+-- for HUnit.
-module Main where
+module Example where
import Test.HUnit
@@ -36,5 +36,5 @@
partB y @? "(partB " ++ show y ++ ") failed" ]
main :: IO Counts
-main = do runTestTT tests
+main = do _ <- runTestTT tests
runTestTT tests'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HUnit-1.3.1.0/prologue.txt new/HUnit-1.3.1.1/prologue.txt
--- old/HUnit-1.3.1.0/prologue.txt 2016-01-11 10:04:20.000000000 +0100
+++ new/HUnit-1.3.1.1/prologue.txt 1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-HUnit is a unit testing framework for Haskell, inspired by the JUnit
-tool for Java, see: <http://www.junit.org>.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HUnit-1.3.1.0/tests/HUnitTests.hs new/HUnit-1.3.1.1/tests/HUnitTests.hs
--- old/HUnit-1.3.1.0/tests/HUnitTests.hs 2016-01-11 10:04:20.000000000 +0100
+++ new/HUnit-1.3.1.1/tests/HUnitTests.hs 2016-01-19 17:16:50.000000000 +0100
@@ -10,6 +10,7 @@
import HUnitTestBase
import HUnitTestExtended
import TerminalTest
+import Example ()
main :: IO ()
main = do
1
0
Hello community,
here is the log from the commit of package ghc-http2 for openSUSE:Factory checked in at 2016-01-28 17:23:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-http2 (Old)
and /work/SRC/openSUSE:Factory/.ghc-http2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-http2"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-http2/ghc-http2.changes 2016-01-07 00:25:22.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-http2.new/ghc-http2.changes 2016-01-28 17:24:44.000000000 +0100
@@ -1,0 +2,18 @@
+Fri Jan 22 10:05:24 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 1.4.4
+* Fixing a bug of reverse index.
+
+-------------------------------------------------------------------
+Wed Jan 20 09:47:10 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 1.4.3
+* Using proper baseDeficit for deletion.
+* Test files are now self-contained.
+* The reverse indices for static and dynamic are combined for performance.
+* Providing dequeueSTM, isEmpty and isEmptySTM. Users can compose their own control
+ queue with dequeueSTM and isEmptySTM.
+* Removing enqueueControl: it appeared that PriorityTree is not suitable for
+ control frames.
+
+-------------------------------------------------------------------
Old:
----
http2-1.3.1.tar.gz
New:
----
http2-1.4.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-http2.spec ++++++
--- /var/tmp/diff_new_pack.u08V0N/_old 2016-01-28 17:24:45.000000000 +0100
+++ /var/tmp/diff_new_pack.u08V0N/_new 2016-01-28 17:24:45.000000000 +0100
@@ -20,7 +20,7 @@
%bcond_with tests
Name: ghc-http2
-Version: 1.3.1
+Version: 1.4.4
Release: 0
Summary: HTTP/2.0 library including frames and HPACK
Group: System/Libraries
++++++ http2-1.3.1.tar.gz -> http2-1.4.4.tar.gz ++++++
++++ 1522626 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package ghc-http-client for openSUSE:Factory checked in at 2016-01-28 17:23:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-http-client (Old)
and /work/SRC/openSUSE:Factory/.ghc-http-client.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-http-client"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-http-client/ghc-http-client.changes 2015-12-29 12:59:57.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-http-client.new/ghc-http-client.changes 2016-01-28 17:24:43.000000000 +0100
@@ -1,0 +2,6 @@
+Fri Jan 22 08:59:09 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.4.27
+* Enable managerModifyRequest to modify checkStatus
+
+-------------------------------------------------------------------
Old:
----
http-client-0.4.26.2.tar.gz
New:
----
http-client-0.4.27.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-http-client.spec ++++++
--- /var/tmp/diff_new_pack.HZxxgF/_old 2016-01-28 17:24:44.000000000 +0100
+++ /var/tmp/diff_new_pack.HZxxgF/_new 2016-01-28 17:24:44.000000000 +0100
@@ -21,7 +21,7 @@
%bcond_with tests
Name: ghc-http-client
-Version: 0.4.26.2
+Version: 0.4.27
Release: 0
Summary: HTTP client engine, intended as a base layer
License: MIT
++++++ http-client-0.4.26.2.tar.gz -> http-client-0.4.27.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.4.26.2/ChangeLog.md new/http-client-0.4.27/ChangeLog.md
--- old/http-client-0.4.26.2/ChangeLog.md 2015-12-22 18:46:34.000000000 +0100
+++ new/http-client-0.4.27/ChangeLog.md 2016-01-21 08:59:31.000000000 +0100
@@ -1,3 +1,7 @@
+## 0.4.27
+
+* Enable managerModifyRequest to modify checkStatus [#179](https://github.com/snoyberg/http-client/pull/179)
+
## 0.4.26.2
* Fix compilation for GHC 7.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.4.26.2/Network/HTTP/Client/Core.hs new/http-client-0.4.27/Network/HTTP/Client/Core.hs
--- old/http-client-0.4.26.2/Network/HTTP/Client/Core.hs 2015-12-22 18:46:34.000000000 +0100
+++ new/http-client-0.4.27/Network/HTTP/Client/Core.hs 2016-01-21 08:59:31.000000000 +0100
@@ -6,10 +6,12 @@
, httpLbs
, httpNoBody
, httpRaw
+ , httpRaw'
, responseOpen
, responseClose
, applyCheckStatus
, httpRedirect
+ , httpRedirect'
) where
#if !MIN_VERSION_base(4,6,0)
@@ -22,6 +24,7 @@
import Network.HTTP.Client.Request
import Network.HTTP.Client.Response
import Network.HTTP.Client.Cookies
+import Data.Maybe (fromMaybe, isJust)
import Data.Time
import Control.Exception
import qualified Data.ByteString as S
@@ -69,12 +72,22 @@
httpNoBody :: Request -> Manager -> IO (Response ())
httpNoBody req man = withResponse req man $ return . void
+
-- | Get a 'Response' without any redirect following.
httpRaw
:: Request
-> Manager
-> IO (Response BodyReader)
-httpRaw req0 m = do
+httpRaw = fmap (fmap snd) . httpRaw'
+
+-- | Get a 'Response' without any redirect following.
+--
+-- This extended version of 'httpRaw' also returns the Request potentially modified by @managerModifyRequest@.
+httpRaw'
+ :: Request
+ -> Manager
+ -> IO (Request, Response BodyReader)
+httpRaw' req0 m = do
req' <- mModifyRequest m $ mSetProxy m req0
(req, cookie_jar') <- case cookieJar req' of
Just cj -> do
@@ -100,7 +113,8 @@
-- Connection was reused, and might have been closed. Try again
(Left e, Reused) | mRetryableException m e -> do
connRelease DontReuse
- responseOpen req m
+ res <- responseOpen req m
+ return (req, res)
-- Not reused, or a non-retry, so this is a real exception
(Left e, _) -> throwIO e
-- Everything went ok, so the connection is good. If any exceptions get
@@ -109,8 +123,8 @@
Just _ -> do
now' <- getCurrentTime
let (cookie_jar, _) = updateCookieJar res req now' cookie_jar'
- return $ res {responseCookieJar = cookie_jar}
- Nothing -> return res
+ return (req, res {responseCookieJar = cookie_jar})
+ Nothing -> return (req, res)
where
responseTimeout' req
@@ -150,21 +164,21 @@
-- Since 0.1.0
responseOpen :: Request -> Manager -> IO (Response BodyReader)
responseOpen req0 manager = handle addTlsHostPort $ mWrapIOException manager $ do
- res <-
+ (req, res) <-
if redirectCount req0 == 0
- then httpRaw req0 manager
+ then httpRaw' req0 manager
else go (redirectCount req0) req0
- maybe (return res) throwIO =<< applyCheckStatus req0 (checkStatus req0) res
+ maybe (return res) throwIO =<< applyCheckStatus req (checkStatus req) res
where
addTlsHostPort (TlsException e) = throwIO $ TlsExceptionHostPort e (host req0) (port req0)
addTlsHostPort e = throwIO e
- go count req' = httpRedirect
+ go count req' = httpRedirect'
count
(\req -> do
- res <- httpRaw req manager
- let mreq = getRedirectedRequest req (responseHeaders res) (responseCookieJar res) (statusCode (responseStatus res))
- return (res, mreq))
+ (req'', res) <- httpRaw' req manager
+ let mreq = getRedirectedRequest req'' (responseHeaders res) (responseCookieJar res) (statusCode (responseStatus res))
+ return (res, fromMaybe req'' mreq, isJust mreq))
req'
-- | Apply 'Request'\'s 'checkStatus' and return resulting exception if any.
@@ -202,34 +216,49 @@
toStrict' = S.concat . L.toChunks
#endif
--- | Redirect loop
+-- | Redirect loop.
httpRedirect
:: Int -- ^ 'redirectCount'
-> (Request -> IO (Response BodyReader, Maybe Request)) -- ^ function which performs a request and returns a response, and possibly another request if there's a redirect.
-> Request
-> IO (Response BodyReader)
-httpRedirect count0 http' req0 = go count0 req0 []
+httpRedirect count0 http0 req0 = fmap snd $ httpRedirect' count0 http' req0
+ where
+ -- adapt callback API
+ http' req' = do
+ (res, mbReq) <- http0 req'
+ return (res, fromMaybe req0 mbReq, isJust mbReq)
+
+-- | Redirect loop.
+--
+-- This extended version of 'httpRaw' also returns the Request potentially modified by @managerModifyRequest@.
+httpRedirect'
+ :: Int -- ^ 'redirectCount'
+ -> (Request -> IO (Response BodyReader, Request, Bool)) -- ^ function which performs a request and returns a response, the potentially modified request, and a Bool indicating if there was a redirect.
+ -> Request
+ -> IO (Request, Response BodyReader)
+httpRedirect' count0 http' req0 = go count0 req0 []
where
go count _ ress | count < 0 = throwIO $ TooManyRedirects ress
go count req' ress = do
- (res, mreq) <- http' req'
- case mreq of
- Just req -> do
- -- Allow the original connection to return to the
- -- connection pool immediately by flushing the body.
- -- If the response body is too large, don't flush, but
- -- instead just close the connection.
- let maxFlush = 1024
- lbs <- brReadSome (responseBody res) maxFlush
- -- The connection may already be closed, e.g.
- -- when using withResponseHistory. See
- -- https://github.com/snoyberg/http-client/issues/169
- `catch` \(_ :: ConnectionClosed) -> return L.empty
- responseClose res
-
- -- And now perform the actual redirect
- go (count - 1) req (res { responseBody = lbs }:ress)
- Nothing -> return res
+ (res, req, isRedirect) <- http' req'
+ if isRedirect then do
+ -- Allow the original connection to return to the
+ -- connection pool immediately by flushing the body.
+ -- If the response body is too large, don't flush, but
+ -- instead just close the connection.
+ let maxFlush = 1024
+ lbs <- brReadSome (responseBody res) maxFlush
+ -- The connection may already be closed, e.g.
+ -- when using withResponseHistory. See
+ -- https://github.com/snoyberg/http-client/issues/169
+ `catch` \(_ :: ConnectionClosed) -> return L.empty
+ responseClose res
+
+ -- And now perform the actual redirect
+ go (count - 1) req (res { responseBody = lbs }:ress)
+ else
+ return (req, res)
-- | Close any open resources associated with the given @Response@. In general,
-- this will either close an active @Connection@ or return it to the @Manager@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.4.26.2/Network/HTTP/Client.hs new/http-client-0.4.27/Network/HTTP/Client.hs
--- old/http-client-0.4.26.2/Network/HTTP/Client.hs 2015-12-22 18:46:34.000000000 +0100
+++ new/http-client-0.4.27/Network/HTTP/Client.hs 2016-01-21 08:59:31.000000000 +0100
@@ -215,19 +215,19 @@
reqRef <- newIORef req0
historyRef <- newIORef id
let go req = do
- res <- httpRaw req man
+ (req', res) <- httpRaw' req man
case getRedirectedRequest
- req
+ req'
(responseHeaders res)
(responseCookieJar res)
(statusCode $ responseStatus res) of
- Nothing -> return (res, Nothing)
- Just req' -> do
- writeIORef reqRef req'
+ Nothing -> return (res, req', False)
+ Just req'' -> do
+ writeIORef reqRef req''
body <- brReadSome (responseBody res) 1024
modifyIORef historyRef (. ((req, res { responseBody = body }):))
- return (res, Just req')
- res <- httpRedirect (redirectCount req0) go req0
+ return (res, req'', True)
+ (_, res) <- httpRedirect' (redirectCount req0) go req0
reqFinal <- readIORef reqRef
history <- readIORef historyRef
return HistoriedResponse
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.4.26.2/http-client.cabal new/http-client-0.4.27/http-client.cabal
--- old/http-client-0.4.26.2/http-client.cabal 2015-12-22 18:46:34.000000000 +0100
+++ new/http-client-0.4.27/http-client.cabal 2016-01-21 08:59:31.000000000 +0100
@@ -1,5 +1,5 @@
name: http-client
-version: 0.4.26.2
+version: 0.4.27
synopsis: An HTTP client engine, intended as a base layer for more user-friendly packages.
description: Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/http-client>.
homepage: https://github.com/snoyberg/http-client
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.4.26.2/test/Network/HTTP/ClientSpec.hs new/http-client-0.4.27/test/Network/HTTP/ClientSpec.hs
--- old/http-client-0.4.26.2/test/Network/HTTP/ClientSpec.hs 2015-12-22 18:46:34.000000000 +0100
+++ new/http-client-0.4.27/test/Network/HTTP/ClientSpec.hs 2016-01-21 08:59:31.000000000 +0100
@@ -1,6 +1,7 @@
{-# LANGUAGE OverloadedStrings #-}
module Network.HTTP.ClientSpec where
+import Control.Exception (toException)
import Network (withSocketsDo)
import Network.HTTP.Client
import Network.HTTP.Types (status200)
@@ -24,3 +25,9 @@
withManager settings $ \man -> do
res <- httpLbs "http://httpbin.org:1234" man
responseStatus res `shouldBe` status200
+
+ it "managerModifyRequestCheckStatus" $ do
+ let modify req = return req { checkStatus = \s hs cj -> Just $ toException $ StatusCodeException s hs cj }
+ settings = defaultManagerSettings { managerModifyRequest = modify }
+ withManager settings $ \man ->
+ httpLbs "http://httpbin.org" man `shouldThrow` anyException
1
0
Hello community,
here is the log from the commit of package ghc-HTTP for openSUSE:Factory checked in at 2016-01-28 17:23:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-HTTP (Old)
and /work/SRC/openSUSE:Factory/.ghc-HTTP.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-HTTP"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-HTTP/ghc-HTTP.changes 2016-01-08 15:23:02.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-HTTP.new/ghc-HTTP.changes 2016-01-28 17:24:42.000000000 +0100
@@ -1,0 +2,19 @@
+Sun Jan 24 10:04:26 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 4000.3.2
+* If the URI contains "user:pass@" part, use it for Basic Authorization
+* Add a test harness.
+* Don't leak a socket when getHostAddr throws an exception.
+* Send cookies in request format, not response format.
+* Moved BrowserAction to be a StateT IO, with instances for
+ Applicative, MonadIO, MonadState.
+* Add method to control size of connection pool.
+* Consider both host and port when reusing connections.
+* Handle response code 304 "not modified" properly.
+* Fix digest authentication by fixing md5 output string rep.
+* Make the default user agent string follow the package version.
+* Document lack of HTTPS support and fail when clients try
+ to use it instead of silently falling back to HTTP.
+* Add helper to set the request type and body.
+
+-------------------------------------------------------------------
Old:
----
HTTP-4000.2.23.tar.gz
New:
----
HTTP-4000.3.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-HTTP.spec ++++++
--- /var/tmp/diff_new_pack.GyTEkh/_old 2016-01-28 17:24:43.000000000 +0100
+++ /var/tmp/diff_new_pack.GyTEkh/_new 2016-01-28 17:24:43.000000000 +0100
@@ -19,7 +19,7 @@
%global pkg_name HTTP
Name: ghc-HTTP
-Version: 4000.2.23
+Version: 4000.3.2
Release: 0
Summary: A library for client-side HTTP
License: BSD-3-Clause
@@ -37,7 +37,7 @@
BuildRequires: ghc-mtl-devel
BuildRequires: ghc-network-devel
BuildRequires: ghc-network-uri-devel
-BuildRequires: ghc-old-time-devel
+BuildRequires: ghc-time-devel
BuildRequires: ghc-parsec-devel
# End cabal-rpm deps
++++++ HTTP-4000.2.23.tar.gz -> HTTP-4000.3.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-4000.2.23/HTTP.cabal new/HTTP-4000.3.2/HTTP.cabal
--- old/HTTP-4000.2.23/HTTP.cabal 2015-12-31 23:33:18.000000000 +0100
+++ new/HTTP-4000.3.2/HTTP.cabal 2016-01-16 09:57:23.000000000 +0100
@@ -1,5 +1,5 @@
Name: HTTP
-Version: 4000.2.23
+Version: 4000.3.2
Cabal-Version: >= 1.8
Build-type: Simple
License: BSD3
@@ -99,7 +99,8 @@
-- note the test harness constraints should be kept in sync with these
-- where dependencies are shared
Build-depends: base >= 4.3.0.0 && < 4.9, parsec >= 2.0 && < 3.2
- Build-depends: array >= 0.3.0.2 && < 0.6, old-time >= 1.0.0.0 && < 1.2, bytestring >= 0.9.1.5 && < 0.11
+ Build-depends: array >= 0.3.0.2 && < 0.6, bytestring >= 0.9.1.5 && < 0.11
+ Build-depends: time >= 1.1.2.3 && < 1.7
Extensions: FlexibleInstances
@@ -114,8 +115,6 @@
else
Build-depends: network >= 2.2.1.8 && < 2.6
- build-tools: ghc >= 7.0 && < 7.12
-
if flag(warn-as-error)
ghc-options: -Werror
@@ -125,8 +124,6 @@
Test-Suite test
type: exitcode-stdio-1.0
- build-tools: ghc >= 7.0 && < 7.12
-
hs-source-dirs: test
main-is: httpTests.hs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-4000.2.23/Network/Browser.hs new/HTTP-4000.3.2/Network/Browser.hs
--- old/HTTP-4000.2.23/Network/Browser.hs 2015-12-31 23:33:18.000000000 +0100
+++ new/HTTP-4000.3.2/Network/Browser.hs 2016-01-16 09:57:23.000000000 +0100
@@ -149,7 +149,7 @@
( hSetBuffering, hPutStr, stdout, stdin, hGetChar
, BufferMode(NoBuffering, LineBuffering)
)
-import System.Time ( ClockTime, getClockTime )
+import Data.Time.Clock ( UTCTime, getCurrentTime )
------------------------------------------------------------------
@@ -638,7 +638,7 @@
-- at which they occurred.
data BrowserEvent
= BrowserEvent
- { browserTimestamp :: ClockTime
+ { browserTimestamp :: UTCTime
, browserRequestID :: RequestID
, browserRequestURI :: {-URI-}String
, browserEventType :: BrowserEventType
@@ -668,7 +668,7 @@
buildBrowserEvent :: BrowserEventType -> {-URI-}String -> RequestID -> IO BrowserEvent
buildBrowserEvent bt uri reqID = do
- ct <- getClockTime
+ ct <- getCurrentTime
return BrowserEvent
{ browserTimestamp = ct
, browserRequestID = reqID
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/HTTP-4000.2.23/Network/TCP.hs new/HTTP-4000.3.2/Network/TCP.hs
--- old/HTTP-4000.2.23/Network/TCP.hs 2015-12-31 23:33:18.000000000 +0100
+++ new/HTTP-4000.3.2/Network/TCP.hs 2016-01-16 09:57:23.000000000 +0100
@@ -306,14 +306,7 @@
-- and that the connection peer matches the given
-- host name (which is recorded locally).
isConnectedTo :: Connection -> EndPoint -> IO Bool
-isConnectedTo (Connection conn) endPoint = do
- v <- readMVar (getRef conn)
- case v of
- ConnClosed -> print "aa" >> return False
- _
- | connEndPoint v == endPoint ->
- catchIO (getPeerName (connSock v) >> return True) (const $ return False)
- | otherwise -> return False
+isConnectedTo (Connection conn) endPoint = isTCPConnectedTo conn endPoint
isTCPConnectedTo :: HandleStream ty -> EndPoint -> IO Bool
isTCPConnectedTo conn endPoint = do
1
0
Hello community,
here is the log from the commit of package clinfo for openSUSE:Factory checked in at 2016-01-28 17:23:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/clinfo (Old)
and /work/SRC/openSUSE:Factory/.clinfo.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "clinfo"
Changes:
--------
--- /work/SRC/openSUSE:Factory/clinfo/clinfo.changes 2016-01-08 15:23:46.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.clinfo.new/clinfo.changes 2016-01-28 17:24:41.000000000 +0100
@@ -1,0 +2,6 @@
+Tue Jan 26 08:44:01 UTC 2016 - mpluskal(a)suse.com
+
+- Update to 2.1.16.01.12
+ * no upstream changelog provided
+
+-------------------------------------------------------------------
Old:
----
clinfo-2.1.16.01.06.tar.gz
New:
----
clinfo-2.1.16.01.12.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ clinfo.spec ++++++
--- /var/tmp/diff_new_pack.63rQk2/_old 2016-01-28 17:24:42.000000000 +0100
+++ /var/tmp/diff_new_pack.63rQk2/_new 2016-01-28 17:24:42.000000000 +0100
@@ -18,7 +18,7 @@
Name: clinfo
-Version: 2.1.16.01.06
+Version: 2.1.16.01.12
Release: 0
Summary: It reports status information for all installed OpenCL ICDs
License: SUSE-Public-Domain
@@ -45,15 +45,13 @@
make %{?_smp_mflags}
%install
-mkdir -p %{buildroot}/%{_bindir}
-mkdir -p %{buildroot}/%{_mandir}/man1/
-install -pm 0755 clinfo %{buildroot}/%{_bindir}
-install -pm 0644 man/clinfo.1 %{buildroot}/%{_mandir}/man1
+install -D -p -m 0755 clinfo %{buildroot}%{_bindir}/clinfo
+install -D -p -m 0644 man/clinfo.1 %{buildroot}%{_mandir}/man1/clinfo.1
%files
%defattr (-,root,root)
%doc LICENSE README
%{_bindir}/clinfo
-%{_mandir}/man1/clinfo.1.*
+%{_mandir}/man1/clinfo.1%{ext_man}
%changelog
++++++ clinfo-2.1.16.01.06.tar.gz -> clinfo-2.1.16.01.12.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clinfo-2.1.16.01.06/man/clinfo.1 new/clinfo-2.1.16.01.12/man/clinfo.1
--- old/clinfo-2.1.16.01.06/man/clinfo.1 2016-01-06 12:07:55.000000000 +0100
+++ new/clinfo-2.1.16.01.12/man/clinfo.1 2016-01-12 11:51:23.000000000 +0100
@@ -1,4 +1,4 @@
-.TH CLINFO 1 "2016-01-06" "clinfo 2.1.16.01.06"
+.TH CLINFO 1 "2016-01-12" "clinfo 2.1.16.01.12"
.SH NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clinfo-2.1.16.01.06/src/clinfo.c new/clinfo-2.1.16.01.12/src/clinfo.c
--- old/clinfo-2.1.16.01.06/src/clinfo.c 2016-01-06 12:07:55.000000000 +0100
+++ new/clinfo-2.1.16.01.12/src/clinfo.c 2016-01-12 11:51:23.000000000 +0100
@@ -880,8 +880,9 @@
time_t time = val/UINT64_C(1000000000);
szval += snprintf(strbuf, bufsz, "%" PRIu64 "ns (", val);
szval += bufcpy(szval, ctime(&time));
+ /* overwrite ctime's newline with the closing parenthesis */
if (szval < bufsz)
- strbuf[szval] = ')';
+ strbuf[szval - 1] = ')';
}
show_strbuf(pname, 0);
return had_error;
@@ -2483,6 +2484,8 @@
const char *pname; // "ICD loader *"
};
+static const char * const oclicdl_pfx = "OCLICD";
+
#define LINFO(symbol, name) { symbol, #symbol, "ICD loader " name }
struct icdl_info_traits linfo_traits[] = {
LINFO(CL_ICDL_NAME, "Name"),
@@ -2541,9 +2544,18 @@
#endif
if (clGetICDLoaderInfoOCLICD != NULL) {
- puts("\nICD loader properties");
+ /* TODO think of a sensible header in CLINFO_RAW */
+ if (output_mode != CLINFO_RAW)
+ puts("\nICD loader properties");
current_function = __func__;
+ if (output_mode == CLINFO_RAW) {
+ line_pfx_len = strlen(oclicdl_pfx) + 5;
+ REALLOC(line_pfx, line_pfx_len, "line prefix OCL ICD");
+ sprintf(strbuf, "[%s/*]", oclicdl_pfx);
+ sprintf(line_pfx, "%*s", -line_pfx_len, strbuf);
+ }
+
for (current_line = 0; current_line < ARRAY_SIZE(linfo_traits); ++current_line) {
const struct icdl_info_traits *traits = linfo_traits + current_line;
current_param = traits->sname;
@@ -2586,7 +2598,7 @@
void version(void)
{
- puts("clinfo version 2.1.16.01.06");
+ puts("clinfo version 2.1.16.01.12");
}
void usage(void)
@@ -2674,7 +2686,8 @@
listPlatformsAndDevices(show_offline);
} else {
showDevices(show_offline);
- checkNullBehavior();
+ if (output_mode != CLINFO_RAW)
+ checkNullBehavior();
oclIcdProps();
}
1
0
Hello community,
here is the log from the commit of package perl-Mojolicious for openSUSE:Factory checked in at 2016-01-28 17:23:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Mojolicious (Old)
and /work/SRC/openSUSE:Factory/.perl-Mojolicious.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Mojolicious"
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Mojolicious/perl-Mojolicious.changes 2016-01-22 01:09:55.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.perl-Mojolicious.new/perl-Mojolicious.changes 2016-01-28 17:24:40.000000000 +0100
@@ -1,0 +2,18 @@
+Mon Jan 25 16:55:00 UTC 2016 - coolo(a)suse.com
+
+- updated to 6.42
+ see /usr/share/doc/packages/perl-Mojolicious/Changes
+
+ 6.42 2016-01-24
+ - Fixed use of deprecated Perl feature in Mojo::JSON.
+ - Fixed validation filter bugs in Mojolicious::Validator::Validation.
+
+ 6.41 2016-01-20
+ - Added support for validation filters.
+ - Added filters attribute to Mojolicious::Validator.
+ - Added add_filter method to Mojolicious::Validator.
+ - Added filter arguments to optional and required methods in
+ Mojolicious::Validator::Validation.
+ - Fixed MOJO_WEBSOCKET_DEBUG environment variable. (jberger)
+
+-------------------------------------------------------------------
Old:
----
Mojolicious-6.40.tar.gz
New:
----
Mojolicious-6.42.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Mojolicious.spec ++++++
--- /var/tmp/diff_new_pack.COY4ue/_old 2016-01-28 17:24:41.000000000 +0100
+++ /var/tmp/diff_new_pack.COY4ue/_new 2016-01-28 17:24:41.000000000 +0100
@@ -17,7 +17,7 @@
Name: perl-Mojolicious
-Version: 6.40
+Version: 6.42
Release: 0
%define cpan_name Mojolicious
Summary: Real-time web framework
++++++ Mojolicious-6.40.tar.gz -> Mojolicious-6.42.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/Changes new/Mojolicious-6.42/Changes
--- old/Mojolicious-6.40/Changes 2016-01-13 19:13:50.000000000 +0100
+++ new/Mojolicious-6.42/Changes 2016-01-24 23:00:27.000000000 +0100
@@ -1,4 +1,16 @@
+6.42 2016-01-24
+ - Fixed use of deprecated Perl feature in Mojo::JSON.
+ - Fixed validation filter bugs in Mojolicious::Validator::Validation.
+
+6.41 2016-01-20
+ - Added support for validation filters.
+ - Added filters attribute to Mojolicious::Validator.
+ - Added add_filter method to Mojolicious::Validator.
+ - Added filter arguments to optional and required methods in
+ Mojolicious::Validator::Validation.
+ - Fixed MOJO_WEBSOCKET_DEBUG environment variable. (jberger)
+
6.40 2016-01-13
- Removed client_challenge, client_handshake, server_handshake and server_open
methods from Mojo::Transaction::WebSocket. (batman, sri)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/META.json new/Mojolicious-6.42/META.json
--- old/Mojolicious-6.40/META.json 2016-01-13 21:07:28.000000000 +0100
+++ new/Mojolicious-6.42/META.json 2016-01-24 23:01:37.000000000 +0100
@@ -58,5 +58,5 @@
},
"x_IRC" : "irc://irc.perl.org/#mojo"
},
- "version" : "6.40"
+ "version" : "6.42"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/META.yml new/Mojolicious-6.42/META.yml
--- old/Mojolicious-6.40/META.yml 2016-01-13 21:07:28.000000000 +0100
+++ new/Mojolicious-6.42/META.yml 2016-01-24 23:01:37.000000000 +0100
@@ -31,4 +31,4 @@
homepage: http://mojolicious.org
license: http://www.opensource.org/licenses/artistic-license-2.0
repository: https://github.com/kraih/mojo.git
-version: '6.40'
+version: '6.42'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/README.md new/Mojolicious-6.42/README.md
--- old/Mojolicious-6.40/README.md 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/README.md 2016-01-24 04:33:27.000000000 +0100
@@ -11,23 +11,25 @@
## Features
- * An amazing real-time web framework, allowing you to easily grow single
+ * An amazing **real-time web framework**, allowing you to easily grow single
file prototypes into well-structured web applications.
* Powerful out of the box with RESTful routes, plugins, commands, Perl-ish
templates, content negotiation, session management, form validation,
testing framework, static file server, CGI/[PSGI](http://plackperl.org)
detection, first class Unicode support and much more for you to
discover.
+ * A powerful **web development toolkit**, that you can use for all kinds of
+ applications, independently of the web framework.
+ * Full stack HTTP and WebSocket client/server implementation with IPv6, TLS,
+ SNI, IDNA, HTTP/SOCKS5 proxy, Comet (long polling), keep-alive, connection
+ pooling, timeout, cookie, multipart, and gzip compression support.
+ * Built-in non-blocking I/O web server, supporting multiple event loops as
+ well as optional preforking and hot deployment, perfect for building
+ highly scalable web services.
+ * JSON and HTML/XML parser with CSS selector support.
* Very clean, portable and object-oriented pure-Perl API with no hidden
magic and no requirements besides Perl 5.22.0 (versions as old as 5.10.1
can be used too, but may require additional CPAN modules to be installed)
- * Full stack HTTP and WebSocket client/server implementation with IPv6, TLS,
- SNI, IDNA, HTTP/SOCKS5 proxy, Comet (long polling), keep-alive, connection
- pooling, timeout, cookie, multipart, and gzip compression support.
- * Built-in non-blocking I/O web server, supporting multiple event loops as
- well as optional preforking and hot deployment, perfect for building
- highly scalable web services.
- * JSON and HTML/XML parser with CSS selector support.
* Fresh code based upon years of experience developing
[Catalyst](http://www.catalystframework.org), free and open source.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/Base.pm new/Mojolicious-6.42/lib/Mojo/Base.pm
--- old/Mojolicious-6.40/lib/Mojo/Base.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/Base.pm 2016-01-19 19:23:42.000000000 +0100
@@ -115,7 +115,7 @@
use Mojo::Base -base;
has name => 'Nyan';
- has [qw(age weight)] => 4;
+ has ['age', 'weight'] => 4;
package Tiger;
use Mojo::Base 'Cat';
@@ -181,11 +181,11 @@
=head2 has
has 'name';
- has [qw(name1 name2 name3)];
+ has ['name1', 'name2', 'name3'];
has name => 'foo';
has name => sub {...};
- has [qw(name1 name2 name3)] => 'foo';
- has [qw(name1 name2 name3)] => sub {...};
+ has ['name1', 'name2', 'name3'] => 'foo';
+ has ['name1', 'name2', 'name3'] => sub {...};
Create attributes for hash-based objects, just like the L</"attr"> method.
@@ -197,11 +197,11 @@
$object->attr('name');
SubClass->attr('name');
- SubClass->attr([qw(name1 name2 name3)]);
+ SubClass->attr(['name1', 'name2', 'name3']);
SubClass->attr(name => 'foo');
SubClass->attr(name => sub {...});
- SubClass->attr([qw(name1 name2 name3)] => 'foo');
- SubClass->attr([qw(name1 name2 name3)] => sub {...});
+ SubClass->attr(['name1', 'name2', 'name3'] => 'foo');
+ SubClass->attr(['name1', 'name2', 'name3'] => sub {...});
Create attribute accessor for hash-based objects, an array reference can be
used to create more than one at a time. Pass an optional second argument to set
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/Headers.pm new/Mojolicious-6.42/lib/Mojo/Headers.pm
--- old/Mojolicious-6.40/lib/Mojo/Headers.pm 2016-01-13 18:52:30.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/Headers.pm 2016-01-23 01:38:17.000000000 +0100
@@ -482,7 +482,7 @@
my $names = $headers->names;
-Return a list of all currently defined headers.
+Return an array reference with all currently defined headers.
# Names of all headers
say for @{$headers->names};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/IOLoop/Delay.pm new/Mojolicious-6.42/lib/Mojo/IOLoop/Delay.pm
--- old/Mojolicious-6.40/lib/Mojo/IOLoop/Delay.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/IOLoop/Delay.pm 2016-01-19 19:37:41.000000000 +0100
@@ -224,8 +224,8 @@
my $hash = $delay->data;
my $foo = $delay->data('foo');
- $delay = $delay->data({foo => 'bar'});
- $delay = $delay->data(foo => 'bar');
+ $delay = $delay->data({foo => 'bar', baz => 23});
+ $delay = $delay->data(foo => 'bar', baz => 23);
Data shared between all L</"steps">.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/JSON.pm new/Mojolicious-6.42/lib/Mojo/JSON.pm
--- old/Mojolicious-6.40/lib/Mojo/JSON.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/JSON.pm 2016-01-24 19:03:27.000000000 +0100
@@ -1,6 +1,7 @@
package Mojo::JSON;
use Mojo::Base -strict;
+use B;
use Carp 'croak';
use Exporter 'import';
use JSON::PP ();
@@ -248,10 +249,9 @@
# Null
return 'null' unless defined $value;
- # Number (bitwise operators change behavior based on the internal value type)
- my $check = (my $dummy = "0") & $value;
+ # Number
return $value
- if (!($check ^ $check) && length $check)
+ if B::svref_2object(\$value)->FLAGS & (B::SVp_IOK | B::SVp_NOK)
&& 0 + $value eq $value
&& $value * 0 == 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/Parameters.pm new/Mojolicious-6.42/lib/Mojo/Parameters.pm
--- old/Mojolicious-6.40/lib/Mojo/Parameters.pm 2016-01-13 19:03:30.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/Parameters.pm 2016-01-23 01:38:38.000000000 +0100
@@ -283,7 +283,7 @@
my $names = $params->names;
-Return a list of all parameter names.
+Return an array reference with all parameter names.
# Names of all parameters
say for @{$params->names};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/Server/Daemon.pm new/Mojolicious-6.42/lib/Mojo/Server/Daemon.pm
--- old/Mojolicious-6.40/lib/Mojo/Server/Daemon.pm 2016-01-13 07:05:52.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/Server/Daemon.pm 2016-01-19 19:28:55.000000000 +0100
@@ -364,7 +364,7 @@
$daemon->listen(['http://*:8080?reuse=1']);
# Listen on two ports with HTTP and HTTPS at the same time
- $daemon->listen([qw(http://*:3000 https://*:4000)]);
+ $daemon->listen(['http://*:3000', 'https://*:4000']);
# Use a custom certificate and key
$daemon->listen(['https://*:3000?cert=/x/server.crt&key=/y/server.key']);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/Transaction/HTTP.pm new/Mojolicious-6.42/lib/Mojo/Transaction/HTTP.pm
--- old/Mojolicious-6.40/lib/Mojo/Transaction/HTTP.pm 2016-01-13 18:56:08.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/Transaction/HTTP.pm 2016-01-23 01:39:01.000000000 +0100
@@ -305,8 +305,8 @@
my $redirects = $tx->redirects;
-Return a list of all previous transactions that preceded this follow-up
-transaction.
+Return an array reference with all previous transactions that preceded this
+follow-up transaction.
# Paths of all previous requests
say $_->req->url->path for @{$tx->redirects};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/Transaction/WebSocket.pm new/Mojolicious-6.42/lib/Mojo/Transaction/WebSocket.pm
--- old/Mojolicious-6.40/lib/Mojo/Transaction/WebSocket.pm 2016-01-13 18:57:55.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/Transaction/WebSocket.pm 2016-01-19 20:32:28.000000000 +0100
@@ -136,8 +136,8 @@
my $self = shift;
my %protos = map { trim($_) => 1 } split ',',
- $self->req->headers->sec_websocket_protocol;
- return undef unless my $proto = first { $protos{$_} } @_;
+ $self->req->headers->sec_websocket_protocol // '';
+ return undef unless defined(my $proto = first { $protos{$_} } @_);
$self->res->headers->sec_websocket_protocol($proto);
return $proto;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/UserAgent/Proxy.pm new/Mojolicious-6.42/lib/Mojo/UserAgent/Proxy.pm
--- old/Mojolicious-6.40/lib/Mojo/UserAgent/Proxy.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/UserAgent/Proxy.pm 2016-01-19 19:28:23.000000000 +0100
@@ -75,7 +75,7 @@
=head2 not
my $not = $proxy->not;
- $proxy = $proxy->not([qw(localhost intranet.mojolicious.org)]);
+ $proxy = $proxy->not(['localhost', 'intranet.mojolicious.org']);
Domains that don't require a proxy server to be used.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/UserAgent/Transactor.pm new/Mojolicious-6.42/lib/Mojo/UserAgent/Transactor.pm
--- old/Mojolicious-6.40/lib/Mojo/UserAgent/Transactor.pm 2016-01-12 21:25:33.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/UserAgent/Transactor.pm 2016-01-19 19:28:02.000000000 +0100
@@ -114,8 +114,8 @@
# Generator
if (@_ > 1) {
- return $tx unless my $generator = $self->generators->{shift()};
- $self->$generator($tx, @_);
+ my $cb = $self->generators->{shift()};
+ $self->$cb($tx, @_);
}
# Body
@@ -328,6 +328,11 @@
Register a content generator.
+ $t->add_generator(foo => sub {
+ my ($t, $tx, @args) = @_;
+ ...
+ });
+
=head2 endpoint
my ($proto, $host, $port) = $t->endpoint(Mojo::Transaction::HTTP->new);
@@ -411,7 +416,8 @@
An array reference can be used for multiple form values sharing the same name.
# POST request with form values sharing the same name
- my $tx = $t->tx(POST => 'http://example.com' => form => {a => [qw(b c d)]});
+ my $tx = $t->tx(
+ POST => 'http://example.com' => form => {a => ['b', 'c', 'd']});
A hash reference with a C<content> or C<file> value can be used to switch to
the C<multipart/form-data> content type for file uploads.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo/WebSocket.pm new/Mojolicious-6.42/lib/Mojo/WebSocket.pm
--- old/Mojolicious-6.40/lib/Mojo/WebSocket.pm 2016-01-13 18:57:11.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo/WebSocket.pm 2016-01-19 16:57:09.000000000 +0100
@@ -3,7 +3,7 @@
use Config;
use Exporter 'import';
-use Mojo::Util qw(b64_encode sha1_bytes xor_encode);
+use Mojo::Util qw(b64_encode dumper sha1_bytes xor_encode);
use constant DEBUG => $ENV{MOJO_WEBSOCKET_DEBUG} || 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojo.pm new/Mojolicious-6.42/lib/Mojo.pm
--- old/Mojolicious-6.40/lib/Mojo.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojo.pm 2016-01-24 06:10:28.000000000 +0100
@@ -31,7 +31,7 @@
=head1 NAME
-Mojo - Duct tape for the HTML5 web!
+Mojo - Web development toolkit
=head1 SYNOPSIS
@@ -58,9 +58,11 @@
=head1 DESCRIPTION
-A flexible runtime environment for Perl real-time web frameworks, with all the
-basic tools and helpers needed to write simple web applications and higher
-level web frameworks, such as L<Mojolicious>.
+A powerful web development toolkit, with all the basic tools and helpers needed
+to write simple web applications and higher level web frameworks, such as
+L<Mojolicious>. Some of the most commonly used tools are L<Mojo::UserAgent>,
+L<Mojo::DOM>, L<Mojo::JSON>, L<Mojo::Server::Daemon>, L<Mojo::Server::Prefork>,
+L<Mojo::IOLoop> and L<Mojo::Template>.
See L<Mojolicious::Guides> for more!
@@ -115,8 +117,8 @@
my $hash = $app->config;
my $foo = $app->config('foo');
- $app = $app->config({foo => 'bar'});
- $app = $app->config(foo => 'bar');
+ $app = $app->config({foo => 'bar', baz => 23});
+ $app = $app->config(foo => 'bar', baz => 23);
Application configuration.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Controller.pm new/Mojolicious-6.42/lib/Mojolicious/Controller.pm
--- old/Mojolicious-6.40/lib/Mojolicious/Controller.pm 2016-01-12 21:50:53.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Controller.pm 2016-01-20 06:04:52.000000000 +0100
@@ -575,7 +575,7 @@
my $value = $c->param('foo');
$c = $c->param(foo => 'ba;r');
- $c = $c->param(foo => qw(ba;r baz));
+ $c = $c->param(foo => 'ba;r', 'baz');
$c = $c->param(foo => ['ba;r', 'baz']);
Access route placeholder values that are not reserved stash values, file
@@ -866,8 +866,8 @@
my $hash = $c->stash;
my $foo = $c->stash('foo');
- $c = $c->stash({foo => 'bar'});
- $c = $c->stash(foo => 'bar');
+ $c = $c->stash({foo => 'bar', baz => 23});
+ $c = $c->stash(foo => 'bar', baz => 23);
Non-persistent data storage and exchange for the current request, application
wide default values can be set with L<Mojolicious/"defaults">. Some stash
@@ -929,7 +929,7 @@
# Validate GET/POST parameter
my $validation = $c->validation;
- $validation->required('title')->size(3, 50);
+ $validation->required('title', 'trim')->size(3, 50);
my $title = $validation->param('title');
# Validate file upload
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Guides/Contributing.pod new/Mojolicious-6.42/lib/Mojolicious/Guides/Contributing.pod
--- old/Mojolicious-6.40/lib/Mojolicious/Guides/Contributing.pod 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Guides/Contributing.pod 2016-01-24 04:16:08.000000000 +0100
@@ -88,9 +88,9 @@
=head2 Mission statement
-L<Mojo> is a runtime environment for Perl real-time web frameworks. It provides
-all the basic tools and helpers needed to write simple web applications and
-higher level web frameworks, such as L<Mojolicious>.
+L<Mojo> is a web development toolkit, with all the basic tools and helpers
+needed to write simple web applications and higher level web frameworks, such as
+L<Mojolicious>.
All components should be reusable in other projects, and in a UNIXish way only
loosely coupled.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Guides/Rendering.pod new/Mojolicious-6.42/lib/Mojolicious/Guides/Rendering.pod
--- old/Mojolicious-6.40/lib/Mojolicious/Guides/Rendering.pod 2016-01-13 19:13:08.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Guides/Rendering.pod 2016-01-19 19:18:41.000000000 +0100
@@ -301,7 +301,7 @@
through the L<Mojolicious::Controller/"stash">.
$c->stash(description => 'web framework');
- $c->stash(frameworks => [qw(Catalyst Mojolicious)]);
+ $c->stash(frameworks => ['Catalyst', 'Mojolicious']);
$c->stash(spinoffs => {minion => 'job queue'});
%= $description
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Guides/Routing.pod new/Mojolicious-6.42/lib/Mojolicious/Guides/Routing.pod
--- old/Mojolicious-6.40/lib/Mojolicious/Guides/Routing.pod 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Guides/Routing.pod 2016-01-19 19:19:46.000000000 +0100
@@ -156,7 +156,7 @@
=head2 Minimal route
The attribute L<Mojolicious/"routes"> contains a router you can use to generate
-route structures, they match in the same order in which they were defined.
+route structures.
# Application
package MyApp;
@@ -175,7 +175,9 @@
1;
The minimal route above will load and instantiate the class
-C<MyApp::Controller::Foo> and call its C<welcome> method.
+C<MyApp::Controller::Foo> and call its C<welcome> method. Routes are usually
+configured in the C<startup> method of the application class, but the router can
+be accessed from everywhere (even at runtime).
# Controller
package MyApp::Controller::Foo;
@@ -191,8 +193,11 @@
1;
-Routes are usually configured in the C<startup> method of the application
-class, but the router can be accessed from everywhere (even at runtime).
+All routes match in the same order in which they were defined, and matching
+stops as soon as a suitable route has been found. So you can improve the routing
+performance by declaring your most frequently accessed routes first. A routing
+cache will also be used automatically to handle sudden traffic spikes more
+gracefully.
=head2 Routing destination
@@ -224,7 +229,7 @@
$r->post('/hello')->to(controller => 'foo', action => 'hello');
# GET|POST /bye -> {controller => 'foo', action => 'bye'}
- $r->any([qw(GET POST)] => '/bye')->to(controller => 'foo', action => 'bye');
+ $r->any(['GET', 'POST'] => '/bye')->to(controller => 'foo', action => 'bye');
# * /whatever -> {controller => 'foo', action => 'whatever'}
$r->any('/whatever')->to(controller => 'foo', action => 'whatever');
@@ -302,6 +307,10 @@
$cats->get('/nyan')->to(action => 'nyan');
$cats->get('/lol');
+With a few common prefixes you can also greatly improve the routing performance
+of applications with many routes, because children are only tried if the prefix
+matched first.
+
=head2 Special stash values
When the dispatcher sees C<controller> and C<action> values in the stash it
@@ -500,7 +509,7 @@
# /fry -> undef
# /bender -> {controller => 'foo', action => 'bar', name => 'bender'}
# /leela -> {controller => 'foo', action => 'bar', name => 'leela'}
- $r->get('/:name' => [name => [qw(bender leela)]])->to('foo#bar');
+ $r->get('/:name' => [name => ['bender', 'leela']])->to('foo#bar');
You can also adjust the regular expressions behind placeholders directly, just
make sure not to use C<^> and C<$> or capturing groups C<(...)>, because
@@ -595,7 +604,7 @@
# /foo.txt -> undef
# /foo.rss -> {controller => 'foo', action => 'bar', format => 'rss'}
# /foo.xml -> {controller => 'foo', action => 'bar', format => 'xml'}
- $r->get('/foo' => [format => [qw(rss xml)]])->to('foo#bar');
+ $r->get('/foo' => [format => ['rss', 'xml']])->to('foo#bar');
A C<format> value can also be passed to L<Mojolicious::Controller/"url_for">.
@@ -621,7 +630,7 @@
# /baz.xml -> undef
my $inactive = $r->under([format => 0]);
$inactive->get('/foo')->to('foo#bar');
- $inactive->get('/baz' => [format => [qw(txt html)]])->to('baz#yada');
+ $inactive->get('/baz' => [format => ['txt', 'html']])->to('baz#yada');
=head2 WebSockets
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Guides/Tutorial.pod new/Mojolicious-6.42/lib/Mojolicious/Guides/Tutorial.pod
--- old/Mojolicious-6.40/lib/Mojolicious/Guides/Tutorial.pod 2016-01-13 19:05:44.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Guides/Tutorial.pod 2016-01-19 19:20:21.000000000 +0100
@@ -7,7 +7,7 @@
=head1 TUTORIAL
-A quick example driven introduction to the wonders of L<Mojolicious::Lite>.
+A quick example-driven introduction to the wonders of L<Mojolicious::Lite>.
Almost everything you'll learn here also applies to full L<Mojolicious>
applications.
@@ -383,7 +383,7 @@
};
# GET|POST|PATCH /bye
- any [qw(GET POST PATCH)] => '/bye' => sub {
+ any ['GET', 'POST', 'PATCH'] => '/bye' => sub {
my $c = shift;
$c->render(text => 'Bye World!');
};
@@ -429,7 +429,7 @@
# /test
# /123
- any '/:foo' => [foo => [qw(test 123)]] => sub {
+ any '/:foo' => [foo => ['test', '123']] => sub {
my $c = shift;
my $foo = $c->param('foo');
$c->render(text => "Our :foo placeholder matched $foo");
@@ -581,7 +581,7 @@
# /hello.json
# /hello.txt
- get '/hello' => [format => [qw(json txt)]] => sub {
+ get '/hello' => [format => ['json', 'txt']] => sub {
my $c = shift;
return $c->render(json => {hello => 'world'})
if $c->stash('format') eq 'json';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Guides.pod new/Mojolicious-6.42/lib/Mojolicious/Guides.pod
--- old/Mojolicious-6.40/lib/Mojolicious/Guides.pod 2016-01-10 21:28:01.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Guides.pod 2016-01-24 04:19:02.000000000 +0100
@@ -84,9 +84,9 @@
=head1 HIGHLIGHTS
-L<Mojolicious> and L<Mojolicious::Lite> are the sum of many parts, small
-building blocks that can be used independently, these are the most prominent
-ones.
+L<Mojolicious> and L<Mojolicious::Lite> are the sum of many parts, built on top
+of the L<Mojo> web development toolkit. Small building blocks that can be used
+independently for all kinds of applications, these are the most prominent ones.
=over 2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Lite.pm new/Mojolicious-6.42/lib/Mojolicious/Lite.pm
--- old/Mojolicious-6.40/lib/Mojolicious/Lite.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Lite.pm 2016-01-19 19:26:47.000000000 +0100
@@ -96,8 +96,8 @@
my $route = any '/:foo' => sub {...};
my $route = any '/:foo' => {foo => 'bar'} => sub {...};
my $route = any '/:foo' => [foo => qr/\w+/] => sub {...};
- my $route = any [qw(GET POST)] => '/:foo' => sub {...};
- my $route = any [qw(GET POST)] => '/:foo' => [foo => qr/\w+/] => sub {...};
+ my $route = any ['GET', 'POST'] => '/:foo' => sub {...};
+ my $route = any ['GET', 'POST'] => '/:foo' => [foo => qr/\w+/] => sub {...};
Generate route with L<Mojolicious::Routes::Route/"any">, matching any of the
listed HTTP request methods or all. See also L<Mojolicious::Guides::Tutorial>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Plugin/DefaultHelpers.pm new/Mojolicious-6.42/lib/Mojolicious/Plugin/DefaultHelpers.pm
--- old/Mojolicious-6.40/lib/Mojolicious/Plugin/DefaultHelpers.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Plugin/DefaultHelpers.pm 2016-01-19 19:26:20.000000000 +0100
@@ -219,7 +219,7 @@
=head2 c
- %= c(qw(a b c))->shuffle->join
+ %= c('a', 'b', 'c')->shuffle->join
Turn list into a L<Mojo::Collection> object.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Plugin/TagHelpers.pm new/Mojolicious-6.42/lib/Mojolicious/Plugin/TagHelpers.pm
--- old/Mojolicious-6.40/lib/Mojolicious/Plugin/TagHelpers.pm 2016-01-13 18:54:26.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Plugin/TagHelpers.pm 2016-01-19 19:25:49.000000000 +0100
@@ -553,11 +553,11 @@
=head2 select_field
- %= select_field country => [qw(de en)]
+ %= select_field country => ['de', 'en']
%= select_field country => [[Germany => 'de'], 'en'], id => 'eu'
%= select_field country => [[Germany => 'de', selected => 'selected'], 'en']
%= select_field country => [c(EU => [[Germany => 'de'], 'en'], id => 'eu')]
- %= select_field country => [c(EU => [qw(de en)]), c(Asia => [qw(cn jp)])]
+ %= select_field country => [c(EU => ['de', 'en']), c(Asia => ['cn', 'jp'])]
Generate C<select> and C<option> tags from array references and C<optgroup>
tags from L<Mojo::Collection> objects. Previous input values will automatically
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Renderer.pm new/Mojolicious-6.42/lib/Mojolicious/Renderer.pm
--- old/Mojolicious-6.40/lib/Mojolicious/Renderer.pm 2016-01-13 19:13:26.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Renderer.pm 2016-01-15 18:01:51.000000000 +0100
@@ -372,12 +372,23 @@
Register a handler.
+ $renderer->add_handler(foo => sub {
+ my ($renderer, $c, $output, $options) = @_;
+ ...
+ $$output = 'Hello World!';
+ });
+
=head2 add_helper
$renderer = $renderer->add_helper(url_for => sub {...});
Register a helper.
+ $renderer->add_helper(foo => sub {
+ my ($c, @args) = @_;
+ ...
+ });
+
=head2 get_data_template
my $template = $renderer->get_data_template({
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Routes/Route.pm new/Mojolicious-6.42/lib/Mojolicious/Routes/Route.pm
--- old/Mojolicious-6.40/lib/Mojolicious/Routes/Route.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Routes/Route.pm 2016-01-19 19:21:37.000000000 +0100
@@ -302,8 +302,8 @@
my $route = $r->any('/:foo' => sub {...});
my $route = $r->any('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->any('/:foo' => [foo => qr/\w+/] => sub {...});
- my $route = $r->any([qw(GET POST)] => '/:foo' => sub {...});
- my $route = $r->any([qw(GET POST)] => '/:foo' => [foo => qr/\w+/]);
+ my $route = $r->any(['GET', 'POST'] => '/:foo' => sub {...});
+ my $route = $r->any(['GET', 'POST'] => '/:foo' => [foo => qr/\w+/]);
Generate L<Mojolicious::Routes::Route> object matching any of the listed HTTP
request methods or all. See also L<Mojolicious::Guides::Tutorial> for many more
@@ -564,14 +564,14 @@
my $methods = $r->via;
$r = $r->via('GET');
- $r = $r->via(qw(GET POST));
- $r = $r->via([qw(GET POST)]);
+ $r = $r->via('GET', 'POST');
+ $r = $r->via(['GET', 'POST']);
Restrict HTTP methods this route is allowed to handle, defaults to no
restrictions.
# Route with two methods and destination
- $r->route('/foo')->via(qw(GET POST))->to('foo#bar');
+ $r->route('/foo')->via('GET', 'POST')->to('foo#bar');
=head2 websocket
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Routes.pm new/Mojolicious-6.42/lib/Mojolicious/Routes.pm
--- old/Mojolicious-6.40/lib/Mojolicious/Routes.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Routes.pm 2016-01-19 19:22:21.000000000 +0100
@@ -257,7 +257,7 @@
=head2 hidden
my $hidden = $r->hidden;
- $r = $r->hidden([qw(attr has new)]);
+ $r = $r->hidden(['attr', 'has', 'new']);
Controller attributes and methods that are hidden from router, defaults to
C<attr>, C<has>, C<new> and C<tap>.
@@ -290,12 +290,23 @@
Register a condition.
+ $r->add_condition(foo => sub {
+ my ($route, $c, $captures, $arg) = @_;
+ ...
+ return 1;
+ });
+
=head2 add_shortcut
$r = $r->add_shortcut(foo => sub {...});
Register a shortcut.
+ $r->add_shortcut(foo => sub {
+ my ($route, @args) = @_;
+ ...
+ });
+
=head2 continue
$r->continue(Mojolicious::Controller->new);
@@ -311,7 +322,7 @@
=head2 hide
- $r = $r->hide(qw(foo bar));
+ $r = $r->hide('foo', 'bar');
Hide controller attributes and methods from router.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Types.pm new/Mojolicious-6.42/lib/Mojolicious/Types.pm
--- old/Mojolicious-6.40/lib/Mojolicious/Types.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Types.pm 2016-01-19 19:25:06.000000000 +0100
@@ -140,7 +140,7 @@
my $type = $types->type('png');
$types = $types->type(png => 'image/png');
- $types = $types->type(json => [qw(application/json text/x-json)]);
+ $types = $types->type(json => ['application/json', 'text/x-json']);
Get or set MIME types for file extension, alternatives are only used for
detection.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Validator/Validation.pm new/Mojolicious-6.42/lib/Mojolicious/Validator/Validation.pm
--- old/Mojolicious-6.40/lib/Mojolicious/Validator/Validation.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Validator/Validation.pm 2016-01-24 00:43:47.000000000 +0100
@@ -64,12 +64,16 @@
sub is_valid { exists $_[0]->output->{$_[1] // $_[0]->topic} }
sub optional {
- my ($self, $name) = @_;
+ my ($self, $name, @filters) = @_;
- my $input = $self->input->{$name};
- my @input = ref $input eq 'ARRAY' ? @$input : $input;
- $self->output->{$name} = $input
- unless grep { !defined($_) || $_ eq '' } @input;
+ return $self->topic($name) unless defined(my $input = $self->input->{$name});
+
+ my @input = ref $input eq 'ARRAY' ? @$input : ($input);
+ for my $cb (map { $self->validator->filters->{$_} } @filters) {
+ @input = map { $self->$cb($name, $_) } @input;
+ }
+ $self->output->{$name} = @input > 1 ? \@input : $input[0]
+ unless grep { $_ eq '' } @input;
return $self->topic($name);
}
@@ -79,8 +83,8 @@
sub passed { [sort keys %{shift->output}] }
sub required {
- my ($self, $name) = @_;
- return $self if $self->optional($name)->is_valid;
+ my ($self, $name) = (shift, shift);
+ return $self if $self->optional($name, @_)->is_valid;
return $self->error($name => ['required']);
}
@@ -101,7 +105,7 @@
my $validation
= Mojolicious::Validator::Validation->new(validator => $validator);
$validation->input({foo => 'bar'});
- $validation->required('foo')->in(qw(bar baz));
+ $validation->required('foo')->in('bar', 'baz');
say $validation->param('foo');
=head1 DESCRIPTION
@@ -191,7 +195,7 @@
my $names = $validation->failed;
-Return a list of all names for values that failed validation.
+Return an array reference with all names for values that failed validation.
# Names of all values that failed
say for @{$validation->failed};
@@ -220,8 +224,12 @@
=head2 optional
$validation = $validation->optional('foo');
+ $validation = $validation->optional('foo', 'filter1', 'filter2');
+
+Change validation L</"topic"> and apply filters.
-Change validation L</"topic">.
+ # Trim value and check size
+ $validation->optional('user', 'trim')->size(1, 15);
=head2 param
@@ -234,7 +242,7 @@
my $names = $validation->passed;
-Return a list of all names for values that passed validation.
+Return an array reference with all names for values that passed validation.
# Names of all values that passed
say for @{$validation->passed};
@@ -242,9 +250,13 @@
=head2 required
$validation = $validation->required('foo');
+ $validation = $validation->required('foo', 'filter1', 'filter2');
+
+Change validation L</"topic">, apply filters, and make sure a value is present
+and not an empty string.
-Change validation L</"topic"> and make sure a value is present and not an empty
-string.
+ # Trim value and check size
+ $validation->required('user', 'trim')->size(1, 15);
=head1 AUTOLOAD
@@ -255,10 +267,10 @@
# Call validation checks
$validation->required('foo')->size(2, 5)->like(qr/^[A-Z]/);
$validation->optional('bar')->equal_to('foo');
- $validation->optional('baz')->in(qw(test 123));
+ $validation->optional('baz')->in('test', '123');
# Longer version
- $validation->required('foo')->check('size', 2,5)->check('like', qr/^[A-Z]/);
+ $validation->required('foo')->check('size', 2, 5)->check('like', qr/^[A-Z]/);
=head1 SEE ALSO
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious/Validator.pm new/Mojolicious-6.42/lib/Mojolicious/Validator.pm
--- old/Mojolicious-6.40/lib/Mojolicious/Validator.pm 2016-01-09 05:25:41.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious/Validator.pm 2016-01-20 06:04:56.000000000 +0100
@@ -1,6 +1,7 @@
package Mojolicious::Validator;
use Mojo::Base -base;
+use Mojo::Util 'trim';
use Mojolicious::Validator::Validation;
has checks => sub {
@@ -12,8 +13,10 @@
upload => sub { !ref $_[2] || !$_[2]->isa('Mojo::Upload') }
};
};
+has filters => sub { {trim => \&_trim} };
-sub add_check { $_[0]->checks->{$_[1]} = $_[2] and return $_[0] }
+sub add_check { $_[0]->checks->{$_[1]} = $_[2] and return $_[0] }
+sub add_filter { $_[0]->filters->{$_[1]} = $_[2] and return $_[0] }
sub validation {
Mojolicious::Validator::Validation->new(validator => shift);
@@ -37,6 +40,8 @@
return $len < $min || $len > $max;
}
+sub _trim { trim $_[2] }
+
1;
=encoding utf8
@@ -71,7 +76,7 @@
=head2 in
- $validation = $validation->in(qw(foo bar baz));
+ $validation = $validation->in('foo', 'bar', 'baz');
String value needs to match one of the values in the list.
@@ -94,6 +99,17 @@
Value needs to be a L<Mojo::Upload> object, representing a file upload.
+=head1 FILTERS
+
+These filters are available by default.
+
+=head2 trim
+
+ $validation = $validation->optional('foo', 'trim');
+
+Trim whitespace characters from both ends of string value with
+L<Mojo::Util/"trim">.
+
=head1 ATTRIBUTES
L<Mojolicious::Validator> implements the following attributes.
@@ -117,6 +133,24 @@
Register a validation check.
+ $validator->add_check(foo => sub {
+ my ($validation, $name, $value, @args) = @_;
+ ...
+ return undef;
+ });
+
+=head2 add_filter
+
+ $validator = $validator->add_filter(trim => sub {...});
+
+Register a new filter.
+
+ $validator->add_filter(foo => sub {
+ my ($validation, $name, $value) = @_;
+ ...
+ return $value;
+ });
+
=head2 validation
my $validation = $validator->validation;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/lib/Mojolicious.pm new/Mojolicious-6.42/lib/Mojolicious.pm
--- old/Mojolicious-6.40/lib/Mojolicious.pm 2016-01-11 19:14:50.000000000 +0100
+++ new/Mojolicious-6.42/lib/Mojolicious.pm 2016-01-20 21:02:19.000000000 +0100
@@ -43,7 +43,7 @@
has validator => sub { Mojolicious::Validator->new };
our $CODENAME = 'Clinking Beer Mugs';
-our $VERSION = '6.40';
+our $VERSION = '6.42';
sub AUTOLOAD {
my $self = shift;
@@ -523,6 +523,12 @@
return $value ne 'foo';
});
+ # Add validation filter
+ $app->validator->add_filter(quotemeta => sub {
+ my ($validation, $name, $value) = @_;
+ return quotemeta $value;
+ });
+
=head1 METHODS
L<Mojolicious> inherits all methods from L<Mojo> and implements the following
@@ -549,8 +555,8 @@
my $hash = $app->defaults;
my $foo = $app->defaults('foo');
- $app = $app->defaults({foo => 'bar'});
- $app = $app->defaults(foo => 'bar');
+ $app = $app->defaults({foo => 'bar', baz => 23});
+ $app = $app->defaults(foo => 'bar', baz => 23);
Default values for L<Mojolicious::Controller/"stash">, assigned for every new
request.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/t/mojolicious/validation_lite_app.t new/Mojolicious-6.42/t/mojolicious/validation_lite_app.t
--- old/Mojolicious-6.40/t/mojolicious/validation_lite_app.t 2016-01-12 23:31:46.000000000 +0100
+++ new/Mojolicious-6.42/t/mojolicious/validation_lite_app.t 2016-01-24 00:44:26.000000000 +0100
@@ -9,7 +9,7 @@
use Test::Mojo;
# Custom check
-app->validator->add_check(two => sub { length $_[2] == 2 ? undef : 'ohoh' });
+app->validator->add_check(two => sub { length $_[2] == 2 ? undef : "e:$_[1]" });
any '/' => sub {
my $c = shift;
@@ -161,6 +161,27 @@
is_deeply $validation->error('bar'), [qw(size 1 1 6)], 'right error';
is_deeply $validation->failed, ['bar'], 'right names';
+# Trim
+$validation = $t->app->validation->input({foo => ' bar', baz => [' 0 ', 1]});
+ok $validation->required('foo', 'trim')->in('bar')->is_valid, 'valid';
+is_deeply $validation->output, {foo => 'bar'}, 'right result';
+ok !$validation->optional('missing', 'trim')->is_valid, 'not valid';
+ok $validation->optional('baz', 'trim')->like(qr/^\d$/)->is_valid, 'valid';
+is_deeply $validation->output, {foo => 'bar', baz => [0, 1]}, 'right result';
+$validation = $t->app->validation->input({nothing => ' '});
+ok !$validation->required('nothing', 'trim')->is_valid, 'not valid';
+is_deeply $validation->output, {}, 'right result';
+ok $validation->required('nothing')->is_valid, 'valid';
+is_deeply $validation->output, {nothing => ' '}, 'right result';
+
+# Custom filter
+$t->app->validator->add_filter(quote => sub {qq{$_[1]="$_[2]"}});
+$validation = $t->app->validation->input({foo => [' bar', 'baz']});
+ok $validation->required('foo', 'trim', 'quote')->like(qr/"/)->is_valid,
+ 'valid';
+is_deeply $validation->output, {foo => ['foo="bar"', 'foo="baz"']},
+ 'right result';
+
# Multiple empty values
$validation = $t->app->validation;
ok !$validation->has_data, 'no data';
@@ -306,7 +327,7 @@
}
);
$t->get_ok('/?foo=too_long&bar=too_long_too&baz=way_too_long&yada=whatever')
- ->status_is(200)->text_is('div:root' => 'two ohoh')
+ ->status_is(200)->text_is('div:root' => 'two e:foo')
->text_is('label.custom.my-field-with-error[for="foo"]' => '<Foo>')
->element_exists('input.custom.my-field-with-error[type="text"]')
->element_exists('textarea.my-field-with-error')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Mojolicious-6.40/t/mojolicious/websocket_lite_app.t new/Mojolicious-6.42/t/mojolicious/websocket_lite_app.t
--- old/Mojolicious-6.40/t/mojolicious/websocket_lite_app.t 2016-01-11 06:57:53.000000000 +0100
+++ new/Mojolicious-6.42/t/mojolicious/websocket_lite_app.t 2016-01-19 20:32:25.000000000 +0100
@@ -29,7 +29,7 @@
websocket '/protocols' => sub {
my $c = shift;
- $c->send($c->tx->with_protocols('foo', 'bar', 'baz') // 'none');
+ $c->send($c->tx->with_protocols('foo', 'bar', 'baz', '0') // 'none');
$c->send($c->tx->protocol // 'none');
};
@@ -225,12 +225,20 @@
is $t->tx->protocol, 'foo', 'right protocol';
is $t->tx->res->headers->sec_websocket_protocol, 'foo',
'right "Sec-WebSocket-Protocol" value';
+$t->websocket_ok('/protocols' => ['0'])->message_ok->message_is('0')
+ ->message_ok->message_is('0')->finish_ok;
+is $t->tx->protocol, '0', 'right protocol';
+is $t->tx->res->headers->sec_websocket_protocol, '0',
+ 'right "Sec-WebSocket-Protocol" value';
$t->websocket_ok('/protocols' => [''])->message_ok->message_is('none')
->message_ok->message_is('none')->finish_ok;
is $t->tx->protocol, undef, 'no protocol';
$t->websocket_ok('/protocols' => ['', '', ''])->message_ok->message_is('none')
->message_ok->message_is('none')->finish_ok;
is $t->tx->protocol, undef, 'no protocol';
+$t->websocket_ok('/protocols')->message_ok->message_is('none')
+ ->message_ok->message_is('none')->finish_ok;
+is $t->tx->protocol, undef, 'no protocol';
# JSON roundtrips (with a lot of different tests)
$t->websocket_ok('/json')->send_ok({json => {test => 23, snowman => '☃'}})
1
0
Hello community,
here is the log from the commit of package ghc-fclabels for openSUSE:Factory checked in at 2016-01-28 17:23:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-fclabels (Old)
and /work/SRC/openSUSE:Factory/.ghc-fclabels.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-fclabels"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-fclabels/ghc-fclabels.changes 2015-09-17 09:19:17.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-fclabels.new/ghc-fclabels.changes 2016-01-28 17:24:39.000000000 +0100
@@ -1,0 +2,6 @@
+Wed Jan 20 09:43:35 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 2.0.2.4
+* Allow transformers 0.5.*.
+
+-------------------------------------------------------------------
Old:
----
fclabels-2.0.2.3.tar.gz
New:
----
fclabels-2.0.2.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-fclabels.spec ++++++
--- /var/tmp/diff_new_pack.CnXA01/_old 2016-01-28 17:24:39.000000000 +0100
+++ /var/tmp/diff_new_pack.CnXA01/_new 2016-01-28 17:24:39.000000000 +0100
@@ -21,7 +21,7 @@
%bcond_without tests
Name: ghc-fclabels
-Version: 2.0.2.3
+Version: 2.0.2.4
Release: 0
Summary: First class accessor labels implemented as lenses
License: BSD-3-Clause
++++++ fclabels-2.0.2.3.tar.gz -> fclabels-2.0.2.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fclabels-2.0.2.3/CHANGELOG new/fclabels-2.0.2.4/CHANGELOG
--- old/fclabels-2.0.2.3/CHANGELOG 2015-09-04 19:49:24.000000000 +0200
+++ new/fclabels-2.0.2.4/CHANGELOG 2016-01-18 14:18:19.000000000 +0100
@@ -1,8 +1,12 @@
CHANGELOG
+2.0.2.3 to 2.0.2.4
+
+ - Allow transformers 0.5.*.
+
2.0.2.2 to 2.0.2.3
- - Allow HUNit 1.3.*
+ - Allow HUnit 1.3.*
2.0.2.1 to 2.0.2.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fclabels-2.0.2.3/fclabels.cabal new/fclabels-2.0.2.4/fclabels.cabal
--- old/fclabels-2.0.2.3/fclabels.cabal 2015-09-04 19:49:24.000000000 +0200
+++ new/fclabels-2.0.2.4/fclabels.cabal 2016-01-18 14:18:19.000000000 +0100
@@ -1,5 +1,5 @@
Name: fclabels
-Version: 2.0.2.3
+Version: 2.0.2.4
Author: Sebastiaan Visser, Erik Hesselink, Chris Eidhof, Sjoerd Visscher
with lots of help and feedback from others.
Synopsis: First class accessor labels implemented as lenses.
@@ -81,7 +81,7 @@
base < 5
, template-haskell >= 2.2 && < 2.11
, mtl >= 1.0 && < 2.3
- , transformers >= 0.2 && < 0.5
+ , transformers >= 0.2 && < 0.6
Source-Repository head
Type: git
1
0
Hello community,
here is the log from the commit of package ghc-errors for openSUSE:Factory checked in at 2016-01-28 17:23:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-errors (Old)
and /work/SRC/openSUSE:Factory/.ghc-errors.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-errors"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-errors/ghc-errors.changes 2015-12-29 12:59:24.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-errors.new/ghc-errors.changes 2016-01-28 17:24:38.000000000 +0100
@@ -1,0 +2,11 @@
+Wed Jan 20 09:14:30 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 2.1.1
+* Increase upper bound on transformers-compat
+
+-------------------------------------------------------------------
+Mon Jan 11 07:51:40 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 2.1.0
+
+-------------------------------------------------------------------
Old:
----
errors-2.0.1.tar.gz
New:
----
errors-2.1.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-errors.spec ++++++
--- /var/tmp/diff_new_pack.yi2PNP/_old 2016-01-28 17:24:38.000000000 +0100
+++ /var/tmp/diff_new_pack.yi2PNP/_new 2016-01-28 17:24:38.000000000 +0100
@@ -18,7 +18,7 @@
%global pkg_name errors
Name: ghc-errors
-Version: 2.0.1
+Version: 2.1.1
Release: 0
Summary: Simplified error-handling
Group: System/Libraries
@@ -34,6 +34,7 @@
BuildRequires: ghc-safe-devel
BuildRequires: ghc-transformers-compat-devel
BuildRequires: ghc-transformers-devel
+BuildRequires: ghc-unexceptionalio-devel
# End cabal-rpm deps
%description
++++++ errors-2.0.1.tar.gz -> errors-2.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/errors-2.0.1/Control/Error/Util.hs new/errors-2.1.1/Control/Error/Util.hs
--- old/errors-2.0.1/Control/Error/Util.hs 2015-09-15 20:38:27.000000000 +0200
+++ new/errors-2.1.1/Control/Error/Util.hs 2016-01-16 23:09:57.000000000 +0100
@@ -51,7 +51,7 @@
) where
import Control.Applicative (Applicative, pure, (<$>))
-import qualified Control.Exception as Ex
+import Control.Exception (Handler(..), IOException, SomeException)
import Control.Monad (liftM)
import Control.Monad.IO.Class (MonadIO(liftIO))
import Control.Monad.Trans.Except (ExceptT(ExceptT), runExceptT)
@@ -61,6 +61,10 @@
import Data.Maybe (fromMaybe)
import System.Exit (ExitCode)
import System.IO (hPutStr, hPutStrLn, stderr)
+import UnexceptionalIO (UIO, Unexceptional)
+
+import qualified Control.Exception as Exception
+import qualified UnexceptionalIO as UIO
-- | Fold an 'ExceptT' by providing one continuation for each constructor
exceptT :: Monad m => (a -> m c) -> (b -> m c) -> ExceptT a m b -> m c
@@ -231,31 +235,12 @@
errLn :: String -> IO ()
errLn = hPutStrLn stderr
--- | Catch 'Ex.IOException's and convert them to the 'ExceptT' monad
-tryIO :: (MonadIO m) => IO a -> ExceptT Ex.IOException m a
-tryIO = ExceptT . liftIO . Ex.try
+-- | Catch 'IOException's and convert them to the 'ExceptT' monad
+tryIO :: MonadIO m => IO a -> ExceptT IOException m a
+tryIO = ExceptT . liftIO . Exception.try
{-| Catch all exceptions, except for asynchronous exceptions found in @base@
and convert them to the 'ExceptT' monad
-}
-syncIO :: MonadIO m => IO a -> ExceptT Ex.SomeException m a
-syncIO a = ExceptT . liftIO $ Ex.catches (Right <$> a)
- [ Ex.Handler $ \e -> Ex.throw (e :: Ex.ArithException)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.ArrayException)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.AssertionFailed)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.AsyncException)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.BlockedIndefinitelyOnMVar)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.BlockedIndefinitelyOnSTM)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.Deadlock)
- , Ex.Handler $ \e -> Ex.throw (e :: Dynamic)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.ErrorCall)
- , Ex.Handler $ \e -> Ex.throw (e :: ExitCode)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.NestedAtomically)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.NoMethodError)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.NonTermination)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.PatternMatchFail)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.RecConError)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.RecSelError)
- , Ex.Handler $ \e -> Ex.throw (e :: Ex.RecUpdError)
- , Ex.Handler $ return . Left
- ]
+syncIO :: Unexceptional m => IO a -> ExceptT SomeException m a
+syncIO = ExceptT . UIO.liftUIO . UIO.fromIO
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/errors-2.0.1/errors.cabal new/errors-2.1.1/errors.cabal
--- old/errors-2.0.1/errors.cabal 2015-09-15 20:38:27.000000000 +0200
+++ new/errors-2.1.1/errors.cabal 2016-01-16 23:09:57.000000000 +0100
@@ -1,5 +1,5 @@
Name: errors
-Version: 2.0.1
+Version: 2.1.1
Cabal-Version: >=1.8.0.2
Build-Type: Simple
License: BSD3
@@ -25,7 +25,8 @@
base >= 4 && < 5 ,
safe >= 0.3.3 && < 0.4,
transformers >= 0.2 && < 0.5,
- transformers-compat >= 0.4 && < 0.5
+ transformers-compat >= 0.4 && < 0.6,
+ unexceptionalio >= 0.3 && < 0.4
Exposed-Modules:
Control.Error,
Control.Error.Safe,
1
0
Hello community,
here is the log from the commit of package ghc-distributive for openSUSE:Factory checked in at 2016-01-28 17:23:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-distributive (Old)
and /work/SRC/openSUSE:Factory/.ghc-distributive.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-distributive"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-distributive/ghc-distributive.changes 2015-05-22 16:36:01.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-distributive.new/ghc-distributive.changes 2016-01-28 17:24:37.000000000 +0100
@@ -1,0 +2,8 @@
+Tue Jan 26 08:40:30 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.5.0.2
+* Added flags for removing some dependencies.
+* upport doctests when building to non-standard locations (such as when using stack.)
+* Support base-orphans
+
+-------------------------------------------------------------------
Old:
----
distributive-0.4.4.tar.gz
New:
----
distributive-0.5.0.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-distributive.spec ++++++
--- /var/tmp/diff_new_pack.iKKsux/_old 2016-01-28 17:24:38.000000000 +0100
+++ /var/tmp/diff_new_pack.iKKsux/_new 2016-01-28 17:24:38.000000000 +0100
@@ -21,7 +21,7 @@
%bcond_with tests
Name: ghc-distributive
-Version: 0.4.4
+Version: 0.5.0.2
Release: 0
Summary: Distributive functors -- Dual to Traversable
License: BSD-2-Clause
@@ -34,6 +34,7 @@
BuildRequires: ghc-Cabal-devel
BuildRequires: ghc-rpm-macros
# Begin cabal-rpm deps:
+BuildRequires: ghc-base-orphans-devel
BuildRequires: ghc-tagged-devel
BuildRequires: ghc-transformers-compat-devel
BuildRequires: ghc-transformers-devel
++++++ distributive-0.4.4.tar.gz -> distributive-0.5.0.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distributive-0.4.4/.ghci new/distributive-0.5.0.2/.ghci
--- old/distributive-0.4.4/.ghci 2014-05-05 22:51:17.000000000 +0200
+++ new/distributive-0.5.0.2/.ghci 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-:set -isrc -idist/build/autogen -optP-include -optPdist/build/autogen/cabal_macros.h
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distributive-0.4.4/.travis.yml new/distributive-0.5.0.2/.travis.yml
--- old/distributive-0.4.4/.travis.yml 2014-05-05 22:51:17.000000000 +0200
+++ new/distributive-0.5.0.2/.travis.yml 2016-01-17 01:07:48.000000000 +0100
@@ -1,17 +1,118 @@
-language: haskell
-before_install:
- # Uncomment whenever hackage is down.
- # - mkdir -p ~/.cabal && cp config ~/.cabal/config && cabal update
+# This file has been generated -- see https://github.com/hvr/multi-ghc-travis
+language: c
+sudo: false
+
+cache:
+ directories:
+ - $HOME/.cabsnap
+ - $HOME/.cabal/packages
+ - $HOME/.stack
+
+before_cache:
+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar
+
+matrix:
+ include:
+ - env: CABALVER=1.18 GHCVER=7.4.2 BUILD=cabal
+ compiler: ": #GHC 7.4.2"
+ addons: {apt: {packages: [cabal-install-1.18,ghc-7.4.2,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}
+
+ - env: CABALVER=1.18 GHCVER=7.6.3 BUILD=cabal
+ compiler: ": #GHC 7.6.3"
+ addons: {apt: {packages: [cabal-install-1.18,ghc-7.6.3,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}
+
+ - env: CABALVER=1.18 GHCVER=7.8.4 BUILD=cabal
+ compiler: ": #GHC 7.8.4"
+ addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}
+
+# - env: BUILD=stack STACK_YAML=stack-7.8.yaml STACK_OPTIONS=--skip-ghc-check
+# addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}
+
+# - env: BUILD=stack STACK_YAML=stack-7.8.yaml
+# os: osx
- # Try installing some of the build-deps with apt-get for speed.
- - ./travis-cabal-apt-install --only-dependencies --force-reinstall $mode
+ - env: CABALVER=1.22 GHCVER=7.10.1 BUILD=cabal
+ compiler: ": #GHC 7.10.1"
+ addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.1,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}
+ - env: CABALVER=1.22 GHCVER=7.10.2 BUILD=cabal
+ compiler: ": #GHC 7.10.2"
+ addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.2,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}
+
+ - env: BUILD=stack STACK_OPTIONS=--skip-ghc-check
+ addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.2,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}
+
+ - env: BUILD=stack
+ os: osx
+
+
+before_install:
+ - unset CC
+ - case "$BUILD" in
+ stack)
+ export STACK_VERSION=0.1.3.0;
+ export PATH=~/bin:$PATH;
+ mkdir -p ~/bin;
+ travis_retry curl -L https://github.com/commercialhaskell/stack/releases/download/v$STACK_VERSIO… | gunzip > ~/bin/stack;
+ chmod a+x ~/bin/stack;
+ scripts/travis_long stack --no-terminal setup;;
+ cabal)
+ export HAPPYVER=1.19.5
+ export ALEXVER=3.1.4
+ export PATH=~/.cabal/bin:/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:/opt/happy/$HAPPYVER/bin:/opt/alex/$ALEXVER/bin:$PATH;;
+ esac
install:
- - cabal configure -flib-Werror $mode
- - cabal build
+ - case "$BUILD" in
+ stack)
+ scripts/travis_long stack --no-terminal $STACK_OPTIONS build --only-snapshot -j2;;
+ cabal)
+ echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
+ cabal --version;
+ if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];
+ then
+ zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >
+ $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;
+ fi;
+ travis_retry cabal update;
+ cabal install --only-dependencies --enable-tests --enable-benchmarks --dry -v > installplan.txt;
+ sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt;
+ if diff -u installplan.txt $HOME/.cabsnap/installplan.txt; then
+ echo "cabal build-cache HIT";
+ rm -rfv .ghc;
+ cp -a $HOME/.cabsnap/ghc $HOME/.ghc;
+ cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;
+ else
+ echo "cabal build-cache MISS";
+ rm -rf $HOME/.cabsnap;
+ mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
+ cabal install --only-dependencies --enable-tests --enable-benchmarks;
+ if [ "$GHCVER" = "7.10.1" ]; then cabal install Cabal-1.22.4.0; fi;
+ fi;
+ if [ ! -d $HOME/.cabsnap ]; then
+ echo "snapshotting package-db to build-cache";
+ mkdir $HOME/.cabsnap;
+ cp -a $HOME/.ghc $HOME/.cabsnap/ghc;
+ cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;
+ fi;;
+ esac
+
+# snapshot package-db on cache miss
+# Here starts the actual work to be performed for the package under test;
+# any command which exits with a non-zero exit code causes the build to fail.
script:
- - $script
+ - case "$BUILD" in
+ stack)
+ scripts/travis_long stack --no-terminal $STACK_OPTIONS build -j2;;
+ cabal)
+ cabal configure --enable-tests -v2;
+ cabal build;
+ cabal test;
+ cabal bench || true;
+ cabal sdist || true;
+ SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz && (cd dist && cabal install --force-reinstalls "$SRC_TGZ");;
+ esac
notifications:
irc:
@@ -19,7 +120,5 @@
- "irc.freenode.org#haskell-lens"
skip_join: true
template:
- - "\x0313distributive\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"
-
-env:
- - mode="--enable-tests" script="cabal test"
+ - "\x0313distributive\x0f/\x0306%{branch}\x0f \x0314%{commit}\x0f %{message} \x0302\x1f%{build_url}\x0f"
+# EOF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distributive-0.4.4/CHANGELOG.markdown new/distributive-0.5.0.2/CHANGELOG.markdown
--- old/distributive-0.4.4/CHANGELOG.markdown 2014-05-05 22:51:17.000000000 +0200
+++ new/distributive-0.5.0.2/CHANGELOG.markdown 2016-01-17 01:07:48.000000000 +0100
@@ -1,3 +1,17 @@
+0.5.0.2
+-------
+* A more elegant fix for builds on GHC 7.2
+
+0.5.0.1
+-------
+* Fix builds on GHC 7.2
+
+0.5
+---
+* Added flags for removing some dependencies.
+* Support `doctests` when building to non-standard locations (such as when using `stack`.)
+* Support `base-orphans`
+
0.4.4
-----
* `transformers 0.4` compatibility
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distributive-0.4.4/LICENSE new/distributive-0.5.0.2/LICENSE
--- old/distributive-0.4.4/LICENSE 2014-05-05 22:51:17.000000000 +0200
+++ new/distributive-0.5.0.2/LICENSE 2016-01-17 01:07:48.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright 2011-2014 Edward Kmett
+Copyright 2011-2016 Edward Kmett
All rights reserved.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distributive-0.4.4/README.markdown new/distributive-0.5.0.2/README.markdown
--- old/distributive-0.4.4/README.markdown 2014-05-05 22:51:17.000000000 +0200
+++ new/distributive-0.5.0.2/README.markdown 2016-01-17 01:07:48.000000000 +0100
@@ -1,7 +1,7 @@
distributive
============
-[![Build Status](https://secure.travis-ci.org/ekmett/distributive.png?branch=master)…
+[![Hackage](https://img.shields.io/hackage/v/distributive.svg)](https://hackage.haskell.org/package/distributive) [![Build Status](https://secure.travis-ci.org/ekmett/distributive.png?branch=master)…
This package provides the notion that is categorically dual to `Traversable`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distributive-0.4.4/Setup.lhs new/distributive-0.5.0.2/Setup.lhs
--- old/distributive-0.4.4/Setup.lhs 2014-05-05 22:51:17.000000000 +0200
+++ new/distributive-0.5.0.2/Setup.lhs 2016-01-17 01:07:48.000000000 +0100
@@ -30,6 +30,10 @@
withTestLBI pkg lbi $ \suite suitecfg -> do
rewriteFile (dir </> "Build_" ++ testName suite ++ ".hs") $ unlines
[ "module Build_" ++ testName suite ++ " where"
+ , ""
+ , "autogen_dir :: String"
+ , "autogen_dir = " ++ show dir
+ , ""
, "deps :: [String]"
, "deps = " ++ (show $ formatdeps (testDeps libcfg suitecfg))
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distributive-0.4.4/distributive.cabal new/distributive-0.5.0.2/distributive.cabal
--- old/distributive-0.4.4/distributive.cabal 2014-05-05 22:51:17.000000000 +0200
+++ new/distributive-0.5.0.2/distributive.cabal 2016-01-17 01:07:48.000000000 +0100
@@ -1,6 +1,6 @@
name: distributive
category: Data Structures
-version: 0.4.4
+version: 0.5.0.2
license: BSD3
cabal-version: >= 1.8
license-file: LICENSE
@@ -9,12 +9,11 @@
stability: provisional
homepage: http://github.com/ekmett/distributive/
bug-reports: http://github.com/ekmett/distributive/issues
-copyright: Copyright (C) 2011-2014 Edward A. Kmett
+copyright: Copyright (C) 2011-2016 Edward A. Kmett
synopsis: Distributive functors -- Dual to Traversable
description: Distributive functors -- Dual to Traversable
build-type: Custom
extra-source-files:
- .ghci
.travis.yml
.vim.custom
config
@@ -26,15 +25,19 @@
type: git
location: git://github.com/ekmett/distributive.git
-flag lib-Werror
+flag tagged
manual: True
- default: False
+ default: True
+ description:
+ You can disable the use of the `tagged` package using `-f-tagged`.
+ .
+ Disabling this is an unsupported configuration, but it may be useful for accelerating builds in sandboxes for expert users.
library
build-depends:
base >= 4 && < 5,
- tagged >= 0.7 && < 1,
- transformers >= 0.2 && < 0.5,
+ base-orphans >= 0.5 && < 1,
+ transformers >= 0.2 && < 0.6,
transformers-compat >= 0.3 && < 1
hs-source-dirs: src
@@ -43,12 +46,14 @@
if impl(ghc>=7.2)
exposed-modules: Data.Distributive.Generic
+
+ if flag(tagged)
+ build-depends: tagged >= 0.7 && < 1
+
+ if impl(ghc>=7.2 && < 7.6)
build-depends: ghc-prim
- if flag(lib-Werror)
- ghc-options: -Werror
- else
- ghc-options: -Wall
+ ghc-options: -Wall
-- Verify the results of the examples
test-suite doctests
@@ -60,6 +65,4 @@
doctest >= 0.9.1,
filepath >= 1.2
ghc-options: -Wall -threaded
- if impl(ghc<7.6.1)
- ghc-options: -Werror
hs-source-dirs: tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distributive-0.4.4/src/Data/Distributive/Generic.hs new/distributive-0.5.0.2/src/Data/Distributive/Generic.hs
--- old/distributive-0.4.4/src/Data/Distributive/Generic.hs 2014-05-05 22:51:17.000000000 +0200
+++ new/distributive-0.5.0.2/src/Data/Distributive/Generic.hs 2016-01-17 01:07:48.000000000 +0100
@@ -4,7 +4,7 @@
-----------------------------------------------------------------------------
-- |
-- Module : Data.Distributive
--- Copyright : (C) 2011-2014 Edward Kmett
+-- Copyright : (C) 2011-2016 Edward Kmett
-- License : BSD-style (see the file LICENSE)
--
-- Maintainer : Edward Kmett <ekmett(a)gmail.com>
@@ -45,7 +45,7 @@
sndP (_ :*: r) = r
{-# INLINE gdistribute #-}
-instance (Functor a, Functor b, GDistributive a, GDistributive b) => GDistributive (a :.: b) where
+instance (Functor a, GDistributive a, GDistributive b) => GDistributive (a :.: b) where
gdistribute = Comp1 . fmap gdistribute . gdistribute . fmap unComp1
{-# INLINE gdistribute #-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distributive-0.4.4/src/Data/Distributive.hs new/distributive-0.5.0.2/src/Data/Distributive.hs
--- old/distributive-0.4.4/src/Data/Distributive.hs 2014-05-05 22:51:17.000000000 +0200
+++ new/distributive-0.5.0.2/src/Data/Distributive.hs 2016-01-17 01:07:48.000000000 +0100
@@ -3,7 +3,7 @@
-----------------------------------------------------------------------------
-- |
-- Module : Data.Distributive
--- Copyright : (C) 2011-2014 Edward Kmett
+-- Copyright : (C) 2011-2016 Edward Kmett
-- License : BSD-style (see the file LICENSE)
--
-- Maintainer : Edward Kmett <ekmett(a)gmail.com>
@@ -29,8 +29,18 @@
import Data.Functor.Identity
import Data.Functor.Product
import Data.Functor.Reverse
+import qualified Data.Monoid as Monoid
+import Data.Orphans ()
+
+#if MIN_VERSION_base(4,4,0)
+import Data.Complex
+#endif
+#if (defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 707) || defined(MIN_VERSION_tagged)
import Data.Proxy
+#endif
+#ifdef MIN_VERSION_tagged
import Data.Tagged
+#endif
#ifdef HLINT
{-# ANN module "hlint: ignore Use section" #-}
@@ -125,3 +135,24 @@
instance Distributive f => Distributive (Reverse f) where
distribute = Reverse . collect getReverse
+
+instance Distributive Monoid.Dual where
+ collect f = Monoid.Dual . fmap (Monoid.getDual . f)
+ distribute = Monoid.Dual . fmap Monoid.getDual
+
+instance Distributive Monoid.Product where
+ collect f = Monoid.Product . fmap (Monoid.getProduct . f)
+ distribute = Monoid.Product . fmap Monoid.getProduct
+
+instance Distributive Monoid.Sum where
+ collect f = Monoid.Sum . fmap (Monoid.getSum . f)
+ distribute = Monoid.Sum . fmap Monoid.getSum
+
+#if MIN_VERSION_base(4,4,0)
+instance Distributive Complex where
+ distribute wc = fmap realP wc :+ fmap imagP wc where
+ -- Redefine realPart and imagPart to avoid incurring redundant RealFloat
+ -- constraints on older versions of base
+ realP (r :+ _) = r
+ imagP (_ :+ i) = i
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/distributive-0.4.4/tests/doctests.hs new/distributive-0.5.0.2/tests/doctests.hs
--- old/distributive-0.4.4/tests/doctests.hs 2014-05-05 22:51:17.000000000 +0200
+++ new/distributive-0.5.0.2/tests/doctests.hs 2016-01-17 01:07:48.000000000 +0100
@@ -1,7 +1,10 @@
+{-# LANGUAGE CPP #-}
module Main where
-import Build_doctests (deps)
+import Build_doctests (autogen_dir, deps)
+#if __GLASGOW_HASKELL__ < 710
import Control.Applicative
+#endif
import Control.Monad
import Data.List
import System.Directory
@@ -11,9 +14,9 @@
main :: IO ()
main = getSources >>= \sources -> doctest $
"-isrc"
- : "-idist/build/autogen"
+ : ("-i" ++ autogen_dir)
: "-optP-include"
- : "-optPdist/build/autogen/cabal_macros.h"
+ : ("-optP" ++ autogen_dir ++ "/cabal_macros.h")
: "-hide-all-packages"
: map ("-package="++) deps ++ sources
1
0
Hello community,
here is the log from the commit of package ghc-contravariant for openSUSE:Factory checked in at 2016-01-28 17:23:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-contravariant (Old)
and /work/SRC/openSUSE:Factory/.ghc-contravariant.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-contravariant"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-contravariant/ghc-contravariant.changes 2015-09-17 09:19:15.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-contravariant.new/ghc-contravariant.changes 2016-01-28 17:24:36.000000000 +0100
@@ -1,0 +2,7 @@
+Fri Jan 22 08:35:07 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 1.4
+* Improved the performance of Deciding at the cost of downgrading it to Trustworthy.
+* Support for transformers 0.5
+
+-------------------------------------------------------------------
Old:
----
contravariant-1.3.3.tar.gz
New:
----
contravariant-1.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-contravariant.spec ++++++
--- /var/tmp/diff_new_pack.0aGwI2/_old 2016-01-28 17:24:37.000000000 +0100
+++ /var/tmp/diff_new_pack.0aGwI2/_new 2016-01-28 17:24:37.000000000 +0100
@@ -19,7 +19,7 @@
%global pkg_name contravariant
Name: ghc-contravariant
-Version: 1.3.3
+Version: 1.4
Release: 0
Summary: Contravariant functors
License: BSD-3-Clause
@@ -34,6 +34,7 @@
# Begin cabal-rpm deps:
BuildRequires: ghc-StateVar-devel
BuildRequires: ghc-semigroups-devel
+BuildRequires: ghc-tagged-devel
BuildRequires: ghc-transformers-compat-devel
BuildRequires: ghc-transformers-devel
BuildRequires: ghc-void-devel
++++++ contravariant-1.3.3.tar.gz -> contravariant-1.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/contravariant-1.3.3/CHANGELOG.markdown new/contravariant-1.4/CHANGELOG.markdown
--- old/contravariant-1.3.3/CHANGELOG.markdown 2015-09-04 12:33:20.000000000 +0200
+++ new/contravariant-1.4/CHANGELOG.markdown 2016-01-16 22:55:58.000000000 +0100
@@ -1,3 +1,9 @@
+1.4
+---
+* Improved the performance of `Deciding` at the cost of downgrading it to `Trustworthy`.
+* Support for GHC 8
+* Support for `transformers` 0.5
+
1.3.3
-----
* Add `instance Monoid m => Divisible (Const m)`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/contravariant-1.3.3/contravariant.cabal new/contravariant-1.4/contravariant.cabal
--- old/contravariant-1.3.3/contravariant.cabal 2015-09-04 12:33:20.000000000 +0200
+++ new/contravariant-1.4/contravariant.cabal 2016-01-16 22:55:58.000000000 +0100
@@ -1,6 +1,6 @@
name: contravariant
category: Control, Data
-version: 1.3.3
+version: 1.4
license: BSD3
cabal-version: >= 1.6
license-file: LICENSE
@@ -38,6 +38,11 @@
default: True
manual: True
+flag safe
+ description: Get Safe guarantees rather than merely Trustworthy, but with worse constant factors.
+ default: False
+ manual: True
+
flag StateVar
description:
You can disable the use of the `StateVar` package using `-f-StateVar`.
@@ -50,7 +55,7 @@
hs-source-dirs: src
build-depends:
base < 5,
- transformers >= 0.2 && < 0.5,
+ transformers >= 0.2 && < 0.6,
transformers-compat >= 0.3 && < 1,
void >= 0.6 && < 1
@@ -66,6 +71,9 @@
if impl(ghc >= 7.2 && < 7.6)
build-depends: ghc-prim
+ if flag(safe)
+ cpp-options: -DSAFE
+
exposed-modules:
Data.Functor.Contravariant
Data.Functor.Contravariant.Compose
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/contravariant-1.3.3/src/Data/Functor/Contravariant/Divisible.hs new/contravariant-1.4/src/Data/Functor/Contravariant/Divisible.hs
--- old/contravariant-1.3.3/src/Data/Functor/Contravariant/Divisible.hs 2015-09-04 12:33:20.000000000 +0200
+++ new/contravariant-1.4/src/Data/Functor/Contravariant/Divisible.hs 2016-01-16 22:55:58.000000000 +0100
@@ -1,4 +1,7 @@
{-# LANGUAGE CPP #-}
+{-# LANGUAGE TypeOperators #-}
+{-# OPTIONS_GHC -fno-warn-deprecations #-}
+
-----------------------------------------------------------------------------
-- |
-- Module : Data.Functor.Contravariant.Divisible
@@ -20,18 +23,48 @@
) where
import Control.Applicative
+import Control.Applicative.Backwards
+import Control.Arrow
+import Control.Monad.Trans.Error
+import Control.Monad.Trans.Except
+import Control.Monad.Trans.Identity
+import Control.Monad.Trans.List
+import Control.Monad.Trans.Maybe
+import qualified Control.Monad.Trans.RWS.Lazy as Lazy
+import qualified Control.Monad.Trans.RWS.Strict as Strict
+import Control.Monad.Trans.Reader
+import qualified Control.Monad.Trans.State.Lazy as Lazy
+import qualified Control.Monad.Trans.State.Strict as Strict
+import qualified Control.Monad.Trans.Writer.Lazy as Lazy
+import qualified Control.Monad.Trans.Writer.Strict as Strict
+
+import Data.Either
+import Data.Functor.Compose
+import Data.Functor.Constant
import Data.Functor.Contravariant
+import Data.Functor.Product
+import Data.Functor.Reverse
+import Data.Void
-#if __GLASGOW_HASKELL__ < 710
-import Data.Monoid
+#if MIN_VERSION_base(4,8,0)
+import Data.Monoid (Alt(..))
+#else
+import Data.Monoid (Monoid(..))
#endif
-import Data.Void
+#if MIN_VERSION_base(4,7,0) || defined(MIN_VERSION_tagged)
+import Data.Proxy
+#endif
#if MIN_VERSION_StateVar
import Data.StateVar
#endif
+#if __GLASGOW_HASKELL__ >= 702
+#define GHC_GENERICS
+import GHC.Generics
+#endif
+
--------------------------------------------------------------------------------
-- * Contravariant Applicative
--------------------------------------------------------------------------------
@@ -53,7 +86,7 @@
-- @
-- delta a = (a,a)
-- @
---
+--
-- @'divide' 'delta'@ should be associative with 'conquer' as a unit
--
-- @
@@ -94,7 +127,7 @@
-- | Redundant, but provided for symmetry.
--
-- @
--- 'conquered' = 'conquer
+-- 'conquered' = 'conquer'
-- @
conquered :: Divisible f => f ()
conquered = conquer
@@ -108,7 +141,7 @@
-- @
liftD :: Divisible f => (a -> b) -> f b -> f a
liftD f = divide ((,) () . f) conquer
-
+
instance Monoid r => Divisible (Op r) where
divide f (Op g) (Op h) = Op $ \a -> case f a of
(b, c) -> g b `mappend` h c
@@ -135,6 +168,118 @@
divide _ (Const a) (Const b) = Const (mappend a b)
conquer = Const mempty
+#if MIN_VERSION_base(4,8,0)
+instance Divisible f => Divisible (Alt f) where
+ divide f (Alt l) (Alt r) = Alt $ divide f l r
+ conquer = Alt conquer
+#endif
+
+#ifdef GHC_GENERICS
+instance Divisible U1 where
+ divide _ U1 U1 = U1
+ conquer = U1
+
+instance Divisible f => Divisible (Rec1 f) where
+ divide f (Rec1 l) (Rec1 r) = Rec1 $ divide f l r
+ conquer = Rec1 conquer
+
+instance Divisible f => Divisible (M1 i c f) where
+ divide f (M1 l) (M1 r) = M1 $ divide f l r
+ conquer = M1 conquer
+
+instance (Divisible f, Divisible g) => Divisible (f :*: g) where
+ divide f (l1 :*: r1) (l2 :*: r2) = divide f l1 l2 :*: divide f r1 r2
+ conquer = conquer :*: conquer
+
+instance (Applicative f, Divisible g) => Divisible (f :.: g) where
+ divide f (Comp1 l) (Comp1 r) = Comp1 (divide f <$> l <*> r)
+ conquer = Comp1 $ pure conquer
+#endif
+
+instance Divisible f => Divisible (Backwards f) where
+ divide f (Backwards l) (Backwards r) = Backwards $ divide f l r
+ conquer = Backwards conquer
+
+instance Divisible m => Divisible (ErrorT e m) where
+ divide f (ErrorT l) (ErrorT r) = ErrorT $ divide (funzip . fmap f) l r
+ conquer = ErrorT conquer
+
+instance Divisible m => Divisible (ExceptT e m) where
+ divide f (ExceptT l) (ExceptT r) = ExceptT $ divide (funzip . fmap f) l r
+ conquer = ExceptT conquer
+
+instance Divisible f => Divisible (IdentityT f) where
+ divide f (IdentityT l) (IdentityT r) = IdentityT $ divide f l r
+ conquer = IdentityT conquer
+
+instance Divisible m => Divisible (ListT m) where
+ divide f (ListT l) (ListT r) = ListT $ divide (funzip . map f) l r
+ conquer = ListT conquer
+
+instance Divisible m => Divisible (MaybeT m) where
+ divide f (MaybeT l) (MaybeT r) = MaybeT $ divide (funzip . fmap f) l r
+ conquer = MaybeT conquer
+
+instance Divisible m => Divisible (ReaderT r m) where
+ divide abc (ReaderT rmb) (ReaderT rmc) = ReaderT $ \r -> divide abc (rmb r) (rmc r)
+ conquer = ReaderT $ \_ -> conquer
+
+instance Divisible m => Divisible (Lazy.RWST r w s m) where
+ divide abc (Lazy.RWST rsmb) (Lazy.RWST rsmc) = Lazy.RWST $ \r s ->
+ divide (\ ~(a, s', w) -> case abc a of
+ ~(b, c) -> ((b, s', w), (c, s', w)))
+ (rsmb r s) (rsmc r s)
+ conquer = Lazy.RWST $ \_ _ -> conquer
+
+instance Divisible m => Divisible (Strict.RWST r w s m) where
+ divide abc (Strict.RWST rsmb) (Strict.RWST rsmc) = Strict.RWST $ \r s ->
+ divide (\(a, s', w) -> case abc a of
+ (b, c) -> ((b, s', w), (c, s', w)))
+ (rsmb r s) (rsmc r s)
+ conquer = Strict.RWST $ \_ _ -> conquer
+
+instance Divisible m => Divisible (Lazy.StateT s m) where
+ divide f (Lazy.StateT l) (Lazy.StateT r) = Lazy.StateT $ \s ->
+ divide (lazyFanout f) (l s) (r s)
+ conquer = Lazy.StateT $ \_ -> conquer
+
+instance Divisible m => Divisible (Strict.StateT s m) where
+ divide f (Strict.StateT l) (Strict.StateT r) = Strict.StateT $ \s ->
+ divide (strictFanout f) (l s) (r s)
+ conquer = Strict.StateT $ \_ -> conquer
+
+instance Divisible m => Divisible (Lazy.WriterT w m) where
+ divide f (Lazy.WriterT l) (Lazy.WriterT r) = Lazy.WriterT $
+ divide (lazyFanout f) l r
+ conquer = Lazy.WriterT conquer
+
+instance Divisible m => Divisible (Strict.WriterT w m) where
+ divide f (Strict.WriterT l) (Strict.WriterT r) = Strict.WriterT $
+ divide (strictFanout f) l r
+ conquer = Strict.WriterT conquer
+
+instance (Applicative f, Divisible g) => Divisible (Compose f g) where
+ divide f (Compose l) (Compose r) = Compose (divide f <$> l <*> r)
+ conquer = Compose $ pure conquer
+
+instance Monoid m => Divisible (Constant m) where
+ divide _ (Constant l) (Constant r) = Constant $ mappend l r
+ conquer = Constant mempty
+
+instance (Divisible f, Divisible g) => Divisible (Product f g) where
+ divide f (Pair l1 r1) (Pair l2 r2) = Pair (divide f l1 l2) (divide f r1 r2)
+ conquer = Pair conquer conquer
+
+instance Divisible f => Divisible (Reverse f) where
+ divide f (Reverse l) (Reverse r) = Reverse $ divide f l r
+ conquer = Reverse conquer
+
+#if MIN_VERSION_base(4,7,0) || defined(MIN_VERSION_tagged)
+instance Divisible Proxy where
+ divide _ Proxy Proxy = Proxy
+ conquer = Proxy
+#endif
+
#if MIN_VERSION_StateVar
instance Divisible SettableStateVar where
divide k (SettableStateVar l) (SettableStateVar r) = SettableStateVar $ \ a -> case k a of
@@ -142,13 +287,24 @@
conquer = SettableStateVar $ \_ -> return ()
#endif
+lazyFanout :: (a -> (b, c)) -> (a, s) -> ((b, s), (c, s))
+lazyFanout f ~(a, s) = case f a of
+ ~(b, c) -> ((b, s), (c, s))
+
+strictFanout :: (a -> (b, c)) -> (a, s) -> ((b, s), (c, s))
+strictFanout f (a, s) = case f a of
+ (b, c) -> ((b, s), (c, s))
+
+funzip :: Functor f => f (a, b) -> (f a, f b)
+funzip = fmap fst &&& fmap snd
+
--------------------------------------------------------------------------------
-- * Contravariant Alternative
--------------------------------------------------------------------------------
-- |
--
--- A 'Divisible' contravariant functor is a monoid object in the category of presheaves
+-- A 'Divisible' contravariant functor is a monoid object in the category of presheaves
-- from Hask to Hask, equipped with Day convolution mapping the cartesian product of the
-- source to the Cartesian product of the target.
--
@@ -210,6 +366,123 @@
lose f = Op $ absurd . f
choose f (Op g) (Op h) = Op $ either g h . f
+#if MIN_VERSION_base(4,8,0)
+instance Decidable f => Decidable (Alt f) where
+ lose = Alt . lose
+ choose f (Alt l) (Alt r) = Alt $ choose f l r
+#endif
+
+#ifdef GHC_GENERICS
+instance Decidable U1 where
+ lose _ = U1
+ choose _ U1 U1 = U1
+
+instance Decidable f => Decidable (Rec1 f) where
+ lose = Rec1 . lose
+ choose f (Rec1 l) (Rec1 r) = Rec1 $ choose f l r
+
+instance Decidable f => Decidable (M1 i c f) where
+ lose = M1 . lose
+ choose f (M1 l) (M1 r) = M1 $ choose f l r
+
+instance (Decidable f, Decidable g) => Decidable (f :*: g) where
+ lose f = lose f :*: lose f
+ choose f (l1 :*: r1) (l2 :*: r2) = choose f l1 l2 :*: choose f r1 r2
+
+instance (Applicative f, Decidable g) => Decidable (f :.: g) where
+ lose = Comp1 . pure . lose
+ choose f (Comp1 l) (Comp1 r) = Comp1 (choose f <$> l <*> r)
+#endif
+
+instance Decidable f => Decidable (Backwards f) where
+ lose = Backwards . lose
+ choose f (Backwards l) (Backwards r) = Backwards $ choose f l r
+
+instance Decidable f => Decidable (IdentityT f) where
+ lose = IdentityT . lose
+ choose f (IdentityT l) (IdentityT r) = IdentityT $ choose f l r
+
+instance Decidable m => Decidable (ReaderT r m) where
+ lose f = ReaderT $ \_ -> lose f
+ choose abc (ReaderT rmb) (ReaderT rmc) = ReaderT $ \r -> choose abc (rmb r) (rmc r)
+
+instance Decidable m => Decidable (Lazy.RWST r w s m) where
+ lose f = Lazy.RWST $ \_ _ -> contramap (\ ~(a, _, _) -> a) (lose f)
+ choose abc (Lazy.RWST rsmb) (Lazy.RWST rsmc) = Lazy.RWST $ \r s ->
+ choose (\ ~(a, s', w) -> either (Left . betuple3 s' w)
+ (Right . betuple3 s' w)
+ (abc a))
+ (rsmb r s) (rsmc r s)
+
+instance Decidable m => Decidable (Strict.RWST r w s m) where
+ lose f = Strict.RWST $ \_ _ -> contramap (\(a, _, _) -> a) (lose f)
+ choose abc (Strict.RWST rsmb) (Strict.RWST rsmc) = Strict.RWST $ \r s ->
+ choose (\(a, s', w) -> either (Left . betuple3 s' w)
+ (Right . betuple3 s' w)
+ (abc a))
+ (rsmb r s) (rsmc r s)
+
+instance Divisible m => Decidable (ListT m) where
+ lose _ = ListT conquer
+ choose f (ListT l) (ListT r) = ListT $ divide ((lefts &&& rights) . map f) l r
+
+instance Divisible m => Decidable (MaybeT m) where
+ lose _ = MaybeT conquer
+ choose f (MaybeT l) (MaybeT r) = MaybeT $
+ divide ( maybe (Nothing, Nothing)
+ (either (\b -> (Just b, Nothing))
+ (\c -> (Nothing, Just c)))
+ . fmap f) l r
+
+instance Decidable m => Decidable (Lazy.StateT s m) where
+ lose f = Lazy.StateT $ \_ -> contramap lazyFst (lose f)
+ choose f (Lazy.StateT l) (Lazy.StateT r) = Lazy.StateT $ \s ->
+ choose (\ ~(a, s') -> either (Left . betuple s') (Right . betuple s') (f a))
+ (l s) (r s)
+
+instance Decidable m => Decidable (Strict.StateT s m) where
+ lose f = Strict.StateT $ \_ -> contramap fst (lose f)
+ choose f (Strict.StateT l) (Strict.StateT r) = Strict.StateT $ \s ->
+ choose (\(a, s') -> either (Left . betuple s') (Right . betuple s') (f a))
+ (l s) (r s)
+
+instance Decidable m => Decidable (Lazy.WriterT w m) where
+ lose f = Lazy.WriterT $ contramap lazyFst (lose f)
+ choose f (Lazy.WriterT l) (Lazy.WriterT r) = Lazy.WriterT $
+ choose (\ ~(a, s') -> either (Left . betuple s') (Right . betuple s') (f a)) l r
+
+instance Decidable m => Decidable (Strict.WriterT w m) where
+ lose f = Strict.WriterT $ contramap fst (lose f)
+ choose f (Strict.WriterT l) (Strict.WriterT r) = Strict.WriterT $
+ choose (\(a, s') -> either (Left . betuple s') (Right . betuple s') (f a)) l r
+
+instance (Applicative f, Decidable g) => Decidable (Compose f g) where
+ lose = Compose . pure . lose
+ choose f (Compose l) (Compose r) = Compose (choose f <$> l <*> r)
+
+instance (Decidable f, Decidable g) => Decidable (Product f g) where
+ lose f = Pair (lose f) (lose f)
+ choose f (Pair l1 r1) (Pair l2 r2) = Pair (choose f l1 l2) (choose f r1 r2)
+
+instance Decidable f => Decidable (Reverse f) where
+ lose = Reverse . lose
+ choose f (Reverse l) (Reverse r) = Reverse $ choose f l r
+
+betuple :: s -> a -> (a, s)
+betuple s a = (a, s)
+
+betuple3 :: s -> w -> a -> (a, s, w)
+betuple3 s w a = (a, s, w)
+
+lazyFst :: (a, b) -> a
+lazyFst ~(a, _) = a
+
+#if MIN_VERSION_base(4,7,0) || defined(MIN_VERSION_tagged)
+instance Decidable Proxy where
+ lose _ = Proxy
+ choose _ Proxy Proxy = Proxy
+#endif
+
#if MIN_VERSION_StateVar
instance Decidable SettableVar where
lose k = SettableStateVar (absurd . k)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/contravariant-1.3.3/src/Data/Functor/Contravariant/Generic.hs new/contravariant-1.4/src/Data/Functor/Contravariant/Generic.hs
--- old/contravariant-1.3.3/src/Data/Functor/Contravariant/Generic.hs 2015-09-04 12:33:20.000000000 +0200
+++ new/contravariant-1.4/src/Data/Functor/Contravariant/Generic.hs 2016-01-16 22:55:58.000000000 +0100
@@ -1,5 +1,9 @@
{-# LANGUAGE CPP #-}
+#ifdef SAFE
{-# LANGUAGE BangPatterns #-}
+#elif __GLASGOW_HASKELL__ >= 704
+{-# LANGUAGE Trustworthy #-}
+#endif
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleInstances #-}
@@ -32,6 +36,9 @@
import Data.Functor.Contravariant
import Data.Functor.Contravariant.Divisible
import GHC.Generics
+#ifndef SAFE
+import Unsafe.Coerce
+#endif
-- | This provides machinery for deconstructing an arbitrary 'Generic' instance using a 'Decidable' 'Contravariant' functor.
--
@@ -84,13 +91,13 @@
gdeciding _ _ = conquer
instance GDeciding q V1 where
- gdeciding _ _ = lose (\ !_ -> error "impossible")
+ gdeciding _ _ = glose
instance (GDeciding q f, GDeciding q g) => GDeciding q (f :*: g) where
- gdeciding p q = divide (\(a :*: b) -> (a, b)) (gdeciding p q) (gdeciding p q)
+ gdeciding p q = gdivide (gdeciding p q) (gdeciding p q)
instance (GDeciding q f, GDeciding q g) => GDeciding q (f :+: g) where
- gdeciding p q = choose (\ xs -> case xs of L1 a -> Left a; R1 a -> Right a) (gdeciding p q) (gdeciding p q)
+ gdeciding p q = gchoose (gdeciding p q) (gdeciding p q)
#ifndef HLINT
instance q p => GDeciding q (K1 i p) where
@@ -109,18 +116,44 @@
gdeciding1 _ _ _ = conquer
instance GDeciding1 q V1 where
- gdeciding1 _ _ _ = lose (\ !_ -> error "impossible")
+ gdeciding1 _ _ _ = glose
instance (GDeciding1 q f, GDeciding1 q g) => GDeciding1 q (f :*: g) where
- gdeciding1 p q r = divide (\(a :*: b) -> (a, b)) (gdeciding1 p q r) (gdeciding1 p q r)
+ gdeciding1 p q r = gdivide (gdeciding1 p q r) (gdeciding1 p q r)
instance (GDeciding1 q f, GDeciding1 q g) => GDeciding1 q (f :+: g) where
- gdeciding1 p q r = choose (\ xs -> case xs of L1 a -> Left a; R1 a -> Right a) (gdeciding1 p q r) (gdeciding1 p q r)
+ gdeciding1 p q r = gchoose (gdeciding1 p q r) (gdeciding1 p q r)
+
+
+
+glose :: Decidable f => f (V1 a)
+#ifdef SAFE
+glose = lose (\ !_ -> error "impossible")
+#else
+glose = lose unsafeCoerce
+#endif
+{-# INLINE glose #-}
+
+gdivide :: Divisible f => f (g a) -> f (h a) -> f ((g:*:h) a)
+#ifdef SAFE
+gdivide = divide (\(f:*:g) -> (f,g))
+#else
+gdivide = divide unsafeCoerce
+#endif
+{-# INLINE gdivide #-}
+
+gchoose :: Decidable f => f (g a) -> f (h a) -> f ((g:+:h) a)
+#ifdef SAFE
+gchoose = choose (\xs -> case xs of L1 a -> Left a; R1 b -> Right b)
+#else
+gchoose = choose unsafeCoerce
+#endif
+{-# INLINE gchoose #-}
#ifndef HLINT
instance q p => GDeciding1 q (K1 i p) where
-#endif
gdeciding1 _ q _ = contramap unK1 q
+#endif
instance GDeciding1 q f => GDeciding1 q (M1 i c f) where
gdeciding1 p q r = contramap unM1 (gdeciding1 p q r)
1
0
Hello community,
here is the log from the commit of package ghc-constraints for openSUSE:Factory checked in at 2016-01-28 17:23:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-constraints (Old)
and /work/SRC/openSUSE:Factory/.ghc-constraints.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-constraints"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-constraints/ghc-constraints.changes 2016-01-08 15:23:17.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-constraints.new/ghc-constraints.changes 2016-01-28 17:24:35.000000000 +0100
@@ -1,0 +2,10 @@
+Wed Jan 20 09:03:54 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.8
+* Remove the need for closed type families from the new Forall.
+* Found a nicer encoding of the initial object in the category of constraints
+ using a nullary constraint.
+* binary 0.8 compatibility
+* transformers 0.5 compatibility
+
+-------------------------------------------------------------------
Old:
----
constraints-0.6.tar.gz
New:
----
constraints-0.8.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-constraints.spec ++++++
--- /var/tmp/diff_new_pack.DVAEXM/_old 2016-01-28 17:24:36.000000000 +0100
+++ /var/tmp/diff_new_pack.DVAEXM/_new 2016-01-28 17:24:36.000000000 +0100
@@ -19,7 +19,7 @@
%global pkg_name constraints
Name: ghc-constraints
-Version: 0.6
+Version: 0.8
Release: 0
Summary: Constraint manipulation
License: BSD-2-Clause
++++++ constraints-0.6.tar.gz -> constraints-0.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/constraints-0.6/constraints.cabal new/constraints-0.8/constraints.cabal
--- old/constraints-0.6/constraints.cabal 2015-11-10 14:16:35.000000000 +0100
+++ new/constraints-0.8/constraints.cabal 2016-01-17 03:10:38.000000000 +0100
@@ -1,6 +1,6 @@
name: constraints
category: Constraints
-version: 0.6
+version: 0.8
license: BSD3
cabal-version: >= 1.10
license-file: LICENSE
@@ -17,7 +17,7 @@
This package provides a vocabulary for working with them.
build-type: Simple
-tested-with: GHC == 7.8.3, GHC == 7.7.20131027, GHC == 7.7.20131025
+tested-with: GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.1, GHC == 7.10.2
extra-source-files: README.markdown
source-repository head
@@ -41,26 +41,24 @@
GADTs
build-depends:
- base >= 4.6 && < 5,
- binary >= 0.7.3 && < 0.8,
+ base >= 4.7 && < 5,
+ binary >= 0.7.3 && < 0.9,
deepseq >= 1.3 && < 1.5,
ghc-prim,
hashable >= 1.2 && < 1.3,
mtl >= 2 && < 2.3,
- transformers >= 0.2 && < 0.5,
+ transformers >= 0.2 && < 0.6,
transformers-compat >= 0.4 && < 1
if impl(ghc < 7.8)
build-depends:
newtype >= 0.2 && < 0.3,
tagged >= 0.2 && < 1
- else
- exposed-modules:
- Data.Constraint.Forall
exposed-modules:
Data.Constraint
Data.Constraint.Deferrable
+ Data.Constraint.Forall
Data.Constraint.Lifting
Data.Constraint.Unsafe
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/constraints-0.6/src/Data/Constraint/Forall.hs new/constraints-0.8/src/Data/Constraint/Forall.hs
--- old/constraints-0.6/src/Data/Constraint/Forall.hs 2015-11-10 14:16:35.000000000 +0100
+++ new/constraints-0.8/src/Data/Constraint/Forall.hs 2016-01-17 03:10:38.000000000 +0100
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
@@ -7,11 +8,14 @@
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE PolyKinds #-}
+#if __GLASGOW_HASKELL__ >= 800
+{-# LANGUAGE UndecidableSuperClasses #-}
+#endif
-----------------------------------------------------------------------------
-- |
-- Module : Data.Constraint.Forall
-- Copyright : (C) 2011-2015 Edward Kmett,
--- (C) 2015 Ørjan Johansen,
+-- (C) 2015 Ørjan Johansen
-- License : BSD-style (see the file LICENSE)
--
-- Maintainer : Edward Kmett <ekmett(a)gmail.com>
@@ -95,22 +99,22 @@
-- which would be disastrous.
-- | A representation of the quantified constraint @forall a. p a@.
-type family Forall (p :: k -> Constraint) :: Constraint where
- Forall p = Forall_ p
+type family Forall (p :: k -> Constraint) :: Constraint
+type instance Forall p = Forall_ p
class p (Skolem p) => Forall_ (p :: k -> Constraint)
instance p (Skolem p) => Forall_ (p :: k -> Constraint)
-- | A representation of the quantified constraint @forall a. p (f a)@.
-type family ForallF (p :: k2 -> Constraint) (f :: k1 -> k2) :: Constraint where
- ForallF p f = ForallF_ p f
+type family ForallF (p :: k2 -> Constraint) (f :: k1 -> k2) :: Constraint
+type instance ForallF p f = ForallF_ p f
class p (f (SkolemF p f)) => ForallF_ (p :: k2 -> Constraint) (f :: k1 -> k2)
instance p (f (SkolemF p f)) => ForallF_ (p :: k2 -> Constraint) (f :: k1 -> k2)
type Forall1 p = Forall p
-- | A representation of the quantified constraint @forall f a. p (t f a)@.
-type family ForallT (p :: k3 -> Constraint) (t :: k1 -> k2 -> k3) :: Constraint where
- ForallT p t = ForallT_ p t
+type family ForallT (p :: k3 -> Constraint) (t :: k1 -> k2 -> k3) :: Constraint
+type instance ForallT p t = ForallT_ p t
class p (t (SkolemT1 p t) (SkolemT2 p t)) => ForallT_ (p :: k3 -> Constraint) (t :: k1 -> k2 -> k3)
instance p (t (SkolemT1 p t) (SkolemT2 p t)) => ForallT_ (p :: k3 -> Constraint) (t :: k1 -> k2 -> k3)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/constraints-0.6/src/Data/Constraint/Lifting.hs new/constraints-0.8/src/Data/Constraint/Lifting.hs
--- old/constraints-0.6/src/Data/Constraint/Lifting.hs 2015-11-10 14:16:35.000000000 +0100
+++ new/constraints-0.8/src/Data/Constraint/Lifting.hs 2016-01-17 03:10:38.000000000 +0100
@@ -112,6 +112,17 @@
instance Traversable f => Lifting Traversable (Compose f) where lifting = Sub Dict
instance Applicative f => Lifting Applicative (Compose f) where lifting = Sub Dict
instance Alternative f => Lifting Alternative (Compose f) where lifting = Sub Dict -- overconstrained
+
+#if MIN_VERSION_transformers(0,5,0)
+instance Show1 f => Lifting Show1 (Compose f) where lifting = Sub Dict
+instance Eq1 f => Lifting Eq1 (Compose f) where lifting = Sub Dict
+instance Ord1 f => Lifting Ord1 (Compose f) where lifting = Sub Dict
+instance Read1 f => Lifting Read1 (Compose f) where lifting = Sub Dict
+instance (Eq1 f, Eq1 g) => Lifting Eq (Compose f g) where lifting = Sub Dict
+instance (Ord1 f, Ord1 g) => Lifting Ord (Compose f g) where lifting = Sub Dict
+instance (Read1 f, Read1 g) => Lifting Read (Compose f g) where lifting = Sub Dict
+instance (Show1 f, Show1 g) => Lifting Show (Compose f g) where lifting = Sub Dict
+#else
instance (Functor f, Show1 f) => Lifting Show1 (Compose f) where lifting = Sub Dict
instance (Functor f, Eq1 f) => Lifting Eq1 (Compose f) where lifting = Sub Dict
instance (Functor f, Ord1 f) => Lifting Ord1 (Compose f) where lifting = Sub Dict
@@ -120,6 +131,7 @@
instance (Functor f, Ord1 f, Ord1 g) => Lifting Ord (Compose f g) where lifting = Sub Dict
instance (Functor f, Read1 f, Read1 g) => Lifting Read (Compose f g) where lifting = Sub Dict
instance (Functor f, Show1 f, Show1 g) => Lifting Show (Compose f g) where lifting = Sub Dict
+#endif
instance Functor f => Lifting Functor (Functor.Product f) where lifting = Sub Dict
instance Foldable f => Lifting Foldable (Functor.Product f) where lifting = Sub Dict
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/constraints-0.6/src/Data/Constraint/Unsafe.hs new/constraints-0.8/src/Data/Constraint/Unsafe.hs
--- old/constraints-0.6/src/Data/Constraint/Unsafe.hs 2015-11-10 14:16:35.000000000 +0100
+++ new/constraints-0.8/src/Data/Constraint/Unsafe.hs 2016-01-17 03:10:38.000000000 +0100
@@ -6,6 +6,9 @@
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE Unsafe #-}
+#if __GLASGOW_HASKELL__ >= 800
+{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
+#endif
-----------------------------------------------------------------------------
-- |
-- Module : Data.Constraint.Unsafe
@@ -56,10 +59,19 @@
unsafeUnderive :: Coercible n o => (o -> n) -> t n :- t o
unsafeUnderive _ = unsafeCoerceConstraint
+
-- | Construct an Applicative instance from a Monad
unsafeApplicative :: forall m a. Monad m => (Applicative m => m a) -> m a
+#if __GLASGOW_HASKELL__ < 710
unsafeApplicative m = m \\ trans (unsafeCoerceConstraint :: Applicative (WrappedMonad m) :- Applicative m) ins
+#else
+unsafeApplicative m = m
+#endif
-- | Construct an Alternative instance from a MonadPlus
unsafeAlternative :: forall m a. MonadPlus m => (Alternative m => m a) -> m a
+#if __GLASGOW_HASKELL__ < 710
unsafeAlternative m = m \\ trans (unsafeCoerceConstraint :: Alternative (WrappedMonad m) :- Alternative m) ins
+#else
+unsafeAlternative m = m
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/constraints-0.6/src/Data/Constraint.hs new/constraints-0.8/src/Data/Constraint.hs
--- old/constraints-0.6/src/Data/Constraint.hs 2015-11-10 14:16:35.000000000 +0100
+++ new/constraints-0.8/src/Data/Constraint.hs 2016-01-17 03:10:38.000000000 +0100
@@ -18,6 +18,12 @@
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE RoleAnnotations #-}
#endif
+#if __GLASGOW_HASKELL__ >= 800
+{-# LANGUAGE UndecidableSuperClasses #-}
+#endif
+#if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710
+{-# LANGUAGE NullaryTypeClasses #-}
+#endif
-----------------------------------------------------------------------------
-- |
-- Module : Data.Constraint
@@ -58,6 +64,7 @@
, weaken1, weaken2, contract
, (&&&), (***)
, trans, refl
+ , Bottom
, top, bottom
-- * Dict is fully faithful
, mapDict
@@ -79,7 +86,12 @@
#if __GLASGOW_HASKELL__ >= 707
import Data.Data
#endif
+#if __GLASGOW_HASKELL__ <= 710
import GHC.Prim (Constraint)
+#else
+import GHC.Types (Constraint)
+#endif
+import qualified GHC.Prim as Prim
-- | Values of type @'Dict' p@ capture a dictionary for a constraint of type @p@.
--
@@ -292,21 +304,14 @@
top :: a :- ()
top = Sub Dict
-type family Ex (a :: *) (c :: Constraint) :: Constraint
-type instance Ex () c = ()
-type instance Ex Bool c = c
-
-falso :: (() ~ a) :- Ex a c
-falso = Sub Dict
+-- | 'Any' inhabits every kind, including 'Constraint' but is uninhabited, making it impossible to define an instance.
+class Prim.Any => Bottom where
+ no :: Dict a
-- |
--- A bad type coercion lets you derive any constraint you want.
---
--- These are the initial arrows of the category and @(() ~ Bool)@ is the initial object
---
-- This demonstrates the law of classical logic <http://en.wikipedia.org/wiki/Principle_of_explosion "ex falso quodlibet">
-bottom :: (() ~ Bool) :- c
-bottom = falso
+bottom :: Bottom :- a
+bottom = Sub no
--------------------------------------------------------------------------------
-- Dict is fully faithful
@@ -375,7 +380,7 @@
instance Class () (b :=> a) where cls = Sub Dict
instance Class b a => () :=> Class b a where ins = Sub Dict
-instance (b :=> a) => () :=> b :=> a where ins = Sub Dict
+instance (b :=> a) => () :=> (b :=> a) where ins = Sub Dict
instance Class () () where cls = Sub Dict
instance () :=> () where ins = Sub Dict
1
0
Hello community,
here is the log from the commit of package ghc-cgi for openSUSE:Factory checked in at 2016-01-28 17:23:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-cgi (Old)
and /work/SRC/openSUSE:Factory/.ghc-cgi.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-cgi"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-cgi/ghc-cgi.changes 2015-08-25 10:08:45.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-cgi.new/ghc-cgi.changes 2016-01-28 17:24:34.000000000 +0100
@@ -1,0 +2,6 @@
+Fri Jan 22 08:00:11 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 3001.2.2.3
+* CGI.hs haddock: Use web.archive.org link for CGI specification
+
+-------------------------------------------------------------------
Old:
----
cgi-3001.2.2.2.tar.gz
New:
----
cgi-3001.2.2.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-cgi.spec ++++++
--- /var/tmp/diff_new_pack.4kBb5C/_old 2016-01-28 17:24:35.000000000 +0100
+++ /var/tmp/diff_new_pack.4kBb5C/_new 2016-01-28 17:24:35.000000000 +0100
@@ -18,7 +18,7 @@
%global pkg_name cgi
Name: ghc-cgi
-Version: 3001.2.2.2
+Version: 3001.2.2.3
Release: 0
Summary: A library for writing CGI programs
Group: System/Libraries
++++++ cgi-3001.2.2.2.tar.gz -> cgi-3001.2.2.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cgi-3001.2.2.2/Network/CGI.hs new/cgi-3001.2.2.3/Network/CGI.hs
--- old/cgi-3001.2.2.2/Network/CGI.hs 2015-04-07 00:45:15.000000000 +0200
+++ new/cgi-3001.2.2.3/Network/CGI.hs 2016-01-20 08:43:22.000000000 +0100
@@ -13,7 +13,7 @@
-- Portability : non-portable (uses Control.Monad.State)
--
-- Simple Library for writing CGI programs.
--- See <http://hoohoo.ncsa.uiuc.edu/cgi/interface.html> for the
+-- See <https://web.archive.org/web/20100109233524/http://hoohoo.ncsa.illinois.edu/…> for the
-- CGI specification.
--
-- This version of the library is for systems with version 2.0 or greater
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cgi-3001.2.2.2/cgi.cabal new/cgi-3001.2.2.3/cgi.cabal
--- old/cgi-3001.2.2.2/cgi.cabal 2015-04-07 00:45:15.000000000 +0200
+++ new/cgi-3001.2.2.3/cgi.cabal 2016-01-20 08:43:22.000000000 +0100
@@ -1,5 +1,5 @@
Name: cgi
-Version: 3001.2.2.2
+Version: 3001.2.2.3
Copyright: Bjorn Bringert, John Chee, Andy Gill, Anders Kaseorg,
Ian Lynagh, Erik Meijer, Sven Panne, Jeremy Shaw
Category: Network
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cgi-3001.2.2.2/changelog new/cgi-3001.2.2.3/changelog
--- old/cgi-3001.2.2.2/changelog 2015-04-07 00:45:15.000000000 +0200
+++ new/cgi-3001.2.2.3/changelog 2016-01-20 08:43:22.000000000 +0100
@@ -1,3 +1,13 @@
+3001.2.2.3
+
+### Changed
+* CGI.hs haddock: Use web.archive.org link for CGI specification
+
+3001.2.2.2
+
+### Changed
+* Added support for building with mtl < 2.2.1 via flags
+
3001.2.2.1
### Changed
1
0
Hello community,
here is the log from the commit of package ghc-cereal for openSUSE:Factory checked in at 2016-01-28 17:23:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-cereal (Old)
and /work/SRC/openSUSE:Factory/.ghc-cereal.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-cereal"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-cereal/ghc-cereal.changes 2015-05-21 08:36:46.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-cereal.new/ghc-cereal.changes 2016-01-28 17:24:33.000000000 +0100
@@ -1,0 +2,11 @@
+Tue Jan 26 08:30:51 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.5.1.0
+* Switch to using the builder provided by the ByteString package
+* Change the encoding of Float and Double with the Serialize class to use the
+ Data.Serialize.IEEE754 module
+* Add support for encoding and decoding ShortByteString
+* New and improved test suite thanks to Kei Hibino
+* Fix two bugs involving the lookAhead combinator and partial chunks.
+
+-------------------------------------------------------------------
Old:
----
cereal-0.4.1.1.tar.gz
New:
----
cereal-0.5.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-cereal.spec ++++++
--- /var/tmp/diff_new_pack.OwosoL/_old 2016-01-28 17:24:34.000000000 +0100
+++ /var/tmp/diff_new_pack.OwosoL/_new 2016-01-28 17:24:34.000000000 +0100
@@ -21,7 +21,7 @@
%global debug_package %{nil}
Name: ghc-cereal
-Version: 0.4.1.1
+Version: 0.5.1.0
Release: 0
Summary: A binary serialization library
License: BSD-3-Clause
++++++ cereal-0.4.1.1.tar.gz -> cereal-0.5.1.0.tar.gz ++++++
++++ 3518 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package cabal-install for openSUSE:Factory checked in at 2016-01-28 17:23:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cabal-install (Old)
and /work/SRC/openSUSE:Factory/.cabal-install.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cabal-install"
Changes:
--------
--- /work/SRC/openSUSE:Factory/cabal-install/cabal-install.changes 2016-01-05 21:54:59.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.cabal-install.new/cabal-install.changes 2016-01-28 17:24:32.000000000 +0100
@@ -1,0 +2,5 @@
+Sun Jan 24 10:19:03 UTC 2016 - mimi.vx(a)gmail.com
+
+- relax HTTP dep
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cabal-install.spec ++++++
--- /var/tmp/diff_new_pack.0WThy0/_old 2016-01-28 17:24:33.000000000 +0100
+++ /var/tmp/diff_new_pack.0WThy0/_new 2016-01-28 17:24:33.000000000 +0100
@@ -56,6 +56,7 @@
%prep
%setup -q
+cabal-tweak-dep-ver HTTP "< 4000.3" "< 4000.4"
%build
%ghc_bin_build
1
0
Hello community,
here is the log from the commit of package ghc-cabal-helper for openSUSE:Factory checked in at 2016-01-28 17:23:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-cabal-helper (Old)
and /work/SRC/openSUSE:Factory/.ghc-cabal-helper.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-cabal-helper"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-cabal-helper/ghc-cabal-helper.changes 2016-01-22 01:08:43.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-cabal-helper.new/ghc-cabal-helper.changes 2016-01-28 17:24:31.000000000 +0100
@@ -1,0 +2,5 @@
+Fri Jan 22 07:55:32 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.6.3.1
+
+-------------------------------------------------------------------
Old:
----
cabal-helper-0.6.3.0.tar.gz
New:
----
cabal-helper-0.6.3.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-cabal-helper.spec ++++++
--- /var/tmp/diff_new_pack.BjaXtF/_old 2016-01-28 17:24:32.000000000 +0100
+++ /var/tmp/diff_new_pack.BjaXtF/_new 2016-01-28 17:24:32.000000000 +0100
@@ -19,7 +19,7 @@
%global pkg_name cabal-helper
%bcond_with tests
Name: ghc-cabal-helper
-Version: 0.6.3.0
+Version: 0.6.3.1
Release: 0
Summary: Simple interface to some of Cabal's configuration state used by ghc-mod
License: AGPL-3.0+
++++++ cabal-helper-0.6.3.0.tar.gz -> cabal-helper-0.6.3.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-helper-0.6.3.0/CabalHelper/Compile.hs new/cabal-helper-0.6.3.1/CabalHelper/Compile.hs
--- old/cabal-helper-0.6.3.0/CabalHelper/Compile.hs 2015-11-25 23:10:09.000000000 +0100
+++ new/cabal-helper-0.6.3.1/CabalHelper/Compile.hs 2016-01-14 19:19:13.000000000 +0100
@@ -97,7 +97,8 @@
compileSandbox :: FilePath -> MaybeT IO (Either ExitCode FilePath)
compileSandbox chdir = do
sandbox <- MaybeT $ getSandboxPkgDb projdir (display buildPlatform) =<< ghcVersion opts
- ver <- MaybeT $ find (== cabalVer) <$> listCabalVersions' opts (Just sandbox)
+ ver <- MaybeT $ logSomeError opts "compileSandbox" $
+ find (== cabalVer) <$> listCabalVersions' opts (Just sandbox)
vLog opts $ logMsg ++ "sandbox package-db"
liftIO $ compileWithPkg chdir (Just sandbox) ver
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-helper-0.6.3.0/CabalHelper/GuessGhc.hs new/cabal-helper-0.6.3.1/CabalHelper/GuessGhc.hs
--- old/cabal-helper-0.6.3.0/CabalHelper/GuessGhc.hs 2015-04-27 21:16:53.000000000 +0200
+++ new/cabal-helper-0.6.3.1/CabalHelper/GuessGhc.hs 2016-01-17 21:29:42.000000000 +0100
@@ -49,11 +49,11 @@
path = ghcPath
dir = takeDirectory path
versionSuffix = takeVersionSuffix (dropExeExtension path)
- guessNormal = dir </> toolname <.> exeExtension
+ guessNormal = dir </> toolname <.> exeExtension'
guessGhcVersioned = dir </> (toolname ++ "-ghc" ++ versionSuffix)
- <.> exeExtension
+ <.> exeExtension'
guessVersioned = dir </> (toolname ++ versionSuffix)
- <.> exeExtension
+ <.> exeExtension'
guesses | null versionSuffix = [guessNormal]
| otherwise = [guessGhcVersioned,
guessVersioned,
@@ -70,7 +70,7 @@
dropExeExtension :: FilePath -> FilePath
dropExeExtension filepath =
case splitExtension filepath of
- (filepath', extension) | extension == exeExtension -> filepath'
+ (filepath', extension) | extension == exeExtension' -> filepath'
| otherwise -> filepath
-- | @takeWhileEndLE p@ is equivalent to @reverse . takeWhile p . reverse@, but
@@ -81,3 +81,6 @@
go x (rest, done)
| not done && p x = (x:rest, False)
| otherwise = (rest, True)
+
+exeExtension' :: FilePath
+exeExtension' = Distribution.Simple.BuildPaths.exeExtension
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-helper-0.6.3.0/CabalHelper/Log.hs new/cabal-helper-0.6.3.1/CabalHelper/Log.hs
--- old/cabal-helper-0.6.3.0/CabalHelper/Log.hs 2015-08-21 06:28:15.000000000 +0200
+++ new/cabal-helper-0.6.3.1/CabalHelper/Log.hs 2016-01-14 19:19:13.000000000 +0100
@@ -2,6 +2,7 @@
import Control.Monad
import Control.Monad.IO.Class
+import Control.Exception as E
import Data.String
import System.IO
import Prelude
@@ -12,3 +13,9 @@
vLog Options { verbose = True } msg =
liftIO $ hPutStrLn stderr msg
vLog _ _ = return ()
+
+logSomeError :: Options -> String -> IO (Maybe a) -> IO (Maybe a)
+logSomeError opts label a = do
+ a `E.catch` \se@(SomeException _) -> do
+ vLog opts $ label ++ ": " ++ show se
+ return Nothing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-helper-0.6.3.0/Distribution/Helper.hs new/cabal-helper-0.6.3.1/Distribution/Helper.hs
--- old/cabal-helper-0.6.3.0/Distribution/Helper.hs 2016-01-10 22:00:45.000000000 +0100
+++ new/cabal-helper-0.6.3.1/Distribution/Helper.hs 2016-01-17 21:26:39.000000000 +0100
@@ -416,7 +416,7 @@
findLibexecExe "cabal-helper-wrapper" = do
libexecdir <- getLibexecDir
let exeName = "cabal-helper-wrapper"
- exe = libexecdir </> exeName <.> exeExtension
+ exe = libexecdir </> exeName <.> exeExtension'
exists <- doesFileExist exe
@@ -476,3 +476,6 @@
lookupEnv' :: String -> IO (Maybe String)
lookupEnv' k = lookup k <$> getEnvironment
+
+exeExtension' :: FilePath
+exeExtension' = Distribution.Simple.BuildPaths.exeExtension
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-helper-0.6.3.0/Setup.hs new/cabal-helper-0.6.3.1/Setup.hs
--- old/cabal-helper-0.6.3.0/Setup.hs 2015-04-27 21:16:53.000000000 +0200
+++ new/cabal-helper-0.6.3.1/Setup.hs 2016-01-14 19:17:15.000000000 +0100
@@ -6,6 +6,7 @@
import Distribution.Simple.Register
import Distribution.Simple.InstallDirs as ID
import Distribution.Simple.LocalBuildInfo
+import Distribution.Simple.Program
import Distribution.PackageDescription
import Control.Applicative
@@ -17,7 +18,8 @@
main :: IO ()
main = defaultMainWithHooks $ simpleUserHooks {
instHook = inst,
- copyHook = copy
+ copyHook = copy,
+ hookedPrograms = [ simpleProgram "cabal" ]
}
-- mostly copypasta from 'defaultInstallHook'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-helper-0.6.3.0/cabal-helper.cabal new/cabal-helper-0.6.3.1/cabal-helper.cabal
--- old/cabal-helper-0.6.3.0/cabal-helper.cabal 2016-01-10 22:00:59.000000000 +0100
+++ new/cabal-helper-0.6.3.1/cabal-helper.cabal 2016-01-18 20:53:46.000000000 +0100
@@ -1,5 +1,5 @@
name: cabal-helper
-version: 0.6.3.0
+version: 0.6.3.1
synopsis: Simple interface to some of Cabal's configuration state used by ghc-mod
description:
@cabal-helper@ provides a library which wraps the internal use of
@@ -87,8 +87,17 @@
Default-Language: Haskell2010
Type: exitcode-stdio-1.0
Main-Is: Spec.hs
+ Other-Modules: CabalHelper.Common
+ CabalHelper.Compile
+ CabalHelper.Data
+ CabalHelper.Log
+ CabalHelper.Sandbox
+ CabalHelper.Types
+ Distribution.Helper
+ Paths_cabal_helper
Hs-Source-Dirs: tests, .
GHC-Options: -Wall
+ Build-Tools: cabal
Build-Depends: base >= 4.5 && < 5
, cabal-helper
, extra
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-helper-0.6.3.0/tests/Spec.hs new/cabal-helper-0.6.3.1/tests/Spec.hs
--- old/cabal-helper-0.6.3.0/tests/Spec.hs 2016-01-10 22:00:45.000000000 +0100
+++ new/cabal-helper-0.6.3.1/tests/Spec.hs 2016-01-17 22:21:02.000000000 +0100
@@ -55,6 +55,10 @@
"1.22.2.0"
, "1.22.3.0"
, "1.22.4.0"
+ , "1.22.5.0"
+ , "1.22.6.0"
+ ]),
+ ("8.0", [
])
]
1
0
Hello community,
here is the log from the commit of package ghc-bifunctors for openSUSE:Factory checked in at 2016-01-28 17:23:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-bifunctors (Old)
and /work/SRC/openSUSE:Factory/.ghc-bifunctors.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-bifunctors"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-bifunctors/ghc-bifunctors.changes 2016-01-08 15:23:11.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-bifunctors.new/ghc-bifunctors.changes 2016-01-28 17:24:31.000000000 +0100
@@ -1,0 +2,9 @@
+Wed Jan 20 08:55:42 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 5.2
+* dded several Arrow-like instances for Tannen so we can use it as the Cayley
+ construction if needed.
+* Added Data.Bifunctor.Sum
+* Added BifunctorFunctor, BifunctorMonad and BifunctorComonad.
+
+-------------------------------------------------------------------
Old:
----
bifunctors-5.1.tar.gz
New:
----
bifunctors-5.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-bifunctors.spec ++++++
--- /var/tmp/diff_new_pack.KK2FzZ/_old 2016-01-28 17:24:31.000000000 +0100
+++ /var/tmp/diff_new_pack.KK2FzZ/_new 2016-01-28 17:24:31.000000000 +0100
@@ -19,7 +19,7 @@
%global pkg_name bifunctors
Name: ghc-bifunctors
-Version: 5.1
+Version: 5.2
Release: 0
Summary: Bifunctors
License: BSD-2-Clause
@@ -32,6 +32,8 @@
BuildRequires: ghc-Cabal-devel
BuildRequires: ghc-rpm-macros
# Begin cabal-rpm deps:
+BuildRequires: ghc-comonad-devel
+BuildRequires: ghc-containers-devel
BuildRequires: ghc-semigroups-devel
BuildRequires: ghc-tagged-devel
BuildRequires: ghc-template-haskell-devel
++++++ bifunctors-5.1.tar.gz -> bifunctors-5.2.tar.gz ++++++
++++ 1684 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package ghc-base-compat for openSUSE:Factory checked in at 2016-01-28 17:23:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-base-compat (Old)
and /work/SRC/openSUSE:Factory/.ghc-base-compat.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-base-compat"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-base-compat/ghc-base-compat.changes 2015-12-24 12:16:19.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-base-compat.new/ghc-base-compat.changes 2016-01-28 17:24:29.000000000 +0100
@@ -1,0 +2,22 @@
+Wed Jan 20 08:43:57 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.9.0
+* Sync with base-4.9/GHC 8.0
+* Weakened RealFloat constraints on realPart, imagPart, conjugate, mkPolar, and cis
+ in Data.Complex.Compat
+* Backport Foreign.ForeignPtr.Safe and Foreign.Marshal.Safe
+* Generalize filterM, forever, mapAndUnzipM, zipWithM, zipWithM_, replicateM,
+ and replicateM_ in Control.Monad from Monad to Applicative
+* Backport .Unsafe.Compat modules (for Control.Monad.ST, Control.Monad.ST.Lazy,
+ Foreign.ForeignPtr, and Foreign.Marshal)
+* Backport forkFinally and forkOSWithUnmask to Control.Concurrent.Compat
+* Backport Data.Functor.Const
+* Backport modifyIORef', atomicModifyIORef' and atomicWriteIORef to Data.IORef.Compat
+* Data.Ratio.{denominator,numerator} have no Integral constraint anymore
+* Backport modifySTRef' to Data.STRef.Compat
+* Export String, lines, words, unlines, and unwords to Data.String.Compat
+* Generalize Debug.Trace.{traceM, traceShowM} from Monad to Applicative
+* Backport errorWithoutStackTrace to Prelude.Compat
+* Backport unsafeFixIO and unsafeDupablePerformIO to System.IO.Unsafe.Compat
+
+-------------------------------------------------------------------
Old:
----
base-compat-0.8.2.tar.gz
New:
----
base-compat-0.9.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-base-compat.spec ++++++
--- /var/tmp/diff_new_pack.uAgpB6/_old 2016-01-28 17:24:29.000000000 +0100
+++ /var/tmp/diff_new_pack.uAgpB6/_new 2016-01-28 17:24:29.000000000 +0100
@@ -20,7 +20,7 @@
%bcond_with tests
Name: ghc-base-compat
-Version: 0.8.2
+Version: 0.9.0
Release: 0
Summary: A compatibility layer for base
Group: System/Libraries
++++++ base-compat-0.8.2.tar.gz -> base-compat-0.9.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/CHANGES.markdown new/base-compat-0.9.0/CHANGES.markdown
--- old/base-compat-0.8.2/CHANGES.markdown 2015-05-13 08:36:37.000000000 +0200
+++ new/base-compat-0.9.0/CHANGES.markdown 2016-01-15 03:45:49.000000000 +0100
@@ -1,3 +1,26 @@
+## Changes in 0.9.0
+ - Sync with `base-4.9`/GHC 8.0
+ - Weakened `RealFloat` constraints on `realPart`, `imagPart`, `conjugate`,
+ `mkPolar`, and `cis` in `Data.Complex.Compat`
+ - Backport `Foreign.ForeignPtr.Safe` and `Foreign.Marshal.Safe`
+ - Generalize `filterM`, `forever`, `mapAndUnzipM`, `zipWithM`, `zipWithM_`,
+ `replicateM`, and `replicateM_` in `Control.Monad` from `Monad` to
+ `Applicative`
+ - Backport `.Unsafe.Compat` modules (for `Control.Monad.ST`,
+ `Control.Monad.ST.Lazy`, `Foreign.ForeignPtr`, and `Foreign.Marshal`)
+ - Backport `forkFinally` and `forkOSWithUnmask` to `Control.Concurrent.Compat`
+ - Backport `Data.Functor.Const`
+ - Backport `modifyIORef'`, `atomicModifyIORef'` and `atomicWriteIORef` to
+ `Data.IORef.Compat`
+ - `Data.Ratio.{denominator,numerator}` have no `Integral` constraint anymore
+ - Backport `modifySTRef'` to `Data.STRef.Compat`
+ - Export `String`, `lines`, `words`, `unlines`, and `unwords` to
+ `Data.String.Compat`
+ - Generalize `Debug.Trace.{traceM, traceShowM}` from `Monad` to `Applicative`
+ - Backport `errorWithoutStackTrace` to `Prelude.Compat`
+ - Backport `unsafeFixIO` and `unsafeDupablePerformIO` to
+ `System.IO.Unsafe.Compat`
+
## Changes in 0.8.2
- Backport `bitDefault`, `testBitDefault`, and `popCountDefault` in
`Data.Bits.Compat` to all versions of `base`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/LICENSE new/base-compat-0.9.0/LICENSE
--- old/base-compat-0.8.2/LICENSE 2015-05-13 08:36:37.000000000 +0200
+++ new/base-compat-0.9.0/LICENSE 2016-01-15 03:45:49.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright (c) 2012-2015 Simon Hengel <sol(a)typeful.net> and Ryan Scott <ryan.gl.scott(a)ku.edu>
+Copyright (c) 2012-2015 Simon Hengel <sol(a)typeful.net> and Ryan Scott <ryan.gl.scott(a)gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/README.markdown new/base-compat-0.9.0/README.markdown
--- old/base-compat-0.8.2/README.markdown 2015-05-13 08:36:37.000000000 +0200
+++ new/base-compat-0.9.0/README.markdown 2016-01-15 03:45:49.000000000 +0100
@@ -1,4 +1,20 @@
-# A compatibility layer for `base` [![Hackage version](https://img.shields.io/hackage/v/base-compat.svg?style=flat)](http… [![Build Status](https://img.shields.io/travis/haskell-compat/base-compat.svg?style=…
+# A compatibility layer for `base`
+[![Hackage](https://img.shields.io/hackage/v/base-compat.svg)][Hackage: base-compat]
+[![Hackage Dependencies](https://img.shields.io/hackage-deps/v/base-compat.svg)](http:…
+[![Haskell Programming Language](https://img.shields.io/badge/language-Haskell-blue.svg)][Haskell.org]
+[![BSD3 License](http://img.shields.io/badge/license-MIT-brightgreen.svg)][tl;dr Legal: MIT]
+[![Build](https://img.shields.io/travis/haskell-compat/base-compat.svg)](https://travis-ci.org/haskell-compat/base-compat)
+
+[Hackage: base-compat]:
+ http://hackage.haskell.org/package/base-compat
+ "base-compat package on Hackage"
+[Haskell.org]:
+ http://www.haskell.org
+ "The Haskell Programming Language"
+[tl;dr Legal: MIT]:
+ https://tldrlegal.com/license/mit-license
+ "MIT License"
+
## Scope
The scope of `base-compat` is to provide functions available in later versions
@@ -12,13 +28,19 @@
package [`base-orphans`](https://github.com/haskell-compat/base-orphans) for
that.
+In addition, `base-compat` only backports functions. In particular, we
+purposefully do not backport data types or type classes introduced in newer
+versions of `base`. For more info, see the
+[Data types and type classes](#data-types-and-type-classes)
+section.
+
## Basic usage
In your cabal file, you should have something like this:
```
build-depends: base >= 4.3
- , base-compat >= 0.8.0
+ , base-compat >= 0.9.0
```
Then, lets say you want to use the `isRight` function introduced with
@@ -83,7 +105,7 @@
### For compatibility with the latest released version of `base`
* `Prelude.Compat` incorporates the AMP/Foldable/Traversable changes and
- exposes the same interface as `Prelude` from `base-4.8.0.0`
+ exposes the same interface as `Prelude` from `base-4.9.0.0`
* `System.IO.Error.catch` is not re-exported from `Prelude.Compat` for older
versions of `base`
* `Text.Read.Compat.readMaybe`
@@ -93,13 +115,19 @@
* Added `toIntegralSized` to `Data.Bits.Compat` (if using `base-4.7`)
* Added `bool` function to `Data.Bool.Compat`
* Added `isLeft` and `isRight` to `Data.Either.Compat`
+ * Added `forkFinally` to `Control.Concurrent.Compat`
* Added `withMVarMasked` function to `Control.Concurrent.MVar.Compat`
* Added `(<$!>)` function to `Control.Monad.Compat`
+ * Weakened `RealFloat` constraints on `realPart`, `imagPart`, `conjugate`, `mkPolar`,
+ and `cis` in `Data.Complex.Compat`
* Added `($>)` and `void` functions to `Data.Functor.Compat`
* `(&)` function to `Data.Function.Compat`
* `($>)` and `void` functions to `Data.Functor.Compat`
+ * `modifyIORef'`, `atomicModifyIORef'` and `atomicWriteIORef` to `Data.IORef.Compat`
* `dropWhileEnd`, `isSubsequenceOf`, `sortOn`, and `uncons` functions to `Data.List.Compat`
* Correct versions of `nub`, `nubBy`, `union`, and `unionBy` to `Data.List.Compat`
+ * `modifySTRef'` to `Data.STRef.Compat`
+ * `String`, `lines`, `words`, `unlines`, and `unwords` to `Data.String.Compat`
* `makeVersion` function to `Data.Version.Compat`
* `traceId`, `traceShowId`, `traceM`, and `traceShowM` functions to `Debug.Trace.Compat`
* `byteSwap16`, `byteSwap32`, and `byteSwap64` to `Data.Word.Compat`
@@ -109,9 +137,114 @@
* Added `Data.List.Compat.scanl'`
* `showFFloatAlt` and `showGFloatAlt` to `Numeric.Compat`
* `lookupEnv`, `setEnv` and `unsetEnv` to `System.Environment.Compat`
+ * `unsafeFixIO` and `unsafeDupablePerformIO` to `System.IO.Unsafe.IO`
+
+## What is not covered
+
+### Data types and type classes
+`base-compat` purposefully does not export any data types or type classes that
+were introduced in more recent versions of `base`. The main reasoning for this
+policy is that it is not some data types and type classes have had their APIs
+change in different versions of `base`, which makes having a consistent
+compatibility API for them practically impossible.
+
+As an example, consider the `FiniteBits` type class. It was introduced in
+[`base-4.7.0.0`](http://hackage.haskell.org/package/base-4.7.0.0/docs/Data-Bits.html#t:FiniteBits)
+with the following API:
+
+```haskell
+class Bits b => FiniteBits b where
+ finiteBitSize :: b -> Int
+```
-## Supported versions of GHC/base
+However, in [`base-4.8.0.0`](http://hackage.haskell.org/package/base-4.8.0.0/docs/Data-Bits.html#t:FiniteBits),
+`FiniteBits` gained additional functions:
+
+```haskell
+class Bits b => FiniteBits b where
+ finiteBitSize :: b -> Int
+ countLeadingZeros :: b -> Int
+ countTrailingZeros :: b -> Int
+```
+
+This raises the question: how can `FiniteBits` be backported consistently
+across all versions of `base`? One approach is to backport the API exposed in
+`base-4.8.0.0` on versions prior to `4.7.0.0`. The problem with this is that
+`countLeadingZeros` and `countTrailingZeros` are not exposed in `base-4.7.0.0`,
+so instances of `FiniteBits` would have to be declared like this:
+
+```haskell
+instance FiniteBits Foo where
+ finiteBitSize = ...
+#if MIN_VERSION_base(4,8,0) || !(MIN_VERSION_base(4,7,0))
+ countLeadingZeros = ...
+ countTrailingZeros = ...
+#endif
+```
+This is a very unsatisfactory solution, and for this reason, we do not pursue
+it. For similar reasons, we do not backport data types.
+
+### Other compatibility packages
+
+If you _really_ need your favorite data type or type class in `base` to be
+backported, you might be in luck, since several data types have their own
+compatibility packages on Hackage. Here is a list of such packages:
+
+* [`bifunctors`](http://hackage.haskell.org/package/bifunctors)
+ for the [`Bifunctor`](http://hackage.haskell.org/package/base-4.8.0.0/docs/Data-Bifunctor.html#t:Bifunctor)
+ type class, introduced in `base-4.8.0.0`
+* [`generic-deriving`](http://hackage.haskell.org/package/generic-deriving)
+ for everything in the [`GHC.Generics`](http://hackage.haskell.org/package/base-4.8.0.0/docs/GHC-Generics.html)
+ module, introduced to `ghc-prim` in GHC 7.2 (and later moved to `base-4.6.0.0`)
+* [`nats`](http://hackage.haskell.org/package/nats)
+ for the [`Natural`](http://hackage.haskell.org/package/base-4.8.0.0/docs/Numeric-Natural.html)
+ data type, introduced in `base-4.8.0.0`
+* [`semigroups`](http://hackage.haskell.org/package/semigroups)
+ for the [`Semigroup`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Semigroup.html#t:Semigroup)
+ typeclass and the
+ [`NonEmpty`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-List-NonEmpty.html#t:NonEmpty),
+ [`Min`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Semigroup.html#t:Min),
+ [`Max`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Semigroup.html#t:Max),
+ [`First`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Semigroup.html#t:First),
+ [`Last`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Semigroup.html#t:Last),
+ [`WrappedMonoid`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Semigroup.html#t:WrappedMonoid),
+ [`Option`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Semigroup.html#t:Option),
+ and
+ [`Arg`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Semigroup.html#t:Arg)
+ data types, introduced in `base-4.9.0.0`
+* [`tagged`](http://hackage.haskell.org/package/tagged)
+ for the [`Proxy`](http://hackage.haskell.org/package/base-4.7.0.0/docs/Data-Proxy.html#t:Proxy)
+ data type, introduced in `base-4.7.0.0`
+* [`transformers`](http://hackage.haskell.org/package/transformers)
+ for:
+ * The [`Identity`](http://hackage.haskell.org/package/base-4.8.0.0/docs/Data-Functor-Identity.html#t:Identity)
+ data type, introduced in `base-4.8.0.0`
+ * The [`MonadIO`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Control-Monad-IO-Class.html#t:MonadIO),
+ [`Eq1`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Classes.html#t:Eq1),
+ [`Eq2`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Classes.html#t:Eq2),
+ [`Ord1`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Classes.html#t:Ord1),
+ [`Ord2`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Classes.html#t:Ord2),
+ [`Read1`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Classes.html#t:Read1),
+ [`Read2`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Classes.html#t:Read2),
+ [`Show1`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Classes.html#t:Show1),
+ and
+ [`Show2`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Classes.html#t:Show2)
+ typeclasses; and the
+ [`Compose`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Compose.html#t:Compose),
+ [`Product`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Product.html#t:Product),
+ and
+ [`Sum`](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Functor-Sum.html#t:Sum)
+ data types, introduced in `base-4.9.0.0`
+* [`void`](http://hackage.haskell.org/package/void)
+ for the [`Void`](http://hackage.haskell.org/package/base-4.8.0.0/docs/Data-Void.html#t:Void)
+ data type, introduced in `base-4.8.0.0`
+
+## Supported versions of GHC/`base`
+
+ * `ghc-8.0.1` / `base-4.9.0.0`
+ * `ghc-7.10.3` / `base-4.8.2.0`
+ * `ghc-7.10.2` / `base-4.8.1.0`
* `ghc-7.10.1` / `base-4.8.0.0`
* `ghc-7.8.4` / `base-4.7.0.2`
* `ghc-7.8.3` / `base-4.7.0.1`
@@ -129,16 +262,8 @@
* `ghc-7.0.2` / `base-4.3.1.0`
* `ghc-7.0.1` / `base-4.3.0.0`
-Patches are welcome; add tests for new code!
-
-## Development
+We also make an attempt to keep `base-compat` building with GHC HEAD, but due
+to its volatility, it may not work at any given point in time. If it doesn't,
+please report it!
-For `Prelude.Compat` there is an `Prelude.index` file that was generated from
-the output of
-
- ghc --show-iface Prelude.hi
-
-To verify that `Prelude.Compat` matches the specification given in
-`Prelude.types` run:
-
- ./check-Prelude.sh
+Patches are welcome; add tests for new code!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/base-compat.cabal new/base-compat-0.9.0/base-compat.cabal
--- old/base-compat-0.8.2/base-compat.cabal 2015-05-13 08:36:37.000000000 +0200
+++ new/base-compat-0.9.0/base-compat.cabal 2016-01-15 03:45:49.000000000 +0100
@@ -1,5 +1,5 @@
name: base-compat
-version: 0.8.2
+version: 0.9.0
license: MIT
license-file: LICENSE
copyright: (c) 2012-2015 Simon Hengel,
@@ -7,10 +7,10 @@
(c) 2015 Ryan Scott
author: Simon Hengel <sol(a)typeful.net>,
João Cristóvão <jmacristovao(a)gmail.com>,
- Ryan Scott <ryan.gl.scott(a)ku.edu>
+ Ryan Scott <ryan.gl.scott(a)gmail.com>
maintainer: Simon Hengel <sol(a)typeful.net>,
João Cristóvão <jmacristovao(a)gmail.com>,
- Ryan Scott <ryan.gl.scott(a)ku.edu>
+ Ryan Scott <ryan.gl.scott(a)gmail.com>
build-type: Simple
cabal-version: >= 1.8
category: Compatibility
@@ -24,9 +24,20 @@
for recent changes.
.
Note that @base-compat@ does not add any orphan instances.
- There is a separate package
- @<http://hackage.haskell.org/package/base-orphans base-orphans>@
+ There is a separate package,
+ @<http://hackage.haskell.org/package/base-orphans base-orphans>@,
for that.
+ .
+ In addition, `base-compat` does not backport any data types
+ or type classes. See
+ @<https://github.com/haskell-compat/base-compat#data-types-and-type-classes this section of the README>@
+ for more info.
+tested-with: GHC == 7.0.1, GHC == 7.0.2, GHC == 7.0.3, GHC == 7.0.4
+ , GHC == 7.2.1, GHC == 7.2.2
+ , GHC == 7.4.1, GHC == 7.4.2
+ , GHC == 7.6.1, GHC == 7.6.2, GHC == 7.6.3
+ , GHC == 7.8.1, GHC == 7.8.2, GHC == 7.8.3, GHC == 7.8.4
+ , GHC == 7.10.1, GHC == 7.10.2, GHC == 7.10.3
extra-source-files: CHANGES.markdown, README.markdown
source-repository head
@@ -47,28 +58,42 @@
src
exposed-modules:
+ Control.Concurrent.Compat
Control.Concurrent.MVar.Compat
Control.Monad.Compat
+ Control.Monad.ST.Lazy.Unsafe.Compat
+ Control.Monad.ST.Unsafe.Compat
Data.Bits.Compat
Data.Bool.Compat
+ Data.Complex.Compat
Data.Either.Compat
Data.Foldable.Compat
Data.Function.Compat
Data.Functor.Compat
+ Data.Functor.Const.Compat
+ Data.IORef.Compat
Data.List.Compat
Data.Monoid.Compat
+ Data.Ratio.Compat
+ Data.STRef.Compat
+ Data.String.Compat
Data.Version.Compat
Data.Word.Compat
Debug.Trace.Compat
Foreign.Compat
+ Foreign.ForeignPtr.Safe.Compat
+ Foreign.ForeignPtr.Unsafe.Compat
Foreign.Marshal.Alloc.Compat
Foreign.Marshal.Array.Compat
Foreign.Marshal.Compat
+ Foreign.Marshal.Safe.Compat
+ Foreign.Marshal.Unsafe.Compat
Foreign.Marshal.Utils.Compat
Numeric.Compat
Prelude.Compat
System.Environment.Compat
System.Exit.Compat
+ System.IO.Unsafe.Compat
Text.Read.Compat
test-suite spec
@@ -80,6 +105,24 @@
test
main-is:
Spec.hs
+ other-modules:
+ Control.Monad.CompatSpec
+ Data.Bits.CompatSpec
+ Data.Bool.CompatSpec
+ Data.Either.CompatSpec
+ Data.Function.CompatSpec
+ Data.Functor.CompatSpec
+ Data.IORef.CompatSpec
+ Data.List.CompatSpec
+ Data.Monoid.CompatSpec
+ Data.STRef.CompatSpec
+ Data.Version.CompatSpec
+ Data.Word.CompatSpec
+ Foreign.Marshal.Alloc.CompatSpec
+ Foreign.Marshal.Utils.CompatSpec
+ Numeric.CompatSpec
+ System.Environment.CompatSpec
+ Text.Read.CompatSpec
build-depends:
base >= 4.3 && < 5
, base-compat
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Control/Concurrent/Compat.hs new/base-compat-0.9.0/src/Control/Concurrent/Compat.hs
--- old/base-compat-0.8.2/src/Control/Concurrent/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Control/Concurrent/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,44 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+{-# LANGUAGE RankNTypes #-}
+module Control.Concurrent.Compat (
+ module Base
+, forkFinally
+, forkOSWithUnmask
+) where
+
+import Control.Concurrent as Base
+
+#if !(MIN_VERSION_base(4,6,0))
+import Control.Exception
+#endif
+
+#if !(MIN_VERSION_base(4,9,0))
+import GHC.IO (unsafeUnmask)
+import Prelude
+#endif
+
+#if !(MIN_VERSION_base(4,6,0))
+-- | fork a thread and call the supplied function when the thread is about
+-- to terminate, with an exception or a returned value. The function is
+-- called with asynchronous exceptions masked.
+--
+-- > forkFinally action and_then =
+-- > mask $ \restore ->
+-- > forkIO $ try (restore action) >>= and_then
+--
+-- This function is useful for informing the parent when a child
+-- terminates, for example.
+--
+-- /Since: 4.6.0.0/
+forkFinally :: IO a -> (Either SomeException a -> IO ()) -> IO ThreadId
+forkFinally action and_then =
+ mask $ \restore ->
+ forkIO $ try (restore action) >>= and_then
+#endif
+
+#if !(MIN_VERSION_base(4,9,0))
+-- | Like 'forkIOWithUnmask', but the child thread is a bound thread,
+-- as with 'forkOS'.
+forkOSWithUnmask :: ((forall a . IO a -> IO a) -> IO ()) -> IO ThreadId
+forkOSWithUnmask io = forkOS (io unsafeUnmask)
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Control/Monad/Compat.hs new/base-compat-0.9.0/src/Control/Monad/Compat.hs
--- old/base-compat-0.8.2/src/Control/Monad/Compat.hs 2015-05-13 08:36:37.000000000 +0200
+++ new/base-compat-0.9.0/src/Control/Monad/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -19,13 +19,30 @@
, (<$!>)
#endif
+#if !(MIN_VERSION_base(4,9,0))
+, forever
+, filterM
+, mapAndUnzipM
+, zipWithM
+, zipWithM_
+, replicateM
+, replicateM_
+#endif
) where
-#if MIN_VERSION_base(4,8,0)
+#if MIN_VERSION_base(4,9,0)
import Control.Monad as Base
#else
import Control.Monad as Base hiding (
- foldM
+ forever
+ , filterM
+ , mapAndUnzipM
+ , zipWithM
+ , zipWithM_
+ , replicateM
+ , replicateM_
+# if !(MIN_VERSION_base(4,8,0))
+ , foldM
, foldM_
, forM
, forM_
@@ -37,8 +54,9 @@
, sequence_
, unless
, when
+# endif
)
-import Control.Applicative (Alternative(..))
+import Control.Applicative
import Data.Foldable.Compat
import Data.Traversable
import Prelude.Compat
@@ -116,3 +134,51 @@
let z = f x
z `seq` return z
#endif
+
+#if !(MIN_VERSION_base(4,9,0))
+-- | @'forever' act@ repeats the action infinitely.
+forever :: (Applicative f) => f a -> f b
+{-# INLINE forever #-}
+forever a = let a' = a *> a' in a'
+-- Use explicit sharing here, as it is prevents a space leak regardless of
+-- optimizations.
+
+-- | This generalizes the list-based 'filter' function.
+{-# INLINE filterM #-}
+filterM :: (Applicative m) => (a -> m Bool) -> [a] -> m [a]
+filterM p = foldr (\ x -> liftA2 (\ flg -> if flg then (x:) else id) (p x)) (pure [])
+
+-- | The 'mapAndUnzipM' function maps its first argument over a list, returning
+-- the result as a pair of lists. This function is mainly used with complicated
+-- data structures or a state-transforming monad.
+mapAndUnzipM :: (Applicative m) => (a -> m (b,c)) -> [a] -> m ([b], [c])
+{-# INLINE mapAndUnzipM #-}
+mapAndUnzipM f xs = unzip <$> traverse f xs
+
+-- | The 'zipWithM' function generalizes 'zipWith' to arbitrary applicative functors.
+zipWithM :: (Applicative m) => (a -> b -> m c) -> [a] -> [b] -> m [c]
+{-# INLINE zipWithM #-}
+zipWithM f xs ys = sequenceA (zipWith f xs ys)
+
+-- | 'zipWithM_' is the extension of 'zipWithM' which ignores the final result.
+zipWithM_ :: (Applicative m) => (a -> b -> m c) -> [a] -> [b] -> m ()
+{-# INLINE zipWithM_ #-}
+zipWithM_ f xs ys = sequenceA_ (zipWith f xs ys)
+
+-- | @'replicateM' n act@ performs the action @n@ times,
+-- gathering the results.
+replicateM :: (Applicative m) => Int -> m a -> m [a]
+{-# INLINEABLE replicateM #-}
+{-# SPECIALISE replicateM :: Int -> IO a -> IO [a] #-}
+{-# SPECIALISE replicateM :: Int -> Maybe a -> Maybe [a] #-}
+replicateM 0 _ = pure []
+replicateM n x = liftA2 (:) x (replicateM (pred n) x)
+
+-- | Like 'replicateM', but discards the result.
+replicateM_ :: (Applicative m) => Int -> m a -> m ()
+{-# INLINEABLE replicateM_ #-}
+{-# SPECIALISE replicateM_ :: Int -> IO a -> IO () #-}
+{-# SPECIALISE replicateM_ :: Int -> Maybe a -> Maybe () #-}
+replicateM_ 0 _ = pure ()
+replicateM_ n x = x *> replicateM_ (pred n) x
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Control/Monad/ST/Lazy/Unsafe/Compat.hs new/base-compat-0.9.0/src/Control/Monad/ST/Lazy/Unsafe/Compat.hs
--- old/base-compat-0.8.2/src/Control/Monad/ST/Lazy/Unsafe/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Control/Monad/ST/Lazy/Unsafe/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,12 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Control.Monad.ST.Lazy.Unsafe.Compat (
+ -- * Unsafe operations
+ unsafeInterleaveST
+, unsafeIOToST
+) where
+
+#if MIN_VERSION_base(4,6,0)
+import Control.Monad.ST.Lazy.Unsafe (unsafeInterleaveST, unsafeIOToST)
+#else
+import Control.Monad.ST.Lazy (unsafeInterleaveST, unsafeIOToST)
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Control/Monad/ST/Unsafe/Compat.hs new/base-compat-0.9.0/src/Control/Monad/ST/Unsafe/Compat.hs
--- old/base-compat-0.8.2/src/Control/Monad/ST/Unsafe/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Control/Monad/ST/Unsafe/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,13 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Control.Monad.ST.Unsafe.Compat (
+ -- * Unsafe operations
+ unsafeInterleaveST
+, unsafeIOToST
+, unsafeSTToIO
+) where
+
+#if MIN_VERSION_base(4,6,0)
+import Control.Monad.ST.Unsafe (unsafeInterleaveST, unsafeIOToST, unsafeSTToIO)
+#else
+import Control.Monad.ST (unsafeInterleaveST, unsafeIOToST, unsafeSTToIO)
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Data/Complex/Compat.hs new/base-compat-0.9.0/src/Data/Complex/Compat.hs
--- old/base-compat-0.8.2/src/Data/Complex/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Data/Complex/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,50 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Data.Complex.Compat (
+ module Base
+#if MIN_VERSION_base(4,4,0) && !(MIN_VERSION_base(4,8,0))
+, realPart
+, imagPart
+, mkPolar
+, cis
+, conjugate
+#endif
+) where
+
+#if !(MIN_VERSION_base(4,4,0)) || MIN_VERSION_base(4,8,0)
+import Data.Complex as Base
+#else
+import Data.Complex as Base hiding (
+ realPart
+ , imagPart
+ , mkPolar
+ , cis
+ , conjugate
+ )
+import Prelude
+#endif
+
+#if MIN_VERSION_base(4,4,0) && !(MIN_VERSION_base(4,8,0))
+-- | Extracts the real part of a complex number.
+realPart :: Complex a -> a
+realPart (x :+ _) = x
+
+-- | Extracts the imaginary part of a complex number.
+imagPart :: Complex a -> a
+imagPart (_ :+ y) = y
+
+-- | The conjugate of a complex number.
+{-# SPECIALISE conjugate :: Complex Double -> Complex Double #-}
+conjugate :: Num a => Complex a -> Complex a
+conjugate (x:+y) = x :+ (-y)
+
+-- | Form a complex number from polar components of magnitude and phase.
+{-# SPECIALISE mkPolar :: Double -> Double -> Complex Double #-}
+mkPolar :: Floating a => a -> a -> Complex a
+mkPolar r theta = r * cos theta :+ r * sin theta
+
+-- | @'cis' t@ is a complex value with magnitude @1@
+-- and phase @t@ (modulo @2*'pi'@).
+{-# SPECIALISE cis :: Double -> Complex Double #-}
+cis :: Floating a => a -> Complex a
+cis theta = cos theta :+ sin theta
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Data/Functor/Const/Compat.hs new/base-compat-0.9.0/src/Data/Functor/Const/Compat.hs
--- old/base-compat-0.8.2/src/Data/Functor/Const/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Data/Functor/Const/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,4 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Data.Functor.Const.Compat (Const(..)) where
+
+import Control.Applicative (Const(..))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Data/IORef/Compat.hs new/base-compat-0.9.0/src/Data/IORef/Compat.hs
--- old/base-compat-0.8.2/src/Data/IORef/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Data/IORef/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,42 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Data.IORef.Compat (
+ module Base
+, modifyIORef'
+, atomicModifyIORef'
+, atomicWriteIORef
+) where
+
+import Data.IORef as Base
+
+#if !(MIN_VERSION_base(4,6,0))
+import Prelude
+
+-- |Strict version of 'modifyIORef'
+--
+-- /Since: 4.6.0.0/
+modifyIORef' :: IORef a -> (a -> a) -> IO ()
+modifyIORef' ref f = do
+ x <- readIORef ref
+ let x' = f x
+ x' `seq` writeIORef ref x'
+
+-- | Strict version of 'atomicModifyIORef'. This forces both the value stored
+-- in the 'IORef' as well as the value returned.
+--
+-- /Since: 4.6.0.0/
+atomicModifyIORef' :: IORef a -> (a -> (a,b)) -> IO b
+atomicModifyIORef' ref f = do
+ b <- atomicModifyIORef ref $ \a ->
+ case f a of
+ v@(a',_) -> a' `seq` v
+ b `seq` return b
+
+-- | Variant of 'writeIORef' with the \"barrier to reordering\" property that
+-- 'atomicModifyIORef' has.
+--
+-- /Since: 4.6.0.0/
+atomicWriteIORef :: IORef a -> a -> IO ()
+atomicWriteIORef ref a = do
+ x <- atomicModifyIORef ref (\_ -> (a, ()))
+ x `seq` return ()
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Data/Ratio/Compat.hs new/base-compat-0.9.0/src/Data/Ratio/Compat.hs
--- old/base-compat-0.8.2/src/Data/Ratio/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Data/Ratio/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,32 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Data.Ratio.Compat (
+ module Base
+#if MIN_VERSION_base(4,4,0) && !(MIN_VERSION_base(4,9,0))
+, denominator
+, numerator
+#endif
+) where
+
+#if !(MIN_VERSION_base(4,4,0)) || MIN_VERSION_base(4,9,0)
+import Data.Ratio as Base
+#else
+import Data.Ratio as Base hiding (
+ denominator
+ , numerator
+ )
+import GHC.Real (Ratio(..))
+#endif
+
+#if MIN_VERSION_base(4,4,0) && !(MIN_VERSION_base(4,9,0))
+-- | Extract the numerator of the ratio in reduced form:
+-- the numerator and denominator have no common factor and the denominator
+-- is positive.
+numerator :: Ratio a -> a
+numerator (x :% _) = x
+
+-- | Extract the denominator of the ratio in reduced form:
+-- the numerator and denominator have no common factor and the denominator
+-- is positive.
+denominator :: Ratio a -> a
+denominator (_ :% y) = y
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Data/STRef/Compat.hs new/base-compat-0.9.0/src/Data/STRef/Compat.hs
--- old/base-compat-0.8.2/src/Data/STRef/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Data/STRef/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,21 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Data.STRef.Compat (
+ module Base
+, modifySTRef'
+) where
+
+import Data.STRef as Base
+
+#if !(MIN_VERSION_base(4,6,0))
+import Control.Monad.ST (ST)
+import Prelude (seq)
+
+-- | Strict version of 'modifySTRef'
+--
+-- /Since: 4.6.0.0/
+modifySTRef' :: STRef s a -> (a -> a) -> ST s ()
+modifySTRef' ref f = do
+ x <- readSTRef ref
+ let x' = f x
+ x' `seq` writeSTRef ref x'
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Data/String/Compat.hs new/base-compat-0.9.0/src/Data/String/Compat.hs
--- old/base-compat-0.8.2/src/Data/String/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Data/String/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,15 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Data.String.Compat (
+ module Base
+, String
+, lines
+, words
+, unlines
+, unwords
+) where
+
+import Data.String as Base
+
+#if !(MIN_VERSION_base(4,4,0))
+import Prelude (String, lines, words, unlines, unwords)
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Debug/Trace/Compat.hs new/base-compat-0.9.0/src/Debug/Trace/Compat.hs
--- old/base-compat-0.8.2/src/Debug/Trace/Compat.hs 2015-05-13 08:36:37.000000000 +0200
+++ new/base-compat-0.9.0/src/Debug/Trace/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -6,11 +6,21 @@
, traceM
, traceShowM
) where
+
+#if !(MIN_VERSION_base(4,7,0)) || MIN_VERSION_base(4,9,0)
import Debug.Trace as Base
+#else
+import Debug.Trace as Base hiding (
+ traceM
+ , traceShowM
+ )
+#endif
-#if !(MIN_VERSION_base(4,7,0))
+#if !(MIN_VERSION_base(4,9,0))
import Prelude.Compat
+#endif
+#if !(MIN_VERSION_base(4,7,0))
{-|
Like 'trace' but returns the message instead of a third value.
@@ -26,11 +36,19 @@
-}
traceShowId :: (Show a) => a -> a
traceShowId a = trace (show a) a
+#endif
+#if !(MIN_VERSION_base(4,9,0))
{-|
-Like 'trace' but returning unit in an arbitrary monad. Allows for convenient
-use in do-notation. Note that the application of 'trace' is not an action in the
-monad, as 'traceIO' is in the 'IO' monad.
+Like 'trace' but returning unit in an arbitrary 'Applicative' context. Allows
+for convenient use in do-notation.
+
+Note that the application of 'traceM' is not an action in the 'Applicative'
+context, as 'traceIO' is in the 'IO' type. While the fresh bindings in the
+following example will force the 'traceM' expressions to be reduced every time
+the @do@-block is executed, @traceM "not crashed"@ would only be reduced once,
+and the message would only be printed once. If your monad is in 'MonadIO',
+@liftIO . traceIO@ may be a better option.
> ... = do
> x <- ...
@@ -40,20 +58,20 @@
/Since: 4.7.0.0/
-}
-traceM :: (Monad m) => String -> m ()
-traceM string = trace string $ return ()
+traceM :: (Applicative f) => String -> f ()
+traceM string = trace string $ pure ()
{-|
Like 'traceM', but uses 'show' on the argument to convert it to a 'String'.
> ... = do
> x <- ...
-> traceMShow $ x
+> traceShowM $ x
> y <- ...
-> traceMShow $ x + y
+> traceShowM $ x + y
/Since: 4.7.0.0/
-}
-traceShowM :: (Show a, Monad m) => a -> m ()
+traceShowM :: (Show a, Applicative f) => a -> f ()
traceShowM = traceM . show
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Foreign/ForeignPtr/Safe/Compat.hs new/base-compat-0.9.0/src/Foreign/ForeignPtr/Safe/Compat.hs
--- old/base-compat-0.8.2/src/Foreign/ForeignPtr/Safe/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Foreign/ForeignPtr/Safe/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,34 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Foreign.ForeignPtr.Safe.Compat (
+ -- * Finalised data pointers
+ ForeignPtr
+ , FinalizerPtr
+#if defined(__HUGS__) || defined(__GLASGOW_HASKELL__)
+ , FinalizerEnvPtr
+#endif
+ -- ** Basic operations
+ , newForeignPtr
+ , newForeignPtr_
+ , addForeignPtrFinalizer
+#if defined(__HUGS__) || defined(__GLASGOW_HASKELL__)
+ , newForeignPtrEnv
+ , addForeignPtrFinalizerEnv
+#endif
+ , withForeignPtr
+
+#ifdef __GLASGOW_HASKELL__
+ , finalizeForeignPtr
+#endif
+
+ -- ** Low-level operations
+ , touchForeignPtr
+ , castForeignPtr
+
+ -- ** Allocating managed memory
+ , mallocForeignPtr
+ , mallocForeignPtrBytes
+ , mallocForeignPtrArray
+ , mallocForeignPtrArray0
+ ) where
+
+import Foreign.ForeignPtr
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Foreign/ForeignPtr/Unsafe/Compat.hs new/base-compat-0.9.0/src/Foreign/ForeignPtr/Unsafe/Compat.hs
--- old/base-compat-0.8.2/src/Foreign/ForeignPtr/Unsafe/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Foreign/ForeignPtr/Unsafe/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,11 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Foreign.ForeignPtr.Unsafe.Compat (
+ -- ** Unsafe low-level operations
+ unsafeForeignPtrToPtr
+) where
+
+#if MIN_VERSION_base(4,6,0)
+import Foreign.ForeignPtr.Unsafe (unsafeForeignPtrToPtr)
+#else
+import Foreign.ForeignPtr (unsafeForeignPtrToPtr)
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Foreign/Marshal/Safe/Compat.hs new/base-compat-0.9.0/src/Foreign/Marshal/Safe/Compat.hs
--- old/base-compat-0.8.2/src/Foreign/Marshal/Safe/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Foreign/Marshal/Safe/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,16 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Foreign.Marshal.Safe.Compat (
+ -- | The module "Foreign.Marshal.Safe" re-exports the other modules in the
+ -- @Foreign.Marshal@ hierarchy:
+ module Foreign.Marshal.Alloc
+ , module Foreign.Marshal.Array
+ , module Foreign.Marshal.Error
+ , module Foreign.Marshal.Pool
+ , module Foreign.Marshal.Utils
+ ) where
+
+import Foreign.Marshal.Alloc
+import Foreign.Marshal.Array
+import Foreign.Marshal.Error
+import Foreign.Marshal.Pool
+import Foreign.Marshal.Utils
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Foreign/Marshal/Unsafe/Compat.hs new/base-compat-0.9.0/src/Foreign/Marshal/Unsafe/Compat.hs
--- old/base-compat-0.8.2/src/Foreign/Marshal/Unsafe/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/Foreign/Marshal/Unsafe/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,11 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module Foreign.Marshal.Unsafe.Compat (
+ -- * Unsafe functions
+ unsafeLocalState
+) where
+
+#if MIN_VERSION_base(4,6,0)
+import Foreign.Marshal.Unsafe (unsafeLocalState)
+#else
+import Foreign.Marshal (unsafeLocalState)
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/Prelude/Compat.hs new/base-compat-0.9.0/src/Prelude/Compat.hs
--- old/base-compat-0.8.2/src/Prelude/Compat.hs 2015-05-13 08:36:37.000000000 +0200
+++ new/base-compat-0.9.0/src/Prelude/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -1,6 +1,6 @@
{-# LANGUAGE CPP, NoImplicitPrelude #-}
module Prelude.Compat (
-#if MIN_VERSION_base(4,8,0)
+#if MIN_VERSION_base(4,9,0)
module Base
#else
either
@@ -101,6 +101,7 @@
, (||)
, ($)
, error
+, errorWithoutStackTrace
, undefined
, seq
@@ -257,7 +258,7 @@
) where
-#if MIN_VERSION_base(4,8,0)
+#if MIN_VERSION_base(4,9,0)
import Prelude as Base
@@ -290,9 +291,21 @@
, sum
)
-import Data.Word
import Data.Foldable.Compat
import Data.Traversable
-import Data.Monoid
+
+# if !(MIN_VERSION_base(4,8,0))
import Control.Applicative
+import Data.Monoid
+import Data.Word
+# endif
+#endif
+
+#if !(MIN_VERSION_base(4,9,0))
+-- | A variant of 'error' that does not produce a stack trace.
+--
+-- /Since: 4.9.0.0/
+errorWithoutStackTrace :: [Char] -> a
+errorWithoutStackTrace s = error s
+{-# NOINLINE errorWithoutStackTrace #-}
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/src/System/IO/Unsafe/Compat.hs new/base-compat-0.9.0/src/System/IO/Unsafe/Compat.hs
--- old/base-compat-0.8.2/src/System/IO/Unsafe/Compat.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/src/System/IO/Unsafe/Compat.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,35 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+module System.IO.Unsafe.Compat (
+ module Base
+, unsafeFixIO
+, unsafeDupablePerformIO
+) where
+
+import System.IO.Unsafe as Base
+
+#if !(MIN_VERSION_base(4,5,0))
+import Control.Exception
+import Data.IORef
+import GHC.Base
+import GHC.IO
+
+-- | A slightly faster version of `System.IO.fixIO` that may not be
+-- safe to use with multiple threads. The unsafety arises when used
+-- like this:
+--
+-- > unsafeFixIO $ \r -> do
+-- > forkIO (print r)
+-- > return (...)
+--
+-- In this case, the child thread will receive a @NonTermination@
+-- exception instead of waiting for the value of @r@ to be computed.
+--
+-- /Since: 4.5.0.0/
+unsafeFixIO :: (a -> IO a) -> IO a
+unsafeFixIO k = do
+ ref <- newIORef (throw NonTermination)
+ ans <- unsafeDupableInterleaveIO (readIORef ref)
+ result <- k ans
+ writeIORef ref result
+ return result
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Control/Monad/CompatSpec.hs new/base-compat-0.9.0/test/Control/Monad/CompatSpec.hs
--- old/base-compat-0.8.2/test/Control/Monad/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Control/Monad/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,16 @@
+module Control.Monad.CompatSpec (main, spec) where
+
+import Test.Hspec
+
+import Control.Monad.Compat
+import Prelude ()
+import Prelude.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "(<$!>)" $ do
+ it "is a strict version of (<$>)" $ do
+ not <$!> [True, False] `shouldBe` not <$> [True, False]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/Bits/CompatSpec.hs new/base-compat-0.9.0/test/Data/Bits/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/Bits/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/Bits/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,34 @@
+{-# LANGUAGE CPP #-}
+module Data.Bits.CompatSpec (main, spec) where
+
+import Test.Hspec
+import Data.Bits.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "bitDefault" $
+ it "sets the ith bit with all other bits clear" $ do
+ bitDefault 0 `shouldBe` (1 :: Int)
+ bitDefault 1 `shouldBe` (2 :: Int)
+ bitDefault 2 `shouldBe` (4 :: Int)
+ bitDefault 3 `shouldBe` (8 :: Int)
+ describe "testBitDefault" $
+ it "returns True if the nth bit of the argument is 1" $ do
+ testBitDefault (10 :: Int) 0 `shouldBe` False
+ testBitDefault (10 :: Int) 1 `shouldBe` True
+ testBitDefault (10 :: Int) 2 `shouldBe` False
+ testBitDefault (10 :: Int) 3 `shouldBe` True
+ describe "popCountDefault" $
+ it "returns the number of set bits in the argument" $ do
+ popCountDefault (0 :: Int) `shouldBe` 0
+ popCountDefault (1 :: Int) `shouldBe` 1
+ popCountDefault (10 :: Int) `shouldBe` 2
+#if MIN_VERSION_base(4,7,0)
+ describe "toIntegralSized" $
+ it "converts an Integral type to another as measured by bitSizeMaybe" $ do
+ toIntegralSized (42 :: Integer) `shouldBe` (Just 42 :: Maybe Int)
+ toIntegralSized (12345678901234567890 :: Integer) `shouldBe` (Nothing :: Maybe Int)
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/Bool/CompatSpec.hs new/base-compat-0.9.0/test/Data/Bool/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/Bool/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/Bool/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,18 @@
+module Data.Bool.CompatSpec (main, spec) where
+
+import Test.Hspec
+
+import Data.Bool.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "bool" $ do
+ it "evaluates to first parameter if condition is False" $ do
+ bool "KO" "OK" False `shouldBe` "KO"
+
+ it "evaluates to second parameter if condition is True" $ do
+ bool "KO" "OK" True `shouldBe` "OK"
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/Either/CompatSpec.hs new/base-compat-0.9.0/test/Data/Either/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/Either/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/Either/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,25 @@
+module Data.Either.CompatSpec (main, spec) where
+
+import Test.Hspec
+
+import Data.Either.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "isLeft" $ do
+ it "returns True for a Left value" $ do
+ isLeft (Left "23" :: Either String String) `shouldBe` True
+
+ it "returns False for a Right value" $ do
+ isLeft (Right "23" :: Either String String) `shouldBe` False
+
+ describe "isRight" $ do
+ it "returns False for a Left value" $ do
+ isRight (Left "23" :: Either String String) `shouldBe` False
+
+ it "returns True for a Right value" $ do
+ isRight (Right "23" :: Either String String) `shouldBe` True
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/Function/CompatSpec.hs new/base-compat-0.9.0/test/Data/Function/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/Function/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/Function/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,13 @@
+module Data.Function.CompatSpec (main, spec) where
+
+import Test.Hspec
+import Data.Function.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "&" $ do
+ it "reverses function application" $ do
+ (False & not) `shouldBe` True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/Functor/CompatSpec.hs new/base-compat-0.9.0/test/Data/Functor/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/Functor/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/Functor/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,17 @@
+module Data.Functor.CompatSpec (main, spec) where
+
+import Test.Hspec
+import Data.Functor.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "void" $ do
+ it "discards computation result" $ do
+ void (return 1 :: IO Int) `shouldReturn` ()
+
+ describe "$>" $ do
+ it "is the same as flipped <$" $ do
+ (Just 5 :: Maybe Int) $> 6 `shouldBe` (Just 6 :: Maybe Int)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/IORef/CompatSpec.hs new/base-compat-0.9.0/test/Data/IORef/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/IORef/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/IORef/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,22 @@
+module Data.IORef.CompatSpec (main, spec) where
+
+import Test.Hspec
+
+import Control.Monad
+import Data.IORef.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "modifyIORef'" $
+ it "mutates the contents of an IORef strictly" $ do
+ ref <- newIORef 0
+ replicateM_ 1000000 $ modifyIORef' ref (+1)
+ readIORef ref `shouldReturn` (1000000 :: Int)
+ describe "atomicModifyIORef'" $
+ it "atomically modifies the contents of an IORef strictly" $ do
+ ref <- newIORef 0
+ replicateM_ 1000000 . atomicModifyIORef' ref $ \n -> (n+1, ())
+ readIORef ref `shouldReturn` (1000000 :: Int)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/List/CompatSpec.hs new/base-compat-0.9.0/test/Data/List/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/List/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/List/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,43 @@
+module Data.List.CompatSpec (main, spec) where
+
+import Test.Hspec
+import Data.List.Compat
+
+data Asymmetric = A | B deriving Show
+
+instance Eq Asymmetric where
+ A == _ = True
+ B == _ = False
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "dropWhileEnd" $ do
+ it "drops the largest suffix of a list in which a predicate holds for all elements" $ do
+ dropWhileEnd (== ' ') "foo " `shouldBe` "foo"
+ dropWhileEnd (== ' ') "foo bar" `shouldBe` "foo bar"
+ describe "isSubsequenceOf" $ do
+ it "returns True if the first list is a subsequence of the second list" $ do
+ isSubsequenceOf "GHC" "The Glorious Haskell Compiler" `shouldBe` True
+ isSubsequenceOf "JHC" "The Glorious Haskell Compiler" `shouldBe` False
+ describe "nub" $
+ it "preserves the order of arguments to (==)" $
+ nub [A, B] `shouldBe` [A]
+ describe "nubBy" $
+ it "preserves the order of arguments to the equality function" $
+ nubBy (<) "12" `shouldBe` "1"
+ describe "sortOn" $ do
+ it "sorts a list by comparing the results of a key function applied to each element" $ do
+ sortOn (>='b') "cba" `shouldBe` "acb"
+ describe "uncons" $ do
+ it "decomposes a list into its head and tail" $ do
+ uncons "" `shouldBe` Nothing
+ uncons "12" `shouldBe` Just ('1', "2")
+ describe "union" $
+ it "nubs arguments in the same order as (==)" $ do
+ union [A] [A, B] `shouldBe` [A]
+ describe "unionBy" $
+ it "nubs arguments in the same order as nubBy's equality function" $ do
+ unionBy (<) "1" "21" `shouldBe` "11"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/Monoid/CompatSpec.hs new/base-compat-0.9.0/test/Data/Monoid/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/Monoid/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/Monoid/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,16 @@
+module Data.Monoid.CompatSpec (main, spec) where
+
+import Test.Hspec
+import Test.QuickCheck
+
+import Data.Monoid.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "<>" $ do
+ it "is an infix synonym for mappend" $ do
+ property $ \xs ys -> do
+ xs <> ys `shouldBe` (mappend xs ys :: String)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/STRef/CompatSpec.hs new/base-compat-0.9.0/test/Data/STRef/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/STRef/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/STRef/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,19 @@
+module Data.STRef.CompatSpec (main, spec) where
+
+import Test.Hspec
+
+import Control.Monad
+import Control.Monad.ST
+import Data.STRef.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec =
+ describe "modifySTRef'" $
+ it "should mutate the contents of an STRef strictly" $
+ shouldBe (1000000 :: Int) $ runST $ do
+ ref <- newSTRef 0
+ replicateM_ 1000000 $ modifySTRef' ref (+1)
+ readSTRef ref
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/Version/CompatSpec.hs new/base-compat-0.9.0/test/Data/Version/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/Version/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/Version/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,10 @@
+module Data.Version.CompatSpec (spec) where
+
+import Test.Hspec
+import Data.Version.Compat
+
+spec :: Spec
+spec = do
+ describe "makeVersion" $
+ it "constructs a tagless Version" $
+ makeVersion [1,2,3] `shouldBe` Version [1,2,3] []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Data/Word/CompatSpec.hs new/base-compat-0.9.0/test/Data/Word/CompatSpec.hs
--- old/base-compat-0.8.2/test/Data/Word/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Data/Word/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,22 @@
+module Data.Word.CompatSpec (main, spec) where
+
+import Test.Hspec
+import Data.Word.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "byteSwap16" $
+ it "reverses the order of bytes in a Word16 value" $ do
+ byteSwap16 0x1100 `shouldBe` 0x0011
+ byteSwap16 0x1010 `shouldBe` 0x1010
+ describe "byteSwap32" $
+ it "reverses the order of bytes in a Word32 value" $ do
+ byteSwap32 0x11001010 `shouldBe` 0x10100011
+ byteSwap32 0x10101111 `shouldBe` 0x11111010
+ describe "byteSwap64" $
+ it "reverses the order of bytes in a Word64 value" $ do
+ byteSwap64 0x1010111110101111 `shouldBe` 0x1111101011111010
+ byteSwap64 0x1100000000000011 `shouldBe` 0x1100000000000011
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Foreign/Marshal/Alloc/CompatSpec.hs new/base-compat-0.9.0/test/Foreign/Marshal/Alloc/CompatSpec.hs
--- old/base-compat-0.8.2/test/Foreign/Marshal/Alloc/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Foreign/Marshal/Alloc/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,17 @@
+module Foreign.Marshal.Alloc.CompatSpec (main, spec) where
+
+import Test.Hspec
+
+import Control.Exception
+import Foreign.Marshal.Alloc.Compat
+import Foreign.Storable
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "calloc" $
+ it "allocates memory with bytes of value zero" $ do
+ bracket calloc free $ \ptr -> do
+ peek ptr `shouldReturn` (0 :: Int)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Foreign/Marshal/Utils/CompatSpec.hs new/base-compat-0.9.0/test/Foreign/Marshal/Utils/CompatSpec.hs
--- old/base-compat-0.8.2/test/Foreign/Marshal/Utils/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Foreign/Marshal/Utils/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,20 @@
+module Foreign.Marshal.Utils.CompatSpec (main, spec) where
+
+import Test.Hspec
+
+import Foreign.Marshal.Alloc
+import Foreign.Marshal.Utils.Compat
+import Foreign.Ptr
+import Foreign.Storable
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "fillBytes" $
+ it "fills a given number of bytes in memory area with a byte value" $ do
+ alloca $ \ptr -> do
+ let _ = ptr :: Ptr Int
+ fillBytes ptr 0 $ sizeOf ptr
+ peek ptr `shouldReturn` 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Numeric/CompatSpec.hs new/base-compat-0.9.0/test/Numeric/CompatSpec.hs
--- old/base-compat-0.8.2/test/Numeric/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Numeric/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,24 @@
+module Numeric.CompatSpec (main, spec) where
+
+import Test.Hspec
+import Numeric.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "showFFloatAlt" $ do
+ it "shows a RealFloat value, always using decimal notation" $
+ showFFloatAlt Nothing (12 :: Double) "" `shouldBe` "12.0"
+ it "allows to specify the number of decimal places" $
+ showFFloatAlt (Just 4) (12 :: Double) "" `shouldBe` "12.0000"
+ describe "showGFloatAlt" $ do
+ it "shows a RealFloat value, using decimal notation if the absolute value lies between 0.1 and 9,999,999" $
+ showGFloatAlt Nothing (12 :: Double) "" `shouldBe` "12.0"
+ it "shows a RealFloat value, using decimal notation and specifying the number of decimal places" $
+ showGFloatAlt (Just 4) (12 :: Double) "" `shouldBe` "12.0000"
+ it "shows a RealFloat value, using scientific notation if the absolute value falls outside of the range" $
+ showGFloatAlt Nothing (1234567890 :: Double) "" `shouldBe` "1.23456789e9"
+ it "shows a RealFloat value, using scientific notation and specifying the number of decimal places" $
+ showGFloatAlt (Just 4) (1234567890 :: Double) "" `shouldBe` "1.2346e9"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/System/Environment/CompatSpec.hs new/base-compat-0.9.0/test/System/Environment/CompatSpec.hs
--- old/base-compat-0.8.2/test/System/Environment/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/System/Environment/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,120 @@
+{-# LANGUAGE CPP #-}
+module System.Environment.CompatSpec (main, spec) where
+
+import Test.Hspec
+import Test.QuickCheck
+
+import qualified Control.Exception as E
+import GHC.IO.Exception (IOErrorType (InvalidArgument))
+import System.Environment.Compat
+import System.IO.Error
+
+main :: IO ()
+main = hspec spec
+
+withEnv :: String -> String -> IO a -> IO a
+withEnv k v action = E.bracket save restore $ \_ -> do
+ setEnv k v >> action
+ where
+ save = lookupEnv k
+ restore = maybe (unsetEnv k) (setEnv k)
+
+withoutEnv :: String -> IO a -> IO a
+withoutEnv k action = E.bracket save restore $ \_ -> do
+ unsetEnv k >> action
+ where
+ save = lookupEnv k
+ restore = maybe (unsetEnv k) (setEnv k)
+
+spec :: Spec
+spec = do
+ describe "lookupEnv" $ do
+ it "returns specified environment variable" $ do
+ withEnv "FOOBAR" "23" $ do
+ lookupEnv "FOOBAR" `shouldReturn` Just "23"
+
+ it "returns Nothing if specified environment variable is not set" $ do
+ withoutEnv "FOOBAR" $ do
+ lookupEnv "FOOBAR" `shouldReturn` Nothing
+
+ describe "unsetEnv" $ do
+ it "removes specified environment variable" $ do
+ setEnv "FOO" "foo"
+ unsetEnv "FOO"
+ getEnv "FOO" `shouldThrow` isDoesNotExistError
+
+ it "does nothing if specified environment variable is not set" $ do
+ unsetEnv "BAR"
+ unsetEnv "BAR"
+ getEnv "BAR" `shouldThrow` isDoesNotExistError
+
+ it "throws an exception if key is the empty string" $ do
+ unsetEnv "" `shouldThrow` (== InvalidArgument) . ioeGetErrorType
+
+ it "throws an exception if key contains '='" $ do
+ unsetEnv "some=key" `shouldThrow` (== InvalidArgument) . ioeGetErrorType
+
+ it "works for arbitrary keys" $
+ property $ \k -> ('\NUL' `notElem` k && '=' `notElem` k && (not . null) k) ==> do
+ setEnv k "foo"
+ unsetEnv k
+ getEnv k `shouldThrow` isDoesNotExistError
+
+ describe "setEnv" $ do
+ it "sets specified environment variable to given value" $ do
+ unsetEnv "FOO"
+ setEnv "FOO" "foo"
+ getEnv "FOO" `shouldReturn` "foo"
+
+ it "resets specified environment variable, if it is already set" $ do
+ unsetEnv "FOO"
+ setEnv "FOO" "foo"
+ setEnv "FOO" "bar"
+ getEnv "FOO" `shouldReturn` "bar"
+
+ it "removes specified environment variable when value is the empty string" $ do
+ setEnv "FOO" "foo"
+ setEnv "FOO" ""
+ getEnv "FOO" `shouldThrow` isDoesNotExistError
+
+ it "removes specified environment variable when first character of value is NUL" $ do
+ setEnv "FOO" "foo"
+ setEnv "FOO" "\NULfoo"
+ getEnv "FOO" `shouldThrow` isDoesNotExistError
+
+ it "truncates value at NUL character" $ do
+ unsetEnv "FOO"
+ setEnv "FOO" "foo\NULbar"
+ getEnv "FOO" `shouldReturn` "foo"
+
+ it "truncates key at NUL character" $ do
+ unsetEnv "FOO"
+ setEnv "FOO\NULBAR" "foo"
+ getEnv "FOO" `shouldReturn` "foo"
+
+#if __GLASGOW_HASKELL__ >= 702
+ it "works for unicode" $ do
+ unsetEnv "FOO"
+ setEnv "FOO" "foo-\955-bar"
+ getEnv "FOO" `shouldReturn` "foo-\955-bar"
+#endif
+
+ it "works for arbitrary values" $
+ property $ \v -> ('\NUL' `notElem` v && (not . null) v) ==> do
+ setEnv "FOO" v
+ getEnv "FOO" `shouldReturn` v
+
+ it "works for unicode keys" $ do
+ setEnv "foo-\955-bar" "foo"
+ getEnv "foo-\955-bar" `shouldReturn` "foo"
+
+ it "throws an exception if key is the empty string" $ do
+ setEnv "" "foo" `shouldThrow` (== InvalidArgument) . ioeGetErrorType
+
+ it "throws an exception if key contains '='" $ do
+ setEnv "some=key" "foo" `shouldThrow` (== InvalidArgument) . ioeGetErrorType
+
+ it "works for arbitrary keys" $
+ property $ \k -> ('\NUL' `notElem` k && '=' `notElem` k && (not . null) k) ==> do
+ setEnv k "foo"
+ getEnv k `shouldReturn` "foo"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-compat-0.8.2/test/Text/Read/CompatSpec.hs new/base-compat-0.9.0/test/Text/Read/CompatSpec.hs
--- old/base-compat-0.8.2/test/Text/Read/CompatSpec.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/base-compat-0.9.0/test/Text/Read/CompatSpec.hs 2016-01-15 03:45:49.000000000 +0100
@@ -0,0 +1,24 @@
+module Text.Read.CompatSpec (main, spec) where
+
+import Test.Hspec
+
+import Text.Read.Compat
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+ describe "readMaybe" $ do
+ it "parses a value" $ do
+ readMaybe "23" `shouldBe` (Just 23 :: Maybe Int)
+
+ it "returns Nothing if parsing fails" $ do
+ readMaybe "xx" `shouldBe` (Nothing :: Maybe Int)
+
+ describe "readEither" $ do
+ it "parses a value" $ do
+ readEither "23" `shouldBe` (Right 23 :: Either String Int)
+
+ it "returns Left if parsing fails" $ do
+ readEither "xx" `shouldBe` (Left "Prelude.read: no parse" :: Either String Int)
1
0
Hello community,
here is the log from the commit of package ghc-base-orphans for openSUSE:Factory checked in at 2016-01-28 17:23:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-base-orphans (Old)
and /work/SRC/openSUSE:Factory/.ghc-base-orphans.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-base-orphans"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-base-orphans/ghc-base-orphans.changes 2015-12-23 08:50:12.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-base-orphans.new/ghc-base-orphans.changes 2016-01-28 17:24:30.000000000 +0100
@@ -1,0 +2,6 @@
+Wed Jan 20 08:48:09 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 0.5.0
+* Backported instances introduced in GHC 8.0/base-4.9
+
+-------------------------------------------------------------------
Old:
----
base-orphans-0.4.5.tar.gz
New:
----
base-orphans-0.5.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-base-orphans.spec ++++++
--- /var/tmp/diff_new_pack.HLOfB0/_old 2016-01-28 17:24:30.000000000 +0100
+++ /var/tmp/diff_new_pack.HLOfB0/_new 2016-01-28 17:24:30.000000000 +0100
@@ -20,7 +20,7 @@
%bcond_with tests
Name: ghc-base-orphans
-Version: 0.4.5
+Version: 0.5.0
Release: 0
Summary: Backwards-compatible orphan instances for base
Group: System/Libraries
++++++ base-orphans-0.4.5.tar.gz -> base-orphans-0.5.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-orphans-0.4.5/CHANGES.markdown new/base-orphans-0.5.0/CHANGES.markdown
--- old/base-orphans-0.4.5/CHANGES.markdown 2015-12-15 18:26:53.000000000 +0100
+++ new/base-orphans-0.5.0/CHANGES.markdown 2016-01-15 03:45:07.000000000 +0100
@@ -1,3 +1,8 @@
+## Changes in 0.5.0
+ - GHC 8.0 compatibility
+ - Backported instances introduced in GHC 8.0/`base-4.9`
+ (see https://github.com/haskell-compat/base-orphans/issues/32)
+
## Changes in 0.4.5
- Import `Control.Monad.Instances` (which exports `Functor` and `Monad`
instances for `(->) r`, and `Functor` instances for `(,) a` and `Either a`)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-orphans-0.4.5/README.markdown new/base-orphans-0.5.0/README.markdown
--- old/base-orphans-0.4.5/README.markdown 2015-12-15 18:26:53.000000000 +0100
+++ new/base-orphans-0.5.0/README.markdown 2016-01-15 03:45:07.000000000 +0100
@@ -31,25 +31,33 @@
## What is covered
- * Added `Applicative` and `Alternative` instances for `ReadP` and `ReadPrec`
- * Added `Bits`, `Bounded`, and `Integral` instances for `CDev`
- * Added `Eq` and `Ord` instances for `Control.Exception.ErrorCall`
- * Added `Eq`, `Ord`, `Read`, and `Show` instances for data types in `GHC.Generics`
- * Added `Functor`, `Applicative`, `Alternative`, and `MonadPlus` instances for `ArrowMonad`
- * Added `Functor`, `Applicative`, and `Monad` instances for `First` and `Last`
- * Added `Monoid`, `Eq`, `Ord`, `Read`, and `Show` instances for `Const`
- * Added `Read` and `Show` instances for `Down`
- * Added `Eq`, `Ord`, `Read`, and `Show` instances for `ZipList`
- * Added `Monad` instance for `WrappedMonad`
- * Added `Data` and `IsList` instances for `Version`
+ * `Applicative` and `Alternative` instances for `ReadP` and `ReadPrec`
* `Applicative` instance for strict and lazy `ST`
+ * `Applicative`, `Foldable`, `Functor`, `Monad`, and `Traversable` instances for `Complex`,
+ `Dual`, `First`, `Last`, `Product`, and `Sum`
* `Bits` instance for `Bool`
+ * `Bits`, `Bounded`, and `Integral` instances for `CDev`
+ * `Bounded`, `Enum`, `Ix`, and `Storable` instances for `Const` and `Identity`
+ * `Data` instances for `All` and `Any`
+ * `Data`, `MonadFix` and `MonadZip` instances for `Alt`, `Dual`, `First`, `Last`,
+ `Product`, and `Sum`
+ * `Data` and `IsList` instances for `Version`
+ * `Eq` and `Ord` instances for `Control.Exception.ErrorCall`
+ * `Eq`, `Ord`, `Read`, and `Show` instances for data types in `GHC.Generics`
+ * `Eq`, `Ord`, `Read`, `Show`, `Foldable`, and `Traversable` instances for `ZipList`
* `Foldable` instance for `Either`, `(,)` and `Const`
* `Functor` instance for `Handler`, `ArgOrder`, `OptDescr`, and `ArgDescr`
+ * `Functor`, `Applicative`, `Alternative`, and `MonadPlus` instances for `ArrowMonad`
+ * `Monad` instance for `(,)`
+ * `Monad` instance for `WrappedMonad`
+ * `MonadZip` instance for `Maybe`
+ * `Monoid`, `Eq`, `Ord`, `Read`, and `Show` instances for `Const`
+ * `Monoid` instances for `Identity` and `IO`
* `Num` instance for `Sum` and `Product`
* `Read` instance for `Fixed`
+ * `Read` and `Show` instances for `Down`
* `Show` instance for `Fingerprint`
- * `Storable` instance for `Complex` and `Ratio`
+ * `Storable` instance for `()`, `Complex`, and `Ratio`
* `Traversable` instance for `Either`, `(,)` and `Const`
* `Typeable` instance for most data types, typeclasses, and promoted data constructors (when possible)
@@ -60,9 +68,14 @@
[`Generics.Deriving.Instances`](https://hackage.haskell.org/package/generic-deriving-1.8.0/docs/Generics-Deriving-Instances.html)
module of the [`generic-deriving`](https://hackage.haskell.org/package/generic-deriving)
library.
+* The `Alternative IO` and `MonadPlus IO` instances. These can be found in the
+ [`Control.Monad.Trans.Error`](http://hackage.haskell.org/package/transformers-0.4.3.0/docs/src/Control-Monad-Trans-Error.html#line-69)
+ module of the [`transformers`](http://hackage.haskell.org/package/transformers) library.
## Supported versions of GHC/`base`
+ * `ghc-8.0.1` / `base-4.9.0.0`
+ * `ghc-7.10.3` / `base-4.8.2.0`
* `ghc-7.10.2` / `base-4.8.1.0`
* `ghc-7.10.1` / `base-4.8.0.0`
* `ghc-7.8.4` / `base-4.7.0.2`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-orphans-0.4.5/base-orphans.cabal new/base-orphans-0.5.0/base-orphans.cabal
--- old/base-orphans-0.4.5/base-orphans.cabal 2015-12-15 18:26:53.000000000 +0100
+++ new/base-orphans-0.5.0/base-orphans.cabal 2016-01-15 03:45:07.000000000 +0100
@@ -1,71 +1,71 @@
--- This file has been generated from package.yaml by hpack version 0.8.0.
---
--- see: https://github.com/sol/hpack
-
-name: base-orphans
-version: 0.4.5
-synopsis: Backwards-compatible orphan instances for base
-description: @base-orphans@ defines orphan instances that mimic instances available in later versions of @base@ to a wider (older) range of compilers. @base-orphans@ does not export anything except the orphan instances themselves and complements @<http://hackage.haskell.org/package/base-compat base-compat>@.
- See the README for what instances are covered: <https://github.com/haskell-compat/base-orphans#readme>. See also the <https://github.com/haskell-compat/base-orphans#what-is-not-covered what is not covered> section.
-category: Compatibility
-homepage: https://github.com/haskell-compat/base-orphans#readme
-bug-reports: https://github.com/haskell-compat/base-orphans/issues
-author: Simon Hengel <sol(a)typeful.net>,
- João Cristóvão <jmacristovao(a)gmail.com>,
- Ryan Scott <ryan.gl.scott(a)gmail.com>
-maintainer: Simon Hengel <sol(a)typeful.net>,
- João Cristóvão <jmacristovao(a)gmail.com>,
- Ryan Scott <ryan.gl.scott(a)gmail.com>
-copyright: (c) 2012-2015 Simon Hengel,
- (c) 2014 João Cristóvão,
- (c) 2015 Ryan Scott
-license: MIT
-license-file: LICENSE
-build-type: Simple
-cabal-version: >= 1.10
-
-extra-source-files:
- CHANGES.markdown
- README.markdown
-
-source-repository head
- type: git
- location: https://github.com/haskell-compat/base-orphans
-
-library
- hs-source-dirs:
- src
- ghc-options: -Wall
- build-depends:
- base >= 4.3 && < 5,
- ghc-prim
- exposed-modules:
- Data.Orphans
- other-modules:
- Data.Orphans.Prelude
- default-language: Haskell2010
-
-test-suite spec
- type: exitcode-stdio-1.0
- main-is: Spec.hs
- hs-source-dirs:
- test
- ghc-options: -Wall
- build-depends:
- base >= 4.3 && < 5,
- base-orphans,
- hspec == 2.*,
- QuickCheck
- other-modules:
- Control.Applicative.OrphansSpec
- Control.Exception.OrphansSpec
- Data.Bits.OrphansSpec
- Data.Foldable.OrphansSpec
- Data.Monoid.OrphansSpec
- Data.Traversable.OrphansSpec
- Data.Version.OrphansSpec
- Foreign.Storable.OrphansSpec
- GHC.Fingerprint.OrphansSpec
- System.Posix.Types.IntWord
- System.Posix.Types.OrphansSpec
- default-language: Haskell2010
+-- This file has been generated from package.yaml by hpack version 0.8.0.
+--
+-- see: https://github.com/sol/hpack
+
+name: base-orphans
+version: 0.5.0
+synopsis: Backwards-compatible orphan instances for base
+description: @base-orphans@ defines orphan instances that mimic instances available in later versions of @base@ to a wider (older) range of compilers. @base-orphans@ does not export anything except the orphan instances themselves and complements @<http://hackage.haskell.org/package/base-compat base-compat>@.
+ See the README for what instances are covered: <https://github.com/haskell-compat/base-orphans#readme>. See also the <https://github.com/haskell-compat/base-orphans#what-is-not-covered what is not covered> section.
+category: Compatibility
+homepage: https://github.com/haskell-compat/base-orphans#readme
+bug-reports: https://github.com/haskell-compat/base-orphans/issues
+author: Simon Hengel <sol(a)typeful.net>,
+ João Cristóvão <jmacristovao(a)gmail.com>,
+ Ryan Scott <ryan.gl.scott(a)gmail.com>
+maintainer: Simon Hengel <sol(a)typeful.net>,
+ João Cristóvão <jmacristovao(a)gmail.com>,
+ Ryan Scott <ryan.gl.scott(a)gmail.com>
+copyright: (c) 2012-2015 Simon Hengel,
+ (c) 2014 João Cristóvão,
+ (c) 2015 Ryan Scott
+license: MIT
+license-file: LICENSE
+build-type: Simple
+cabal-version: >= 1.10
+
+extra-source-files:
+ CHANGES.markdown
+ README.markdown
+
+source-repository head
+ type: git
+ location: https://github.com/haskell-compat/base-orphans
+
+library
+ hs-source-dirs:
+ src
+ ghc-options: -Wall
+ build-depends:
+ base >= 4.3 && < 5,
+ ghc-prim
+ exposed-modules:
+ Data.Orphans
+ other-modules:
+ Data.Orphans.Prelude
+ default-language: Haskell2010
+
+test-suite spec
+ type: exitcode-stdio-1.0
+ main-is: Spec.hs
+ hs-source-dirs:
+ test
+ ghc-options: -Wall
+ build-depends:
+ base >= 4.3 && < 5,
+ base-orphans,
+ hspec == 2.*,
+ QuickCheck
+ other-modules:
+ Control.Applicative.OrphansSpec
+ Control.Exception.OrphansSpec
+ Data.Bits.OrphansSpec
+ Data.Foldable.OrphansSpec
+ Data.Monoid.OrphansSpec
+ Data.Traversable.OrphansSpec
+ Data.Version.OrphansSpec
+ Foreign.Storable.OrphansSpec
+ GHC.Fingerprint.OrphansSpec
+ System.Posix.Types.IntWord
+ System.Posix.Types.OrphansSpec
+ default-language: Haskell2010
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-orphans-0.4.5/src/Data/Orphans/Prelude.hs new/base-orphans-0.5.0/src/Data/Orphans/Prelude.hs
--- old/base-orphans-0.4.5/src/Data/Orphans/Prelude.hs 2015-12-15 18:26:53.000000000 +0100
+++ new/base-orphans-0.5.0/src/Data/Orphans/Prelude.hs 2016-01-15 03:45:07.000000000 +0100
@@ -10,7 +10,7 @@
Note that this module does not export any modules that could introduce name clashes.
-}
module Data.Orphans.Prelude
-#if MIN_VERSION_base(4,8,0)
+#if MIN_VERSION_base(4,9,0)
() where
#else
(module OrphansPrelude) where
@@ -100,4 +100,8 @@
import Control.Concurrent.SampleVar as OrphansPrelude
# endif
+# if MIN_VERSION_base(4,8,0)
+import Data.Functor.Identity as OrphansPrelude
+# endif
+
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/base-orphans-0.4.5/src/Data/Orphans.hs new/base-orphans-0.5.0/src/Data/Orphans.hs
--- old/base-orphans-0.4.5/src/Data/Orphans.hs 2015-12-15 18:26:53.000000000 +0100
+++ new/base-orphans-0.5.0/src/Data/Orphans.hs 2016-01-15 03:45:07.000000000 +0100
@@ -5,6 +5,7 @@
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
@@ -42,13 +43,16 @@
import Control.Monad.Instances ()
#endif
-#if __GLASGOW_HASKELL__ < 710
-import Control.Exception as Exception
-import Control.Monad.ST.Lazy as Lazy
+#if !(MIN_VERSION_base(4,9,0))
import Data.Data as Data
import qualified Data.Foldable as F (Foldable(..))
import Data.Monoid as Monoid
import qualified Data.Traversable as T (Traversable(..))
+#endif
+
+#if __GLASGOW_HASKELL__ < 710
+import Control.Exception as Exception
+import Control.Monad.ST.Lazy as Lazy
import GHC.Exts as Exts
import GHC.IO.Exception as Exception
import Text.ParserCombinators.ReadP as ReadP
@@ -60,7 +64,7 @@
# endif
#endif
-#if !(MIN_VERSION_base(4,8,0))
+#if !(MIN_VERSION_base(4,9,0))
import Data.Orphans.Prelude
#endif
@@ -392,6 +396,242 @@
pokeElemOff q 1 i
#endif
+#if !(MIN_VERSION_base(4,9,0))
+instance Storable () where
+ sizeOf _ = 0
+ alignment _ = 1
+ peek _ = return ()
+ poke _ _ = return ()
+
+deriving instance Bounded a => Bounded (Const a b)
+deriving instance Enum a => Enum (Const a b)
+deriving instance Ix a => Ix (Const a b)
+deriving instance Storable a => Storable (Const a b)
+
+deriving instance Data All
+deriving instance Data Monoid.Any
+deriving instance Data a => Data (Dual a)
+deriving instance Data a => Data (First a)
+deriving instance Data a => Data (Last a)
+deriving instance Data a => Data (Product a)
+deriving instance Data a => Data (Sum a)
+
+instance F.Foldable Dual where
+ foldMap = coerce
+
+ foldl = coerce
+ foldl1 _ = getDual
+ foldr f z (Dual x) = f x z
+ foldr1 _ = getDual
+# if MIN_VERSION_base(4,6,0)
+ foldl' = coerce
+ foldr' = F.foldr
+# endif
+# if MIN_VERSION_base(4,8,0)
+ elem = (. getDual) #. (==)
+ length _ = 1
+ maximum = getDual
+ minimum = getDual
+ null _ = False
+ product = getDual
+ sum = getDual
+ toList (Dual x) = [x]
+# endif
+
+instance F.Foldable Sum where
+ foldMap = coerce
+
+ foldl = coerce
+ foldl1 _ = getSum
+ foldr f z (Sum x) = f x z
+ foldr1 _ = getSum
+# if MIN_VERSION_base(4,6,0)
+ foldl' = coerce
+ foldr' = F.foldr
+# endif
+# if MIN_VERSION_base(4,8,0)
+ elem = (. getSum) #. (==)
+ length _ = 1
+ maximum = getSum
+ minimum = getSum
+ null _ = False
+ product = getSum
+ sum = getSum
+ toList (Sum x) = [x]
+# endif
+
+instance F.Foldable Product where
+ foldMap = coerce
+
+ foldl = coerce
+ foldl1 _ = getProduct
+ foldr f z (Product x) = f x z
+ foldr1 _ = getProduct
+# if MIN_VERSION_base(4,6,0)
+ foldl' = coerce
+ foldr' = F.foldr
+# endif
+# if MIN_VERSION_base(4,8,0)
+ elem = (. getProduct) #. (==)
+ length _ = 1
+ maximum = getProduct
+ minimum = getProduct
+ null _ = False
+ product = getProduct
+ sum = getProduct
+ toList (Product x) = [x]
+# endif
+
+# if MIN_VERSION_base(4,8,0)
+(#.) :: Coercible b c => (b -> c) -> (a -> b) -> (a -> c)
+(#.) _f = coerce
+# endif
+
+# if !(MIN_VERSION_base(4,7,0))
+coerce :: a -> b
+coerce = unsafeCoerce
+# endif
+
+instance Functor Dual where
+ fmap = coerce
+
+instance Applicative Dual where
+ pure = Dual
+ (<*>) = coerce
+
+instance Monad Dual where
+ return = Dual
+ m >>= k = k (getDual m)
+
+instance Functor Sum where
+ fmap = coerce
+
+instance Applicative Sum where
+ pure = Sum
+ (<*>) = coerce
+
+instance Monad Sum where
+ return = Sum
+ m >>= k = k (getSum m)
+
+instance Functor Product where
+ fmap = coerce
+
+instance Applicative Product where
+ pure = Product
+ (<*>) = coerce
+
+instance Monad Product where
+ return = Product
+ m >>= k = k (getProduct m)
+
+instance F.Foldable First where
+ foldMap f = F.foldMap f . getFirst
+
+instance F.Foldable Last where
+ foldMap f = F.foldMap f . getLast
+
+instance Monoid a => Monoid (IO a) where
+ mempty = pure mempty
+ mappend = liftA2 mappend
+
+-- see: #10190 https://git.haskell.org/ghc.git/commitdiff/9db005a444722e31aca1956b058e069b…
+instance Monoid a => Monad ((,) a) where
+ return x = (mempty, x)
+ (u, a) >>= k = case k a of (v, b) -> (u `mappend` v, b)
+
+instance MonadFix Dual where
+ mfix f = Dual (fix (getDual . f))
+
+instance MonadFix Sum where
+ mfix f = Sum (fix (getSum . f))
+
+instance MonadFix Product where
+ mfix f = Product (fix (getProduct . f))
+
+instance MonadFix First where
+ mfix f = First (mfix (getFirst . f))
+
+instance MonadFix Last where
+ mfix f = Last (mfix (getLast . f))
+
+instance T.Traversable Dual where
+ traverse f (Dual x) = Dual <$> f x
+
+instance T.Traversable Sum where
+ traverse f (Sum x) = Sum <$> f x
+
+instance T.Traversable Product where
+ traverse f (Product x) = Product <$> f x
+
+instance T.Traversable First where
+ traverse f (First x) = First <$> T.traverse f x
+
+instance T.Traversable Last where
+ traverse f (Last x) = Last <$> T.traverse f x
+
+deriving instance F.Foldable ZipList
+deriving instance T.Traversable ZipList
+
+# if MIN_VERSION_base(4,4,0)
+deriving instance Functor Complex
+deriving instance F.Foldable Complex
+deriving instance T.Traversable Complex
+
+instance Applicative Complex where
+ pure a = a :+ a
+ f :+ g <*> a :+ b = f a :+ g b
+
+instance Monad Complex where
+ return a = a :+ a
+ a :+ b >>= f = realPart (f a) :+ imagPart (f b)
+
+-- | Extracts the real part of a complex number.
+realPart :: Complex a -> a
+realPart (x :+ _) = x
+
+-- | Extracts the imaginary part of a complex number.
+imagPart :: Complex a -> a
+imagPart (_ :+ y) = y
+
+instance MonadZip Dual where
+ -- Cannot use coerce, it's unsafe
+ mzipWith = liftM2
+
+instance MonadZip Sum where
+ mzipWith = liftM2
+
+instance MonadZip Product where
+ mzipWith = liftM2
+
+instance MonadZip Maybe where
+ mzipWith = liftM2
+
+instance MonadZip First where
+ mzipWith = liftM2
+
+instance MonadZip Last where
+ mzipWith = liftM2
+# endif
+
+# if MIN_VERSION_base(4,8,0)
+deriving instance (Data (f a), Typeable f, Typeable a)
+ => Data (Alt (f :: * -> *) (a :: *))
+
+instance MonadFix f => MonadFix (Alt f) where
+ mfix f = Alt (mfix (getAlt . f))
+
+instance MonadZip f => MonadZip (Alt f) where
+ mzipWith f (Alt ma) (Alt mb) = Alt (mzipWith f ma mb)
+
+deriving instance Bounded a => Bounded (Identity a)
+deriving instance Enum a => Enum (Identity a)
+deriving instance Ix a => Ix (Identity a)
+deriving instance Monoid a => Monoid (Identity a)
+deriving instance Storable a => Storable (Identity a)
+# endif
+#endif
+
#if __GLASGOW_HASKELL__ < 710
deriving instance Typeable All
deriving instance Typeable AnnotationWrapper
1
0
Hello community,
here is the log from the commit of package ghc-async for openSUSE:Factory checked in at 2016-01-28 17:23:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-async (Old)
and /work/SRC/openSUSE:Factory/.ghc-async.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-async"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-async/ghc-async.changes 2015-05-21 08:11:04.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-async.new/ghc-async.changes 2016-01-28 17:24:28.000000000 +0100
@@ -1,0 +2,11 @@
+Sun Jan 24 10:10:44 UTC 2016 - mimi.vx(a)gmail.com
+
+- update to 2.1.0
+* Bump base dependency to allow 4.10
+* Remove invalid Monad instance for Concurrently
+* Add Monoid and Semigroup instances for Concurrently
+* Add forConcurrently (flipped version of mapConcurrently)
+* Add STM version of all applicable IO functions: waitAnySTM, waitAnyCatchSTM,
+ waitEitherSTM, waitEitherCatchSTM, waitEitherSTM_, and waitBothSTM.
+
+-------------------------------------------------------------------
Old:
----
async-2.0.2.tar.gz
New:
----
async-2.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-async.spec ++++++
--- /var/tmp/diff_new_pack.Fjk1y6/_old 2016-01-28 17:24:29.000000000 +0100
+++ /var/tmp/diff_new_pack.Fjk1y6/_new 2016-01-28 17:24:29.000000000 +0100
@@ -19,14 +19,14 @@
%global pkg_name async
Name: ghc-async
-Version: 2.0.2
+Version: 2.1.0
Release: 0
Summary: Run IO operations asynchronously and wait for their results
License: BSD-3-Clause
Group: System/Libraries
Url: http://hackage.haskell.org/package/%{pkg_name}
-Source0: http://hackage.haskell.org/packages/archive/%{pkg_name}/%{version}/%{pkg_na…
+Source0: http://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{ver…
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: ghc-Cabal-devel
++++++ async-2.0.2.tar.gz -> async-2.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/async-2.0.2/Control/Concurrent/Async.hs new/async-2.1.0/Control/Concurrent/Async.hs
--- old/async-2.0.2/Control/Concurrent/Async.hs 2014-12-22 12:32:14.000000000 +0100
+++ new/async-2.1.0/Control/Concurrent/Async.hs 2016-01-05 17:42:20.000000000 +0100
@@ -105,11 +105,17 @@
waitEither_,
waitBoth,
+ -- ** Waiting for multiple 'Async's in STM
+ waitAnySTM, waitAnyCatchSTM,
+ waitEitherSTM, waitEitherCatchSTM,
+ waitEitherSTM_,
+ waitBothSTM,
+
-- ** Linking
link, link2,
-- * Convenient utilities
- race, race_, concurrently, mapConcurrently,
+ race, race_, concurrently, mapConcurrently, forConcurrently,
Concurrently(..),
) where
@@ -122,7 +128,14 @@
#endif
import Control.Monad
import Control.Applicative
+#if !MIN_VERSION_base(4,8,0)
+import Data.Monoid (Monoid(mempty,mappend))
import Data.Traversable
+#endif
+#if MIN_VERSION_base(4,9,0)
+import Data.Semigroup (Semigroup((<>)))
+#endif
+
import GHC.Exts
import GHC.IO hiding (finally, onException)
@@ -316,9 +329,15 @@
-- If multiple 'Async's complete or have completed, then the value
-- returned corresponds to the first completed 'Async' in the list.
--
+{-# INLINE waitAnyCatch #-}
waitAnyCatch :: [Async a] -> IO (Async a, Either SomeException a)
-waitAnyCatch asyncs =
- atomically $
+waitAnyCatch = atomically . waitAnyCatchSTM
+
+-- | A version of 'waitAnyCatch' that can be used inside an STM transaction.
+--
+-- @since 2.1.0
+waitAnyCatchSTM :: [Async a] -> STM (Async a, Either SomeException a)
+waitAnyCatchSTM asyncs =
foldr orElse retry $
map (\a -> do r <- waitCatchSTM a; return (a, r)) asyncs
@@ -336,9 +355,15 @@
-- If multiple 'Async's complete or have completed, then the value
-- returned corresponds to the first completed 'Async' in the list.
--
+{-# INLINE waitAny #-}
waitAny :: [Async a] -> IO (Async a, a)
-waitAny asyncs =
- atomically $
+waitAny = atomically . waitAnySTM
+
+-- | A version of 'waitAny' that can be used inside an STM transaction.
+--
+-- @since 2.1.0
+waitAnySTM :: [Async a] -> STM (Async a, a)
+waitAnySTM asyncs =
foldr orElse retry $
map (\a -> do r <- waitSTM a; return (a, r)) asyncs
@@ -350,11 +375,19 @@
waitAny asyncs `finally` mapM_ cancel asyncs
-- | Wait for the first of two @Async@s to finish.
+{-# INLINE waitEitherCatch #-}
waitEitherCatch :: Async a -> Async b
-> IO (Either (Either SomeException a)
(Either SomeException b))
-waitEitherCatch left right =
- atomically $
+waitEitherCatch left right = atomically (waitEitherCatchSTM left right)
+
+-- | A version of 'waitEitherCatch' that can be used inside an STM transaction.
+--
+-- @since 2.1.0
+waitEitherCatchSTM :: Async a -> Async b
+ -> STM (Either (Either SomeException a)
+ (Either SomeException b))
+waitEitherCatchSTM left right =
(Left <$> waitCatchSTM left)
`orElse`
(Right <$> waitCatchSTM right)
@@ -372,18 +405,30 @@
-- that finished first raised an exception, then the exception is
-- re-thrown by 'waitEither'.
--
+{-# INLINE waitEither #-}
waitEither :: Async a -> Async b -> IO (Either a b)
-waitEither left right =
- atomically $
+waitEither left right = atomically (waitEitherSTM left right)
+
+-- | A version of 'waitEither' that can be used inside an STM transaction.
+--
+-- @since 2.1.0
+waitEitherSTM :: Async a -> Async b -> STM (Either a b)
+waitEitherSTM left right =
(Left <$> waitSTM left)
`orElse`
(Right <$> waitSTM right)
-- | Like 'waitEither', but the result is ignored.
--
+{-# INLINE waitEither_ #-}
waitEither_ :: Async a -> Async b -> IO ()
-waitEither_ left right =
- atomically $
+waitEither_ left right = atomically (waitEitherSTM_ left right)
+
+-- | A version of 'waitEither_' that can be used inside an STM transaction.
+--
+-- @since 2.1.0
+waitEitherSTM_:: Async a -> Async b -> STM ()
+waitEitherSTM_ left right =
(void $ waitSTM left)
`orElse`
(void $ waitSTM right)
@@ -399,9 +444,15 @@
-- an exception before they have both finished, then the exception is
-- re-thrown by 'waitBoth'.
--
+{-# INLINE waitBoth #-}
waitBoth :: Async a -> Async b -> IO (a,b)
-waitBoth left right =
- atomically $ do
+waitBoth left right = atomically (waitBothSTM left right)
+
+-- | A version of 'waitBoth' that can be used inside an STM transaction.
+--
+-- @since 2.1.0
+waitBothSTM :: Async a -> Async b -> STM (a,b)
+waitBothSTM left right = do
a <- waitSTM left
`orElse`
(waitSTM right >> retry)
@@ -519,7 +570,9 @@
`catchAll` (putMVar done . Left)
rid <- forkIO $ restore (right >>= putMVar done . Right . Right)
`catchAll` (putMVar done . Left)
- let stop = killThread lid >> killThread rid
+ let stop = killThread rid >> killThread lid
+ -- kill right before left, to match the semantics of
+ -- the version using withAsync. (#27)
r <- restore (collect done) `onException` stop
stop
return r
@@ -538,6 +591,14 @@
mapConcurrently :: Traversable t => (a -> IO b) -> t a -> IO (t b)
mapConcurrently f = runConcurrently . traverse (Concurrently . f)
+-- | `forConcurrently` is `mapConcurrently` with its arguments flipped
+--
+-- > pages <- forConcurrently ["url1", "url2", "url3"] $ \url -> getURL url
+--
+-- @since 2.1.0
+forConcurrently :: Traversable t => t a -> (a -> IO b)-> IO (t b)
+forConcurrently = flip mapConcurrently
+
-- -----------------------------------------------------------------------------
-- | A value of type @Concurrently a@ is an @IO@ operation that can be
@@ -571,10 +632,23 @@
Concurrently as <|> Concurrently bs =
Concurrently $ either id id <$> race as bs
-instance Monad Concurrently where
- return = pure
- Concurrently a >>= f =
- Concurrently $ a >>= runConcurrently . f
+#if MIN_VERSION_base(4,9,0)
+-- | Only defined by @async@ for @base >= 4.9@
+--
+-- @since 2.1.0
+instance Semigroup a => Semigroup (Concurrently a) where
+ (<>) = liftA2 (<>)
+
+-- | @since 2.1.0
+instance (Semigroup a, Monoid a) => Monoid (Concurrently a) where
+ mempty = pure mempty
+ mappend = (<>)
+#else
+-- | @since 2.1.0
+instance Monoid a => Monoid (Concurrently a) where
+ mempty = pure mempty
+ mappend = liftA2 mappend
+#endif
-- ----------------------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/async-2.0.2/async.cabal new/async-2.1.0/async.cabal
--- old/async-2.0.2/async.cabal 2014-12-22 12:32:14.000000000 +0100
+++ new/async-2.1.0/async.cabal 2016-01-05 17:42:20.000000000 +0100
@@ -1,4 +1,6 @@
name: async
+version: 2.1.0
+-- don't forget to update ./changelog.md!
synopsis: Run IO operations asynchronously and wait for their results
description:
@@ -21,47 +23,7 @@
* The API makes it possible to build a tree of
threads that are automatically killed when
their parent dies (see 'withAsync').
- .
- Changes in 2.0.2:
- .
- * Add a Monad instance for Concurrently
- * Bump base dependency to allow 4.9
- .
- Changes in 2.0.1.6:
- .
- * Add workaround to waitCatch for #14
- .
- Changes in 2.0.1.5:
- .
- * Bump @base@ dependencies for GHC 7.8
- .
- Changes in 2.0.1.4:
- .
- * Bump @base@ dependency of test suite
- .
- Changes in 2.0.1.3:
- .
- * Bump @base@ dependency to allow 4.6
- .
- Changes in 2.0.1.2:
- .
- * Bump @stm@ dependency to 2.4
- .
- Changes in 2.0.1.1:
- .
- * Safe Haskell support: @Control.Concurrent.Async@ is now @Trustworthy@
- .
- Changes in 2.0.1.0:
- .
- * Added a @Functor@ instance for @Async@
- .
- * Added @asyncBound@, @asyncOn@, @asyncWithUnmask@, @asyncOnWithUnmask@, @withAsyncBound@, @withAsyncOn@, @withAsyncWithUnmask@, @withAsyncOnWithUnmask@.
- .
- * Added @mapConcurrently@
- .
- * Added @Concurrently@ (with @Applicative@ and @Alternative@ instances)
-version: 2.0.2
license: BSD3
license-file: LICENSE
author: Simon Marlow
@@ -69,12 +31,13 @@
copyright: (c) Simon Marlow 2012
category: Concurrency
build-type: Simple
-cabal-version: >=1.8
+cabal-version: >=1.10
homepage: https://github.com/simonmar/async
bug-reports: https://github.com/simonmar/async/issues
-tested-with: GHC==7.0.3, GHC==7.2.2, GHC==7.4.1
+tested-with: GHC==7.11.*, GHC==7.10.3, GHC==7.8.4, GHC==7.6.3, GHC==7.4.2, GHC==7.2.2, GHC==7.0.4
extra-source-files:
+ changelog.md
bench/race.hs
source-repository head
@@ -82,14 +45,19 @@
location: https://github.com/simonmar/async.git
library
+ default-language: Haskell2010
+ other-extensions: CPP, MagicHash, RankNTypes, UnboxedTuples
+ if impl(ghc>=7.1)
+ other-extensions: Trustworthy
exposed-modules: Control.Concurrent.Async
- build-depends: base >= 4.3 && < 4.9, stm >= 2.2 && < 2.5
+ build-depends: base >= 4.3 && < 4.10, stm >= 2.2 && < 2.5
test-suite test-async
+ default-language: Haskell2010
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: test-async.hs
- build-depends: base >= 4.3 && < 4.9,
+ build-depends: base >= 4.3 && < 4.10,
async,
test-framework,
test-framework-hunit,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/async-2.0.2/changelog.md new/async-2.1.0/changelog.md
--- old/async-2.0.2/changelog.md 1970-01-01 01:00:00.000000000 +0100
+++ new/async-2.1.0/changelog.md 2016-01-05 17:42:20.000000000 +0100
@@ -0,0 +1,45 @@
+## Changes in 2.1.0:
+
+ - Bump base dependency to allow 4.10
+ - Remove invalid Monad instance for `Concurrently`
+ - Add `Monoid` and `Semigroup` instances for `Concurrently`
+ - Add `forConcurrently` (flipped version of `mapConcurrently`)
+ - Add STM version of all applicable IO functions:
+ `waitAnySTM`, `waitAnyCatchSTM`, `waitEitherSTM`,
+ `waitEitherCatchSTM`, `waitEitherSTM_`, and `waitBothSTM`.
+
+## Changes in 2.0.2:
+
+ - Add a Monad instance for `Concurrently`
+ - Bump base dependency to allow 4.9
+
+## Changes in 2.0.1.6:
+
+ - Add workaround to waitCatch for #14
+
+## Changes in 2.0.1.5:
+
+ - Bump `base` dependencies for GHC 7.8
+
+## Changes in 2.0.1.4:
+
+ - Bump `base` dependency of test suite
+
+## Changes in 2.0.1.3:
+
+ - Bump `base` dependency to allow 4.6
+
+## Changes in 2.0.1.2:
+
+ - Bump `stm` dependency to 2.4
+
+## Changes in 2.0.1.1:
+
+ - Safe Haskell support: `Control.Concurrent.Async` is now `Trustworthy`
+
+## Changes in 2.0.1.0:
+
+ - Added a `Functor` instance for `Async`
+ - Added `asyncBound`, `asyncOn`, `asyncWithUnmask`, `asyncOnWithUnmask`, `withAsyncBound`, `withAsyncOn`, `withAsyncWithUnmask`, `withAsyncOnWithUnmask`.
+ - Added `mapConcurrently`
+ - Added `Concurrently` (with `Applicative` and `Alternative` instances)
1
0
Hello community,
here is the log from the commit of package ghc-aeson for openSUSE:Factory checked in at 2016-01-28 17:23:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-aeson (Old)
and /work/SRC/openSUSE:Factory/.ghc-aeson.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-aeson"
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-aeson/ghc-aeson.changes 2016-01-08 15:22:37.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-aeson.new/ghc-aeson.changes 2016-01-28 17:24:27.000000000 +0100
@@ -2,50 +1,0 @@
-Wed Dec 23 15:40:06 UTC 2015 - mimi.vx(a)gmail.com
-
-- update to 0.10.0.0
-* Performance improvements:
- + Direct encoding via the new toEncoding method is over 2x faster than toJSON.
- (You must write or code-gen a toEncoding implementation to unlock this speedup.
- See below for details.)
- + Improved string decoding gives a 12% speed win in parsing string-heavy JSON
- payloads (very common).
- + Encoding and decoding of time-related types are 10x faster (!!) as a result of
- bypassing Data.Time.Format and the arbitrary-precision Integer type.
- + When using toEncoding, [Char] can be encoded without a conversion to Text.
- This is fast and efficient.
- + Parsing into an Object is now 5% faster and more allocation-efficient.
-* SUBTLE API CHANGES, READ CAREFULLY:
- + With the exception of long-deprecated code, the API changes below should be
- upwards compatible from older versions of aeson. If you run into upgrade
- problems, please file an issue with details.
- + The ToJSON class has a new method, toEncoding, that allows direct encoding
- from a Haskell value to a lazy bytestring without construction of an
- intermediate Value.
- + The performance benefits of direct encoding are significant: more than 2x
- faster than before, with less than 1/3 the memory usage.
- + To preserve API compatibility across upgrades from older versions of this
- library, the default implementation of toEncoding uses toJSON. You will not
- see any performance improvement unless you write an implementation of
- toEncoding, which can be very simple:
- instance ToJSON Coord where
- toEncoding = genericToEncoding defaultOptions
- (Behind the scenes, the encode function uses toEncoding now, so if you
- implement toEncoding for your types, you should see a speedup immediately.)
- + If you use Template Haskell or GHC Generics to auto-generate your ToJSON
- instances, you'll benefit from fast toEncoding implementations for free!
- + When converting from a Value to a target Haskell type, FromJSON instances now
- provide much better error messages, including a complete JSON path from the
- root of the object to the offending element. This greatly eases debugging.
- + It is now possible to use Template Haskell to generate FromJSON and ToJSON
- instances for types in data families.
- + If you use Template Haskell or generics, and used to use the camelTo function
- to rename fields, the new camelTo2 function is smarter. For example, camelTo
- will rename CamelAPICase to camelapi_case (ugh!), while camelTo2 will map
- it to camel_api_case (yay!).
- + New ToJSON and FromJSON instances for the following time-related types: Day,
- LocalTime.
- + The Result type is now an instance of Foldable and Traversable.
- + The Data.Aeson.Generic module has been removed. It was deprecated in late 2013.
- + The instance of Monad for the Result type lacked an implementation of fail
- (oops). This has been corrected.
-
--------------------------------------------------------------------
Old:
----
aeson-0.10.0.0.tar.gz
New:
----
aeson-0.9.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-aeson.spec ++++++
--- /var/tmp/diff_new_pack.9IKUB4/_old 2016-01-28 17:24:28.000000000 +0100
+++ /var/tmp/diff_new_pack.9IKUB4/_new 2016-01-28 17:24:28.000000000 +0100
@@ -20,8 +20,8 @@
%bcond_with tests
-Name: ghc-aeson
-Version: 0.10.0.0
+Name: ghc-%{pkg_name}
+Version: 0.9.0.1
Release: 0
Summary: Fast JSON parsing and encoding
License: BSD-3-Clause
@@ -41,6 +41,7 @@
BuildRequires: ghc-dlist-devel
BuildRequires: ghc-hashable-devel
BuildRequires: ghc-mtl-devel
+BuildRequires: ghc-old-locale-devel
BuildRequires: ghc-scientific-devel
BuildRequires: ghc-syb-devel
BuildRequires: ghc-template-haskell-devel
++++++ aeson-0.10.0.0.tar.gz -> aeson-0.9.0.1.tar.gz ++++++
++++ 12680 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package python-dfVFS for openSUSE:Factory checked in at 2016-01-28 17:23:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-dfVFS (Old)
and /work/SRC/openSUSE:Factory/.python-dfVFS.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-dfVFS"
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-dfVFS/python-dfVFS.changes 2015-08-21 12:43:03.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-dfVFS.new/python-dfVFS.changes 2016-01-28 17:24:24.000000000 +0100
@@ -1,0 +2,9 @@
+Wed Dec 2 21:00:42 UTC 2015 - Greg.Freemyer(a)gmail.com
+
+- update to v0~20160108
+ * still pre-release and no ChangeLog available
+ * required by plaso v1.4.0 which is in feature freeze at this point
+- update pyvshadow requires to version v0~20160110
+- add Requires: pyfsntfs
+
+-------------------------------------------------------------------
Old:
----
dfvfs-20150708.tar.gz
New:
----
dfvfs-20160108.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-dfVFS.spec ++++++
--- /var/tmp/diff_new_pack.A9WWUQ/_old 2016-01-28 17:24:27.000000000 +0100
+++ /var/tmp/diff_new_pack.A9WWUQ/_new 2016-01-28 17:24:27.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-dfVFS
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 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
@@ -16,7 +16,7 @@
#
-%define timestamp 20150708
+%define timestamp 20160108
Name: python-dfVFS
Version: 0~%{timestamp}
Release: 0
@@ -31,6 +31,7 @@
BuildRequires: python-setuptools
Requires: pybde
Requires: pyewf
+Requires: pyfsntfs
Requires: pyqcow
Requires: pysigscan
Requires: pysmdev
@@ -41,7 +42,7 @@
Requires: pytsk
Requires: pyvhdi
Requires: pyvmdk
-Requires: pyvshadow
+Requires: pyvshadow >= 0~20160110
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildArch: noarch
++++++ dfvfs-20150708.tar.gz -> dfvfs-20160108.tar.gz ++++++
/work/SRC/openSUSE:Factory/python-dfVFS/dfvfs-20150708.tar.gz /work/SRC/openSUSE:Factory/.python-dfVFS.new/dfvfs-20160108.tar.gz differ: char 5, line 1
1
0