summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_deps.erl11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/rebar_deps.erl b/src/rebar_deps.erl
index 3bbc64c..5ba0af3 100644
--- a/src/rebar_deps.erl
+++ b/src/rebar_deps.erl
@@ -204,6 +204,11 @@ download_source(AppDir, {git, Url, Rev}) ->
ok = filelib:ensure_dir(AppDir),
rebar_utils:sh(?FMT("git clone -n ~s", [Url]), [], filename:dirname(AppDir)),
rebar_utils:sh(?FMT("git checkout ~s", [Rev]), [], AppDir);
+download_source(AppDir, {bzr, Url, Rev}) ->
+ ok = filelib:ensure_dir(AppDir),
+ rebar_utils:sh(?FMT("bzr branch -r ~s ~s ~s",
+ [Rev, Url, filename:basename(AppDir)]), [],
+ filename:dirname(AppDir));
download_source(AppDir, {svn, Url, Rev}) ->
ok = filelib:ensure_dir(AppDir),
rebar_utils:sh(?FMT("svn checkout -r ~s ~s ~s",
@@ -215,7 +220,8 @@ download_source(AppDir, {svn, Url, Rev}) ->
%% Source helper functions
%% ===================================================================
-source_engine_avail({Name, _, _}) when Name == hg; Name == git; Name == svn ->
+source_engine_avail({Name, _, _})
+ when Name == hg; Name == git; Name == svn; Name == bzr ->
case scm_client_vsn(Name) >= required_scm_client_vsn(Name) of
true ->
true;
@@ -237,12 +243,15 @@ scm_client_vsn(Path, VsnArg, VsnRegex) ->
required_scm_client_vsn(hg) -> {1, 4};
required_scm_client_vsn(git) -> {1, 6};
+required_scm_client_vsn(bzr) -> {2, 0};
required_scm_client_vsn(svn) -> {1, 6}.
scm_client_vsn(hg) ->
scm_client_vsn(os:find_executable(hg), " --version", "version (\\d+).(\\d+)");
scm_client_vsn(git) ->
scm_client_vsn(os:find_executable(git), " --version", "git version (\\d+).(\\d+)");
+scm_client_vsn(bzr) ->
+ scm_client_vsn(os:find_executable(bzr), " --version", "Bazaar \\(bzr\\) (\\d+).(\\d+)");
scm_client_vsn(svn) ->
scm_client_vsn(os:find_executable(svn), " --version", "svn, version (\\d+).(\\d+)");
scm_client_vsn(_) ->