guard 2.6.0 → 2.6.1

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: 949af1dc04bc3ed850cf0b63fd523bc1ddb3316a
4
- data.tar.gz: a200da636376286362b7c8c06bfe48586c52124b
3
+ metadata.gz: e0397104f7cae5c27eb8622dce9e0bc6ed87aee5
4
+ data.tar.gz: cd203c2e48e94275ea4216ae408ff674a6585175
5
5
  SHA512:
6
- metadata.gz: 409a80a8cf1172d1d077e5a147d26a2dc91f4d90e0adcb17b1fbbe183e6404b087e91294536c3d94448ed0cc59f63bd2b30f2c21275e80fea34bd4ab17c7bece
7
- data.tar.gz: 6642c59beed12c1b3bddd5eb93b3e8579a56a85f4c531ede1c193811feb1b3d32f96b0164b4c982c467dba2f3fbc15a4b1ee8b5508006c6f7af48398f8fd6b4f
6
+ metadata.gz: ccfc1e22709ef26e1c904956c9925058fac6d791ea9123dabbde1df189f0de9fda9b38bb87ac7ac3db36ed4bd93b8ec6f8ea4fe371e7e0efbd6b81dfb5559089
7
+ data.tar.gz: d7aeedb746d432f07b701c70e78814e445e4800d2ca0b59692ed4f652f6659022589a06627f0424ff1c0697dd280ddcb0433233ad216aa5270f97022eddd963b
data/README.md CHANGED
@@ -785,7 +785,7 @@ Please try to follow these simple rules:
785
785
 
786
786
  #### Core Team
787
787
 
