script: reload a script after upgrade only if it was loaded, set autoload only if the script was auto-loaded (closes #855)

v2.8-utf8proc
Sébastien Helleu 2016-12-01 19:34:23 +01:00
parent 827c013aa7
commit 4c6d9e14d1
3 changed files with 24 additions and 7 deletions

View File

@ -43,6 +43,7 @@ Bug fixes::
* irc: add missing tags on CTCP message sent
* lua: fix integers returned in Lua >= 5.3 (issue #834)
* relay: set status to "authentication failed" and close immediately connection in case of authentication failure in weechat and irc protocols (issue #825)
* script: reload a script after upgrade only if it was loaded, set autoload only if the script was auto-loaded (issue #855)
Build::

View File

@ -1085,7 +1085,7 @@ plugin_script_remove_file (struct t_weechat_plugin *weechat_plugin,
* 2. removes script file(s)
* 3. moves script file from "install" dir to language dir
* 4. makes link in autoload dir (if option "-a" is given)
* 5. loads script.
* 5. loads script (if it was loaded).
*/
void
@ -1099,7 +1099,7 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
char **argv, *name, *ptr_base_name, *base_name, *new_path, *autoload_path;
char *symlink_path, str_signal[128], *ptr_list;
const char *dir_home, *dir_separator;
int argc, i, length, rc, autoload;
int argc, i, length, rc, autoload, script_loaded;
struct t_plugin_script *ptr_script;
if (!*list)
@ -1120,7 +1120,7 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
{
switch (ptr_list[1])
{
case 'a': /* no autoload */
case 'a': /* autoload */
autoload = 1;
break;
case 'q': /* quiet mode */
@ -1144,10 +1144,14 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
if (base_name)
{
/* unload script, if script is loaded */
script_loaded = 0;
ptr_script = plugin_script_search_by_full_name (scripts,
base_name);
if (ptr_script)
{
script_loaded = 1;
(*script_unload) (ptr_script);
}
/* remove script file(s) */
plugin_script_remove_file (weechat_plugin, base_name,
@ -1193,8 +1197,9 @@ plugin_script_action_install (struct t_weechat_plugin *weechat_plugin,
}
}
/* load script */
(*script_load) (new_path);
/* load script (only if script was loaded) */
if (script_loaded)
(*script_load) (new_path);
}
else
{

View File

@ -506,7 +506,7 @@ script_action_install_process_cb (const void *pointer, void *data,
const char *err)
{
char *pos, *filename, *filename2, str_signal[256];
int quiet, length;
int quiet, auto_load, length;
struct t_script_repo *ptr_script;
/* make C compiler happy */
@ -543,10 +543,21 @@ script_action_install_process_cb (const void *pointer, void *data,
filename2 = malloc (length);
if (filename2)
{
auto_load = 0;
if (ptr_script->status & SCRIPT_STATUS_INSTALLED)
{
auto_load = (ptr_script->status & SCRIPT_STATUS_AUTOLOADED) ?
1 : 0;
}
else
{
auto_load = weechat_config_boolean (
script_config_scripts_autoload);
}
snprintf (filename2, length,
"%s%s%s",
(quiet && weechat_config_boolean (script_config_look_quiet_actions)) ? "-q " : "",
(weechat_config_boolean (script_config_scripts_autoload)) ? "-a " : "",
(auto_load) ? "-a " : "",
filename);
snprintf (str_signal, sizeof (str_signal),
"%s_script_install",