summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKresten Krab Thorup <krab@trifork.com>2011-05-19 00:49:10 +0200
committerDave Smith <dizzyd@dizzyd.com>2012-07-11 08:42:47 -0600
commit5b765e028f7a45eae4c616c59ba70616d491781e (patch)
tree4a25e915c84a115139308733a7ff76f33552792f
parentcbe682752aac128f11adbf6b7a156df342dcfb47 (diff)
Initial version of "rebar shell" command
For now, this is just a proof of concept; would make sense to add a lot of things, such as quick access to invoking rebar itself (with approproate code reloading), as well as an eunit-aware version so that tests could be run interactively.
-rw-r--r--ebin/rebar.app2
-rw-r--r--src/rebar.erl3
-rw-r--r--src/rebar_shell.erl60
3 files changed, 64 insertions, 1 deletions
diff --git a/ebin/rebar.app b/ebin/rebar.app
index b1a51c7..9553c67 100644
--- a/ebin/rebar.app
+++ b/ebin/rebar.app
@@ -35,6 +35,7 @@
rebar_upgrade,
rebar_utils,
rebar_xref,
+ rebar_shell,
getopt,
mustache ]},
{registered, []},
@@ -77,6 +78,7 @@
rebar_eunit,
rebar_escripter,
rebar_edoc,
+ rebar_shell,
rebar_xref
]},
diff --git a/src/rebar.erl b/src/rebar.erl
index 3f93ed9..11b97da 100644
--- a/src/rebar.erl
+++ b/src/rebar.erl
@@ -342,7 +342,8 @@ command_names() ->
["check-deps", "clean", "compile", "create", "create-app", "create-node",
"ct", "delete-deps", "doc", "eunit", "generate", "generate-appups",
"generate-upgrade", "get-deps", "help", "list-deps", "list-templates",
- "update-deps", "overlay", "version", "xref"].
+ "update-deps", "overlay", "shell", "version", "xref"].
+
unabbreviate_command_names([]) ->
[];
diff --git a/src/rebar_shell.erl b/src/rebar_shell.erl
new file mode 100644
index 0000000..0f8d822
--- /dev/null
+++ b/src/rebar_shell.erl
@@ -0,0 +1,60 @@
+%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-
+%% ex: ts=4 sw=4 et
+%% -------------------------------------------------------------------
+%%
+%% rebar: Erlang Build Tools
+%%
+%% Copyright (c) 2011 Trifork
+%%
+%% Permission is hereby granted, free of charge, to any person obtaining a copy
+%% of this software and associated documentation files (the "Software"), to deal
+%% in the Software without restriction, including without limitation the rights
+%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+%% copies of the Software, and to permit persons to whom the Software is
+%% furnished to do so, subject to the following conditions:
+%%
+%% The above copyright notice and this permission notice shall be included in
+%% all copies or substantial portions of the Software.
+%%
+%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+%% THE SOFTWARE.
+%% -------------------------------------------------------------------
+
+-module(rebar_shell).
+-author("Kresten Krab Thorup <krab@trifork.com>").
+
+-include("rebar.hrl").
+
+-export([shell/2]).
+
+shell(_Config, _AppFile) ->
+
+ case is_deps_dir(rebar_utils:get_cwd()) of
+ false ->
+ true = code:add_pathz(ebin_dir()),
+
+ user_drv:start(),
+
+ %% this call never returns (until user quits shell)
+ shell:server(false, false);
+
+ true ->
+ ok
+ end,
+ ok.
+
+ebin_dir() ->
+ filename:join(rebar_utils:get_cwd(), "ebin").
+
+is_deps_dir(Dir) ->
+ case lists:reverse(filename:split(Dir)) of
+ [_, "deps" | _] ->
+ true;
+ _V ->
+ false
+ end.