8021b5241c
This adds changes to the rebar3 expression that patch rebar3 to force it to be hermetic. Now, by default, rebar3 literally can't download anything. A 'rebar3-open' expression was added for those folks whe want the normal rebar3.
108 lines
4.6 KiB
Diff
108 lines
4.6 KiB
Diff
diff --git a/src/rebar3.erl b/src/rebar3.erl
|
|
index 2b73844..af1d871 100644
|
|
--- a/src/rebar3.erl
|
|
+++ b/src/rebar3.erl
|
|
@@ -282,9 +282,11 @@ start_and_load_apps(Caller) ->
|
|
ensure_running(crypto, Caller),
|
|
ensure_running(asn1, Caller),
|
|
ensure_running(public_key, Caller),
|
|
- ensure_running(ssl, Caller),
|
|
- inets:start(),
|
|
- inets:start(httpc, [{profile, rebar}]).
|
|
+ ensure_running(ssl, Caller).
|
|
+%% Removed due to the hermicity requirements of Nix
|
|
+%%
|
|
+%% inets:start(),
|
|
+%% inets:start(httpc, [{profile, rebar}]).
|
|
|
|
ensure_running(App, Caller) ->
|
|
case application:start(App) of
|
|
@@ -339,4 +341,4 @@ safe_define_test_macro(Opts) ->
|
|
test_defined([{d, 'TEST'}|_]) -> true;
|
|
test_defined([{d, 'TEST', true}|_]) -> true;
|
|
test_defined([_|Rest]) -> test_defined(Rest);
|
|
-test_defined([]) -> false.
|
|
\ No newline at end of file
|
|
+test_defined([]) -> false.
|
|
diff --git a/src/rebar_hermicity.erl b/src/rebar_hermicity.erl
|
|
new file mode 100644
|
|
index 0000000..d814e2a
|
|
--- /dev/null
|
|
+++ b/src/rebar_hermicity.erl
|
|
@@ -0,0 +1,42 @@
|
|
+%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-
|
|
+%% ex: ts=4 sw=4 et
|
|
+%% -------------------------------------------------------------------
|
|
+%%
|
|
+%% rebar: Erlang Build Tools
|
|
+%%
|
|
+%% Copyright (c) 2016 Eric Merritt (eric@merritt.tech)
|
|
+%%
|
|
+%% Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
+%% of this software and associated documentation files (the "Software"), to deal
|
|
+%% in the Software without restriction, including without limitation the rights
|
|
+%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
+%% copies of the Software, and to permit persons to whom the Software is
|
|
+%% furnished to do so, subject to the following conditions:
|
|
+%%
|
|
+%% The above copyright notice and this permission notice shall be included in
|
|
+%% all copies or substantial portions of the Software.
|
|
+%%
|
|
+%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
+%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
+%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
+%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
+%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
+%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
+%% THE SOFTWARE.
|
|
+%% -------------------------------------------------------------------
|
|
+-module(rebar_hermicity).
|
|
+
|
|
+-export([request/5]).
|
|
+
|
|
+-include("rebar.hrl").
|
|
+
|
|
+%% ====================================================================
|
|
+%% Public API
|
|
+%% ====================================================================
|
|
+
|
|
+request(Method, {Url, _Headers}, _HTTPOptions, _Options, _Profile) ->
|
|
+ ?ERROR("A request is being made that violates Nix hermicity "
|
|
+ "This request has been stopped. Details of the request "
|
|
+ "are as follows:", []),
|
|
+ ?ERROR("Requesnt: ~p ~s", [Method, Url]),
|
|
+ erlang:halt(1).
|
|
diff --git a/src/rebar_pkg_resource.erl b/src/rebar_pkg_resource.erl
|
|
index 4f55ad1..f76fd5d 100644
|
|
--- a/src/rebar_pkg_resource.erl
|
|
+++ b/src/rebar_pkg_resource.erl
|
|
@@ -100,10 +100,10 @@ make_vsn(_) ->
|
|
{error, "Replacing version of type pkg not supported."}.
|
|
|
|
request(Url, ETag) ->
|
|
- case httpc:request(get, {Url, [{"if-none-match", ETag} || ETag =/= false]},
|
|
- [{ssl, ssl_opts(Url)}, {relaxed, true}],
|
|
- [{body_format, binary}],
|
|
- rebar) of
|
|
+ case rebar_hermicity:request(get, {Url, [{"if-none-match", ETag} || ETag =/= false]},
|
|
+ [{ssl, ssl_opts(Url)}, {relaxed, true}],
|
|
+ [{body_format, binary}],
|
|
+ rebar) of
|
|
{ok, {{_Version, 200, _Reason}, Headers, Body}} ->
|
|
?DEBUG("Successfully downloaded ~s", [Url]),
|
|
{"etag", ETag1} = lists:keyfind("etag", 1, Headers),
|
|
diff --git a/src/rebar_prv_update.erl b/src/rebar_prv_update.erl
|
|
index 6637ebe..d82c1d8 100644
|
|
--- a/src/rebar_prv_update.erl
|
|
+++ b/src/rebar_prv_update.erl
|
|
@@ -44,8 +44,8 @@ do(State) ->
|
|
TmpFile = filename:join(TmpDir, "packages.gz"),
|
|
|
|
Url = rebar_state:get(State, rebar_packages_cdn, ?DEFAULT_HEX_REGISTRY),
|
|
- case httpc:request(get, {Url, []},
|
|
- [], [{stream, TmpFile}, {sync, true}],
|
|
+ case rebar_hermicity:request(get, {Url, []},
|
|
+ [], [{stream, TmpFile}, {sync, true}],
|
|
rebar) of
|
|
{ok, saved_to_file} ->
|
|
{ok, Data} = file:read_file(TmpFile),
|