[erlang-mochiweb] Ver. 2.4.0 (fix for Erlang R16)

Peter Lemenkov peter at fedoraproject.org
Fri Jan 25 11:39:16 UTC 2013


commit 7441132564b3d1f64fd30278e1a00484f43cd977
Author: Peter Lemenkov <lemenkov at gmail.com>
Date:   Fri Jan 25 15:39:06 2013 +0400

    Ver. 2.4.0 (fix for Erlang R16)
    
    Signed-off-by: Peter Lemenkov <lemenkov at gmail.com>

 .gitignore                                         |    1 +
 ...hiweb-0001-96-mochifmt_records-regression.patch |   41 ++++++++
 ...The-term-boolean-isn-t-availabie-in-R12B5.patch |   26 -----
 ...ochiweb-acceptor-blocked-in-ssl-handshake.patch |   82 ++++++++++++++++
 ...002-No-erlang-min-A-B-in-R12B-5-and-below.patch |   29 ------
 ...-such-function-erl_scan-string-3-in-R12B5.patch |   26 -----
 ...ction-lists-keyfind-3-in-R12B5-use-lists-.patch |   85 -----------------
 ...elated-tests-on-R12B-requires-ssl-example.patch |   98 --------------------
 erlang-mochiweb.spec                               |   83 +++++++----------
 sources                                            |    2 +-
 10 files changed, 159 insertions(+), 314 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 998045c..8554045 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ erlang-mochiweb-1.3.tar.gz
 /mochi-mochiweb-47fe37b.tar.gz
 /mochi-mochiweb-1.4.0-0-g32dc8be.tar.gz
 /mochi-mochiweb-1.4.1-0-g80571b9.tar.gz
