ruaur 0.3.5 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/ruaur +29 -119
- data/lib/ruaur/aur.rb +3 -13
- data/lib/ruaur/operation.rb +5 -0
- data/lib/ruaur/options.rb +16 -0
- data/lib/ruaur/pacman.rb +11 -9
- data/lib/ruaur.rb +104 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b01098013dd9ed59fccce23da82483847e996f0bb1a7c97f628bbc9f9dcacaf8
|
4
|
+
data.tar.gz: 31c06195d3623e8e9dbe1c0bb81474541f3a827c058cc26d2482883f58f61c78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d67993b378e92f3ce5722202bd0f314922b89b71032700679f6053cc35acf8582ca9c3d018043323eded941deed8021bb0d5da25d3fe3ccc211a79aeef4ae614
|
7
|
+
data.tar.gz: ac9a1bbe13af4575d50fcea0ae677fbf4ce98cacd767b61a5b308846cd7fc43985692019aa5c6764d1bf9d73b6942955f045a6bcb441af0a6cf35a44104153aa
|
data/bin/ruaur
CHANGED
@@ -4,28 +4,6 @@ require "hilighter"
|
|
4
4
|
require "optparse"
|
5
5
|
require "ruaur"
|
6
6
|
|
7
|
-
class Flags
|
8
|
-
# Query
|
9
|
-
INFO = 1
|
10
|
-
OWNS = 2
|
11
|
-
|
12
|
-
# Remove
|
13
|
-
NOSAVE = 3
|
14
|
-
|
15
|
-
# Sync
|
16
|
-
CLEAN = 4
|
17
|
-
NAMES_ONLY = 5
|
18
|
-
NOCONFIRM = 6
|
19
|
-
SEARCH = 7
|
20
|
-
UPGRADE = 8
|
21
|
-
end
|
22
|
-
|
23
|
-
class Operation
|
24
|
-
QUERY = 1
|
25
|
-
REMOVE = 2
|
26
|
-
SYNC = 3
|
27
|
-
end
|
28
|
-
|
29
7
|
class RuAURExit
|
30
8
|
GOOD = 0
|
31
9
|
INVALID_OPTION = 1
|
@@ -39,12 +17,12 @@ end
|
|
39
17
|
|
40
18
|
def parse(args)
|
41
19
|
options = Hash.new
|
42
|
-
options["flags"] = Array.new
|
43
20
|
options["operation"] = nil
|
21
|
+
options["options"] = Array.new
|
44
22
|
options["verbose"] = false
|
45
23
|
|
46
24
|
parser = OptionParser.new do |opts|
|
47
|
-
opts.summary_width =
|
25
|
+
opts.summary_width = 19
|
48
26
|
|
49
27
|
opts.banner =
|
50
28
|
"Usage: #{File.basename($0)} <operation> [OPTIONS] [pkgs]"
|
@@ -82,7 +60,7 @@ def parse(args)
|
|
82
60
|
puts opts
|
83
61
|
exit RuAURExit::MULTIPLE_OPERATIONS
|
84
62
|
end
|
85
|
-
options["operation"] = Operation::
|
63
|
+
options["operation"] = RuAUR::Operation::Query
|
86
64
|
end
|
87
65
|
|
88
66
|
opts.on("-R", "--remove", "Remove package(s)") do
|
@@ -90,7 +68,7 @@ def parse(args)
|
|
90
68
|
puts opts
|
91
69
|
exit RuAURExit::MULTIPLE_OPERATIONS
|
92
70
|
end
|
93
|
-
options["operation"] = Operation::
|
71
|
+
options["operation"] = RuAUR::Operation::Remove
|
94
72
|
end
|
95
73
|
|
96
74
|
opts.on("-S", "--sync", "Synchronize package(s)") do
|
@@ -98,7 +76,7 @@ def parse(args)
|
|
98
76
|
puts opts
|
99
77
|
exit RuAURExit::MULTIPLE_OPERATIONS
|
100
78
|
end
|
101
|
-
options["operation"] = Operation::
|
79
|
+
options["operation"] = RuAUR::Operation::Sync
|
102
80
|
end
|
103
81
|
|
104
82
|
opts.on("", "QUERY_OPTIONS")
|
@@ -108,7 +86,7 @@ def parse(args)
|
|
108
86
|
"--info",
|
109
87
|
"Display information for given package(s)"
|
110
88
|
) do
|
111
|
-
options["
|
89
|
+
options["options"].push(RuAUR::Options::Info)
|
112
90
|
end
|
113
91
|
|
114
92
|
opts.on(
|
@@ -116,33 +94,33 @@ def parse(args)
|
|
116
94
|
"--owns",
|
117
95
|
"Search for packages that own the specified file(s)"
|
118
96
|
) do
|
119
|
-
options["
|
97
|
+
options["options"].push(RuAUR::Options::Owns)
|
120
98
|
end
|
121
99
|
|
122
100
|
opts.on("", "REMOVE_OPTIONS")
|
123
101
|
|
124
102
|
opts.on("-n", "--nosave", "Completely remove package") do
|
125
|
-
options["
|
103
|
+
options["options"].push(RuAUR::Options::NoSave)
|
126
104
|
end
|
127
105
|
|
128
106
|
opts.on("", "SYNC_OPTIONS")
|
129
107
|
|
130
108
|
opts.on("-c", "--clean", "Remove packages from the cache") do
|
131
|
-
options["
|
109
|
+
options["options"].push(RuAUR::Options::Clean)
|
132
110
|
end
|
133
111
|
|
134
112
|
opts.on(
|
135
113
|
"--names-only",
|
136
114
|
"Only show package names (useful for tab-completion)",
|
137
115
|
) do
|
138
|
-
options["
|
116
|
+
options["options"].push(RuAUR::Options::NamesOnly)
|
139
117
|
end
|
140
118
|
|
141
119
|
opts.on(
|
142
120
|
"--noconfirm",
|
143
121
|
"Bypass any and all \"Are you sure?\" messages"
|
144
122
|
) do
|
145
|
-
options["
|
123
|
+
options["options"].push(RuAUR::Options::NoConfirm)
|
146
124
|
end
|
147
125
|
|
148
126
|
opts.on(
|
@@ -150,11 +128,19 @@ def parse(args)
|
|
150
128
|
"--search",
|
151
129
|
"Search the sync database and AUR for package(s)"
|
152
130
|
) do
|
153
|
-
options["
|
131
|
+
options["options"].push(RuAUR::Options::Search)
|
154
132
|
end
|
155
133
|
|
156
134
|
opts.on("-u", "--sysupgrade", "Upgrade all packages") do
|
157
|
-
options["
|
135
|
+
options["options"].push(RuAUR::Options::Upgrade)
|
136
|
+
end
|
137
|
+
|
138
|
+
opts.on(
|
139
|
+
"-w",
|
140
|
+
"--downloadonly",
|
141
|
+
"Retrieve packages from the server, but do not install"
|
142
|
+
) do
|
143
|
+
options["options"].push(RuAUR::Options::Download)
|
158
144
|
end
|
159
145
|
end
|
160
146
|
|
@@ -178,7 +164,7 @@ def parse(args)
|
|
178
164
|
exit RuAURExit::AMBIGUOUS_ARGUMENT
|
179
165
|
end
|
180
166
|
|
181
|
-
if (!
|
167
|
+
if (!RuAUR::validate_options(options))
|
182
168
|
puts parser
|
183
169
|
exit RuAURExit::INVALID_OPERATION
|
184
170
|
end
|
@@ -188,95 +174,19 @@ def parse(args)
|
|
188
174
|
return options
|
189
175
|
end
|
190
176
|
|
191
|
-
def validate(options)
|
192
|
-
case options["operation"]
|
193
|
-
when Operation::QUERY
|
194
|
-
flags = options["flags"].select do |flag|
|
195
|
-
(flag != Flags::INFO) &&
|
196
|
-
(flag != Flags::OWNS)
|
197
|
-
end
|
198
|
-
return false if (!flags.empty?)
|
199
|
-
when Operation::REMOVE
|
200
|
-
flags = options["flags"].select do |flag|
|
201
|
-
flag != Flags::NOSAVE
|
202
|
-
end
|
203
|
-
return false if (!flags.empty?)
|
204
|
-
when Operation::SYNC
|
205
|
-
flags = options["flags"].select do |flag|
|
206
|
-
(flag != Flags::CLEAN) &&
|
207
|
-
(flag != Flags::NAMES_ONLY) &&
|
208
|
-
(flag != Flags::NOCONFIRM) &&
|
209
|
-
(flag != Flags::SEARCH) &&
|
210
|
-
(flag != Flags::UPGRADE)
|
211
|
-
end
|
212
|
-
return false if (!flags.empty?)
|
213
|
-
|
214
|
-
if (options["flags"].include?(Flags::CLEAN))
|
215
|
-
if (
|
216
|
-
options["flags"].include?(Flags::NAMES_ONLY) ||
|
217
|
-
options["flags"].include?(Flags::SEARCH) ||
|
218
|
-
options["flags"].include?(Flags::UPGRADE)
|
219
|
-
)
|
220
|
-
return false
|
221
|
-
end
|
222
|
-
elsif (options["flags"].include?(Flags::SEARCH))
|
223
|
-
if (
|
224
|
-
options["flags"].include?(Flags::CLEAN) || options["flags"].include?(Flags::UPGRADE)
|
225
|
-
)
|
226
|
-
return false
|
227
|
-
end
|
228
|
-
elsif (options["flags"].include?(Flags::UPGRADE))
|
229
|
-
if (
|
230
|
-
options["flags"].include?(Flags::CLEAN) ||
|
231
|
-
options["flags"].include?(Flags::NAMES_ONLY) ||
|
232
|
-
options["flags"].include?(Flags::SEARCH)
|
233
|
-
)
|
234
|
-
return false
|
235
|
-
end
|
236
|
-
end
|
237
|
-
else
|
238
|
-
return false
|
239
|
-
end
|
240
|
-
|
241
|
-
return true
|
242
|
-
end
|
243
|
-
|
244
177
|
# Parse CLI args
|
245
178
|
options = parse(ARGV)
|
246
179
|
|
247
180
|
begin
|
248
181
|
ruaur = RuAUR.new(!Hilighter.disable?)
|
249
|
-
|
250
182
|
case options["operation"]
|
251
|
-
when Operation::
|
252
|
-
ruaur.query(
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
)
|
257
|
-
|
258
|
-
ruaur.remove(
|
259
|
-
options["packages"],
|
260
|
-
options["flags"].include?(Flags::NOSAVE)
|
261
|
-
)
|
262
|
-
when Operation::SYNC
|
263
|
-
if (options["flags"].include?(Flags::CLEAN))
|
264
|
-
ruaur.clean(options["flags"].include?(Flags::NOCONFIRM))
|
265
|
-
elsif (options["flags"].include?(Flags::SEARCH))
|
266
|
-
puts ruaur.search(
|
267
|
-
options["packages"].join(" "),
|
268
|
-
options["flags"].include?(Flags::NAMES_ONLY)
|
269
|
-
)
|
270
|
-
elsif (options["flags"].include?(Flags::UPGRADE))
|
271
|
-
ruaur.upgrade(
|
272
|
-
options["flags"].include?(Flags::NOCONFIRM)
|
273
|
-
)
|
274
|
-
else
|
275
|
-
ruaur.install(
|
276
|
-
options["packages"],
|
277
|
-
options["flags"].include?(Flags::NOCONFIRM)
|
278
|
-
)
|
279
|
-
end
|
183
|
+
when RuAUR::Operation::Query
|
184
|
+
ruaur.query(options["packages"], options["options"])
|
185
|
+
when RuAUR::Operation::Remove
|
186
|
+
ruaur.remove(options["packages"], options["options"])
|
187
|
+
when RuAUR::Operation::Sync
|
188
|
+
ret = ruaur.sync(options["packages"], options["options"])
|
189
|
+
puts ret if (ret)
|
280
190
|
end
|
281
191
|
rescue Interrupt
|
282
192
|
# ^C
|
data/lib/ruaur/aur.rb
CHANGED
@@ -53,7 +53,6 @@ class RuAUR::AUR
|
|
53
53
|
)
|
54
54
|
end
|
55
55
|
end
|
56
|
-
private :download
|
57
56
|
|
58
57
|
def edit_pkgbuild(package, noconfirm = false)
|
59
58
|
return false if (noconfirm)
|
@@ -134,18 +133,9 @@ class RuAUR::AUR
|
|
134
133
|
def get_dependencies(package)
|
135
134
|
deps = Array.new
|
136
135
|
Dir.chdir("#{@cache}/#{package.name}") do
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
cap.gsub(/\n/, " ").scan(/[^' ]+/) do |scan|
|
141
|
-
# Strip version info and skip any deps that
|
142
|
-
# are variables, for now
|
143
|
-
# FIXME maybe find way to evaluate variable
|
144
|
-
# value
|
145
|
-
dep = scan.gsub(/(\<|\=|\>).*$/, "")
|
146
|
-
next if (dep.start_with?("$"))
|
147
|
-
deps.push(dep)
|
148
|
-
end
|
136
|
+
%x(makepkg --printsrcinfo).each_line do |line|
|
137
|
+
line.match(/depends\s*\=\s*([^>=:\n]+)/) do |m|
|
138
|
+
deps.push(m[1])
|
149
139
|
end
|
150
140
|
end
|
151
141
|
end
|
data/lib/ruaur/pacman.rb
CHANGED
@@ -8,6 +8,15 @@ class RuAUR::Pacman
|
|
8
8
|
system("sudo #{@pac_cmd} -Sc --noconfirm") if (noconfirm)
|
9
9
|
end
|
10
10
|
|
11
|
+
def download(pkg_name, noconfirm = false)
|
12
|
+
puts hilight_status("Downloading #{pkg_name}...")
|
13
|
+
if (!noconfirm)
|
14
|
+
system("sudo #{@pac_cmd} -Sw #{pkg_name}")
|
15
|
+
else
|
16
|
+
system("sudo #{@pac_cmd} -Sw #{pkg_name} --noconfirm")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
11
20
|
def exist?(pkg_name)
|
12
21
|
return !%x(#{@pac_nocolor} -Ss "^#{pkg_name}$").empty?
|
13
22
|
end
|
@@ -82,17 +91,10 @@ class RuAUR::Pacman
|
|
82
91
|
end
|
83
92
|
|
84
93
|
def query_aur(pkg_name = "")
|
85
|
-
community = Pathname.new(
|
86
|
-
"/var/lib/pacman/sync/community"
|
87
|
-
).expand_path
|
88
|
-
|
89
94
|
results = Hash.new
|
90
95
|
%x(
|
91
|
-
#{@pac_nocolor} -Qm #{pkg_name}
|
92
|
-
).
|
93
|
-
# Skip packages in community
|
94
|
-
Dir["#{community}/#{p.split.join("-")}"].any?
|
95
|
-
end.each do |line|
|
96
|
+
#{@pac_nocolor} -Qm #{pkg_name} 2>/dev/null
|
97
|
+
).each_line do |line|
|
96
98
|
line = line.split
|
97
99
|
results[line[0]] = line[1]
|
98
100
|
end
|
data/lib/ruaur.rb
CHANGED
@@ -12,8 +12,25 @@ class RuAUR
|
|
12
12
|
private :check_and_lock
|
13
13
|
|
14
14
|
def clean(noconfirm)
|
15
|
+
check_and_lock
|
15
16
|
@pacman.clean(noconfirm)
|
16
17
|
@aur.clean
|
18
|
+
ensure
|
19
|
+
unlock
|
20
|
+
end
|
21
|
+
|
22
|
+
def download(pkg_names, noconfirm = false)
|
23
|
+
pkg_names.each do |pkg_name|
|
24
|
+
if (@pacman.exist?(pkg_name))
|
25
|
+
@pacman.download(pkg_name, noconfirm)
|
26
|
+
system(
|
27
|
+
"cp /var/cache/pacman/pkg/#{pkg_name}-[0-9]*.xz ."
|
28
|
+
)
|
29
|
+
else
|
30
|
+
package = @aur.info(pkg_name)
|
31
|
+
@aur.download(package)
|
32
|
+
end
|
33
|
+
end
|
17
34
|
end
|
18
35
|
|
19
36
|
def self.hilight?
|
@@ -57,7 +74,10 @@ class RuAUR
|
|
57
74
|
unlock
|
58
75
|
end
|
59
76
|
|
60
|
-
def query(pkg_names,
|
77
|
+
def query(pkg_names, options = [])
|
78
|
+
info = options.include?(RuAUR::Options::Info)
|
79
|
+
owns = options.include?(RuAUR::Options::Owns)
|
80
|
+
|
61
81
|
if (owns)
|
62
82
|
puts @pacman.query_owns(pkg_names.join(" "))
|
63
83
|
else
|
@@ -78,8 +98,9 @@ class RuAUR
|
|
78
98
|
end
|
79
99
|
end
|
80
100
|
|
81
|
-
def remove(pkg_names,
|
101
|
+
def remove(pkg_names, options = [])
|
82
102
|
check_and_lock
|
103
|
+
nosave = options.include?(RuAUR::Options::NoSave)
|
83
104
|
@pacman.remove(pkg_names, nosave)
|
84
105
|
ensure
|
85
106
|
unlock
|
@@ -95,6 +116,30 @@ class RuAUR
|
|
95
116
|
return names
|
96
117
|
end
|
97
118
|
|
119
|
+
def sync(packages = [], options = [])
|
120
|
+
if (options.include?(RuAUR::Options::Clean))
|
121
|
+
clean(options.include?(RuAUR::Options::NoConfirm))
|
122
|
+
elsif (options.include?(RuAUR::Options::Download))
|
123
|
+
download(
|
124
|
+
packages,
|
125
|
+
options.include?(RuAUR::Options::NoConfirm)
|
126
|
+
)
|
127
|
+
elsif (options.include?(RuAUR::Options::Search))
|
128
|
+
return search(
|
129
|
+
packages.join(" "),
|
130
|
+
options.include?(RuAUR::Options::NamesOnly)
|
131
|
+
)
|
132
|
+
elsif (options.include?(RuAUR::Options::Upgrade))
|
133
|
+
upgrade(options.include?(RuAUR::Options::NoConfirm))
|
134
|
+
else
|
135
|
+
install(
|
136
|
+
packages,
|
137
|
+
options.include?(RuAUR::Options::NoConfirm)
|
138
|
+
)
|
139
|
+
end
|
140
|
+
return nil
|
141
|
+
end
|
142
|
+
|
98
143
|
def unlock
|
99
144
|
FileUtils.rm_f(@lock)
|
100
145
|
end
|
@@ -107,9 +152,66 @@ class RuAUR
|
|
107
152
|
ensure
|
108
153
|
unlock
|
109
154
|
end
|
155
|
+
|
156
|
+
def self.validate_options(options)
|
157
|
+
valid = {
|
158
|
+
RuAUR::Operation::Query => {
|
159
|
+
"valid" => [
|
160
|
+
RuAUR::Options::Info,
|
161
|
+
RuAUR::Options::Owns
|
162
|
+
]
|
163
|
+
},
|
164
|
+
RuAUR::Operation::Remove => {
|
165
|
+
"valid" => [
|
166
|
+
RuAUR::Options::NoSave
|
167
|
+
]
|
168
|
+
},
|
169
|
+
RuAUR::Operation::Sync => {
|
170
|
+
"valid" => [
|
171
|
+
RuAUR::Options::Clean,
|
172
|
+
RuAUR::Options::Download,
|
173
|
+
RuAUR::Options::NamesOnly,
|
174
|
+
RuAUR::Options::NoConfirm,
|
175
|
+
RuAUR::Options::Search,
|
176
|
+
RuAUR::Options::Upgrade
|
177
|
+
],
|
178
|
+
RuAUR::Options::Clean => [
|
179
|
+
RuAUR::Options::Clean,
|
180
|
+
RuAUR::Options::NoConfirm
|
181
|
+
],
|
182
|
+
RuAUR::Options::Download => [
|
183
|
+
RuAUR::Options::Download,
|
184
|
+
RuAUR::Options::NoConfirm
|
185
|
+
],
|
186
|
+
RuAUR::Options::Search => [
|
187
|
+
RuAUR::Options::NamesOnly,
|
188
|
+
RuAUR::Options::NoConfirm,
|
189
|
+
RuAUR::Options::Search
|
190
|
+
],
|
191
|
+
RuAUR::Options::Upgrade => [
|
192
|
+
RuAUR::Options::NoConfirm,
|
193
|
+
RuAUR::Options::Upgrade
|
194
|
+
]
|
195
|
+
}
|
196
|
+
}
|
197
|
+
|
198
|
+
return false if (valid[options["operation"]].nil?)
|
199
|
+
|
200
|
+
valid[options["operation"]].each do |k, v|
|
201
|
+
if ((k == "valid") || options["options"].include?(k))
|
202
|
+
options["options"].each do |o|
|
203
|
+
return false if (!v.include?(o))
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
return true
|
209
|
+
end
|
110
210
|
end
|
111
211
|
|
112
212
|
require "ruaur/aur"
|
113
213
|
require "ruaur/error"
|
214
|
+
require "ruaur/operation"
|
215
|
+
require "ruaur/options"
|
114
216
|
require "ruaur/package"
|
115
217
|
require "ruaur/pacman"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruaur
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miles Whittaker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -130,6 +130,8 @@ files:
|
|
130
130
|
- lib/ruaur/error/package_not_found_error.rb
|
131
131
|
- lib/ruaur/error/package_not_installed_error.rb
|
132
132
|
- lib/ruaur/error/ruaur_already_running_error.rb
|
133
|
+
- lib/ruaur/operation.rb
|
134
|
+
- lib/ruaur/options.rb
|
133
135
|
- lib/ruaur/package.rb
|
134
136
|
- lib/ruaur/pacman.rb
|
135
137
|
homepage: https://mjwhitta.github.io/ruaur
|