summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--THANKS4
-rwxr-xr-xpriv/templates/simplenode.runner17
-rw-r--r--src/mustache.erl2
-rw-r--r--src/rebar_ct.erl13
-rw-r--r--src/rebar_deps.erl32
5 files changed, 58 insertions, 10 deletions
diff --git a/THANKS b/THANKS
index 03a847e..f94e1da 100644
--- a/THANKS
+++ b/THANKS
@@ -30,3 +30,7 @@ Misha Gorodnitzky
Adam Kocoloski
Joseph Wayne Norton
Mihai Balea
+Matthew Batema
+Alexey Romanov
+Benjamin Nortier
+Magnus Klaar
diff --git a/priv/templates/simplenode.runner b/priv/templates/simplenode.runner
index 46141bb..cfde552 100755
--- a/priv/templates/simplenode.runner
+++ b/priv/templates/simplenode.runner
@@ -66,7 +66,22 @@ case "$1" in
stop)
# Wait for the node to completely stop...
- PID=`ps -ef|grep "$RUNNER_BASE_DIR/.*/[b]eam"|awk '{print $2}'`
+ case `uname -s` in
+ Linux|Darwin|FreeBSD|DragonFly|NetBSD|OpenBSD)
+ # PID COMMAND
+ PID=`ps ax -o pid= -o command=|\
+ grep "$RUNNER_BASE_DIR/.*/[b]eam"|cut -d' ' -f1`
+ ;;
+ SunOS)
+ # PID COMMAND
+ PID=`ps -ef -o pid= -o args=|\
+ grep "$RUNNER_BASE_DIR/.*/[b]eam"|cut -d' ' -f1`
+ ;;
+ CYGWIN*)
+ # UID PID PPID TTY STIME COMMAND
+ PID=`ps -efW|grep "$RUNNER_BASE_DIR/.*/[b]eam"|cut -d' ' -f2`
+ ;;
+ esac
$NODETOOL stop
while `kill -0 $PID 2>/dev/null`;
do
diff --git a/src/mustache.erl b/src/mustache.erl
index df81aed..86ef53c 100644
--- a/src/mustache.erl
+++ b/src/mustache.erl
@@ -190,8 +190,6 @@ to_s(Val) when is_integer(Val) ->
integer_to_list(Val);
to_s(Val) when is_float(Val) ->
io_lib:format("~.2f", [Val]);
-to_s(Val) when is_boolean(Val) ->
- Val;
to_s(Val) when is_atom(Val) ->
atom_to_list(Val);
to_s(Val) ->
diff --git a/src/rebar_ct.erl b/src/rebar_ct.erl
index fc87dd3..316998f 100644
--- a/src/rebar_ct.erl
+++ b/src/rebar_ct.erl
@@ -130,13 +130,22 @@ make_cmd(TestDir, Config) ->
Include = ""
end,
+ %% Add the code path of the rebar process to the code path. This
+ %% includes the dependencies in the code path. The directories
+ %% that are part of the root Erlang install are filtered out to
+ %% avoid duplication
+ R = code:root_dir(),
+ NonLibCodeDirs = [P || P <- code:get_path(), lists:prefix(R, P) == false],
+ CodeDirs = [io_lib:format("\"~s\"", [Dir]) ||
+ Dir <- [EbinDir|NonLibCodeDirs]],
+ CodePathString = string:join(CodeDirs, " "),
Cmd = ?FMT("erl " % should we expand ERL_PATH?
- " -noshell -pa \"~s\" ~s"
+ " -noshell -pa ~s ~s"
" -s ct_run script_start -s erlang halt"
" -name test@~s"
" -logdir \"~s\""
" -env TEST_DIR \"~s\"",
- [EbinDir,
+ [CodePathString,
Include,
net_adm:localhost(),
LogDir,
diff --git a/src/rebar_deps.erl b/src/rebar_deps.erl
index 317814f..0852b01 100644
--- a/src/rebar_deps.erl
+++ b/src/rebar_deps.erl
@@ -297,11 +297,21 @@ download_source(AppDir, {svn, Url, Rev}) ->
filename:dirname(AppDir)).
update_source(Dep) ->
- ?CONSOLE("Updating ~p from ~p\n", [Dep#dep.app, Dep#dep.source]),
- require_source_engine(Dep#dep.source),
- update_source(filename:join(get_deps_dir(), Dep#dep.app),
- Dep#dep.source),
- Dep.
+ %% It's possible when updating a source, that a given dep does not have a
+ %% VCS directory, such as when a source archive is built of a project, with
+ %% all deps already downloaded/included. So, verify that the necessary VCS
+ %% directory exists before attempting to do the update.
+ AppDir = filename:join(get_deps_dir(), Dep#dep.app),
+ case has_vcs_dir(element(1, Dep#dep.source), AppDir) of
+ true ->
+ ?CONSOLE("Updating ~p from ~p\n", [Dep#dep.app, Dep#dep.source]),
+ require_source_engine(Dep#dep.source),
+ update_source(AppDir, Dep#dep.source),
+ Dep;
+ false ->
+ ?WARN("Skipping update for ~p: no VCS directory available!\n", [Dep]),
+ Dep
+ end.
update_source(AppDir, {git, _Url, {branch, Branch}}) ->
rebar_utils:sh(?FMT("git fetch origin", []), [], AppDir),
@@ -358,3 +368,15 @@ scm_client_vsn(bzr) ->
scm_client_vsn(rebar_utils:find_executable("bzr"), " --version", "Bazaar \\(bzr\\) (\\d+).(\\d+)");
scm_client_vsn(svn) ->
scm_client_vsn(rebar_utils:find_executable("svn"), " --version", "svn, version (\\d+).(\\d+)").
+
+has_vcs_dir(git, Dir) ->
+ filelib:is_dir(filename:join(Dir, ".git"));
+has_vcs_dir(hg, Dir) ->
+ filelib:is_dir(filename:join(Dir, ".hg"));
+has_vcs_dir(bzr, Dir) ->
+ filelib:is_dir(filename:join(Dir, ".bzr"));
+has_vcs_dir(svn, Dir) ->
+ filelib:is_dir(filename:join(Dir, ".svn"))
+ orelse filelib:is_dir(filename:join(Dir, "_svn"));
+has_vcs_dir(_, _) ->
+ true.