verbose-shell 0.2.0 → 0.3.0

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: ff19a00a675872b8e881837f8044a415af141f2bc52c8aab4e93d9fc3c946b22
4
- data.tar.gz: ad1a145ff01cedc6b96fe8fe5a2e17196b5b8db036d4a21534847f669b8a41ea
3
+ metadata.gz: eab068b31159003750b1d5c4fe63ec4ee4175405a8e68a380b16a91c1f8f7461
4
+ data.tar.gz: 8a2f37566449ae10c823d478e01e3209fe7b1fca5368b5c9ba33433d0f6890f9
5
5
  SHA512:
6
- metadata.gz: c9e6af5b9116ad179a38536827d66751d079a85c38dba74214b539d21565e0d0ee06cd9fa502551b4aae6b8ac3d3269750c35a5db507f2344706ab39bd090034
7
- data.tar.gz: 67238b499ce73835447ceaf696ac53b53f6a4feeca4ceaae5f474abbff3a6977de8fb36e6daf9924a07f34d82e676a497eaaa6f9f014d8add142180fca621f74
6
+ metadata.gz: 836dde2994738abc1d1e8a4b0dfa2e2269404485bcc860adfc90955a8065f04957c34c5a728a56afca96fd051a853c54b058a6ac7a77f8a8660586d1190888a6
7
+ data.tar.gz: f8c6bf683eb9a5938e6c9832aefd96ccfc5399870bc21836aa36e2e6ead05fbf48f889f9ad10cf7905c15a27bbf164e39e6ce139c8eba5e0dd740507ac9d3773
data/Rakefile CHANGED
@@ -1,2 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
- task :default => :spec
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
@@ -1,3 +1,3 @@
1
- module VerboseShell
2
- VERSION = "0.2.0"
1
+ class VerboseShell
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/verbose-shell.rb CHANGED
@@ -4,6 +4,21 @@ require 'pastel'
4
4
 
5
5
  class VerboseShell
6
6
  @verbose = 0
7
+
8
+ class ShellError < RuntimeError
9
+ attr_accessor :output, :cmd, :exit_code
10
+ def initialize(output, cmd, exit_code)
11
+ @output = output
12
+ @cmd = cmd
13
+ @exit_code = exit_code
14
+ end
15
+
16
+ def message
17
+ "\n\n"+(['']*20+@output.split("\n"))[-20..-1].join("\n").lstrip + "\n"+Pastel.new.bright_white.on_red("💩 Command \"#{@cmd[0]}\" returned #{@exit_code}")
18
+ end
19
+ def to_s; message; end
20
+ end
21
+
7
22
  class << self
8
23
  attr_accessor :verbose
9
24
  def verbose=(val); @verbose = val == true ? 1 : (val || 0); end
@@ -13,20 +28,6 @@ class VerboseShell
13
28
  puts "+ "+args.map{|a| a =~ /\s/ ? '"'+a+'"' : a}.join(' ') # TODO: Fix quoting so it's more shell-like
14
29
  end
15
30
 
16
- class ShellError < RuntimeError
17
- attr_accessor :output, :cmd, :exit_code
18
- def initialize(output, cmd, exit_code)
19
- @output = output
20
- @cmd = cmd
21
- @exit_code = exit_code
22
- end
23
-
24
- def message
25
- "\n\n"+(['']*20+@output.split("\n"))[-20..-1].join("\n").lstrip + "\n"+Pastel.new.bright_white.on_red("💩 Command \"#{@cmd[0]}\" returned #{@exit_code}")
26
- end
27
- def to_s; message; end
28
- end
29
-
30
31
  def system(*args)
31
32
  system_trace *args
32
33
  args, opts = args.last.is_a?(Hash) ? [args[0..-2], args.last.dup] : [args, {}]
@@ -38,14 +39,38 @@ class VerboseShell
38
39
  end
39
40
  end
40
41
 
41
- def system_or_true(*args)
42
+ def try_system(*args)
42
43
  system *args
43
- rescue
44
+ rescue ShellError => e
45
+ e.exit_code
46
+ end
47
+
48
+ def system_or_true(*args)
49
+ warn "system_or_true is deprecated, use system_noraise", category: :deprecated, uplevel: 1
50
+ system_noraise(*args)
44
51
  end
45
52
 
46
53
  def capture(*args) # ``
47
54
  system_trace *args
