]> granicus.if.org Git - ejabberd/commitdiff
Support to update modules in R14B04 and higher
authorBadlop <badlop@process-one.net>
Thu, 3 Nov 2011 18:46:59 +0000 (19:46 +0100)
committerBadlop <badlop@process-one.net>
Thu, 3 Nov 2011 18:47:11 +0000 (19:47 +0100)
src/ejabberd_update.erl

index fc3c3306a084d3a48b576705d9aa79d5973cc1cf..f88af2aca4afd7e7bd635506aa99b6b5a8c265b6 100644 (file)
@@ -41,7 +41,7 @@ update() ->
     case update_info() of
        {ok, Dir, _UpdatedBeams, _Script, LowLevelScript, _Check} ->
            Eval =
-               release_handler_1:eval_script(
+               eval_script(
                  LowLevelScript, [],
                  [{ejabberd, "", filename:join(Dir, "..")}]),
            ?INFO_MSG("eval: ~p~n", [Eval]),
@@ -58,7 +58,7 @@ update(ModulesToUpdate) ->
                [A || A <- UpdatedBeamsAll, B <- ModulesToUpdate, A == B],
            {_, LowLevelScript, _} = build_script(Dir, UpdatedBeamsNow),
            Eval =
-               release_handler_1:eval_script(
+               eval_script(
                  LowLevelScript, [],
                  [{ejabberd, "", filename:join(Dir, "..")}]),
            ?INFO_MSG("eval: ~p~n", [Eval]),
@@ -67,6 +67,16 @@ update(ModulesToUpdate) ->
            {error, Reason}
     end.
 
+%% OTP R14B03 and older provided release_handler_1:eval_script/3
+%% But OTP R14B04 and newer provide release_handler_1:eval_script/5
+eval_script(Script, Apps, LibDirs) ->
+    case lists:member({eval_script, 5}, release_handler_1:module_info(exports)) of
+       true ->
+           release_handler_1:eval_script(Script, Apps, LibDirs, [], []);
+       false ->
+           release_handler_1:eval_script(Script, Apps, LibDirs)
+    end.
+
 %% Get information about the modified modules
 update_info() ->
     Dir = filename:dirname(code:which(ejabberd)),
@@ -134,6 +144,10 @@ build_script(Dir, UpdatedBeams) ->
            ?DEBUG("script: ~p~n", [Script]),
            ?DEBUG("low level script: ~p~n", [LowLevelScript]),
            ?DEBUG("check: ~p~n", [Check]);
+       {ok, []} ->
+           ?DEBUG("script: ~p~n", [Script]),
+           ?DEBUG("low level script: ~p~n", [LowLevelScript]),
+           ?DEBUG("check: ~p~n", [Check]);
        _ ->
            ?ERROR_MSG("script: ~p~n", [Script]),
            ?ERROR_MSG("low level script: ~p~n", [LowLevelScript]),