Mercurial > hg > octave-nkf
changeset 20142:6670df97456c
Check if pkgs were found to uninstall before attempting uninstall (Bug #44524).
* uninstall.m: check if delete_idx is empty before attempting to delete
packages
author | John Donoghue |
---|---|
date | Thu, 12 Mar 2015 14:37:40 -0400 |
parents | 065ccb9a1324 |
children | f0e5c6742716 |
files | scripts/pkg/private/uninstall.m |
diffstat | 1 files changed, 73 insertions(+), 68 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/pkg/private/uninstall.m +++ b/scripts/pkg/private/uninstall.m @@ -66,80 +66,85 @@ endif endif - ## Compute the packages that will remain installed. - idx = setdiff (1:num_packages, delete_idx); - remaining_packages = {installed_pkgs_lst{idx}}; + if (isempty (delete_idx)) + warning ("no packages will be uninstalled"); + else + + ## Compute the packages that will remain installed. + idx = setdiff (1:num_packages, delete_idx); + remaining_packages = {installed_pkgs_lst{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); + + ## Will the uninstallation break any dependencies? + if (! isempty (bad_deps)) + for i = 1:length (bad_deps) + dep = bad_deps{i}; + error_text = [error_text " " desc.name " needs " ... + dep.package " " dep.operator " " dep.version "\n"]; + endfor + endif + endfor + + if (! isempty (error_text)) + error ("the following dependencies where unsatisfied:\n %s", error_text); + endif + endif - ## 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); - - ## Will the uninstallation break any dependencies? - if (! isempty (bad_deps)) - for i = 1:length (bad_deps) - dep = bad_deps{i}; - error_text = [error_text " " desc.name " needs " ... - dep.package " " dep.operator " " dep.version "\n"]; - endfor + ## Delete the directories containing the packages. + for i = delete_idx + desc = installed_pkgs_lst{i}; + ## If an 'on_uninstall.m' exist, call it! + if (exist (fullfile (desc.dir, "packinfo", "on_uninstall.m"), "file")) + wd = pwd (); + cd (fullfile (desc.dir, "packinfo")); + on_uninstall (desc); + cd (wd); + endif + ## Do the actual deletion. + if (desc.loaded) + rmpath (desc.dir); + if (exist (getarchdir (desc))) + rmpath (getarchdir (desc)); + endif + endif + if (exist (desc.dir, "dir")) + [status, msg] = rmdir (desc.dir, "s"); + if (status != 1 && exist (desc.dir, "dir")) + error ("couldn't delete directory %s: %s", desc.dir, msg); + endif + [status, msg] = rmdir (getarchdir (desc), "s"); + if (status != 1 && exist (getarchdir (desc), "dir")) + error ("couldn't delete directory %s: %s", getarchdir (desc), msg); + endif + if (dirempty (desc.archprefix)) + rmdir (desc.archprefix, "s"); + endif + else + warning ("directory %s previously lost", desc.dir); endif endfor - if (! isempty (error_text)) - error ("the following dependencies where unsatisfied:\n %s", error_text); - endif - endif - - ## Delete the directories containing the packages. - for i = delete_idx - desc = installed_pkgs_lst{i}; - ## If an 'on_uninstall.m' exist, call it! - if (exist (fullfile (desc.dir, "packinfo", "on_uninstall.m"), "file")) - wd = pwd (); - cd (fullfile (desc.dir, "packinfo")); - on_uninstall (desc); - cd (wd); - endif - ## Do the actual deletion. - if (desc.loaded) - rmpath (desc.dir); - if (exist (getarchdir (desc))) - rmpath (getarchdir (desc)); - endif - endif - if (exist (desc.dir, "dir")) - [status, msg] = rmdir (desc.dir, "s"); - if (status != 1 && exist (desc.dir, "dir")) - error ("couldn't delete directory %s: %s", desc.dir, msg); - endif - [status, msg] = rmdir (getarchdir (desc), "s"); - if (status != 1 && exist (getarchdir (desc), "dir")) - error ("couldn't delete directory %s: %s", getarchdir (desc), msg); - endif - if (dirempty (desc.archprefix)) - rmdir (desc.archprefix, "s"); + ## Write a new ~/.octave_packages. + if (global_install) + if (length (remaining_packages) == 0) + unlink (global_list); + else + global_packages = save_order (remaining_packages); + save (global_list, "global_packages"); endif else - warning ("directory %s previously lost", desc.dir); - endif - endfor - - ## Write a new ~/.octave_packages. - if (global_install) - if (length (remaining_packages) == 0) - unlink (global_list); - else - global_packages = save_order (remaining_packages); - save (global_list, "global_packages"); - endif - else - if (length (remaining_packages) == 0) - unlink (local_list); - else - local_packages = save_order (remaining_packages); - save (local_list, "local_packages"); + if (length (remaining_packages) == 0) + unlink (local_list); + else + local_packages = save_order (remaining_packages); + save (local_list, "local_packages"); + endif endif endif