788
- * [Michael Kessler](https://github.com/netzpirat) ([@netzpirat](http://twitter.com/netzpirat), [flinkfinger.com](http://www.flinkfinger.com))
788
+ * R.I.P. :broken_heart: [Michael Kessler](https://github.com/netzpirat) ([@netzpirat](http://twitter.com/netzpirat), [flinkfinger.com](http://www.flinkfinger.com))
789
789
  * [Rémy Coutable](https://github.com/rymai)
790
790
  * [Thibaud Guillaume-Gentil](https://github.com/thibaudgg) ([@thibaudgg](http://twitter.com/thibaudgg), [thibaud.gg](http://thibaud.gg/))
791
791
 
data/lib/guard.rb CHANGED
@@ -46,7 +46,7 @@ module Guard
46
46
  # Guard.plugins(name: 'rspec', group: 'backend')
47
47
  #
48
48
  # @param [String, Symbol, Regexp, Hash] filter the filter to apply to the plugins
49
- # @return [Plugin, Array<Plugin>] the filtered plugin(s)
49
+ # @return [Array<Plugin>] the filtered plugin(s)
50
50
  #
51
51
  def plugins(filter = nil)
52
52
  @plugins ||= []
@@ -87,7 +87,7 @@ module Guard
87
87
  # @return [String] the notify-send urgency
88
88
  #
89
89
  def _notifysend_urgency(type)
90
- { 'failed' => 'normal', 'pending' => 'low' }.fetch(type, 'low')
90
+ { failed: 'normal', pending: 'low' }.fetch(type, 'low')
91
91
  end
92
92
 
93
93
  # Builds a shell command out of a command string and option hash.
@@ -102,7 +102,7 @@ module Guard
102
102
  color = tmux_color(opts[:type], opts)
103
103
 
104
104
  color_locations.each do |color_location|
105
- _run_client "set","-q #{ color_location } #{ color }"
105
+ _run_client "set","#{_quiet_option}#{ color_location } #{ color }"
106
106
  end
107
107
  end
108
108
 
@@ -137,11 +137,7 @@ module Guard
137
137
  teaser_message = message.split("\n").first
138
138
  display_title = title_format % [title, teaser_message]
139
139
 
140
- if _tmux_version >= 1.7
141
- _run_client "set-option", "-q set-titles-string '#{ display_title }'"
142
- else
143
- _run_client "set-option", "set-titles-string '#{ display_title }'"
144
- end
140
+ _run_client "set-option", "#{_quiet_option}set-titles-string '#{ display_title }'"
145
141
  end
146
142
 
147
143
  # Displays a message in the status bar of tmux.
@@ -182,11 +178,11 @@ module Guard
182
178
  formatted_message = message.split("\n").join(separator)
183
179
  display_message = message_format % [title, formatted_message]
184
180
 
185
- _run_client "set", "-q display-time #{ display_time * 1000 }"
186
- _run_client "set", "-q message-fg #{ message_color }"
187
- _run_client "set", "-q message-bg #{ color }"
181
+ _run_client "set", "#{_quiet_option}display-time #{ display_time * 1000 }"
182
+ _run_client "set", "#{_quiet_option}message-fg #{ message_color }"
183
+ _run_client "set", "#{_quiet_option}message-bg #{ color }"
188
184
  _run_client "display-message", "'#{ display_message }'"
189
- end
185
+ end
190
186
 
191
187
  # Get the Tmux color for the notification type.
192
188
  # You can configure your own color by overwriting the defaults.
@@ -251,11 +247,13 @@ module Guard
251
247
  end
252
248
 
253
249
  def self._clients
254
- `#{ DEFAULTS[:client] } list-clients -F '\#{ client_tty }'`.split(/\n/)
250
+ ttys = `#{ DEFAULTS[:client] } list-clients -F '\#{client_tty}'`.split(/\n/)
251
+ ttys.delete('(null)') #if user is running 'tmux -C' remove this client from list
252
+ ttys
255
253
  end
256
254
 
257
255
  def _clients
258
- self.class._client
256
+ self.class._clients
259
257
  end
260
258
 
261
259
  def _run_client(cmd, args)
@@ -298,6 +296,10 @@ module Guard
298
296
  @tmux_version ||= `tmux -V`.chomp.gsub(/[^0-9.]/, '').to_f
299
297
  end
300
298
 
299
+ def _quiet_option
300
+ '-q ' if _tmux_version >= 1.7
301
+ end
302
+
301
303
  end
302
304
 
303
305
  end
data/lib/guard/runner.rb CHANGED
@@ -37,6 +37,12 @@ module Guard
37
37
  #
38
38
  def run_on_changes(modified, added, removed)
39
39
  ::Guard::UI.clearable
40
+
41
+ #TODO: this should be handled like every other plugin
42
+ if ::Guard::Watcher.match_guardfile?(modified)
43
+ ::Guard.evaluator.reevaluate_guardfile
44
+ end
45
+
40
46
  _scoped_plugins do |guard|
41
47
  modified_paths = ::Guard::Watcher.match_files(guard, modified)
42
48
  added_paths = ::Guard::Watcher.match_files(guard, added)
@@ -64,7 +70,11 @@ module Guard
64
70
  begin
65
71
  catch self.class.stopping_symbol_for(guard) do
66
72
  guard.hook("#{ task }_begin", *args)
67
- result = guard.send(task, *args)
73
+ begin
74
+ result = guard.send(task, *args)
75
+ rescue Interrupt
76
+ throw(:task_has_failed)
77
+ end
68
78
  guard.hook("#{ task }_end", result)
69
79
  result
70
80
  end
data/lib/guard/setuper.rb CHANGED
@@ -120,6 +120,8 @@ module Guard
120
120
  @scope = { groups: [], plugins: [] }
121
121
  end
122
122
 
123
+ attr_reader :watchdirs
124
+
123
125
  # Stores the scopes defined by the user via the `--group` / `-g` option (to run
124
126
  # only a specific group) or the `--plugin` / `-P` option (to run only a
125
127
  # specific plugin).
@@ -172,35 +174,15 @@ module Guard
172
174
  # Initializes the listener and registers a callback for changes.
173
175
  #
174
176
  def _setup_listener
175
- listener_callback = lambda do |modified, added, removed|
176
- # Convert to relative paths (respective to the watchdir it came from)
177
- @watchdirs.each do |watchdir|
178
- [modified, added, removed].each do |paths|
179
- paths.map! do |path|
180
- if path.start_with? watchdir
181
- path.sub "#{watchdir}#{File::SEPARATOR}", ''
182
- else
183
- path
184
- end
185
- end
186
- end
187
- end
188
- evaluator.reevaluate_guardfile if ::Guard::Watcher.match_guardfile?(modified)
189
-
190
- within_preserved_state do
191
- runner.run_on_changes(modified, added, removed)
192
- end
193
- end
194
-
195
177
  if options[:listen_on]
196
- @listener = Listen.on(options[:listen_on], &listener_callback)
178
+ @listener = Listen.on(options[:listen_on], &_listener_callback)
197
179
  else
198
180
  listener_options = {}
199
181
  [:latency, :force_polling, :wait_for_delay].each do |option|
200
182
  listener_options[option] = options[option] if options[option]
201
183
  end
202
- listen_args = @watchdirs + [listener_options]
203
- @listener = Listen.to(*listen_args, &listener_callback)
184
+ listen_args = watchdirs + [listener_options]
185
+ @listener = Listen.to(*listen_args, &_listener_callback)
204
186
  end
205
187
  end
206
188
 
@@ -214,11 +196,19 @@ module Guard
214
196
  def _setup_signal_traps
215
197
  unless defined?(JRUBY_VERSION)
216
198
  if Signal.list.keys.include?('USR1')
217
- Signal.trap('USR1') { ::Guard.pause unless listener.paused? }
199
+ Signal.trap('USR1') do
200
+ unless listener.paused?
201
+ Thread.new { within_preserved_state { ::Guard.pause } }
202
+ end
203
+ end
218
204
  end
219
205
 
220
206
  if Signal.list.keys.include?('USR2')
221
- Signal.trap('USR2') { ::Guard.pause if listener.paused? }
207
+ Signal.trap('USR2') do
208
+ if listener.paused?
209
+ Thread.new { within_preserved_state { ::Guard.pause } }
210
+ end
211
+ end
222
212
  end
223
213
 
224
214
  if Signal.list.keys.include?('INT')
@@ -260,5 +250,53 @@ module Guard
260
250
  end
261
251
  end
262
252
 
253
+ # Check if any of the changes are actually watched for
254
+ #
255
+ # NOTE: this is called from the listen thread - be careful to not
256
+ # modify any state
257
+ #
258
+ # TODO: move this to watcher class?
259
+ #
260
+ def _relevant_changes?(changes)
261
+ # TODO: make a Guardfile reloader "plugin" instead of a special case
262
+ return true if ::Guard::Watcher.match_guardfile?(changes[:modified])
263
+
264
+ # TODO: ignoring irrelevant files should be Listen's responsibility
265
+ all_files = changes.values.flatten(1)
266
+ runner.send(:_scoped_plugins) do |guard|
267
+ return true if ::Guard::Watcher.match_files?([guard], all_files)
268
+ end
269
+ false
270
+ end
271
+
272
+ def _relative_paths(changes)
273
+ # Convert to relative paths (respective to the watchdir it came from)
274
+ watchdirs.each do |watchdir|
275
+ changes.each do |type, paths|
276
+ paths.each do |path|
277
+ if path.start_with? watchdir
278
+ path.sub! "#{watchdir}#{File::SEPARATOR}", ''
279
+ end
280
+ end
281
+ end
282
+ end
283
+ end
284
+
285
+ def _listener_callback
286
+ lambda do |modified, added, removed|
287
+ all_changes = { modified: modified.dup,
288
+ added: added.dup,
289
+ removed: removed.dup }
290
+
291
+ # TODO: this should be Listen's responsibility
292
+ _relative_paths(all_changes)
293
+
294
+ if _relevant_changes?(all_changes)
295
+ within_preserved_state do
296
+ runner.run_on_changes(*all_changes.values)
297
+ end
298
+ end
299
+ end
300
+ end
263
301
  end
264
302
  end
data/lib/guard/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Guard
2
- VERSION = '2.6.0'
2
+ VERSION = '2.6.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thibaud Guillaume-Gentil
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-24 00:00:00.000000000 Z
11
+ date: 2014-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -165,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
165
  version: '0'
166
166
  requirements: []
167
167
  rubyforge_project:
168
- rubygems_version: 2.2.1
168
+ rubygems_version: 2.2.2
169
169
  signing_key:
170
170
  specification_version: 4
171
171
  summary: Guard keeps an eye on your file modifications