upm 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c755b3ead00bb1808a980d25cf2a7eeaf9e21b0061749aa06b6be6c40eecd4f
4
- data.tar.gz: f7a18d62933dae46ad1e005bf01478c13c198e500332bfe39ffb077f1c7ec977
3
+ metadata.gz: 34ab54fc955906c85199e43735991d297f7db20e2f78a53c49ae22ce08ddd30f
4
+ data.tar.gz: 123c3e08566179a36f32ed0cb4e304a72eb75f785ce128bd1b8959c3d7ca78c2
5
5
  SHA512:
6
- metadata.gz: dab6d3ee5f5a2969f566ceda7414b7e9821cd9084123894bb3331949fed19ada5f4e9d68802b4c057db11422c56cc62740007033a1a4b6870b08e911a8033002
7
- data.tar.gz: b7150c73d16573cc37626dfa40a6639c824ab6af1f1392b580dc6db7885631902bb5c3ca096b09a27afdc3579e1ab153b30e5f57e1438ddaaf43017fa4a502a2
6
+ metadata.gz: 723b556018ce78091e5a9bf6b6132a3a730707b40bbc6db98377441e0c7ef7cfd4e164a841b750379805a136c4477e5059377af81da5c3402edf7290d31f11c1
7
+ data.tar.gz: ea06d30b45f4624637cd515dc400d909462b7022e92bf961c7191fda601f272a80bdfa1589370d3118a1ca5f039e879773be25b964cfef0d07182225e78247b9
data/.gitignore CHANGED
@@ -1 +1 @@
1
- *.gem
1
+ pkg/
data/Rakefile CHANGED
@@ -1,16 +1,20 @@
1
- gem_version = File.read("VERSION").strip
2
1
  pkgname = "upm"
2
+ gem_version = File.read("VERSION").strip
3
+
4
+ gemfile = "#{pkgname}-#{gem_version}.gem"
3
5
 
4
6
  task :build do
5
7
  system "gem build .gemspec"
8
+ system "mkdir pkg/" unless File.directory? "pkg"
9
+ system "mv #{gemfile} pkg/"
6
10
  end
7
11
 
8
12
  task :release => :build do
9
- system "gem push #{pkgname}-#{gem_version}.gem"
13
+ system "gem push pkg/#{gemfile}"
10
14
  end
11
15
 
12
16
  task :gem => :build
13
17
 
14
18
  task :install => :build do
15
- system "gem install #{pkgname}-#{gem_version}.gem"
19
+ system "gem install pkg/#{gemfile}"
16
20
  end
data/TODO.md CHANGED
@@ -30,11 +30,14 @@ Related tool: intoli/exodus
30
30
 
31
31
  Use fzf for "list" output (or other commands that require selecting, like "remove")
32
32
 
33
- ## Proper ARGV parser
33
+ ## Commandline argument parser
34
34
 
35
- * Something better than "command, *args = ARGV" (with "--help" available, at the very least.)
35
+ * Add options to commands:
36
+ * upm upgrade --download-only
37
+ * upm install --help
38
+ * upm help install
36
39
 
37
- ## Streaming pipes
40
+ ## Streaming pipes with colours
38
41
 
39
42
  * Make the `run` command able to grep the output while streaming the results to the screen.
40
43
  * Make run pretend to be a tty, so I don't need `--color=always`.
@@ -78,4 +81,6 @@ Why not!
78
81
 
79
82
  Do a ping test on available mirrors, and use fzf to select.
80
83
 
84
+ ## Interrupt catcher
81
85
 
86
+ Don't print backtrace when ^C is pressed.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
data/lib/upm/core_ext.rb CHANGED
@@ -4,6 +4,25 @@ class DateTime
4
4
  def to_i; to_time.to_i; end
5
5
  end
6
6
 
7
+ class File
8
+ def self.which(bin)
9
+ ENV["PATH"].split(":").each do |dir|
10
+ full_path = File.join(dir, bin)
11
+ return full_path if File.exists? full_path
12
+ end
13
+ nil
14
+ end
15
+
16
+ def self.which_is_best?(*bins)
17
+ bins.flatten.each do |bin|
18
+ if location = which(bin)
19
+ return location
20
+ end
21
+ end
22
+ nil
23
+ end
24
+ end
25
+
7
26
  module Enumerable
8
27
  #
9
28
  # Split this enumerable into chunks, given some boundary condition. (Returns an array of arrays.)
data/lib/upm/tool.rb CHANGED
@@ -39,21 +39,26 @@ module UPM
39
39
  }
40
40
 
41
41
  @@tools = {}
