ruaur 0.1.9 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48fbbbaa347a8cc01dc8841a5fc5524f94490c93
4
- data.tar.gz: e3b9066133414ef961cc8dbfed152fc47567b53e
3
+ metadata.gz: 7de5353a50adba1ef0574369361580209949f41e
4
+ data.tar.gz: 6766347de08b199a415d44f4581fba3ab2d17f97
5
5
  SHA512:
6
- metadata.gz: 271df363ba60ab12beb9b1f032ea34d456ba290c53a125032e50dff53d7422615a9baa8811768c3a263251548b0e58c1b368d38f6093a451d09504db24250e4b
7
- data.tar.gz: 876728bdd812e544156d1fb4328ded85e9582218c1c53f331fdfe12814692b607725226faaa48507693234f65699f77fa201c3e0ad04e0a7f1895c5526c676f7
6
+ metadata.gz: 12f4fa538e4fc254d9df1c8cb8e12b942fe3d85e041550631a0e3ea7f0def4f33f615b3431878ee06aa2e5b30747dbacb20a4da0bf0e28133e46e2aa80f56e44
7
+ data.tar.gz: b4021b5a7c25f20b58fdb2a505c1666df76d7f97adef509a0b586750fac27bb150f3b63d269e5f2a5109336fcecf187094719702fe2f98cbb8d119b713d04882
data/bin/ruaur CHANGED
@@ -22,6 +22,7 @@ end
22
22
  def parse(args)
23
23
  options = Hash.new
24
24
  options["operation"] = nil
25
+ options["verbose"] = false
25
26
 
26
27
  # Sync options
27
28
  options["clean"] = false
@@ -48,6 +49,14 @@ def parse(args)
48
49
  String.disable_colorization = true
49
50
  end
50
51
 
52
+ opts.on(
53
+ "-v",
54
+ "--verbose",
55
+ "Show backtrace when error occurs"
56
+ ) do
57
+ options["verbose"] = true
58
+ end
59
+
51
60
  opts.on("", "OPERATIONS")
52
61
 
53
62
  opts.on("-R", "--remove", "Remove packages") do
@@ -66,7 +75,7 @@ def parse(args)
66
75
  options["operation"] = Operation::SYNC
67
76
  end
68
77
 
69
- opts.on("", "SYNC OPTIONS")
78
+ opts.on("", "SYNC_OPTIONS")
70
79
 
71
80
  opts.on("-c", "--clean", "Remove packages from the cache") do
72
81
  options["clean"] = true
@@ -98,7 +107,7 @@ def parse(args)
98
107
  options["upgrade"] = true
99
108
  end
100
109
 
101
- opts.on("", "REMOVE OPTIONS")
110
+ opts.on("", "REMOVE_OPTIONS")
102
111
 
103
112
  opts.on("-n", "--nosave", "Completely remove package") do
104
113
  options["nosave"] = true
@@ -176,7 +185,7 @@ end
176
185
  options = parse(ARGV)
177
186
 
178
187
  begin
179
- ruaur = RuAUR.new
188
+ ruaur = RuAUR.new(!String.disable_colorization)
180
189
 
181
190
  case options["operation"]
182
191
  when Operation::REMOVE
@@ -195,11 +204,30 @@ begin
195
204
  ruaur.install(options["packages"], options["noconfirm"])
196
205
  end
197
206
  end
198
- exit RuAURExit::GOOD
207
+ rescue Interrupt
208
+ # ^C
209
+ # Exit gracefully
210
+ rescue Errno::EPIPE
211
+ # Do nothing. This can happen if piping to another program such as
212
+ # less. Usually if less is closed before we're done with STDOUT.
199
213
  rescue RuAUR::Error => e
200
- puts e.message.red
214
+ puts e.message
215
+ exit RuAURExit::EXCEPTION
216
+ rescue Exception => e
217
+ $stderr.puts "Oops! Looks like an error has occured! If the " \
218
+ "error persists, file a bug at:".word_wrap
219
+ $stderr.puts
220
+ $stderr.puts " https://gitlab.com/mjwhitta/ruaur/issues"
221
+ $stderr.puts
222
+ $stderr.puts "Maybe the message below will help. If not, you " \
223
+ "can use the --verbose flag to get a backtrace.".word_wrap
224
+
225
+ $stderr.puts e.message.white.on_red
226
+ if (options["verbose"])
227
+ e.backtrace.each do |line|
228
+ $stderr.puts line.light_yellow
229
+ end
230
+ end
201
231
  exit RuAURExit::EXCEPTION
