Mercurial > octave
changeset 27597:352cead49726
Don't break uninstalling a package due to unrelated dependencies (bug #51722)
* get_unsatisfied_deps.m: Add third input "uninstall_flag" to function
prototype. When "uninstall_flag" is true, don't check for unsatisfied
dependencies of unrelated packages.
* uninstall.m: When checking for dependencies, call get_unsatisfied_deps with
"uninstall_flag" set to true.
author | Philip Nienhuis <prnienhuis@users.sf.net> |
---|---|
date | Wed, 30 Oct 2019 23:18:11 +0100 |
parents | 92e829d0a63b |
children | cf9fbfa04dd1 |
files | scripts/pkg/private/get_unsatisfied_deps.m scripts/pkg/private/uninstall.m |
diffstat | 2 files changed, 7 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/pkg/private/get_unsatisfied_deps.m Thu Oct 31 14:49:22 2019 +0900 +++ b/scripts/pkg/private/get_unsatisfied_deps.m Wed Oct 30 23:18:11 2019 +0100 @@ -18,11 +18,12 @@ ## <https://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {} {@var{bad_deps} =} get_unsatisfied_deps (@var{desc}, @var{installed_pkgs_lst}) +## @deftypefn {} {@var{bad_deps} =} get_unsatisfied_deps (@var{desc}, @var{installed_pkgs_lst}, @var{uninstall_flag}) ## Undocumented internal function. ## @end deftypefn -function bad_deps = get_unsatisfied_deps (desc, installed_pkgs_lst) +function bad_deps = get_unsatisfied_deps (desc, installed_pkgs_lst, + uninstall_flag = false) bad_deps = {}; @@ -37,13 +38,13 @@ endif ## Is the current dependency not Octave? else - ok = false; + ok = xor (false, uninstall_flag); for i = 1:length (installed_pkgs_lst) cur_name = installed_pkgs_lst{i}.name; cur_version = installed_pkgs_lst{i}.version; if (strcmp (dep.package, cur_name) && compare_versions (cur_version, dep.version, dep.operator)) - ok = true; + ok = xor (true, uninstall_flag); break; endif endfor
--- a/scripts/pkg/private/uninstall.m Thu Oct 31 14:49:22 2019 +0900 +++ b/scripts/pkg/private/uninstall.m Wed Oct 30 23:18:11 2019 +0100 @@ -74,13 +74,14 @@ ## Compute the packages that will remain installed. idx = setdiff (1:num_packages, delete_idx); remaining_packages = {installed_pkgs_lst{idx}}; + to_delete_packages = {installed_pkgs_lst{delete_idx}}; ## Check dependencies. if (handle_deps) error_text = ""; for i = 1:length (remaining_packages) desc = remaining_packages{i}; - bad_deps = get_unsatisfied_deps (desc, remaining_packages); + bad_deps = get_unsatisfied_deps (desc, to_delete_packages, true); ## Will the uninstallation break any dependencies? if (! isempty (bad_deps))