|
|
@ -19,13 +19,6 @@ |
|
|
|
|
|
|
|
-include("rebar.hrl"). |
|
|
|
|
|
|
|
-type dep_name() :: atom(). |
|
|
|
-type dep_vsn() :: ec_semver:any_version(). |
|
|
|
-type dep_source() :: {atom(), string(), ref()}. |
|
|
|
-type ref() :: string() | {atom(), string()}. |
|
|
|
|
|
|
|
-type dep() :: { dep_name(), dep_vsn(), dep_source() }. |
|
|
|
|
|
|
|
-record(p4_settings, { |
|
|
|
client=undefined, |
|
|
|
transport="tcp4:perforce:1666", |
|
|
@ -50,12 +43,18 @@ init_p4_settings(Basename) -> |
|
|
|
current_ref(AppDir, {git, _, _}) -> |
|
|
|
string:strip(os:cmd("git --git-dir='" ++ AppDir ++ "/.git' rev-parse --verify HEAD"), both, $\n). |
|
|
|
|
|
|
|
download_source(AppDir, {p4, Url}) -> |
|
|
|
download_source(AppDir, {p4, Url, "#head"}); |
|
|
|
download_source(AppDir, {p4, Url, Rev}) -> |
|
|
|
download_source(AppDir, {p4, Url, Rev, init_p4_settings(filename:basename(AppDir))}); |
|
|
|
download_source(AppDir, {p4, Url, _Rev, Settings}) -> |
|
|
|
ok = filelib:ensure_dir(AppDir), |
|
|
|
download_source(AppDir, Source) -> |
|
|
|
ec_file:mkdir_p(AppDir), |
|
|
|
TmpDir = ec_file:insecure_mkdtemp(), |
|
|
|
download_source_tmp(TmpDir, Source), |
|
|
|
ok = ec_file:copy(TmpDir, binary_to_list(filename:absname(AppDir)), [recursive]). |
|
|
|
|
|
|
|
download_source_tmp(TmpDir, {p4, Url}) -> |
|
|
|
download_source_tmp(TmpDir, {p4, Url, "#head"}); |
|
|
|
download_source_tmp(TmpDir, {p4, Url, Rev}) -> |
|
|
|
download_source_tmp(TmpDir, {p4, Url, Rev, init_p4_settings(filename:basename(TmpDir))}); |
|
|
|
download_source_tmp(TmpDir, {p4, Url, _Rev, Settings}) -> |
|
|
|
ok = filelib:ensure_dir(TmpDir), |
|
|
|
rebar_utils:sh_send("p4 client -i", |
|
|
|
?FMT("Client: ~s~n" |
|
|
|
++"Description: generated by Rebar~n" |
|
|
@ -63,68 +62,67 @@ download_source(AppDir, {p4, Url, _Rev, Settings}) -> |
|
|
|
++"View:~n" |
|
|
|
++" ~s/... //~s/...~n", |
|
|
|
[Settings#p4_settings.client, |
|
|
|
AppDir, |
|
|
|
TmpDir, |
|
|
|
Url, |
|
|
|
Settings#p4_settings.client]), |
|
|
|
[]), |
|
|
|
rebar_utils:sh(?FMT("p4 -c ~s sync -f", [Settings#p4_settings.client]), []); |
|
|
|
download_source(AppDir, {hg, Url, Rev}) -> |
|
|
|
ok = filelib:ensure_dir(AppDir), |
|
|
|
rebar_utils:sh(?FMT("hg clone -U ~s ~s", [Url, filename:basename(AppDir)]), |
|
|
|
[{cd, filename:dirname(AppDir)}]), |
|
|
|
rebar_utils:sh(?FMT("hg update ~s", [Rev]), [{cd, AppDir}]); |
|
|
|
download_source(AppDir, {git, Url}) -> |
|
|
|
download_source(AppDir, {git, Url, {branch, "HEAD"}}); |
|
|
|
download_source(AppDir, {git, Url, ""}) -> |
|
|
|
download_source(AppDir, {git, Url, {branch, "HEAD"}}); |
|
|
|
download_source(AppDir, {git, Url, {branch, Branch}}) -> |
|
|
|
ok = filelib:ensure_dir(AppDir), |
|
|
|
rebar_utils:sh(?FMT("git clone -n ~s ~s", [Url, filename:basename(AppDir)]), |
|
|
|
[{cd, filename:dirname(AppDir)}]), |
|
|
|
rebar_utils:sh(?FMT("git checkout -q origin/~s", [Branch]), [{cd, AppDir}]); |
|
|
|
download_source(AppDir, {git, Url, {tag, Tag}}) -> |
|
|
|
ok = filelib:ensure_dir(AppDir), |
|
|
|
rebar_utils:sh(?FMT("git clone -n ~s ~s", [Url, filename:basename(AppDir)]), |
|
|
|
[{cd, filename:dirname(AppDir)}]), |
|
|
|
rebar_utils:sh(?FMT("git checkout -q ~s", [Tag]), [{cd, AppDir}]); |
|
|
|
download_source(AppDir, {git, Url, Rev}) -> |
|
|
|
ok = filelib:ensure_dir(AppDir), |
|
|
|
rebar_utils:sh(?FMT("git clone -n ~s ~s", [Url, filename:basename(AppDir)]), |
|
|
|
[{cd, filename:dirname(AppDir)}]), |
|
|
|
rebar_utils:sh(?FMT("git checkout -q ~s", [Rev]), [{cd, AppDir}]); |
|
|
|
download_source(AppDir, {bzr, Url, Rev}) -> |
|
|
|
ok = filelib:ensure_dir(AppDir), |
|
|
|
download_source_tmp(TmpDir, {hg, Url, Rev}) -> |
|
|
|
ok = filelib:ensure_dir(TmpDir), |
|
|
|
rebar_utils:sh(?FMT("hg clone -U ~s ~s", [Url, filename:basename(TmpDir)]), |
|
|
|
[{cd, filename:dirname(TmpDir)}]), |
|
|
|
rebar_utils:sh(?FMT("hg update ~s", [Rev]), [{cd, TmpDir}]); |
|
|
|
download_source_tmp(TmpDir, {git, Url}) -> |
|
|
|
download_source_tmp(TmpDir, {git, Url, {branch, "HEAD"}}); |
|
|
|
download_source_tmp(TmpDir, {git, Url, ""}) -> |
|
|
|
download_source_tmp(TmpDir, {git, Url, {branch, "HEAD"}}); |
|
|
|
download_source_tmp(TmpDir, {git, Url, {branch, Branch}}) -> |
|
|
|
ok = filelib:ensure_dir(TmpDir), |
|
|
|
rebar_utils:sh(?FMT("git clone -n ~s ~s", [Url, filename:basename(TmpDir)]), |
|
|
|
[{cd, filename:dirname(TmpDir)}]), |
|
|
|
rebar_utils:sh(?FMT("git checkout -q origin/~s", [Branch]), [{cd, TmpDir}]); |
|
|
|
download_source_tmp(TmpDir, {git, Url, {tag, Tag}}) -> |
|
|
|
ok = filelib:ensure_dir(TmpDir), |
|
|
|
rebar_utils:sh(?FMT("git clone -n ~s ~s", [Url, filename:basename(TmpDir)]), |
|
|
|
[{cd, filename:dirname(TmpDir)}]), |
|
|
|
rebar_utils:sh(?FMT("git checkout -q ~s", [Tag]), [{cd, TmpDir}]); |
|
|
|
download_source_tmp(TmpDir, {git, Url, Rev}) -> |
|
|
|
ok = filelib:ensure_dir(TmpDir), |
|
|
|
rebar_utils:sh(?FMT("git clone -n ~s ~s", [Url, filename:basename(TmpDir)]), |
|
|
|
[{cd, filename:dirname(TmpDir)}]), |
|
|
|
rebar_utils:sh(?FMT("git checkout -q ~s", [Rev]), [{cd, TmpDir}]); |
|
|
|
download_source_tmp(TmpDir, {bzr, Url, Rev}) -> |
|
|
|
ok = filelib:ensure_dir(TmpDir), |
|
|
|
rebar_utils:sh(?FMT("bzr branch -r ~s ~s ~s", |
|
|
|
[Rev, Url, filename:basename(AppDir)]), |
|
|
|
[{cd, filename:dirname(AppDir)}]); |
|
|
|
download_source(AppDir, {svn, Url, Rev}) -> |
|
|
|
ok = filelib:ensure_dir(AppDir), |
|
|
|
[Rev, Url, filename:basename(TmpDir)]), |
|
|
|
[{cd, filename:dirname(TmpDir)}]); |
|
|
|
download_source_tmp(TmpDir, {svn, Url, Rev}) -> |
|
|
|
ok = filelib:ensure_dir(TmpDir), |
|
|
|
rebar_utils:sh(?FMT("svn checkout -r ~s ~s ~s", |
|
|
|
[Rev, Url, filename:basename(AppDir)]), |
|
|
|
[{cd, filename:dirname(AppDir)}]); |
|
|
|
download_source(AppDir, {rsync, Url}) -> |
|
|
|
ok = filelib:ensure_dir(AppDir), |
|
|
|
rebar_utils:sh(?FMT("rsync -az --delete ~s/ ~s", [Url, AppDir]), []); |
|
|
|
download_source(AppDir, {fossil, Url}) -> |
|
|
|
download_source(AppDir, {fossil, Url, ""}); |
|
|
|
download_source(AppDir, {fossil, Url, Version}) -> |
|
|
|
Repository = filename:join(AppDir, filename:basename(AppDir) ++ ".fossil"), |
|
|
|
[Rev, Url, filename:basename(TmpDir)]), |
|
|
|
[{cd, filename:dirname(TmpDir)}]); |
|
|
|
download_source_tmp(TmpDir, {rsync, Url}) -> |
|
|
|
ok = filelib:ensure_dir(TmpDir), |
|
|
|
rebar_utils:sh(?FMT("rsync -az --delete ~s/ ~s", [Url, TmpDir]), []); |
|
|
|
download_source_tmp(TmpDir, {fossil, Url}) -> |
|
|
|
download_source_tmp(TmpDir, {fossil, Url, ""}); |
|
|
|
download_source_tmp(TmpDir, {fossil, Url, Version}) -> |
|
|
|
Repository = filename:join(TmpDir, filename:basename(TmpDir) ++ ".fossil"), |
|
|
|
ok = filelib:ensure_dir(Repository), |
|
|
|
ok = file:set_cwd(AppDir), |
|
|
|
ok = file:set_cwd(TmpDir), |
|
|
|
rebar_utils:sh(?FMT("fossil clone ~s ~s", [Url, Repository]), |
|
|
|
[{cd, AppDir}]), |
|
|
|
[{cd, TmpDir}]), |
|
|
|
rebar_utils:sh(?FMT("fossil open ~s ~s --nested", [Repository, Version]), |
|
|
|
[]); |
|
|
|
download_source(AppDir, {AppName, AppVersion, Url}) when is_binary(AppName) |
|
|
|
, is_binary(AppVersion) -> |
|
|
|
TmpDir = ec_file:insecure_mkdtemp(), |
|
|
|
download_source_tmp(TmpDir, {AppName, AppVersion, Url}) when is_binary(AppName) |
|
|
|
, is_binary(AppVersion) -> |
|
|
|
TmpFile = binary_to_list(filename:join(TmpDir, <<AppName/binary, "-", AppVersion/binary>>)), |
|
|
|
{ok, saved_to_file} = httpc:request(get, {binary_to_list(Url), []}, [], [{stream, TmpFile}]), |
|
|
|
ok = erl_tar:extract(TmpFile, [{cwd, filename:dirname(AppDir)}, compressed]), |
|
|
|
ok = erl_tar:extract(TmpFile, [{cwd, filename:dirname(TmpDir)}, compressed]), |
|
|
|
ok. |
|
|
|
|
|
|
|
update_source1(AppDir, Args) when element(1, Args) =:= p4 -> |
|
|
|
download_source(AppDir, Args); |
|
|
|
download_source_tmp(AppDir, Args); |
|
|
|
update_source1(AppDir, {git, Url}) -> |
|
|
|
update_source1(AppDir, {git, Url, {branch, "HEAD"}}); |
|
|
|
update_source1(AppDir, {git, Url, ""}) -> |
|
|
|