guard 2.6.0 → 2.6.1

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