浏览代码

See template local install same builtin as escript

When the `new` command is run from a locally installed rebar3 (`rebar3
local install`), the builtin templates would be labelled as custom
because of directories.

This patch fixes it by splitting off the rebar3 priv dir from the user's
configured plugin path for custom ones, and introducing a new internal
label for builtins (since handling must remain different from escripts)

This fixes issue #819
pull/1449/head
Fred Hebert 8 年前
父节点
当前提交
f94b7a0d65
共有 2 个文件被更改,包括 16 次插入7 次删除
  1. +3
    -0
      src/rebar_prv_new.erl
  2. +13
    -7
      src/rebar_templater.erl

+ 3
- 0
src/rebar_prv_new.erl 查看文件

@ -132,11 +132,14 @@ show_template({Name, Type, Location, Description, Vars}) ->
format_vars(Vars)]).
format_type(escript) -> "built-in";
format_type(builtin) -> "built-in";
format_type(plugin) -> "plugin";
format_type(file) -> "custom".
format_type(escript, _) ->
"built-in template";
format_type(builtin, _) ->
"built-in template";
format_type(plugin, Loc) ->
io_lib:format("plugin template (~s)", [Loc]);
format_type(file, Loc) ->

+ 13
- 7
src/rebar_templater.erl 查看文件

@ -267,8 +267,8 @@ find_templates(State) ->
PluginTemplates = find_plugin_templates(State),
{MainTemplates, Files} =
case rebar_state:escript_path(State) of
undefined ->
{find_priv_templates(State), []};
undefined -> % running in local install
{find_localinstall_templates(State), []};
_ ->
%% Cache the files since we'll potentially need to walk it several times
%% over the course of a run.
@ -307,11 +307,10 @@ find_escript_templates(Files) ->
|| {Name, _Bin} <- Files,
re:run(Name, ?TEMPLATE_RE, [{capture, none}]) == match].
find_priv_templates(State) ->
OtherTemplates = rebar_utils:find_files(code:priv_dir(rebar), ?TEMPLATE_RE),
HomeFiles = rebar_utils:find_files(rebar_dir:template_dir(State),
?TEMPLATE_RE, true), % recursive
[{file, F} || F <- OtherTemplates ++ HomeFiles].
find_localinstall_templates(_State) ->
Templates = rebar_utils:find_files(code:priv_dir(rebar), ?TEMPLATE_RE),
%% Pretend we're still running escripts; should work transparently.
[{builtin, F} || F <- Templates].
%% Fetch template indexes that sit on disk in the user's HOME
find_disk_templates(State) ->
@ -354,6 +353,10 @@ prioritize_templates([{Name, Type, File} | Rest], Valid) ->
?DEBUG("Skipping template ~p, due to presence of a built-in "
"template with the same name", [Name]),
prioritize_templates(Rest, Valid);
{_, builtin, _} ->
?DEBUG("Skipping template ~p, due to presence of a built-in "
"template with the same name", [Name]),
prioritize_templates(Rest, Valid);
{_, plugin, _} ->
?DEBUG("Skipping template ~p, due to presence of a plugin "
"template with the same name", [Name]),
@ -369,6 +372,9 @@ prioritize_templates([{Name, Type, File} | Rest], Valid) ->
load_file(Files, escript, Name) ->
{Name, Bin} = lists:keyfind(Name, 1, Files),
Bin;
load_file(_Files, builtin, Name) ->
{ok, Bin} = file:read_file(Name),
Bin;
load_file(_Files, plugin, Name) ->
{ok, Bin} = file:read_file(Name),
Bin;

正在加载...
取消
保存