upm 0.1.2 → 0.1.3

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
  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