Mercurial > octave
changeset 29936:79c6a29dd384
pkg: Better warning messages for packages not being uninstalled (bug #31946).
* scripts/pkg/private/uninstall.m: Add warnings for packages not uninstalled
because they are global or not found. Fix pkg uninstall not installing any
packages if some could not be found. Minor overhaul of coding style.
author | Neeraj Battan <neeraj.battan@research.iiit.ac.in> |
---|---|
date | Thu, 17 Mar 2016 10:50:22 +0530 |
parents | fb0436a0c126 |
children | da7210e30f3e |
files | scripts/pkg/private/uninstall.m |
diffstat | 1 files changed, 24 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/pkg/private/uninstall.m Sun Aug 01 12:18:43 2021 +0200 +++ b/scripts/pkg/private/uninstall.m Thu Mar 17 10:50:22 2016 +0530 @@ -35,13 +35,18 @@ [local_packages, global_packages] = installed_packages (local_list, global_list); if (global_install) - installed_pkgs_lst = {local_packages{:}, global_packages{:}}; + installed_pkgs_lst = [local_packages, global_packages]; else installed_pkgs_lst = local_packages; endif - num_packages = length (installed_pkgs_lst); + all_pkgs_list = [local_packages, global_packages]; + all_installed_pkgs_lst = cellfun (@(x) x.name, all_pkgs_list, ... + "uniformoutput", false); + num_packages = numel (installed_pkgs_lst); delete_idx = []; + available_packages = intersect (all_installed_pkgs_lst, pkgnames); + for i = 1:num_packages cur_name = installed_pkgs_lst{i}.name; if (any (strcmp (cur_name, pkgnames))) @@ -50,27 +55,21 @@ endfor ## Are all the packages that should be uninstalled already installed? - if (length (delete_idx) != length (pkgnames)) - if (global_install) - ## Try again for a locally installed package. - installed_pkgs_lst = local_packages; + if (numel (available_packages) != numel (pkgnames)) + pkgs_not_installed = setxor (available_packages, pkgnames); + for idx = 1:numel (pkgs_not_installed) + warning ("package %s is not installed\n", pkgs_not_installed{idx}); + endfor + endif - num_packages = length (installed_pkgs_lst); - delete_idx = []; - for i = 1:num_packages - cur_name = installed_pkgs_lst{i}.name; - if (any (strcmp (cur_name, pkgnames))) - delete_idx(end+1) = i; - endif - endfor - if (length (delete_idx) != length (pkgnames)) - ## FIXME: We should have a better error message. - warning ("some of the packages you want to uninstall are not installed"); + ## inform user if any global packages can't be uninstalled + if (! global_install) + for i = 1:numel (global_packages) + if (any (strcmp (global_packages{i}.name, pkgnames))) + warning ("%s is a global package and cannot be removed locally\n", ... + global_packages{i}.name); endif - else - ## FIXME: We should have a better error message. - warning ("some of the packages you want to uninstall are not installed"); - endif + endfor endif if (isempty (delete_idx)) @@ -79,19 +78,19 @@ ## 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}}; + 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) + for i = 1:numel (remaining_packages) desc = remaining_packages{i}; bad_deps = get_unsatisfied_deps (desc, to_delete_packages, true); ## Will the uninstallation break any dependencies? if (! isempty (bad_deps)) - for i = 1:length (bad_deps) + for i = 1:numel (bad_deps) dep = bad_deps{i}; error_text = [error_text " " desc.name " needs " ... dep.package " " dep.operator " " dep.version "\n"];