diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/rebar_deps.erl | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/rebar_deps.erl b/src/rebar_deps.erl index 530dcd7..5f94323 100644 --- a/src/rebar_deps.erl +++ b/src/rebar_deps.erl @@ -31,6 +31,8 @@ -export([preprocess/2, distclean/2]). +-define(HG_VERSION, "1.4"). + %% =================================================================== %% Public API %% =================================================================== @@ -207,13 +209,31 @@ download_source(AppDir, {hg, Url, Rev}) -> %% =================================================================== source_engine_avail({hg, _, _}) -> - Res = os:cmd("which hg"), - ?DEBUG("which hg = ~p\n", [Res]), - case Res of - [] -> + Path = os:find_executable("hg"), + ?DEBUG("which hg = ~p\n", [Path]), + case Path of + false -> false; _ -> - true + ensure_required_scm_client(hg, Path) end; source_engine_avail(_) -> false. + +%% We expect the initial part of the version string to be of the form: +%% "Mercurial Distributed SCM (version 1.4.1+20091201)". Rebar +%% requires version 1.4 or higher. +ensure_required_scm_client(hg, Path) -> + Info = os:cmd(Path ++ " --version"), + case re:run(Info, "version (\\d*\.\\d*\.\\d*)", [{capture, all_but_first, list}]) of + {match, [Vsn]} -> + case Vsn >= ?HG_VERSION of + true -> + true; + false -> + ?ABORT("Rebar requires version ~p or higher of hg (~p)~n", + [?HG_VERSION, Path]) + end; + _ -> + false + end. |