浏览代码

use relative path on non-windows and copy if link fails

pull/195/head
Tristan Sloughter 10 年前
父节点
当前提交
675044bc83
共有 3 个文件被更改,包括 36 次插入5 次删除
  1. +11
    -1
      src/rebar_dir.erl
  2. +19
    -2
      src/rebar_file_utils.erl
  3. +6
    -2
      src/rebar_prv_compile.erl

+ 11
- 1
src/rebar_dir.erl 查看文件

@ -15,7 +15,8 @@
template_globals/1,
template_dir/1,
processing_base_dir/1,
processing_base_dir/2]).
processing_base_dir/2,
make_relative_path/2]).
-include("rebar.hrl").
@ -86,3 +87,12 @@ processing_base_dir(State) ->
processing_base_dir(State, Dir) ->
AbsDir = filename:absname(Dir),
AbsDir =:= rebar_state:get(State, base_dir).
make_relative_path(Source, Target) ->
do_make_relative_path(filename:split(Source), filename:split(Target)).
do_make_relative_path([H|T1], [H|T2]) ->
do_make_relative_path(T1, T2);
do_make_relative_path(Source, Target) ->
Base = lists:duplicate(max(length(Target) - 1, 0), ".."),
filename:join(Base ++ Source).

+ 19
- 2
src/rebar_file_utils.erl 查看文件

@ -26,7 +26,8 @@
%% -------------------------------------------------------------------
-module(rebar_file_utils).
-export([rm_rf/1,
-export([symlink_or_copy/2,
rm_rf/1,
cp_r/2,
mv/2,
delete_each/1,
@ -41,6 +42,22 @@
%% Public API
%% ===================================================================
symlink_or_copy(Source, Target) ->
Link = case os:type() of
{win32, _} ->
Source;
_ ->
rebar_dir:make_relative_path(Source, Target)
end,
case file:make_symlink(Link, Target) of
ok ->
ok;
{error, eexist} ->
ok;
{error, _} ->
cp_r([Source], Target)
end.
%% @doc Remove files and directories.
%% Target is a single filename, directoryname or wildcard expression.
-spec rm_rf(string()) -> 'ok'.
@ -127,7 +144,7 @@ write_file_if_contents_differ(Filename, Bytes) ->
end.
%% returns an os appropriate tmpdir given a path
-spec system_tmpdir() -> file:filename().
-spec system_tmpdir() -> file:filename().
-spec system_tmpdir(PathComponents) -> file:filename() when
PathComponents :: [file:name()].

+ 6
- 2
src/rebar_prv_compile.erl 查看文件

@ -123,8 +123,12 @@ copy_app_dirs(AppName, OldAppDir, AppDir) ->
end,
filelib:ensure_dir(filename:join(AppDir, "dummy")),
%% link to src to be adjacent to ebin is needed for R15 use of cover/xref
[file:make_symlink(filename:join(OldAppDir, Dir), filename:join(AppDir, Dir))
|| Dir <- ["priv", "include", "src"]];
[symlink_or_copy(OldAppDir, AppDir, Dir) || Dir <- ["priv", "include", "src"]];
false ->
ok
end.
symlink_or_copy(OldAppDir, AppDir, Dir) ->
Source = filename:join(OldAppDir, Dir),
Target = filename:join(AppDir, Dir),
rebar_file_utils:symlink_or_copy(Source, Target).

正在加载...
取消
保存