+/mochi-mochiweb-v2.4.0-0-gb02ea50.tar.gz
diff --git a/erlang-mochiweb-0001-96-mochifmt_records-regression.patch b/erlang-mochiweb-0001-96-mochifmt_records-regression.patch
new file mode 100644
index 0000000..9f99adf
--- /dev/null
+++ b/erlang-mochiweb-0001-96-mochifmt_records-regression.patch
@@ -0,0 +1,41 @@
+From 6d3d7901791417eaa7f17c81a8477210d0884ed0 Mon Sep 17 00:00:00 2001
+From: Bob Ippolito <bob at redivi.com>
+Date: Thu, 24 Jan 2013 12:58:14 -0800
+Subject: [PATCH 1/2] #96 - mochifmt_records regression
+
+---
+ CHANGES.md               | 5 +++++
+ src/mochifmt_records.erl | 4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGES.md b/CHANGES.md
+index becdf3e..2114a57 100644
+--- a/CHANGES.md
++++ b/CHANGES.md
+@@ -1,3 +1,8 @@
++Version 2.4.1 released XXXX-XX-XX
++
++* Fixed issue in mochifmt_records introduced in v2.4.0
++  https://github.com/mochi/mochiweb/issues/96
++
+ Version 2.4.0 released 2013-01-23
+ 
+ * Switch from parameterized modules to explicit tuple module calls for
+diff --git a/src/mochifmt_records.erl b/src/mochifmt_records.erl
+index 65f942f..7d166ff 100644
+--- a/src/mochifmt_records.erl
++++ b/src/mochifmt_records.erl
+@@ -25,8 +25,8 @@ get_value(Key, Rec, {?MODULE, Recs})
+         end
+     catch error:_ -> mochifmt:get_value(Key, Rec)
+     end;
+-get_value(Key, Args, {?MODULE, _Recs}=THIS) ->
+-    mochifmt:get_value(Key, Args, THIS).
++get_value(Key, Args, {?MODULE, _Recs}) ->
++    mochifmt:get_value(Key, Args).
+ 
+ get_rec_index(Atom, [Atom | _], Index) ->
+     Index;
+-- 
+1.8.1
+
diff --git a/erlang-mochiweb-0002-Fix-Mochiweb-acceptor-blocked-in-ssl-handshake.patch b/erlang-mochiweb-0002-Fix-Mochiweb-acceptor-blocked-in-ssl-handshake.patch
new file mode 100644
index 0000000..2ddf064
--- /dev/null
+++ b/erlang-mochiweb-0002-Fix-Mochiweb-acceptor-blocked-in-ssl-handshake.patch
@@ -0,0 +1,82 @@
+From a79466f14c6cede7f74c13e7553e5f73353cff74 Mon Sep 17 00:00:00 2001
+From: Wei Cao <cyg.cao at gmail.com>
+Date: Thu, 16 Aug 2012 10:53:07 +0800
+Subject: [PATCH 2/2] Fix Mochiweb acceptor blocked in ssl handshake
+
+Acceptor cannot be recycled until ssl handshake is done,
+so it's possible and easy for all acceptors be blocked between the point
+where the new socket's connected and the ssl handshake is done.
+---
+ src/mochiweb_acceptor.erl |  7 ++++---
+ src/mochiweb_socket.erl   | 15 +++++++--------
+ 2 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/src/mochiweb_acceptor.erl b/src/mochiweb_acceptor.erl
+index efedfbd..c1192e2 100644
+--- a/src/mochiweb_acceptor.erl
++++ b/src/mochiweb_acceptor.erl
+@@ -18,13 +18,14 @@ init(Server, Listen, Loop) ->
+     case catch mochiweb_socket:accept(Listen) of
+         {ok, Socket} ->
+             gen_server:cast(Server, {accepted, self(), timer:now_diff(now(), T1)}),
+-            call_loop(Loop, Socket);
++            case mochiweb_socket:after_accept(Socket) of
++                ok -> call_loop(Loop, Socket);
++                {error, _} -> exit(normal)
++            end;
+         {error, closed} ->
+             exit(normal);
+         {error, timeout} ->
+             init(Server, Listen, Loop);
+-        {error, esslaccept} ->
+-            exit(normal);
+         Other ->
+             error_logger:error_report(
+               [{application, mochiweb},
+diff --git a/src/mochiweb_socket.erl b/src/mochiweb_socket.erl
+index 76b018c..ad27204 100644
+--- a/src/mochiweb_socket.erl
++++ b/src/mochiweb_socket.erl
+@@ -4,10 +4,11 @@
+ 
+ -module(mochiweb_socket).
+ 
+--export([listen/4, accept/1, recv/3, send/2, close/1, port/1, peername/1,
++-export([listen/4, accept/1, after_accept/1, recv/3, send/2, close/1, port/1, peername/1,
+          setopts/2, type/1]).
+ 
+ -define(ACCEPT_TIMEOUT, 2000).
++-define(SSL_ACCEPT_TIMEOUT, 30000).
+ 
+ listen(Ssl, Port, Opts, SslOpts) ->
+     case Ssl of
+@@ -25,14 +26,9 @@ listen(Ssl, Port, Opts, SslOpts) ->
+ accept({ssl, ListenSocket}) ->
+     % There's a bug in ssl:transport_accept/2 at the moment, which is the
+     % reason for the try...catch block. Should be fixed in OTP R14.
+-    try ssl:transport_accept(ListenSocket) of
++    try ssl:transport_accept(ListenSocket, ?ACCEPT_TIMEOUT) of
+         {ok, Socket} ->
+-            case ssl:ssl_accept(Socket) of
+-                ok ->
+-                    {ok, {ssl, Socket}};
+-                {error, _} = Err ->
+-                    Err
+-            end;
++            {ok, {ssl, Socket}};
+         {error, _} = Err ->
+             Err
+     catch
+@@ -42,6 +38,9 @@ accept({ssl, ListenSocket}) ->
+ accept(ListenSocket) ->
+     gen_tcp:accept(ListenSocket, ?ACCEPT_TIMEOUT).
+ 
++after_accept({ssl, Socket}) -> ssl:ssl_accept(Socket, ?SSL_ACCEPT_TIMEOUT);
++after_accept(_Socket) -> ok.
++
+ recv({ssl, Socket}, Length, Timeout) ->
+     ssl:recv(Socket, Length, Timeout);
+ recv(Socket, Length, Timeout) ->
+-- 
+1.8.1
+
diff --git a/erlang-mochiweb.spec b/erlang-mochiweb.spec
index 2797646..1ffc810 100644
--- a/erlang-mochiweb.spec
+++ b/erlang-mochiweb.spec
@@ -1,37 +1,36 @@
 %global realname mochiweb
+%global upstream mochi
 %global debug_package %{nil}
-%global git_tag 80571b9
+%global git_tag b02ea50
+%global patchnumber 0
 
 
 Name:		erlang-%{realname}
-Version:	1.4.1
-Release:	7%{?dist}
+Version:	2.4.0
+Release:	1%{?dist}
 Summary:	An Erlang library for building lightweight HTTP servers
 Group:		Development/Libraries
 License:	MIT
 URL:		http://github.com/mochi/mochiweb
-# wget --no-check-certificate https://github.com/mochi/mochiweb/tarball/1.4.1
-Source0:	mochi-%{realname}-%{version}-0-g%{git_tag}.tar.gz
-Patch1:		erlang-mochiweb-0001-The-term-boolean-isn-t-availabie-in-R12B5.patch
-Patch2:		erlang-mochiweb-0002-No-erlang-min-A-B-in-R12B-5-and-below.patch
-Patch3:		erlang-mochiweb-0003-No-such-function-erl_scan-string-3-in-R12B5.patch
-Patch4:		erlang-mochiweb-0004-No-such-function-lists-keyfind-3-in-R12B5-use-lists-.patch
-Patch5:		erlang-mochiweb-0005-Fixed-ssl-related-tests-on-R12B-requires-ssl-example.patch
-BuildRoot:	%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
-BuildRequires:	erlang-erts
-BuildRequires:	erlang-eunit
-BuildRequires:	erlang-tools
+# wget --content-disposition https://github.com/mochi/mochiweb/tarball/2.4.0
+Source0:	%{upstream}-%{realname}-v%{version}-%{patchnumber}-g%{git_tag}.tar.gz
+# Backported from master
+Patch1:		erlang-mochiweb-0001-96-mochifmt_records-regression.patch
+# used in CouchDB, see https://github.com/mochi/mochiweb/issues/70
+Patch2:		erlang-mochiweb-0002-Fix-Mochiweb-acceptor-blocked-in-ssl-handshake.patch
+BuildRequires:	erlang-rebar
 BuildRequires:	erlang-xmerl
-Requires:	erlang-compiler
-Requires:	erlang-crypto
-Requires:	erlang-erts
-Requires:	erlang-eunit
-Requires:	erlang-inets
-Requires:	erlang-kernel
-Requires:	erlang-ssl
-Requires:	erlang-stdlib
-Requires:	erlang-syntax_tools
-Requires:	erlang-xmerl
+Requires:	erlang-compiler%{?_isa}
+Requires:	erlang-crypto%{?_isa}
+# Error:erlang(binary:match/2) in R13B ale earlier
+Requires:	erlang-erts%{?_isa} >= R14B
+Requires:	erlang-inets%{?_isa}
+Requires:	erlang-kernel%{?_isa}
+Requires:	erlang-ssl%{?_isa}
+# Error:erlang(unicode:characters_to_binary/1) in R12B and earlier
+Requires:	erlang-stdlib%{?_isa} >= R13B
+Requires:	erlang-syntax_tools%{?_isa}
+Requires:	erlang-xmerl%{?_isa}
 Provides:	%{realname} = %{version}-%{release}
 
 
@@ -40,25 +39,16 @@ An Erlang library for building lightweight HTTP servers.
 
 
 %prep
-%setup -q -n mochi-%{realname}-%{git_tag}
-%if 0%{?el5}
-# Erlang/OTP R12B5
-%patch1 -p1 -b .no-boolean
-%patch2 -p1 -b .no-erlang-min-2
-%patch3 -p1 -b .no-erl_scan-string-3
-%patch4 -p1 -b .no-lists-keyfind-3
-%patch5 -p1 -b .fix_for_ssl_cacert
-%endif
-chmod 755 scripts/new_mochiweb.erl
+%setup -q -n %{upstream}-%{realname}-%{git_tag}
+%patch1 -p1
+%patch2 -p1
 
 
 %build
-make %{?_smp_mflags}
+rebar compile -v
 
 
 %install
-rm -rf $RPM_BUILD_ROOT
-
 # base binary modules
 install -D -m 644 ebin/%{realname}.app $RPM_BUILD_ROOT%{_libdir}/erlang/lib/%{realname}-%{version}/ebin/%{realname}.app
 install -m 644 ebin/*.beam $RPM_BUILD_ROOT%{_libdir}/erlang/lib/%{realname}-%{version}/ebin/
@@ -67,21 +57,16 @@ install -m 644 ebin/*.beam $RPM_BUILD_ROOT%{_libdir}/erlang/lib/%{realname}-%{ve
 #rm -f $RPM_BUILD_ROOT%{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_request_tests.beam
 
 # skeleton files
-cp -arv priv $RPM_BUILD_ROOT%{_libdir}/erlang/lib/%{realname}-%{version}
 cp -arv scripts $RPM_BUILD_ROOT%{_libdir}/erlang/lib/%{realname}-%{version}
 cp -arv support $RPM_BUILD_ROOT%{_libdir}/erlang/lib/%{realname}-%{version}
 
-%check
-make test
-
 
-%clean
-rm -rf $RPM_BUILD_ROOT
+%check
+rebar eunit -v
 
 
 %files
-%defattr(-,root,root,-)
-%doc LICENSE README examples
+%doc CHANGES.md LICENSE README examples
 %dir %{_libdir}/erlang/lib/%{realname}-%{version}
 %dir %{_libdir}/erlang/lib/%{realname}-%{version}/ebin
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochifmt.beam
@@ -99,7 +84,6 @@ rm -rf $RPM_BUILD_ROOT
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb.app
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb.beam
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_acceptor.beam
-%{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_app.beam
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_charref.beam
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_cookies.beam
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_cover.beam
@@ -113,18 +97,19 @@ rm -rf $RPM_BUILD_ROOT
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_request.beam
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_request_tests.beam
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_response.beam
-%{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_skel.beam
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_socket.beam
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_socket_server.beam
-%{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_sup.beam
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/mochiweb_util.beam
 %{_libdir}/erlang/lib/%{realname}-%{version}/ebin/reloader.beam
-%{_libdir}/erlang/lib/%{realname}-%{version}/priv
 %{_libdir}/erlang/lib/%{realname}-%{version}/scripts
 %{_libdir}/erlang/lib/%{realname}-%{version}/support
 
 
 %changelog
+* Fri Jan 25 2013 Peter Lemenkov <lemenkov at gmail.com> - 2.4.0-1
+- Ver. 2.4.0 (fix for Erlang R16)
+- Dropped patches for EL5 (Erlang R12B)
+
 * Wed Jul 18 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.4.1-7
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
 
diff --git a/sources b/sources
index 7e12c10..57548e0 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-2d308a87af3c1a8a46efd77914a44437  mochi-mochiweb-1.4.1-0-g80571b9.tar.gz
+f5032120708c0d2db695cf0c2e5fca4b  mochi-mochiweb-v2.4.0-0-gb02ea50.tar.gz


More information about the scm-commits mailing list