|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
From: Ulf Wiger <ulf@feuerlabs.com>
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
Date: Fri, 10 Nov 2017 18:59:07 +0100
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
Subject: [PATCH] Support expansion of setup modes for find_hooks()
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
diff --git a/doc/setup.md b/doc/setup.md
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
index 571bde1..4069f34 100644
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
--- a/doc/setup.md
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+++ b/doc/setup.md
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
@@ -242,6 +242,21 @@ A suggested convention is:
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- Create tables (or configure schema) at 200
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- Populate the database at 300
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+Using the `setup` environment variable `modes`, it is possible to
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+define a mode that includes all hooks from different modes.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+The format is `[{M1, [M2,...]}]`. The expansion is done recursively,
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+so a mode entry in the right-hand side of a pair can expand into other
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+modes. In order to be included in the final list of modes, an expanding
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+mode needs to include itself in the right-hand side. For example:
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+- Applying `a` to `[{a, [b]}]` returns `[b]`
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+- Applying `a` to `[{a, [a,b]}]` returns `[a,b]`
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+- Applying `a` to `[{a, [a,b]},{b,[c,d]}]` returns `[a,c,d]`
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+A typical application of this would be `[{test, [normal, test]}]`, where
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+starting in the `test` mode would cause all `normal` and all `test` hooks
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+to be executed.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
### find_hooks/1 ###
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
diff --git a/src/setup.erl b/src/setup.erl
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
index 43a1d0f..329c049 100644
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
--- a/src/setup.erl
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+++ b/src/setup.erl
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
@@ -980,6 +980,21 @@ main(Args) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
%% - Create the database at phase 100
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
%% - Create tables (or configure schema) at 200
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
%% - Populate the database at 300
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%%
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% Using the `setup' environment variable `modes', it is possible to
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% define a mode that includes all hooks from different modes.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% The format is `[{M1, [M2,...]}]'. The expansion is done recursively,
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% so a mode entry in the right-hand side of a pair can expand into other
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% modes. In order to be included in the final list of modes, an expanding
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% mode needs to include itself in the right-hand side. For example:
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%%
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% - Applying `a' to `[{a, [b]}]' returns `[b]'
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% - Applying `a' to `[{a, [a,b]}]' returns `[a,b]'
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% - Applying `a' to `[{a, [a,b]},{b,[c,d]}]' returns `[a,c,d]'
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%%
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% A typical application of this would be `[{test, [normal, test]}]', where
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% starting in the `test' mode would cause all `normal' and all `test' hooks
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+%% to be executed.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
%% @end
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
%%
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
find_hooks() ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
@@ -996,38 +1011,70 @@ find_hooks(Mode) when is_atom(Mode) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
%% @doc Find all setup hooks for `Mode' in `Applications'.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
%% @end
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
find_hooks(Mode, Applications) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ find_hooks_(Mode, maybe_expand_mode(Mode), Applications).
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+maybe_expand_mode(Mode) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ maybe_expand_mode(Mode, app_get_env(setup, modes, [])).
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+maybe_expand_mode(Mode, Modes) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ maybe_expand_mode(Mode, Modes, ordsets:new()).
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+maybe_expand_mode(Mode, Modes, Acc) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ case lists:keyfind(Mode, 1, Modes) of
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {_, Ms} ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ Modes1 = lists:keydelete(Mode, 1, Modes),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ lists:foldl(
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ fun(M, Acc1) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ maybe_expand_mode(M, Modes1, Acc1)
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ end, Acc, Ms);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ false ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ ordsets:add_element(Mode, Acc)
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ end.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+find_hooks_(Mode, Modes, Applications) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
lists:foldl(
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
fun(A, Acc) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
case app_get_env(A, '$setup_hooks') of
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
{ok, Hooks} ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
lists:foldl(
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- fun({Mode1, [{_, {_,_,_}}|_] = L}, Acc1)
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- when Mode1 =:= Mode ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- find_hooks_(Mode, A, L, Acc1);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- ({Mode1, [{_, [{_, _, _}|_]}|_] = L}, Acc1)
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- when Mode1 =:= Mode ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- find_hooks_(Mode, A, L, Acc1);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- ({N, {_, _, _} = MFA}, Acc1) when Mode=:=setup ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- orddict:append(N, MFA, Acc1);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- ({N, [{_, _, _}|_] = L}, Acc1)
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- when Mode=:=setup ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- lists:foldl(
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- fun(MFA, Acc2) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- orddict:append(N, MFA, Acc2)
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- end, Acc1, L);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- (_, Acc1) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- Acc1
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ fun(H, Acc1) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ f_find_hooks_(H, A, Mode, Modes, Acc1)
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
end, Acc, Hooks);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
_ ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
Acc
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
end
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
end, orddict:new(), Applications).
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
-find_hooks_(Mode, A, L, Acc1) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+f_find_hooks_(Hook, A, Mode, Modes, Acc) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ IsSetup = lists:member(setup, Modes),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ case Hook of
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {Mode1, [{_, {_,_,_}}|_] = L} ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ case lists:member(Mode1, Modes) of
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ true -> find_hooks_1(Mode1, A, L, Acc);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ false -> Acc
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ end;
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {Mode1, [{_, [{_, _, _}|_]}|_] = L} ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ case lists:member(Mode1, Modes) of
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ true -> find_hooks_1(Mode1, A, L, Acc);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ false -> Acc
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ end;
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {N, {_, _, _} = MFA} when IsSetup ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ orddict:append(N, MFA, Acc);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {N, [{_, _, _}|_] = L} when IsSetup ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ lists:foldl(
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ fun(MFA, Acc1) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ orddict:append(N, MFA, Acc1)
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ end, Acc, L);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ _ ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ Acc
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ end.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+find_hooks_1(Mode, A, L, Acc1) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
lists:foldl(
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
fun({N, {_,_,_} = MFA}, Acc2) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
orddict:append(N, MFA, Acc2);
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
- ({N, [{_,_,_}|_] = MFAs}, Acc2) when is_list(MFAs) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ ({N, [{_,_,_}|_] = MFAs}, Acc2) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
lists:foldl(
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
fun({_,_,_} = MFA1, Acc3) ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
orddict:append(
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
@@ -1653,11 +1700,26 @@ setup_test_() ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
application:unload(setup)
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
end,
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
[
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ ?_test(t_expand_modes()),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
?_test(t_find_hooks()),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ ?_test(t_find_hooks_1()),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
?_test(t_expand_vars()),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
?_test(t_nested_includes())
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
]}.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+t_expand_modes() ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [a] = maybe_expand_mode(a, []),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [a] = maybe_expand_mode(a, [{a, [a]}]),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [a,b,c] = maybe_expand_mode(a, [{a, [a,b]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {b, [b,c]}]),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [b] = maybe_expand_mode(a, [{a, [b]}]),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [a,b,c] = maybe_expand_mode(a, [{a, [a,b]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {b, [b,c]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {c, [c,a]}]),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [c,d] = maybe_expand_mode(a, [{a, [b]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {b, [c,d]}]),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ ok.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
t_find_hooks() ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
application:set_env(setup, '$setup_hooks',
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
[{100, [{a, hook, [100,1]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
@@ -1678,6 +1740,36 @@ t_find_hooks() ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
{200, [{a,hook,[200,1]}]}] = SetupHooks,
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
ok.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+t_find_hooks_1() ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ application:set_env(setup, modes, [{test, [setup, normal, test]}]),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ application:set_env(setup, '$setup_hooks',
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [{100, [{a, hook, [100,1]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {a, hook, [100,2]}]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {200, [{a, hook, [200,1]}]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {upgrade, [{100, [{a, upgrade_hook, [100,1]}]}]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {setup, [{100, [{a, hook, [100,3]}]}]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {normal, [{300, {a, normal_hook, [300,1]}}]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {test, [{400, {a, test_hook, [400,1]}}]}
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ ]),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ NormalHooks = find_hooks(normal),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [{300, [{a, normal_hook, [300,1]}]}] = NormalHooks,
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ UpgradeHooks = find_hooks(upgrade),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [{100, [{a, upgrade_hook, [100,1]}]}] = UpgradeHooks,
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ SetupHooks = find_hooks(setup),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [{100, [{a,hook,[100,1]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {a,hook,[100,2]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {a,hook,[100,3]}]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {200, [{a,hook,[200,1]}]}] = SetupHooks,
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ TestHooks = find_hooks(test),
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ [{100, [{a,hook,[100,1]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {a,hook,[100,2]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {a,hook,[100,3]}]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {200, [{a,hook,[200,1]}]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {300, [{a,normal_hook, [300,1]}]},
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ {400, [{a,test_hook, [400,1]}]}] = TestHooks,
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+ ok.
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
+
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
t_expand_vars() ->
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
%% global env
|
|
![](https://seccdn.libravatar.org/avatar/1b7a77357f4dd4c806fa9adab84f94a5213f1dd67aef752eeafb38e6086f0da7?s=16&d=retro) |
f0389a4 |
application:set_env(setup, vars, [{"PLUS", {apply,erlang,'+',[1,2]}},
|