From 675044bc83cedd330d4edee90f9912dff221eb2a Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sat, 28 Feb 2015 14:44:32 -0600 Subject: use relative path on non-windows and copy if link fails --- src/rebar_file_utils.erl | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/rebar_file_utils.erl') diff --git a/src/rebar_file_utils.erl b/src/rebar_file_utils.erl index 8fe8965..ef2c70f 100644 --- a/src/rebar_file_utils.erl +++ b/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()]. -- cgit v1.1