airbrussh 0.2.1 → 0.3.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: 90b12f9244ea92b79588f34960fb6eb585ab90f8
4
- data.tar.gz: 6a33190b5a84f17f034b54ef123435d44a0d2309
3
+ metadata.gz: cce6c8fd80458eebccd4bc41fd5f55d45435e056
4
+ data.tar.gz: 1e6c39223361f97a90d2593aec1c3f873c61cc13
5
5
  SHA512:
6
- metadata.gz: b971d87eaa4667f1188abfc7ea49fd2434547f689b5b4b854ff424bd0cbf070395b0690a7df93ce8a328cfe7606cbc6d27a529ea2aa7d2c8ca2335b751cba8b3
7
- data.tar.gz: 5a34057f0f8d55c3ac578531bb482b37d4290ccfb9909f0ba61869ed9e65c8b9037a79e04e9add08ef5701ded4934ff008d00aa4214f80cf0daef0f222a224ae
6
+ metadata.gz: 1695037c080995aabfe3bca4c05c1066700002803e4909b21fa18c58370e8ce364f3f35d0f624225b2a3a4165aed3410cf6a3bff4f254b26fc70b00f93dbf92f
7
+ data.tar.gz: d58bd13170ce51ddc74af022e0661d5b1844ede48eab39ac8d289b67832d8b5a84b7e22ee6ba05c56b4fa35eff3df3bf6ec49cf25dc28405a05ab1973fc37b41
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## Next release
2
+
3
+ * Your contribution here!
4
+
5
+ ## 0.3.0 (2015-03-28)
6
+
7
+ * New `config.banner` option allows startup message to be disabled or changed (suggestion from [@justindowning](https://github.com/justindowning))
8
+ * New `config.command_output` option gives full control of whether airbrussh shows or hides the stderr and stdout data received from remote commands; see the usage section of the README for further explanation (suggestion from [@carlesso](https://github.com/carlesso))
9
+
1
10
  ## 0.2.1 (2015-03-02)
2
11
 
3
12
  * Un-pin SSHKit dependency now that SSHKit 1.7.1 has been released.
data/README.md CHANGED
@@ -9,6 +9,16 @@ And don't worry: airbrussh saves Capistrano's default verbose output to a separa
9
9
 
10
10
  ![Sample output](https://raw.github.com/mattbrictson/airbrussh/master/demo.gif)
11
11
 
12
+ For more details on how exactly Airbrussh changes Capistrano's output and the reasoning behind it, check out the blog post: [Introducing Airbrussh](https://mattbrictson.com/airbrussh).
13
+
14
+ ## Requirements
15
+
16
+ **To use Airbrussh with Capistrano, you will need Capistrano 3.** Capistrano 2.x is not supported.
17
+
18
+ Airbrussh has been tested with MRI 2.2, Capistrano 3.4.0, and SSHKit 1.7.1. Other recent version combinations will probably work; [open an issue on GitHub](https://github.com/mattbrictson/airbrussh/issues/new) if you run into trouble.
19
+
20
+ Airbrussh's only dependency is SSHKit >= 1.6.1.
21
+
12
22
  ## Installation
13
23
 
14
24
  Add this line to your application's Gemfile:
@@ -43,31 +53,70 @@ Airbrussh automatically replaces the default Capistrano log formatter, so there
43
53
  ```ruby
44
54
  Airbrussh.configure do |config|
45
55
  # Capistrano's default, un-airbrusshed output is saved to a file to
46
- # facilitate debugging. To disable this entirely:
56
+ # facilitate debugging.
57
+ #
58
+ # To disable this entirely:
47
59
  # config.log_file = nil
60
+ #
48
61
  # Default:
49
62
  config.log_file = "log/capistrano.log"
50
63
 
51
64
  # Airbrussh patches Rake so it can access the name of the currently executing
52
65
  # task. Set this to false if monkey patching is causing issues.
66
+ #
53
67
  # Default:
54
68
  config.monkey_patch_rake = true
55
69
 
56
70
  # Ansi colors will be used in the output automatically based on whether the
57
71
  # output is a TTY, or if the SSHKIT_COLOR environment variable is set.
72
+ #
58
73
  # To disable color always:
59
74
  # config.color = false
75
+ #
60
76
  # Default:
61
77
  config.color = :auto
62
78
 
63
79
  # Output is automatically truncated to the width of the terminal window, if
64
80
  # possible. If the width of the terminal can't be determined, no truncation
65
- # is performed. To truncate to a fixed width:
81
+ # is performed.
82
+ #
83
+ # To truncate to a fixed width:
66
84
  # config.truncate = 80
85
+ #
67
86
  # Or to disable truncation entirely:
68
87
  # config.truncate = false
88
+ #
69
89
  # Default:
70
90
  config.truncate = :auto
91
+
92
+ # If a log_file is configured, airbrussh will output a message at startup
93
+ # displaying the log_file location.
94
+ #
95
+ # To always disable this message:
96
+ # config.banner = false
97
+ #
98
+ # To display an alternative message:
99
+ # config.banner = "Hello, world!"
100
+ #
101
+ # Default:
102
+ config.banner = :auto
103
+
104
+ # You can control whether airbrussh shows the output of SSH commands. For
105
+ # brevity, the output is hidden by default.
106
+ #
107
+ # Display stdout of SSH commands. Stderr is not displayed.
108
+ # config.command_output = :stdout
109
+ #
110
+ # Display stderr of SSH commands. Stdout is not displayed.
111
+ # config.command_output = :stderr
112
+ #
113
+ # Display all SSH command output.
114
+ # config.command_output = [:stdout, :stderr]
115
+ # or
116
+ # config.command_output = true
117
+ #
118
+ # Default (all output suppressed):
119
+ config.command_output = false
71
120
  end
72
121
  ```
73
122
 
@@ -88,6 +137,8 @@ Airbrussh.configure do |config|
88
137
  config.monkey_patch_rake = false
89
138
  config.color = :auto
90
139
  config.truncate = :auto
140
+ config.banner = :auto
141
+ config.command_output = false
91
142
  end
92
143
  ```
93
144
 
@@ -6,8 +6,6 @@ require "sshkit/formatter/airbrussh"
6
6
  Airbrussh.configure do |config|
7
7
  config.log_file = "log/capistrano.log"
8
8
  config.monkey_patch_rake = true
9
- config.color = :auto
10
- config.truncate = :auto
11
9
  end
12
10
 
13
11
  # Sanity check!
@@ -1,12 +1,29 @@
1
1
  module Airbrussh
2
2
  class Configuration
3
- attr_accessor :log_file, :monkey_patch_rake, :color, :truncate
3
+ attr_accessor :log_file, :monkey_patch_rake, :color, :truncate, :banner,
4
+ :command_output
4
5
 
5
6
  def initialize
6
7
  self.log_file = nil
7
8
  self.monkey_patch_rake = false
8
9
  self.color = :auto
9
10
  self.truncate = :auto
11
+ self.banner = :auto
12
+ self.command_output = false
13
+ end
14
+
15
+ def command_output_stdout?
16
+ command_output_include?(:stdout)
17
+ end
18
+
19
+ def command_output_stderr?
20
+ command_output_include?(:stderr)
21
+ end
22
+
23
+ private
24
+
25
+ def command_output_include?(sym)
26
+ command_output == true || Array(command_output).include?(sym)
10
27
  end
11
28
  end
12
29
  end
@@ -33,7 +33,7 @@ module Airbrussh
33
33
 
34
34
  @tasks = {}
35
35
 
36
- @log_file = Airbrussh.configuration.log_file
36
+ @log_file = config.log_file
37
37
  @log_file_formatter = create_log_file_formatter
38
38
 
39
39
  @console = Airbrussh::Console.new(original_output)
@@ -53,9 +53,14 @@ module Airbrussh
53
53
  end
54
54
 
55
55
  def write_banner
56
- return if @log_file.nil?
57
- print_line "Using airbrussh format."
58
- print_line "Verbose output is being written to #{blue(@log_file)}."
56
+ return unless config.banner
57
+ if config.banner == :auto
58
+ return if @log_file.nil?
59
+ print_line "Using airbrussh format."
60
+ print_line "Verbose output is being written to #{blue(@log_file)}."
61
+ else
62
+ print_line config.banner
63
+ end
59
64
  end
60
65
 
61
66
  def write_log_file_delimiter
@@ -72,7 +77,9 @@ module Airbrussh
72
77
  end
73
78
 
74
79
  def write(obj)
75
- @log_file_formatter << obj
80
+ # SSHKit's :pretty formatter mutates the stdout and stderr data in the
81
+ # command obj. So we need to dup it to ensure our copy is unscathed.
82
+ @log_file_formatter << obj.dup
76
83
 
77
84
  case obj
78
85
  when SSHKit::Command then write_command(obj)
@@ -114,12 +121,37 @@ module Airbrussh
114
121
  print_line " #{number} #{description}"
115
122
  end
116
123
 
124
+ write_command_output(command, number)
125
+
117
126
  if command.finished?
118
127
  status = format_command_completion_status(command, number)
119
128
  print_line " #{status}"
120
129
  end
121
130
  end
122
131
 
132
+ # Prints the data from the stdout and stderr streams of the given command,
133
+ # but only if enabled (see Airbrussh::Configuration#command_output).
134
+ def write_command_output(command, number)
135
+ # Use a bit of meta-programming here, since stderr and stdout logic
136
+ # are identical except for different method names.
137
+ %w(stderr stdout).each do |stream|
138
+
139
+ next unless config.public_send("command_output_#{stream}?")
140
+ output = command.public_send(stream)
141
+ next if output.empty?
142
+
143
+ output.lines.each do |line|
144
+ print_line " #{number} #{line.chomp}"
145
+ end
146
+
147
+ # The stderr/stdout data provided by the command object is the current
148
+ # "chunk" as received over the wire. Since there may be more chunks
149
+ # appended and we don't want to print duplicates, clear the current
150
+ # data.
151
+ command.public_send("#{stream}=", "")
152
+ end
153
+ end
154
+
123
155
  def print_task_if_changed
124
156
  status = current_task_status
125
157
 
@@ -197,5 +229,9 @@ module Airbrussh
197
229
  string.to_s.colorize(color.to_sym)
198
230
  end
199
231
  end
232
+
233
+ def config
234
+ Airbrussh.configuration
235
+ end
200
236
  end
201
237
  end
@@ -1,3 +1,3 @@
1
1
  module Airbrussh
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airbrussh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Brictson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-03-02 00:00:00.000000000 Z
11
+ date: 2015-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sshkit