Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

238 lignes
7.1 KiB

il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
il y a 10 ans
  1. -module(rebar_app_info).
  2. -export([new/1,
  3. new/2,
  4. new/3,
  5. new/4,
  6. discover/1,
  7. name/1,
  8. name/2,
  9. config/1,
  10. config/2,
  11. app_file_src/1,
  12. app_file_src/2,
  13. app_file/1,
  14. app_file/2,
  15. app_details/1,
  16. app_details/2,
  17. original_vsn/1,
  18. original_vsn/2,
  19. ebin_dir/1,
  20. applications/1,
  21. applications/2,
  22. profiles/1,
  23. profiles/2,
  24. deps/1,
  25. deps/2,
  26. dep_level/1,
  27. dep_level/2,
  28. dir/1,
  29. dir/2,
  30. source/1,
  31. source/2,
  32. state/1,
  33. state/2,
  34. valid/1,
  35. valid/2]).
  36. -export_type([t/0]).
  37. -record(app_info_t, {name :: binary(),
  38. app_file_src :: file:filename_all() | undefined,
  39. app_file :: file:filename_all() | undefined,
  40. config :: rebar_state:t() | undefined,
  41. original_vsn :: binary() | string() | undefined,
  42. app_details=[] :: list(),
  43. applications=[] :: list(),
  44. deps=[] :: list(),
  45. profiles=[default] :: atom(),
  46. dep_level=0 :: integer(),
  47. dir :: file:name(),
  48. source :: string() | tuple() | undefined,
  49. state :: rebar_state:t() | undefined,
  50. valid :: boolean()}).
  51. %%============================================================================
  52. %% types
  53. %%============================================================================
  54. -type t() :: record(app_info_t).
  55. %%============================================================================
  56. %% API
  57. %% ============================================================================
  58. %% @doc Build a new, empty, app info value. This is not of a lot of use and you
  59. %% probably wont be doing this much.
  60. -spec new(atom() | binary() | string()) ->
  61. {ok, t()}.
  62. new(AppName) ->
  63. {ok, #app_info_t{name=ec_cnv:to_binary(AppName)}}.
  64. -spec new(atom() | binary() | string(), binary() | string()) ->
  65. {ok, t()}.
  66. new(AppName, Vsn) ->
  67. {ok, #app_info_t{name=ec_cnv:to_binary(AppName),
  68. original_vsn=Vsn}}.
  69. %% @doc build a complete version of the app info with all fields set.
  70. -spec new(atom() | binary() | string(), binary() | string(), file:name()) ->
  71. {ok, t()}.
  72. new(AppName, Vsn, Dir) ->
  73. {ok, #app_info_t{name=ec_cnv:to_binary(AppName),
  74. original_vsn=Vsn,
  75. dir=Dir}}.
  76. %% @doc build a complete version of the app info with all fields set.
  77. -spec new(atom() | binary() | string(), binary() | string(), file:name(), list()) ->
  78. {ok, t()}.
  79. new(AppName, Vsn, Dir, Deps) ->
  80. {ok, #app_info_t{name=ec_cnv:to_binary(AppName),
  81. original_vsn=Vsn,
  82. dir=Dir,
  83. deps=Deps}}.
  84. %% @doc discover a complete version of the app info with all fields set.
  85. -spec discover(file:filename_all()) -> {ok, t()} | not_found.
  86. discover(Dir) ->
  87. case rebar_app_discover:find_app(Dir, all) of
  88. {true, AppInfo} ->
  89. {ok, AppInfo};
  90. false ->
  91. not_found
  92. end.
  93. -spec name(t()) -> binary().
  94. name(#app_info_t{name=Name}) ->
  95. Name.
  96. -spec name(t(), atom() | binary() | string()) -> t().
  97. name(AppInfo=#app_info_t{}, AppName) ->
  98. AppInfo#app_info_t{name=ec_cnv:to_binary(AppName)}.
  99. -spec config(t()) -> rebar_state:t().
  100. config(#app_info_t{config=Config}) ->
  101. Config.
  102. -spec config(t(), rebar_state:t()) -> t().
  103. config(AppInfo=#app_info_t{}, Config) ->
  104. AppInfo#app_info_t{config=Config}.
  105. -spec app_file_src(t()) -> file:filename_all() | undefined.
  106. app_file_src(#app_info_t{app_file_src=undefined, dir=Dir, name=Name}) ->
  107. AppFileSrc = filename:join([ec_cnv:to_list(Dir), "src", ec_cnv:to_list(Name)++".app.src"]),
  108. case filelib:is_file(AppFileSrc) of
  109. true ->
  110. AppFileSrc;
  111. false ->
  112. undefined
  113. end;
  114. app_file_src(#app_info_t{app_file_src=AppFileSrc}) ->
  115. ec_cnv:to_list(AppFileSrc).
  116. -spec app_file_src(t(), file:filename_all()) -> t().
  117. app_file_src(AppInfo=#app_info_t{}, AppFileSrc) ->
  118. AppInfo#app_info_t{app_file_src=ec_cnv:to_list(AppFileSrc)}.
  119. -spec app_file(t()) -> file:filename_all() | undefined.
  120. app_file(#app_info_t{app_file=undefined, dir=Dir, name=Name}) ->
  121. AppFile = filename:join([ec_cnv:to_list(Dir), "ebin", ec_cnv:to_list(Name)++".app"]),
  122. case filelib:is_file(AppFile) of
  123. true ->
  124. AppFile;
  125. false ->
  126. undefined
  127. end;
  128. app_file(#app_info_t{app_file=AppFile}) ->
  129. AppFile.
  130. -spec app_file(t(), file:filename_all()) -> t().
  131. app_file(AppInfo=#app_info_t{}, AppFile) ->
  132. AppInfo#app_info_t{app_file=AppFile}.
  133. -spec app_details(t()) -> list().
  134. app_details(#app_info_t{app_details=AppDetails}) ->
  135. AppDetails.
  136. -spec app_details(t(), list()) -> t().
  137. app_details(AppInfo=#app_info_t{}, AppDetails) ->
  138. AppInfo#app_info_t{app_details=AppDetails}.
  139. -spec original_vsn(t()) -> string().
  140. original_vsn(#app_info_t{original_vsn=Vsn}) ->
  141. Vsn.
  142. -spec original_vsn(t(), string()) -> t().
  143. original_vsn(AppInfo=#app_info_t{}, Vsn) ->
  144. AppInfo#app_info_t{original_vsn=Vsn}.
  145. -spec applications(t()) -> list().
  146. applications(#app_info_t{applications=Applications}) ->
  147. Applications.
  148. -spec applications(t(), list()) -> t().
  149. applications(AppInfo=#app_info_t{}, Applications) ->
  150. AppInfo#app_info_t{applications=Applications}.
  151. -spec profiles(t()) -> list().
  152. profiles(#app_info_t{profiles=Profiles}) ->
  153. Profiles.
  154. -spec profiles(t(), list()) -> t().
  155. profiles(AppInfo=#app_info_t{}, Profiles) ->
  156. AppInfo#app_info_t{profiles=Profiles}.
  157. -spec deps(t()) -> list().
  158. deps(#app_info_t{deps=Deps}) ->
  159. Deps.
  160. -spec deps(t(), list()) -> t().
  161. deps(AppInfo=#app_info_t{}, Deps) ->
  162. AppInfo#app_info_t{deps=Deps}.
  163. dep_level(AppInfo=#app_info_t{}, Level) ->
  164. AppInfo#app_info_t{dep_level=Level}.
  165. dep_level(#app_info_t{dep_level=Level}) ->
  166. Level.
  167. -spec dir(t()) -> file:name().
  168. dir(#app_info_t{dir=Dir}) ->
  169. Dir.
  170. -spec dir(t(), file:name()) -> t().
  171. dir(AppInfo=#app_info_t{}, Dir) ->
  172. AppInfo#app_info_t{dir=Dir}.
  173. -spec ebin_dir(t()) -> file:name().
  174. ebin_dir(#app_info_t{dir=Dir}) ->
  175. filename:join(Dir, "ebin").
  176. -spec source(t(), string() | tuple()) -> t().
  177. source(AppInfo=#app_info_t{}, Source) ->
  178. AppInfo#app_info_t{source=Source}.
  179. -spec source(t()) -> string() | tuple().
  180. source(#app_info_t{source=Source}) ->
  181. Source.
  182. -spec state(t(), rebar_state:t() | undefined) -> t().
  183. state(AppInfo=#app_info_t{}, State) ->
  184. AppInfo#app_info_t{state=State}.
  185. -spec state(t()) -> rebar_state:t() | undefined.
  186. state(#app_info_t{state=State}) ->
  187. State.
  188. -spec valid(t()) -> boolean().
  189. valid(AppInfo=#app_info_t{valid=undefined}) ->
  190. case rebar_app_discover:validate_application_info(AppInfo) of
  191. true ->
  192. true;
  193. _ ->
  194. false
  195. end;
  196. valid(#app_info_t{valid=Valid}) ->
  197. Valid.
  198. -spec valid(t(), boolean()) -> t().
  199. valid(AppInfo=#app_info_t{}, Valid) ->
  200. AppInfo#app_info_t{valid=Valid}.