202
- rescue Interrupt => e
203
- # ^C
204
- puts
205
232
  end
233
+ exit RuAURExit::GOOD
data/lib/ruaur/aur.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "archive/tar/minitar"
2
+ require "colorize"
2
3
  require "fileutils"
3
4
  require "io/wait"
4
5
  require "json"
@@ -8,14 +9,38 @@ require "zlib"
8
9
 
9
10
  class RuAUR::AUR
10
11
  def clean
11
- puts "Cleaning AUR cache...".white
12
+ puts colorize_status("Cleaning AUR cache...")
12
13
  Dir.chdir(@cache) do
13
14
  FileUtils.rm_rf(Dir["*"])
14
15
  end
15
16
  end
16
17
 
18
+ def colorize_dependency(dependency)
19
+ return dependency if (!@colorize)
20
+ return dependency.light_magenta
21
+ end
22
+ private :colorize_dependency
23
+
24
+ def colorize_installed(installed)
25
+ return installed if (!@colorize)
26
+ return installed.light_yellow
27
+ end
28
+ private :colorize_installed
29
+
30
+ def colorize_status(status)
31
+ return status if (!@colorize)
32
+ return status.light_white
33
+ end
34
+ private :colorize_status
35
+
36
+ def colorize_upgrade(old, new)
37
+ return "#{old} -> #{new}" if (!@colorize)
38
+ return "#{old.light_red} -> #{new.light_green}"
39
+ end
40
+ private :colorize_upgrade
41
+
17
42
  def compile(package)
18
- puts "Compiling #{package.name}...".white
43
+ puts colorize_status("Compiling #{package.name}...")
19
44
  if (Process.uid == 0)
20
45
  system("chown -R nobody:nobody .")
21
46
  system("su -s /bin/sh nobody -c \"makepkg -sr\"")
@@ -35,7 +60,7 @@ class RuAUR::AUR
35
60
  def download(package)
36
61
  FileUtils.rm_f(Dir["#{package.name}.tar.gz*"])
37
62
 
38
- puts "Downloading #{package.name}...".white
63
+ puts colorize_status("Downloading #{package.name}...")
39
64
  tarball(package.name, package.url, "#{package.name}.tar.gz")
40
65
 
41
66
  tgz = Pathname.new("#{package.name}.tar.gz").expand_path
@@ -83,7 +108,7 @@ class RuAUR::AUR
83
108
  def extract(package)
84
109
  FileUtils.rm_rf(package.name)
85
110
 
86
- puts "Extracting #{package.name}...".white
111
+ puts colorize_status("Extracting #{package.name}...")
87
112
  File.open("#{package.name}.tar.gz", "rb") do |tgz|
88
113
  tar = Zlib::GzipReader.new(tgz)
89
114
  Archive::Tar::Minitar.unpack(tar, ".")
@@ -98,7 +123,7 @@ class RuAUR::AUR
98
123
  private :extract
99
124
 
100
125
  def find_upgrades
101
- puts "Checking for AUR updates...".white
126
+ puts colorize_status("Checking for AUR updates...")
102
127
 
103
128
  upgrades = Hash.new
104
129
  multiinfo(@installed.keys).each do |package|
@@ -128,12 +153,18 @@ class RuAUR::AUR
128
153
  end
129
154
 
130
155
  return nil if (body["results"].empty?)
131
- return RuAUR::Package.new(body["results"])
156
+ return RuAUR::Package.new(body["results"], "aur", @colorize)
132
157
  end
133
158
 
134
- def initialize(pacman, cache = "/tmp/ruaur-#{ENV["USER"]}")
159
+ def initialize(
160
+ pacman,
161
+ cache = "/tmp/ruaur-#{ENV["USER"]}",
162
+ colorize = false
163
+ )
164
+ cache = "/tmp/ruaur-#{ENV["USER"]}" if (cache.nil?)
135
165
  @cache = Pathname.new(cache).expand_path
136
166
  FileUtils.mkdir_p(@cache)
167
+ @colorize = colorize
137
168
  @installed = pacman.query_aur
138
169
  @pacman = pacman
