diff options
Diffstat (limited to 'src/rebar_file_utils.erl')
-rw-r--r-- | src/rebar_file_utils.erl | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/rebar_file_utils.erl b/src/rebar_file_utils.erl index 0f84520..19cc94d 100644 --- a/src/rebar_file_utils.erl +++ b/src/rebar_file_utils.erl @@ -39,7 +39,9 @@ reset_dir/1, touch/1, path_from_ancestor/2, - canonical_path/1]). + canonical_path/1, + resolve_link/1, + split_dirname/1]). -include("rebar.hrl"). @@ -273,6 +275,22 @@ canonical_path([_|Acc], [".."|Rest]) -> canonical_path(Acc, Rest); canonical_path([], [".."|Rest]) -> canonical_path([], Rest); canonical_path(Acc, [Component|Rest]) -> canonical_path([Component|Acc], Rest). +%% returns canonical target of path if path is a link, otherwise returns path +-spec resolve_link(string()) -> string(). + +resolve_link(Path) -> + case file:read_link(Path) of + {ok, Target} -> + canonical_path(filename:absname(Target, filename:dirname(Path))); + {error, _} -> Path + end. + +%% splits a path into dirname and basename +-spec split_dirname(string()) -> {string(), string()}. + +split_dirname(Path) -> + {filename:dirname(Path), filename:basename(Path)}. + %% =================================================================== %% Internal functions %% =================================================================== |