diff options
| author | Alvaro Videla <alvaro@rabbitmq.com> | 2012-11-16 13:09:49 +0100 |
|---|---|---|
| committer | Alvaro Videla <alvaro@rabbitmq.com> | 2012-11-16 13:09:49 +0100 |
| commit | ed962e5599b0ea9a932f33d2447225821820b28e (patch) | |
| tree | 623534cfea4f4aa5e74186bbeab53f7d941b87c0 /src | |
| parent | ae6dc3556a2fb6995d4ce91093ae2b04befed5d5 (diff) | |
| download | rabbitmq-server-git-ed962e5599b0ea9a932f33d2447225821820b28e.tar.gz | |
moves rabbit_release to the standalone packaging folder
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_release.erl | 148 |
1 files changed, 0 insertions, 148 deletions
diff --git a/src/rabbit_release.erl b/src/rabbit_release.erl deleted file mode 100644 index bcba26995d..0000000000 --- a/src/rabbit_release.erl +++ /dev/null @@ -1,148 +0,0 @@ -%% based on rabbit_prelaunch.erl from rabbitmq-server source code --module(rabbit_release). - --export([start/0, stop/0, make_tar/2]). - --include("rabbit.hrl"). - --define(BaseApps, [rabbit]). --define(ERROR_CODE, 1). - -start() -> - %% Determine our various directories - [PluginsDistDir, UnpackedPluginDir, RabbitHome] = - init:get_plain_arguments(), - RootName = UnpackedPluginDir ++ "/rabbit", - - prepare_plugins(PluginsDistDir, UnpackedPluginDir), - - PluginAppNames = [ P#plugin.name || P <- rabbit_plugins:list(PluginsDistDir) ], - - %% we need to call find_plugins because it has the secondary effect of adding the - %% plugin ebin folder to the code path. We need that in order to load the plugin app - RequiredApps = find_plugins(UnpackedPluginDir), - - %% Build the entire set of dependencies - this will load the - %% applications along the way - AllApps = case catch sets:to_list(expand_dependencies(RequiredApps)) of - {failed_to_load_app, App, Err} -> - terminate("failed to load application ~s:~n~p", - [App, Err]); - AppList -> - AppList - end, - - %% we need a list of ERTS apps we need to ship with rabbit - BaseApps = AllApps -- PluginAppNames, - - AppVersions = [determine_version(App) || App <- BaseApps], - RabbitVersion = proplists:get_value(rabbit, AppVersions), - - %% Build the overall release descriptor - RDesc = {release, - {"rabbit", RabbitVersion}, - {erts, erlang:system_info(version)}, - AppVersions}, - - %% Write it out to $RABBITMQ_PLUGINS_EXPAND_DIR/rabbit.rel - rabbit_file:write_file(RootName ++ ".rel", io_lib:format("~p.~n", [RDesc])), - - %% Compile the script - systools:make_script(RootName), - systools:script2boot(RootName), - %% Make release tarfile - make_tar(RootName, RabbitHome), - terminate(0), - ok. - -stop() -> - ok. - -make_tar(Release, RabbitHome) -> - systools:make_tar(Release, - [ - {dirs, [docs, etc, include, plugins, sbin, share]}, - {erts, code:root_dir()}, - {outdir, RabbitHome} - ]). - -determine_version(App) -> - application:load(App), - {ok, Vsn} = application:get_key(App, vsn), - {App, Vsn}. - -delete_recursively(Fn) -> - case rabbit_file:recursive_delete([Fn]) of - ok -> ok; - {error, {Path, E}} -> {error, {cannot_delete, Path, E}}; - Error -> Error - end. - -prepare_plugins(PluginsDistDir, DestDir) -> - %% Eliminate the contents of the destination directory - case delete_recursively(DestDir) of - ok -> ok; - {error, E} -> terminate("Could not delete dir ~s (~p)", [DestDir, E]) - end, - case filelib:ensure_dir(DestDir ++ "/") of - ok -> ok; - {error, E2} -> terminate("Could not create dir ~s (~p)", [DestDir, E2]) - end, - - [prepare_plugin(Plugin, DestDir) || Plugin <- rabbit_plugins:list(PluginsDistDir)]. - -prepare_plugin(#plugin{type = ez, location = Location}, PluginDestDir) -> - zip:unzip(Location, [{cwd, PluginDestDir}]); -prepare_plugin(#plugin{type = dir, name = Name, location = Location}, - PluginsDestDir) -> - rabbit_file:recursive_copy(Location, - filename:join([PluginsDestDir, Name])). - -expand_dependencies(Pending) -> - expand_dependencies(sets:new(), Pending). -expand_dependencies(Current, []) -> - Current; -expand_dependencies(Current, [Next|Rest]) -> - case sets:is_element(Next, Current) of - true -> - expand_dependencies(Current, Rest); - false -> - case application:load(Next) of - ok -> - ok; - {error, {already_loaded, _}} -> - ok; - {error, Reason} -> - throw({failed_to_load_app, Next, Reason}) - end, - {ok, Required} = application:get_key(Next, applications), - Unique = [A || A <- Required, not(sets:is_element(A, Current))], - expand_dependencies(sets:add_element(Next, Current), Rest ++ Unique) - end. - -find_plugins(PluginDir) -> - [prepare_dir_plugin(PluginName) || - PluginName <- filelib:wildcard(PluginDir ++ "/*/ebin/*.app")]. - -prepare_dir_plugin(PluginAppDescFn) -> - %% Add the plugin ebin directory to the load path - PluginEBinDirN = filename:dirname(PluginAppDescFn), - code:add_path(PluginEBinDirN), - - %% We want the second-last token - NameTokens = string:tokens(PluginAppDescFn,"/."), - PluginNameString = lists:nth(length(NameTokens) - 1, NameTokens), - list_to_atom(PluginNameString). - -terminate(Fmt, Args) -> - io:format("ERROR: " ++ Fmt ++ "~n", Args), - terminate(?ERROR_CODE). - -terminate(Status) -> - case os:type() of - {unix, _} -> halt(Status); - {win32, _} -> init:stop(Status), - receive - after infinity -> ok - end - end. |
