Mercurial > repo
annotate share/lua/5.2/luarocks/remove.lua @ 8633:ff8c872b40a5
<int-e> learn Typology is the study of typological errors.
author | HackBot |
---|---|
date | Tue, 28 Jun 2016 10:51:37 +0000 |
parents | d137f631bad5 |
children |
rev | line source |
---|---|
1132
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
1 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
2 --- Module implementing the LuaRocks "remove" command. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
3 -- Uninstalls rocks. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
4 module("luarocks.remove", package.seeall) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
5 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
6 local search = require("luarocks.search") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
7 local deps = require("luarocks.deps") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
8 local fetch = require("luarocks.fetch") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
9 local repos = require("luarocks.repos") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
10 local path = require("luarocks.path") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
11 local util = require("luarocks.util") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
12 local cfg = require("luarocks.cfg") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
13 local manif = require("luarocks.manif") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
14 local fs = require("luarocks.fs") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
15 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
16 help_summary = "Uninstall a rock." |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
17 help_arguments = "[--force] <name> [<version>]" |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
18 help = [[ |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
19 Argument is the name of a rock to be uninstalled. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
20 If a version is not given, try to remove all versions at once. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
21 Will only perform the removal if it does not break dependencies. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
22 To override this check and force the removal, use --force. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
23 ]] |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
24 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
25 --- Obtain a list of packages that depend on the given set of packages |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
26 -- (where all packages of the set are versions of one program). |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
27 -- @param name string: the name of a program |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
28 -- @param versions array of string: the versions to be deleted. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
29 -- @return array of string: an empty table if no packages depend on any |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
30 -- of the given list, or an array of strings in "name/version" format. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
31 local function check_dependents(name, versions, deps_mode) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
32 local dependents = {} |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
33 local blacklist = {} |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
34 blacklist[name] = {} |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
35 for version, _ in pairs(versions) do |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
36 blacklist[name][version] = true |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
37 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
38 local local_rocks = {} |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
39 local query_all = search.make_query("") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
40 query_all.exact_name = false |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
41 search.manifest_search(local_rocks, cfg.rocks_dir, query_all) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
42 local_rocks[name] = nil |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
43 for rock_name, rock_versions in pairs(local_rocks) do |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
44 for rock_version, _ in pairs(rock_versions) do |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
45 local rockspec, err = fetch.load_rockspec(path.rockspec_file(rock_name, rock_version)) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
46 if rockspec then |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
47 local _, missing = deps.match_deps(rockspec, blacklist, deps_mode) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
48 if missing[name] then |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
49 table.insert(dependents, { name = rock_name, version = rock_version }) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
50 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
51 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
52 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
53 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
54 return dependents |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
55 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
56 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
57 --- Delete given versions of a program. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
58 -- @param name string: the name of a program |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
59 -- @param versions array of string: the versions to be deleted. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
60 -- @return boolean or (nil, string): true on success or nil and an error message. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
61 local function delete_versions(name, versions) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
62 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
63 for version, _ in pairs(versions) do |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
64 util.printout("Removing "..name.." "..version.."...") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
65 local ok, err = repos.delete_version(name, version) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
66 if not ok then return nil, err end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
67 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
68 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
69 return true |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
70 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
71 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
72 --- Driver function for the "remove" command. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
73 -- @param name string: name of a rock. If a version is given, refer to |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
74 -- a specific version; otherwise, try to remove all versions. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
75 -- @param version string: When passing a package name, a version number |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
76 -- may also be given. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
77 -- @return boolean or (nil, string): True if removal was |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
78 -- successful, nil and an error message otherwise. |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
79 function run(...) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
80 local flags, name, version = util.parse_flags(...) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
81 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
82 if type(name) ~= "string" then |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
83 return nil, "Argument missing, see help." |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
84 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
85 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
86 local deps_mode = flags["deps-mode"] or cfg.deps_mode |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
87 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
88 local ok, err = fs.check_command_permissions(flags) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
89 if not ok then return nil, err end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
90 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
91 local results = {} |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
92 search.manifest_search(results, cfg.rocks_dir, search.make_query(name, version)) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
93 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
94 local versions = results[name] |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
95 if not versions then |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
96 return nil, "Could not find rock '"..name..(version and " "..version or "").."' in local tree." |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
97 else |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
98 local version = next(versions) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
99 local second = next(versions, version) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
100 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
101 util.printout("Checking stability of dependencies on the absence of") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
102 util.printout(name.." "..table.concat(util.keys(versions), ", ").."...") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
103 util.printout() |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
104 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
105 local dependents = check_dependents(name, versions, deps_mode) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
106 |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
107 if #dependents == 0 or flags["force"] then |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
108 if #dependents > 0 then |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
109 util.printerr("The following packages may be broken by this forced removal:") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
110 for _, dependent in ipairs(dependents) do |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
111 util.printerr(dependent.name.." "..dependent.version) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
112 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
113 util.printerr() |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
114 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
115 local ok, err = delete_versions(name, versions) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
116 if not ok then return nil, err end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
117 ok, err = manif.make_manifest(cfg.rocks_dir, deps_mode) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
118 if not ok then return nil, err end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
119 else |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
120 if not second then |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
121 util.printerr("Will not remove "..name.." "..version..".") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
122 util.printerr("Removing it would break dependencies for: ") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
123 else |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
124 util.printerr("Will not remove all versions of "..name..".") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
125 util.printerr("Removing them would break dependencies for: ") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
126 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
127 for _, dependent in ipairs(dependents) do |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
128 util.printerr(dependent.name.." "..dependent.version) |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
129 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
130 util.printerr() |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
131 util.printerr("Use --force to force removal (warning: this may break modules).") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
132 return nil, "Failed removing." |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
133 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
134 end |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
135 util.printout("Removal successful.") |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
136 return true |
d137f631bad5
<GreyKnight> (cd luabuild/luarocks-2.0.12; make install)
HackBot
parents:
diff
changeset
|
137 end |