blob: 920269079084042761b5be595c0ddb1984dc8eae [file] [log] [blame]
#!/bin/bash
if [ $# -eq 1 ]; then
RELEASE_NAME=$1
else
RELEASE_NAME=$(basename $(dirname $(dirname $(dirname $(which $0)))))
fi
LOCAL=$(dirname $(which $0))
echo $LOCAL
echo $RELEASE_NAME
cd $LOCAL
echo "
-module(clean_release).
-export([clean_release/1]).
clean_release([ReleaseName]) ->
RelFile = atom_to_list(ReleaseName) ++ \".rel\",
case file:consult(RelFile) of
{ok, [{release, {RelName, RelVsn}, ErtsSpec, ReleaseSpecs}]} -> do_rest(RelFile, ReleaseSpecs);
{error, Reason} -> io:format(\"ERROR - Could not find file ~s~n\", [RelFile]), exit(Reason)
end,
os:cmd(\"cd ../;rm -rf \" ++ string:strip(os:cmd(\"basename `pwd`\"))).
do_rest(RelFile, ReleaseSpecs) ->
io:format(\"Finding Orphans in ~p among current release specs ~p~n\", [RelFile, ReleaseSpecs]),
{ok, FileNameList} = file:list_dir(\"../\"),
Dirs = [FileName || FileName <- FileNameList, filelib:is_dir(\"../\" ++ FileName)] --
[string:strip(os:cmd(\"basename `pwd`\"), right, $\n)],
BigListOfReleaseSpecs = lists:foldl(fun(Dir, Acc) ->
OtherRelFile = \"../\" ++ Dir ++ \"/\" ++ RelFile,
io:format(\"Checking external release file ~p~n\", [OtherRelFile]),
case file:consult(OtherRelFile) of
{ok, [{release, {RelName, RelVsn}, ErtsSpec, ReleaseSpecs_}]} ->
Acc ++ ReleaseSpecs_;
_ ->
Acc
end end, [], Dirs),
Orphans = ReleaseSpecs -- BigListOfReleaseSpecs,
io:format(\"Removing orphan release specs ~p from ../../lib ~n\", [Orphans]),
lists:foreach(fun(Orphan) ->
os:cmd(\"rm -rf ../../lib/\" ++ atom_to_list(element(1, Orphan)) ++ \"-\" ++ element(2, Orphan))
end, Orphans).
" > clean_release.erl
erlc clean_release.erl
CMD="erl -s clean_release clean_release $RELEASE_NAME -s erlang halt -noshell"
$CMD