diff options
| author | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2019-12-11 18:01:40 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-11 18:01:40 +0100 |
| commit | 178757932e65704abd95a1bf64c460956a9391fa (patch) | |
| tree | 16732ab4722bc4a5e565c2158cc374477392d5de /scripts/rabbitmq-rel | |
| parent | 5e6043ac59abbafd62bae2d3721a01ed232fc5f3 (diff) | |
| parent | 4ca6d804765dde93508d3f475117faeea7e7c3dc (diff) | |
| download | rabbitmq-server-git-178757932e65704abd95a1bf64c460956a9391fa.tar.gz | |
Merge pull request #2142 from rabbitmq/rabbitmq-server-script-replacement
Move rabbitmq-server(8) scripts to Erlang
Diffstat (limited to 'scripts/rabbitmq-rel')
| -rwxr-xr-x | scripts/rabbitmq-rel | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/scripts/rabbitmq-rel b/scripts/rabbitmq-rel new file mode 100755 index 0000000000..a96ec78764 --- /dev/null +++ b/scripts/rabbitmq-rel @@ -0,0 +1,58 @@ +#!/usr/bin/env escript +%% vim:ft=erlang:sw=2:et: + +main(["show-rel"]) -> + Rel = get_rel(), + io:format("~p.~n", [Rel]); +main(["gen-boot"]) -> + generate_rel(), + generate_boot(). + +get_rel() -> + ok = application:load(rabbit), + Apps0 = get_apps(rabbit), + Apps1 = lists:sort( + fun + (_, rabbitmq_prelaunch) -> false; + (rabbitmq_prelaunch, _) -> true; + (_, mnesia) -> true; + (mnesia, _) -> false; + (A, B) -> A =< B + end, Apps0), + Apps = [{App, get_vsn(App)} || App <- Apps1], + + ERTSVersion = erlang:system_info(version), + RabbitVersion = get_vsn(rabbit), + + {release, + {"RabbitMQ", RabbitVersion}, + {erts, ERTSVersion}, + Apps}. + +get_apps(App) -> + ok = load_app(App), + {ok, DirectDeps} = application:get_key(App, applications), + lists:umerge( + [lists:usort(get_apps(Dep)) || Dep <- DirectDeps] ++ + [lists:usort([kernel, stdlib, sasl, App, mnesia])]). + +load_app(App) -> + case application:load(App) of + ok -> ok; + {error, {already_loaded, App}} -> ok + end. + +generate_rel() -> + Rel = get_rel(), + io:format("~p.~n", [Rel]), + Output = io_lib:format("~p.~n", [Rel]), + ok = file:write_file("rabbit.rel", Output). + +generate_boot() -> + Options = [local, {path, code:get_path()}], + ok = systools:make_script("rabbit", Options). + +get_vsn(App) -> + load_app(App), + {ok, Vsn} = application:get_key(App, vsn), + Vsn. |
