From ce3f3cf9db6abcb6c8008ea9a1fd674bfa4d91a8 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Wed, 17 Jul 2013 18:25:23 -0300 Subject: Add --old-versions to 'purge'. --- src/luarocks/purge.lua | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/luarocks/purge.lua b/src/luarocks/purge.lua index 6b094061..e76a82e9 100644 --- a/src/luarocks/purge.lua +++ b/src/luarocks/purge.lua @@ -11,14 +11,22 @@ local deps = require("luarocks.deps") local repos = require("luarocks.repos") local manif = require("luarocks.manif") local cfg = require("luarocks.cfg") +local remove = require("luarocks.remove") help_summary = "Remove all installed rocks from a tree." -help_arguments = "--tree=" +help_arguments = "--tree= [--old-versions]" help = [[ -This command removes all rocks from a given tree. +This command removes rocks en masse from a given tree. +By default, it removes all rocks from a tree. The --tree argument is mandatory: luarocks purge does not assume a default tree. + +--old-versions Keep the highest-numbered version of each + rock and remove the other ones. By default + it only removes old versions if they are + not needed as dependencies. This can be + overridden with the flag --force. ]] function run(...) @@ -35,12 +43,26 @@ function run(...) query.exact_name = false search.manifest_search(results, path.rocks_dir(tree), query) + local sort = function(a,b) return deps.compare_versions(b,a) end + if flags["old-versions"] then + sort = deps.compare_versions + end + for package, versions in util.sortedpairs(results) do - for version, repositories in util.sortedpairs(versions, function(a,b) return deps.compare_versions(b,a) end) do - util.printout("Removing "..package.." "..version.."...") - local ok, err = repos.delete_version(package, version, true) - if not ok then - util.printerr(err) + for version, repositories in util.sortedpairs(versions, sort) do + if flags["old-versions"] then + util.printout("Keeping "..package.." "..version.."...") + local ok, err = remove.remove_other_versions(package, version, flags["force"]) + if not ok then + util.printerr(err) + end + break + else + util.printout("Removing "..package.." "..version.."...") + local ok, err = repos.delete_version(package, version, true) + if not ok then + util.printerr(err) + end end end end -- cgit v1.2.3-55-g6feb