48
- IO.popen(args + (@verbose == 0 ? [{:err => "/dev/null"}] : []), "r") {|io| io.read}.strip
55
+ ret = IO.popen(args + (@verbose == 0 ? [{:err => "/dev/null"}] : []), "r") {|io| io.read}.strip
56
+ raise ShellError.new(ret, args, $?.exitstatus) unless $? == 0
57
+ ret
58
+ end
59
+
60
+ def try_capture(*args) # ``
61
+ system_trace *args
62
+ ret = IO.popen(args + (@verbose == 0 ? [{:err => "/dev/null"}] : []), "r") {|io| io.read}.strip
63
+ end
64
+
65
+ def popen(*args, &block)
66
+ env = args.first.is_a?(Hash) && args.unshift
67
+ opts = args.last.is_a?(Hash) && args.pop
68
+ mode = args.length == 2 ? args.pop : 'r'
69
+ cmd = args[0]
70
+ system_trace *cmd
71
+ ret = IO.popen(*([env, cmd, mode, opts].select {|v| v}.to_a), &block)
72
+ raise ShellError.new('', cmd, $?.exitstatus) if block_given? and $? != 0
73
+ ret
49
74
  end
50
75
 
51
76
  def which?(exe)
@@ -77,10 +102,13 @@ class VerboseShell
77
102
  def chown_R_formatter(method, user, group, file)
78
103
  chown_formatter(method, user, group, file)
79
104
  end
105
+ def mkdir_p_formatter(method, file)
106
+ method_to_a(method) + (file.is_a?(Array) ? file : [file])
107
+ end
80
108
 
81
109
  def method_missing(method, *args, &block)
82
- system_trace self.respond_to?("#{method}_formatter") ? self.send("#{method}_formatter", method, *args)
83
- : method_to_a(method) + args
110
+ system_trace *(self.respond_to?("#{method}_formatter") ? self.send("#{method}_formatter", method, *args)
111
+ : method_to_a(method) + args)
84
112
  FileUtils.send(method, *args, &block)
85
113
  end
86
114
  end
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_dependency 'pastel', '~> 0.7.2'
25
25
 
26
- spec.add_development_dependency "bundler", "~> 1.15"
27
- spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "bundler", ">= 2.2"
27
+ spec.add_development_dependency "rake", ">= 12.3"
28
+ spec.add_development_dependency "minitest", "~> 5.25"
28
29
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: verbose-shell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Caldwell
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2019-04-13 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: pastel
@@ -28,30 +27,44 @@ dependencies:
28
27
  name: bundler
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
- - - "~>"
30
+ - - ">="
32
31
  - !ruby/object:Gem::Version
33
- version: '1.15'
32
+ version: '2.2'
34
33
  type: :development
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
- - - "~>"
37
+ - - ">="
39
38
  - !ruby/object:Gem::Version
40
- version: '1.15'
39
+ version: '2.2'
41
40
  - !ruby/object:Gem::Dependency
42
41
  name: rake
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '12.3'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '12.3'
54
+ - !ruby/object:Gem::Dependency
55
+ name: minitest
43
56
  requirement: !ruby/object:Gem::Requirement
44
57
  requirements:
45
58
  - - "~>"
46
59
  - !ruby/object:Gem::Version
47
- version: '10.0'
60
+ version: '5.25'
48
61
  type: :development
49
62
  prerelease: false
50
63
  version_requirements: !ruby/object:Gem::Requirement
51
64
  requirements:
52
65
  - - "~>"
53
66
  - !ruby/object:Gem::Version
54
- version: '10.0'
67
+ version: '5.25'
55
68
  description: sh -x like logging of FileUtils functions.
56
69
  email:
57
70
  - david@porkrind.org
@@ -73,7 +86,6 @@ homepage: https://github.com/caldwell/verbose-shell
73
86
  licenses:
74
87
  - MIT
75
88
  metadata: {}
76
- post_install_message:
77
89
  rdoc_options: []
78
90
  require_paths:
79
91
  - lib
@@ -88,9 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
100
  - !ruby/object:Gem::Version
89
101
  version: '0'
90
102
  requirements: []
91
- rubyforge_project:
92
- rubygems_version: 2.7.6.2
93
- signing_key:
103
+ rubygems_version: 3.7.2
94
104
  specification_version: 4
95
105
  summary: sh -x like logging of FileUtils functions.
96
106
  test_files: []