summaryrefslogtreecommitdiff
path: root/src/rebar_app_info.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/rebar_app_info.erl')
-rw-r--r--src/rebar_app_info.erl80
1 files changed, 52 insertions, 28 deletions
diff --git a/src/rebar_app_info.erl b/src/rebar_app_info.erl
index 91640f2..6e35b8f 100644
--- a/src/rebar_app_info.erl
+++ b/src/rebar_app_info.erl
@@ -34,29 +34,35 @@
source/2,
state/1,
state/2,
+ state_or_new/2,
+ is_lock/1,
+ is_lock/2,
is_checkout/1,
is_checkout/2,
valid/1,
valid/2]).
+-include("rebar.hrl").
+
-export_type([t/0]).
--record(app_info_t, {name :: binary(),
- app_file_src :: file:filename_all() | undefined,
- app_file :: file:filename_all() | undefined,
- config :: rebar_state:t() | undefined,
- original_vsn :: binary() | string() | undefined,
- app_details=[] :: list(),
- applications=[] :: list(),
- deps=[] :: list(),
+-record(app_info_t, {name :: binary(),
+ app_file_src :: file:filename_all() | undefined,
+ app_file :: file:filename_all() | undefined,
+ config :: rebar_state:t() | undefined,
+ original_vsn :: binary() | string() | undefined,
+ app_details=[] :: list(),
+ applications=[] :: list(),
+ deps=[] :: list(),
profiles=[default] :: [atom()],
- dep_level=0 :: integer(),
- dir :: file:name(),
- out_dir :: file:name(),
- source :: string() | tuple() | undefined,
- state :: rebar_state:t() | undefined,
- is_checkout=false :: boolean(),
- valid :: boolean()}).
+ dep_level=0 :: integer(),
+ dir :: file:name(),
+ out_dir :: file:name(),
+ source :: string() | tuple() | undefined,
+ state :: rebar_state:t() | undefined,
+ is_lock=false :: boolean(),
+ is_checkout=false :: boolean(),
+ valid :: boolean()}).
%%============================================================================
%% types
@@ -158,17 +164,18 @@ app_file(AppInfo=#app_info_t{}, AppFile) ->
-spec app_details(t()) -> list().
app_details(AppInfo=#app_info_t{app_details=[]}) ->
- AppFile = case app_file(AppInfo) of
- undefined ->
- app_file_src(AppInfo);
- File ->
- File
- end,
- case file:consult(AppFile) of
- {ok, [{application, _, AppDetails}]} ->
- AppDetails;
- _ ->
- []
+ case app_file(AppInfo) of
+ undefined ->
+ rebar_file_utils:try_consult(app_file_src(AppInfo));
+ AppFile ->
+ try
+ rebar_file_utils:try_consult(AppFile)
+ catch
+ throw:{error, {Module, Reason}} ->
+ ?DEBUG("Warning, falling back to .app.src because of: ~s",
+ [Module:format_error(Reason)]),
+ rebar_file_utils:try_consult(app_file_src(AppInfo))
+ end
end;
app_details(#app_info_t{app_details=AppDetails}) ->
AppDetails.
@@ -254,6 +261,22 @@ state(AppInfo=#app_info_t{}, State) ->
state(#app_info_t{state=State}) ->
State.
+-spec state_or_new(rebar_state:t(), t()) -> rebar_state:t().
+state_or_new(State, AppInfo=#app_info_t{state=undefined}) ->
+ AppDir = dir(AppInfo),
+ C = rebar_config:consult(AppDir),
+ rebar_state:new(State, C, AppDir);
+state_or_new(_State, #app_info_t{state=State}) ->
+ State.
+
+-spec is_lock(t(), boolean()) -> t().
+is_lock(AppInfo=#app_info_t{}, IsLock) ->
+ AppInfo#app_info_t{is_lock=IsLock}.
+
+-spec is_lock(t()) -> boolean().
+is_lock(#app_info_t{is_lock=IsLock}) ->
+ IsLock.
+
-spec is_checkout(t(), boolean()) -> t().
is_checkout(AppInfo=#app_info_t{}, IsCheckout) ->
AppInfo#app_info_t{is_checkout=IsCheckout}.
@@ -263,8 +286,9 @@ is_checkout(#app_info_t{is_checkout=IsCheckout}) ->
IsCheckout.
-spec valid(t()) -> boolean().
-valid(AppInfo=#app_info_t{valid=undefined}) ->
- case rebar_app_utils:validate_application_info(AppInfo) of
+valid(AppInfo=#app_info_t{valid=undefined, state=State}) ->
+ case rebar_app_utils:validate_application_info(AppInfo)
+ andalso rebar_state:has_all_artifacts(State) =:= true of
true ->
true;
_ ->