42
+ def self.tools; @@tools; end
42
43
 
43
44
  def self.register_tools!
44
45
  Dir["#{__dir__}/tools/*.rb"].each { |lib| require_relative(lib) }
45
46
  end
46
47
 
47
48
  def self.os_release
48
- @os_release ||= open("/etc/os-release") do |io|
49
- io.read.scan(/^(\w+)="?(.+?)"?$/)
50
- end.to_h
49
+ @os_release ||= begin
50
+ open("/etc/os-release") do |io|
51
+ io.read.scan(/^(\w+)="?(.+?)"?$/)
52
+ end.to_h
53
+ rescue Errno::ENOENT
54
+ {}
55
+ end
51
56
  end
52
57
 
53
58
  def self.current_os_names
54
59
  # ID=ubuntu
55
60
  # ID_LIKE=debian
56
- os_release.values_at("ID", "ID_LIKE")
61
+ os_release.values_at("ID", "ID_LIKE").compact
57
62
  end
58
63
 
59
64
  def self.nice_os_name
@@ -62,13 +67,16 @@ module UPM
62
67
 
63
68
  def self.for_os(os_names=nil)
64
69
  os_names = os_names ? [os_names].flatten : current_os_names
65
- @@tools.find { |name, tool| os_names.any? { |name| tool.os.include? name } }.last
66
- end
67
70
 
68
- def self.tools
69
- @@tools
71
+ if os_names.any?
72
+ @@tools.find { |name, tool| os_names.any? { |name| tool.os.include? name } }.last
73
+ else
74
+ @@tools.find { |name, tool| File.which(tool.identifying_binary) }.last
75
+ end
70
76
  end
71
77
 
78
+ ###################################################################
79
+
72
80
  def initialize(name, &block)
73
81
  @name = name
74
82
  instance_eval(&block)
@@ -85,7 +93,10 @@ module UPM
85
93
  end
86
94
 
87
95
  def help
88
- puts " Detected OS: #{Tool.nice_os_name}"
96
+ if osname = Tool.nice_os_name
97
+ puts " Detected OS: #{osname}"
98
+ end
99
+
89
100
  puts "Package manager: #{@name}"
90
101
  puts
91
102
  puts "Available commands:"
@@ -100,23 +111,16 @@ module UPM
100
111
  end
101
112
  end
102
113
 
103
- def print_files(*paths, include: nil, exclude: nil)
104
- lesspipe do |less|
105
- paths.each do |path|
106
- less.puts "<8>=== <11>#{path} <8>========".colorize
107
- open(path) do |io|
108
- enum = io.each_line
109
- enum = enum.grep(include) if include
110
- enum = enum.reject { |line| line[exclude] } if exclude
111
- enum.each { |line| less.puts line }
112
- end
113
- less.puts
114
- end
114
+ ## DSL methods
115
+
116
+ def identifying_binary(id_bin=nil)
117
+ if id_bin
118
+ @id_bin = id_bin
119
+ else
120
+ @id_bin || @name
115
121
  end
116
122
  end
117
123
 
118
- ## DSL methods
119
-
120
124
  def prefix(name)
121
125
  @prefix = name
122
126
  end
@@ -174,6 +178,21 @@ module UPM
174
178
  end
175
179
  end
176
180
 
181
+ def print_files(*paths, include: nil, exclude: nil)
182
+ lesspipe do |less|
183
+ paths.each do |path|
184
+ less.puts "<8>=== <11>#{path} <8>========".colorize
185
+ open(path) do |io|
186
+ enum = io.each_line
187
+ enum = enum.grep(include) if include
188
+ enum = enum.reject { |line| line[exclude] } if exclude
189
+ enum.each { |line| less.puts line }
190
+ end
191
+ less.puts
192
+ end
193
+ end
194
+ end
195
+
177
196
  end # class Tool
178
197
 
179
198
  end # module UPM
@@ -2,11 +2,13 @@ UPM::Tool.new "xbps" do
2
2
 
3
3
  os "void"
4
4
 
5
+ identifying_binary "xbps-install"
6
+
5
7
  command "install", "xbps-install", root: true
6
- command "update", "xbps-install -S", root: true
8
+ command "update", "xbps-install -S", root: true
7
9
  command "upgrade", "xbps-install -Su", root: true
8
- command "files", "xbps-query -f"
9
- command "search", "xbps-query --regex -Rs"
10
+ command "files", "xbps-query -f"
11
+ command "search", "xbps-query --regex -Rs"
10
12
  # command "info", ""
11
13
 
12
14
  command "list" do |args|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: upm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - epitron