From fed5158ec50788026500a3e280b52e01e6cec883 Mon Sep 17 00:00:00 2001 From: wn_ Date: Mon, 8 Mar 2021 15:38:52 +0000 Subject: [PATCH] Default to null 'rv' for plugin update check. Previously 'rv' was returned as an empty JS array, causing 'p.rv.git_status != 0' to evaluate to true and a misleading 'Ready to update' appearing for certain plugins. --- classes/pref/prefs.php | 10 ++++++---- js/PrefHelpers.js | 40 +++++++++++++++++++++------------------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php index 77b57b4d8..16c41df9d 100644 --- a/classes/pref/prefs.php +++ b/classes/pref/prefs.php @@ -1057,7 +1057,7 @@ class Pref_Prefs extends Handler_Protected { private static function _plugin_needs_update($root_dir, $plugin_name) { $plugin_dir = "$root_dir/plugins.local/" . basename($plugin_name); - $rv = []; + $rv = null; if (is_dir($plugin_dir) && is_dir("$plugin_dir/.git")) { $pipes = []; @@ -1071,9 +1071,11 @@ class Pref_Prefs extends Handler_Protected { $proc = proc_open("git fetch -q origin -a && git log HEAD..origin/master --oneline", $descriptorspec, $pipes, $plugin_dir); if (is_resource($proc)) { - $rv["stdout"] = stream_get_contents($pipes[1]); - $rv["stderr"] = stream_get_contents($pipes[2]); - $rv["git_status"] = proc_close($proc); + $rv = [ + "stdout" => stream_get_contents($pipes[1]), + "stderr" => stream_get_contents($pipes[2]), + "git_status" => proc_close($proc), + ]; $rv["need_update"] = !empty($rv["stdout"]); } } diff --git a/js/PrefHelpers.js b/js/PrefHelpers.js index 651e3f609..3f738aa95 100644 --- a/js/PrefHelpers.js +++ b/js/PrefHelpers.js @@ -697,28 +697,30 @@ const Helpers = { } else { reply.forEach((p) => { - if (p.rv.need_update) { - dialog.plugins_to_update.push(p.plugin); + if (p.rv) { + if (p.rv.need_update) { + dialog.plugins_to_update.push(p.plugin); - const update_button = dijit.getEnclosingWidget( - App.find(`*[data-update-btn-for-plugin="${p.plugin}"]`)); + const update_button = dijit.getEnclosingWidget( + App.find(`*[data-update-btn-for-plugin="${p.plugin}"]`)); - if (update_button) - update_button.domNode.show(); - } + if (update_button) + update_button.domNode.show(); + } - if (p.rv.need_update || p.rv.git_status != 0) { - container.innerHTML += - ` -
  • ${p.plugin}

    - ${p.rv.stderr ? `
    ${p.rv.stderr}
    ` : ''} - ${p.rv.stdout ? `
    ${p.rv.stdout}
    ` : ''} -
    - ${p.rv.git_status ? App.FormFields.icon("error_outline") + " " + __("Exited with RC: %d").replace("%d", p.rv.git_status) : - App.FormFields.icon("check") + " " + __("Ready to update")} -
    -
  • - ` + if (p.rv.need_update || p.rv.git_status != 0) { + container.innerHTML += + ` +
  • ${p.plugin}

    + ${p.rv.stderr ? `
    ${p.rv.stderr}
    ` : ''} + ${p.rv.stdout ? `
    ${p.rv.stdout}
    ` : ''} +
    + ${p.rv.git_status ? App.FormFields.icon("error_outline") + " " + __("Exited with RC: %d").replace("%d", p.rv.git_status) : + App.FormFields.icon("check") + " " + __("Ready to update")} +
    +
  • + ` + } } dialog.checkNextPlugin(); });