summaryrefslogtreecommitdiff
path: root/src/rebar_state.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/rebar_state.erl')
-rw-r--r--src/rebar_state.erl31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/rebar_state.erl b/src/rebar_state.erl
index bdd4aeb..9683709 100644
--- a/src/rebar_state.erl
+++ b/src/rebar_state.erl
@@ -59,7 +59,7 @@
command_args = [],
command_parsed_args = {[], []},
- current_app :: rebar_app_info:t(),
+ current_app :: undefined | rebar_app_info:t(),
project_apps = [] :: [rebar_app_info:t()],
deps_to_build = [] :: [rebar_app_info:t()],
all_plugin_deps = [] :: [rebar_app_info:t()],
@@ -424,17 +424,24 @@ create_logic_providers(ProviderModules, State0) ->
to_list(#state_t{} = State) ->
Fields = record_info(fields, state_t),
Values = tl(tuple_to_list(State)),
- DictSz = tuple_size(dict:new()),
- lists:zip(Fields, [reformat(I, DictSz) || I <- Values]).
-
-reformat({K,V}, DSz) when is_list(V) ->
- {K, [reformat(I, DSz) || I <- V]};
-reformat(V, DSz) when is_tuple(V), element(1,V) =:= dict, tuple_size(V) =:= DSz ->
- [reformat(I, DSz) || I <- dict:to_list(V)];
-reformat({K,V}, DSz) when is_tuple(V), element(1,V) =:= dict, tuple_size(V) =:= DSz ->
- {K, [reformat(I, DSz) || I <- dict:to_list(V)]};
-reformat(Other, _DSz) ->
- Other.
+ lists:zip(Fields, [reformat(I) || I <- Values]).
+
+reformat({K,V}) when is_list(V) ->
+ {K, [reformat(I) || I <- V]};
+reformat({K,V}) ->
+ try
+ {K, [reformat(I) || I <- dict:to_list(V)]}
+ catch
+ error:{badrecord,dict} ->
+ {K,V}
+ end;
+reformat(V) ->
+ try
+ [reformat(I) || I <- dict:to_list(V)]
+ catch
+ error:{badrecord,dict} ->
+ V
+ end.
%% ===================================================================
%% Internal functions