summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rebar_deps.erl30
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.