[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