139
170
  @rpc_url = "https://aur.archlinux.org/rpc.php"
@@ -150,7 +181,7 @@ class RuAUR::AUR
150
181
  @installed.include?(pkg_name) &&
151
182
  !package.newer?(@installed[pkg_name])
152
183
  )
153
- puts "Already installed: #{pkg_name}".yellow
184
+ puts colorize_installed("Already installed: #{pkg_name}")
154
185
  return
155
186
  end
156
187
 
@@ -181,7 +212,9 @@ class RuAUR::AUR
181
212
  next if (dep.start_with?("$"))
182
213
 
183
214
  if (!@installed.has_key?(dep))
184
- puts "Installing dependency: #{dep}".magenta
215
+ puts colorize_dependency(
216
+ "Installing dependency: #{dep}"
217
+ )
185
218
  if (@pacman.exist?(dep))
186
219
  @pacman.install(dep, noconfirm)
187
220
  else
@@ -206,7 +239,7 @@ class RuAUR::AUR
206
239
  end
207
240
 
208
241
  body["results"].each do |result|
209
- results.push(RuAUR::Package.new(result))
242
+ results.push(RuAUR::Package.new(result, "aur", @colorize))
210
243
  end
211
244
  return results.sort
212
245
  end
@@ -223,7 +256,7 @@ class RuAUR::AUR
223
256
  end
224
257
 
225
258
  body["results"].each do |result|
226
- results.push(RuAUR::Package.new(result))
259
+ results.push(RuAUR::Package.new(result, "aur", @colorize))
227
260
  end
228
261
 
229
262
  results.each do |package|
@@ -260,8 +293,8 @@ class RuAUR::AUR
260
293
  find_upgrades.each do |pkg_name, versions|
261
294
  old, new = versions
262
295
 
263
- puts "Upgrading #{pkg_name}...".white
264
- puts "#{old.red} -> #{new.green}"
296
+ puts colorize_status("Upgrading #{pkg_name}...")
297
+ puts colorize_upgrade(old, new)
265
298
  install(pkg_name, noconfirm)
266
299
  end
267
300
  end
data/lib/ruaur/package.rb CHANGED
@@ -24,7 +24,41 @@ class RuAUR::Package
24
24
  return (self.name.downcase <=> other.name.downcase)
25
25
  end
26
26
 
27
- def initialize(json, repo = "aur")
27
+ def colorize_header(repo, name, installed, version, votes)
28
+ header = Array.new
29
+
30
+ if (!@colorize)
31
+ header.push("#{repo}/#{name}")
32
+ if (installed && newer?(installed))
33
+ header.push(installed)
34
+ header.push("->")
35
+ end
36
+ header.push(version)
37
+ header.push(votes) if (votes)
38
+ header.push("[installed]") if (installed)
39
+ else
40
+ header.push(
41
+ [
42
+ repo.light_blue,
43
+ "/".light_blue,
44
+ name.light_cyan
45
+ ].join
46
+ )
47
+ if (installed && newer?(installed))
48
+ header.push(installed.light_red)
49
+ header.push("->")
50
+ end
51
+ header.push(version.light_green)
52
+ header.push(votes.light_white) if (votes)
53
+ header.push("[installed]".light_magenta) if (installed)
54
+ end
55
+
56
+ return header.join(" ")
57
+ end
58
+ private :colorize_header
59
+
60
+ def initialize(json, repo = "aur", colorize = false)
61
+ @colorize = colorize
28
62
  @description = json["Description"]
29
63
  @description ||= ""
30
64
  @installed = nil
@@ -76,21 +110,19 @@ class RuAUR::Package
76
110
 
77
111
  def to_s
78
112
  out = Array.new
79
- header = Array.new
80
-
81
- header.push("#{@repo.blue}#{"/".blue}#{@name.cyan}")
82
- if (@installed && newer?(@installed))
83
- header.push(@installed.red)
84
- header.push("->")
85
- end
86
- header.push(@version.green)
87
- header.push(@votes.white) if (@votes)
88
- header.push("[installed]".magenta) if (@installed)
89
- out.push(header.join(" "))
113
+ out.push(
114
+ colorize_header(
115
+ @repo,
116
+ @name,
117
+ @installed,
118
+ @version,
119
+ @votes
120
+ )
121
+ )
90
122
 
