From 03a026f38fde8eb2b39447eb25aa219d017989fd Mon Sep 17 00:00:00 2001 From: Adam Schepis Date: Fri, 10 Feb 2012 09:55:36 -0500 Subject: [PATCH] Add support for alternate dependency urls This change adds the ability to use alternate urls for downloading dependencies. To make use of alternate urls run: rebar get-deps alt_urls=true --- priv/shell-completion/bash/rebar | 3 ++- rebar.config.sample | 5 ++++- src/rebar_deps.erl | 17 ++++++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/priv/shell-completion/bash/rebar b/priv/shell-completion/bash/rebar index 964c1ad..c8690c2 100644 --- a/priv/shell-completion/bash/rebar +++ b/priv/shell-completion/bash/rebar @@ -12,7 +12,8 @@ _rebar() ct doc delete-deps eunit get-deps generate generate-upgrade \ help list-deps list-templates update-deps version xref overlay \ apps= case= force=1 jobs= suites= verbose=1 appid= previous_release= \ - nodeid= root_dir= skip_deps=true skip_apps= template= template_dir=" + nodeid= root_dir= skip_deps=true skip_apps= template= template_dir= \ + alt_urls=true" if [[ ${cur} == --* ]] ; then COMPREPLY=( $(compgen -W "${lopts}" -- ${cur}) ) diff --git a/rebar.config.sample b/rebar.config.sample index b0c8637..0ffa884 100644 --- a/rebar.config.sample +++ b/rebar.config.sample @@ -113,7 +113,10 @@ {deps, [application_name, {application_name, "1.0.*"}, {application_name, "1.0.*", - {git, "git://github.com/basho/rebar.git", {branch, "master"}}}]}. + {git, "git://github.com/basho/rebar.git", {branch, "master"}}}, + {application_name, "1.0.*", + {git, "git://github.com/basho/rebar.git", {branch, "master"}}, + [{alt_url, "https://github.com/basho/rebar.git"}]}]}. %% == Subdirectories == diff --git a/src/rebar_deps.erl b/src/rebar_deps.erl index 2085cf2..c6e3ff6 100644 --- a/src/rebar_deps.erl +++ b/src/rebar_deps.erl @@ -223,15 +223,30 @@ find_deps(Mode, [App | Rest], Acc) when is_atom(App) -> find_deps(Mode, [{App, VsnRegex} | Rest], Acc) when is_atom(App) -> find_deps(Mode, [{App, VsnRegex, undefined} | Rest], Acc); find_deps(Mode, [{App, VsnRegex, Source} | Rest], Acc) -> + find_deps(Mode, [{App, VsnRegex, Source, []} | Rest], Acc); +find_deps(Mode, [{App, VsnRegex, Source, Opts} | Rest], Acc) -> Dep = #dep { app = App, vsn_regex = VsnRegex, - source = Source }, + source = get_source(Source, Opts) }, {Availability, FoundDir} = find_dep(Dep), find_deps(Mode, Rest, acc_deps(Mode, Availability, Dep, FoundDir, Acc)); find_deps(_Mode, [Other | _Rest], _Acc) -> ?ABORT("Invalid dependency specification ~p in ~s\n", [Other, rebar_utils:get_cwd()]). +get_source(undefined, _Opts) -> + undefined; +get_source(Source, Opts) -> + setelement(2, Source, dep_url(element(2, Source), Opts)). + +dep_url(Url, Opts) -> + case rebar_config:get_global(alt_urls, "false") of + "true" -> + proplists:get_value(alt_url, Opts, Url); + "false" -> + Url + end. + find_dep(Dep) -> %% Find a dep based on its source, %% e.g. {git, "https://github.com/mochi/mochiweb.git", "HEAD"}