91
123
  # Wrap at default minus 4 spaces
92
- @description.word_wrap(76).each_line do |line|
93
- out.push(" #{line.rstrip}")
124
+ @description.word_wrap(76).split("\n").each do |line|
125
+ out.push(" #{line.strip}")
94
126
  end
95
127
 
96
128
  return out.join("\n")
data/lib/ruaur/pacman.rb CHANGED
@@ -1,32 +1,54 @@
1
+ require "colorize"
2
+ require "pathname"
3
+
1
4
  class RuAUR::Pacman
2
5
  def clean(noconfirm = false)
3
- puts "Cleaning pacman cache...".white
4
- system("sudo #{@pac_clr} -Sc") if (!noconfirm)
5
- system("sudo #{@pac_clr} -Sc --noconfirm") if (noconfirm)
6
+ puts colorize_status("Cleaning pacman cache...")
7
+ system("sudo #{@pac_cmd} -Sc") if (!noconfirm)
8
+ system("sudo #{@pac_cmd} -Sc --noconfirm") if (noconfirm)
9
+ end
10
+
11
+ def colorize_installed(installed)
12
+ return installed if (!@colorize)
13
+ return installed.light_yellow
6
14
  end
15
+ private :colorize_installed
16
+
17
+ def colorize_status(status)
18
+ return status if (!@colorize)
19
+ return status.light_white
20
+ end
21
+ private :colorize_status
7
22
 
8
23
  def exist?(pkg_name)
9
- return !%x(#{@pac_noclr} -Ss "^#{pkg_name}$").empty?
24
+ return !%x(#{@pac_nocolor} -Ss "^#{pkg_name}$").empty?
10
25
  end
11
26
 
12
- def initialize
13
- @pac_noclr = "pacman --color=never"
14
- @pac_clr = "pacman --color=always"
27
+ def initialize(colorize = false)
28
+ if (ScoobyDoo.where_are_you("pacman").nil?)
29
+ raise RuAUR::Error::MissingDependencyError.new("pacman")
30
+ end
31
+
32
+ @colorize = colorize
33
+ @pac_nocolor = "pacman --color=never"
34
+ @pac_color = "pacman --color=always"
35
+ @pac_cmd = @pac_color
36
+ @pac_cmd = @pac_nocolor if (!@colorize)
15
37
  @installed = query
16
38
  end
17
39
 
18
40
  def install(pkg_name, noconfirm = false)
19
41
  if (@installed.include?(pkg_name))
20
- puts "Already installed: #{pkg_name}".yellow
42
+ puts colorize_installed("Already installed: #{pkg_name}")
21
43
  return
22
44
  end
23
45
 
24
- puts "Installing #{pkg_name}...".white
46
+ puts colorize_status("Installing #{pkg_name}...")
25
47
  if (!noconfirm)
26
- system("sudo #{@pac_clr} -S #{pkg_name} --needed")
48
+ system("sudo #{@pac_cmd} -S #{pkg_name} --needed")
27
49
  else
28
50
  system(
29
- "sudo #{@pac_clr} -S #{pkg_name} --needed --noconfirm"
51
+ "sudo #{@pac_cmd} -S #{pkg_name} --needed --noconfirm"
30
52
  )
31
53
  end
32
54
 
@@ -34,18 +56,18 @@ class RuAUR::Pacman
34
56
  end
35
57
 
36
58
  def install_local(pkgs, noconfirm = false)
37
- puts "Installing compiled packages...".white
59
+ puts colorize_status("Installing compiled packages...")
38
60
  xzs = pkgs.join(" ")
39
61
  if (!noconfirm)
40
- system("sudo #{@pac_clr} -U #{xzs}")
62
+ system("sudo #{@pac_cmd} -U #{xzs}")
41
63
  else
42
- system("sudo #{@pac_clr} -U #{xzs} --noconfirm")
64
+ system("sudo #{@pac_cmd} -U #{xzs} --noconfirm")
43
65
  end
44
66
  end
45
67
 
46
68
  def query(pkg_name = "")
47
69
  results = Hash.new
48
- %x(#{@pac_noclr} -Q #{pkg_name}).split("\n").map do |line|
70
+ %x(#{@pac_nocolor} -Q #{pkg_name}).split("\n").each do |line|
49
71
  line = line.split
50
72
  results[line[0]] = line[1]
51
73
  end
@@ -58,10 +80,12 @@ class RuAUR::Pacman
58
80
  ).expand_path
59
81
 
60
82
  results = Hash.new
61
- %x(#{@pac_noclr} -Qm #{pkg_name}).split("\n").delete_if do |p|
83
+ %x(
84
+ #{@pac_nocolor} -Qm #{pkg_name}
85
+ ).split("\n").delete_if do |p|
62
86
  # Skip packages in community
63
87
  Dir["#{community}/#{p.split.join("-")}"].any?
64
- end.map do |line|
88
+ end.each do |line|
65
89
  line = line.split
66
90
  results[line[0]] = line[1]
67
91
  end
@@ -69,11 +93,11 @@ class RuAUR::Pacman
69
93
  end
70
94
 
71
95
  def remove(pkg_names, nosave = false)
72
- puts "Removing #{pkg_names.join(" ")}...".white
96
+ puts colorize_status("Removing #{pkg_names.join(" ")}...")
73
97
  if (!nosave)
74
- system("sudo #{@pac_clr} -R #{pkg_names.join(" ")}")
98
+ system("sudo #{@pac_cmd} -R #{pkg_names.join(" ")}")
75
99
  else
76
- system("sudo #{@pac_clr} -Rn #{pkg_names.join(" ")}")
100
+ system("sudo #{@pac_cmd} -Rn #{pkg_names.join(" ")}")
77
101
  end
78
102
  end
79
103
 
@@ -81,7 +105,9 @@ class RuAUR::Pacman
81
105
  results = Array.new
82
106
  return results if (pkg_names.nil? || pkg_names.empty?)
83
107
 
84
- %x(#{@pac_noclr} -Ss #{pkg_names}).each_line do |line|
108
+ %x(
109
+ #{@pac_nocolor} -Ss #{pkg_names}
110
+ ).split("\n").each do |line|
85
111
  reg = "^([^\/ ]+)\/([^ ]+) ([^ ]+)( .*)?$"
86
112
  match = line.match(/#{reg}/)
87
113
  if (match)
@@ -101,7 +127,8 @@ class RuAUR::Pacman
101
127
  "URLPath" => nil,
102
128
  "Version" => version
103
129
  },
104
- repo
130
+ repo,
131
+ @colorize
105
132
  )
106
133
  )
107
134
  if (trailing.include?("[installed]"))
@@ -116,8 +143,8 @@ class RuAUR::Pacman
116
143
  end
117
144
 
118
145
  def upgrade(noconfirm = false)
119
- puts "Updating...".white
120
- system("sudo #{@pac_clr} -Syyu") if (!noconfirm)
121
- system("sudo #{@pac_clr} -Syyu --noconfirm") if (noconfirm)
146
+ puts colorize_status("Updating...")
147
+ system("sudo #{@pac_cmd} -Syyu") if (!noconfirm)
148
+ system("sudo #{@pac_cmd} -Syyu --noconfirm") if (noconfirm)
122
149
  end
123
150
  end
data/lib/ruaur.rb CHANGED
@@ -16,7 +16,7 @@ class RuAUR
16
16
  @aur.clean
17
17
  end
18
18
 
19
- def initialize
19
+ def initialize(colorize = false)
20
20
  [
21
21
  "makepkg",
22
22
  "pacman",
@@ -28,8 +28,9 @@ class RuAUR
28
28
  end
29
29
  end
30
30
 
31
- @pacman = RuAUR::Pacman.new
32
- @aur = RuAUR::AUR.new(@pacman)
31
+ @colorize = colorize
32
+ @pacman = RuAUR::Pacman.new(@colorize)
33
+ @aur = RuAUR::AUR.new(@pacman, nil, @colorize)
33
34
  @lock = Pathname.new("/tmp/ruaur.lock").expand_path
34
35
  end
35
36
 
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.1.9
4
+ version: 0.2.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: 2016-02-21 00:00:00.000000000 Z
11
+ date: 2016-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: archive-tar-minitar
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  version: '0'
134
134
  requirements: []
135
135
  rubyforge_project:
136
- rubygems_version: 2.4.5.1
136
+ rubygems_version: 2.5.1
137
137
  signing_key:
138
138
  specification_version: 4
139
139
  summary: Can search and install packages for Arch Linux