guard 0.5.1 → 0.6.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.
- data/CHANGELOG.md +29 -2
- data/README.md +40 -10
- data/lib/guard.rb +39 -9
- data/lib/guard/cli.rb +27 -4
- data/lib/guard/dsl.rb +3 -3
- data/lib/guard/guard.rb +1 -1
- data/lib/guard/interactor.rb +1 -1
- data/lib/guard/listener.rb +34 -19
- data/lib/guard/listeners/darwin.rb +4 -6
- data/lib/guard/listeners/linux.rb +6 -8
- data/lib/guard/listeners/polling.rb +3 -5
- data/lib/guard/listeners/windows.rb +5 -7
- data/lib/guard/notifier.rb +16 -5
- data/lib/guard/ui.rb +56 -16
- data/lib/guard/version.rb +1 -1
- data/man/guard.1 +103 -31
- data/man/guard.1.html +65 -24
- metadata +10 -10
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
## 0.6.0 - August 13, 2011
|
2
|
+
|
3
|
+
### Bugs fixes:
|
4
|
+
|
5
|
+
- Pull request [#107](https://github.com/guard/guard/pull/107): Small spelling fix. ([@dnagir][])
|
6
|
+
- Dir.glob now ignores files that don't need to be watched. ([@rymai][])
|
7
|
+
|
8
|
+
### New features
|
9
|
+
|
10
|
+
- Pull request [#112](https://github.com/guard/guard/pull/112): Add `list` command to CLI. ([@docwhat][])
|
11
|
+
|
12
|
+
### Improvements
|
13
|
+
|
14
|
+
- Pull request [#99](https://github.com/guard/guard/pull/99): [OS X] Switch from growl gem to growl_notify gem. ([@johnbintz][])
|
15
|
+
- Pull request [#115](https://github.com/guard/guard/pull/115): [Linux] Add ':transient => true' to default libnotify options. ([@zonque][])
|
16
|
+
- Pull request [#95](https://github.com/guard/guard/pull/95): Output system commands and options to be executed when in debug mode. ([@uk-ar][] and [@netzpirat][])
|
17
|
+
- `Guard::Dsl.revaluate_guardfile` has been renamed to `Guard::Dsl.reevaluate_guardfile`. ([@rymai][])
|
18
|
+
- New CLI options: ([@nestegg][])
|
19
|
+
- `watchdir`/`-w` to specify the directory in which Guard should watch for changes,
|
20
|
+
- `guardfile`/`-G` to specify an alternate location for the Guardfile to use.
|
21
|
+
- Pull request [#90](https://github.com/guard/guard/pull/90): Refactoring of color handling in the `Guard::UI`. ([@stereobooster][])
|
22
|
+
|
1
23
|
## 0.5.1 - July 2, 2011
|
2
24
|
|
3
25
|
### Bugs fixes:
|
@@ -6,12 +28,12 @@
|
|
6
28
|
|
7
29
|
## 0.5.0 - July 2, 2011
|
8
30
|
|
9
|
-
|
31
|
+
### New features
|
10
32
|
|
11
33
|
- Guard::Ego is now part of Guard, so Guardfile is automagically re-evaluated when modified. ([@thibaudgg][])
|
12
34
|
- Pull request [#91](https://github.com/guard/guard/pull/91): Show Guards in Guardfile with the `guard -T`. ([@johnbintz][])
|
13
35
|
|
14
|
-
|
36
|
+
### Improvements
|
15
37
|
|
16
38
|
- Issue [#98](https://github.com/guard/guard/issues/98): Multiple calls per watch event on linux with rb-inotify. ([@jeffutter][] & [@netzpirat][])
|
17
39
|
- Pull request [#94](https://github.com/guard/guard/pull/94): Show backtrace in terminal when a problem with a watch action occurs. ([@capotej][])
|
@@ -170,8 +192,10 @@
|
|
170
192
|
|
171
193
|
[@anithri]: https://github.com/anithri
|
172
194
|
[@brainopia]: https://github.com/brainopia
|
195
|
+
[@bronson]: https://github.com/bronson
|
173
196
|
[@capotej]: https://github.com/capotej
|
174
197
|
[@chrisberkhout]: https://github.com/chrisberkhout
|
198
|
+
[@dnagir]: https://github.com/dnagir
|
175
199
|
[@etehtsea]: https://github.com/etehtsea
|
176
200
|
[@fnichol]: https://github.com/fnichol
|
177
201
|
[@Gazer]: https://github.com/Gazer
|
@@ -184,6 +208,7 @@
|
|
184
208
|
[@koshigoe]: https://github.com/koshigoe
|
185
209
|
[@mcmire]: https://github.com/mcmire
|
186
210
|
[@mislav]: https://github.com/mislav
|
211
|
+
[@nestegg]: https://github.com/nestegg
|
187
212
|
[@netzpirat]: https://github.com/netzpirat
|
188
213
|
[@nicksieger]: https://github.com/nicksieger
|
189
214
|
[@niklas]: https://github.com/niklas
|
@@ -196,6 +221,8 @@
|
|
196
221
|
[@thierryhenrio]: https://github.com/thierryhenrio
|
197
222
|
[@tinogomes]: https://github.com/tinogomes
|
198
223
|
[@tpope]: https://github.com/tpope
|
224
|
+
[@uk-ar]: https://github.com/uk-ar
|
199
225
|
[@veged]: https://github.com/veged
|
200
226
|
[@wereHamster]: https://github.com/wereHamster
|
201
227
|
[@yannlugrin]: https://github.com/yannlugrin
|
228
|
+
[@zonque]: https://github.com/zonque
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Guard [](http://travis-ci.org/guard/guard)
|
2
2
|
=====
|
3
3
|
|
4
4
|
Guard is a command line tool that easily handle events on files modifications.
|
@@ -50,17 +50,17 @@ Install the rb-fsevent gem for [FSEvent](http://en.wikipedia.org/wiki/FSEvents)
|
|
50
50
|
$ gem install rb-fsevent
|
51
51
|
```
|
52
52
|
|
53
|
-
Install the
|
53
|
+
Install the growl_notify gem if you want notification support:
|
54
54
|
|
55
55
|
``` bash
|
56
|
-
$ gem install
|
56
|
+
$ gem install growl_notify
|
57
57
|
```
|
58
58
|
|
59
|
-
And add
|
59
|
+
And add it to your Gemfile:
|
60
60
|
|
61
61
|
``` ruby
|
62
62
|
gem 'rb-fsevent'
|
63
|
-
gem '
|
63
|
+
gem 'growl_notify'
|
64
64
|
```
|
65
65
|
|
66
66
|
### On Linux
|
@@ -92,6 +92,12 @@ Install the rb-fchange gem for [Directory Change Notification](http://msdn.micro
|
|
92
92
|
$ gem install rb-fchange
|
93
93
|
```
|
94
94
|
|
95
|
+
Install the win32console gem if you want colors in your terminal:
|
96
|
+
|
97
|
+
``` bash
|
98
|
+
$ gem install win32console
|
99
|
+
```
|
100
|
+
|
95
101
|
Install the Notifu gem if you want notification support:
|
96
102
|
|
97
103
|
``` bash
|
@@ -125,7 +131,7 @@ Guard will look for a Guardfile in your current directory. If it does not find o
|
|
125
131
|
Command line options
|
126
132
|
--------------------
|
127
133
|
|
128
|
-
###
|
134
|
+
### `-c`/`--clear` option
|
129
135
|
|
130
136
|
Shell can be cleared after each change:
|
131
137
|
|
@@ -134,7 +140,7 @@ $ guard --clear
|
|
134
140
|
$ guard -c # shortcut
|
135
141
|
```
|
136
142
|
|
137
|
-
###
|
143
|
+
### `-n`/`--notify` option
|
138
144
|
|
139
145
|
Notifications (growl/libnotify) can be disabled:
|
140
146
|
|
@@ -145,7 +151,7 @@ $ guard -n f # shortcut
|
|
145
151
|
|
146
152
|
Notifications can also be disabled globally by setting a `GUARD_NOTIFY` environment variable to `false`
|
147
153
|
|
148
|
-
###
|
154
|
+
### `-g`/`--group` option
|
149
155
|
|
150
156
|
Only certain guards groups can be run (see the Guardfile DSL below for creating groups):
|
151
157
|
|
@@ -154,7 +160,7 @@ $ guard --group group_name another_group_name
|
|
154
160
|
$ guard -g group_name another_group_name # shortcut
|
155
161
|
```
|
156
162
|
|
157
|
-
###
|
163
|
+
### `-d`/`--debug` option
|
158
164
|
|
159
165
|
Guard can be run in debug mode:
|
160
166
|
|
@@ -163,6 +169,24 @@ $ guard --debug
|
|
163
169
|
$ guard -d # shortcut
|
164
170
|
```
|
165
171
|
|
172
|
+
### `-w`/`--watchdir` option
|
173
|
+
|
174
|
+
Guard can watch in any directory (instead of the current directory):
|
175
|
+
|
176
|
+
``` bash
|
177
|
+
$ guard --watchdir ~/your/fancy/project
|
178
|
+
$ guard -w ~/your/fancy/project # shortcut
|
179
|
+
```
|
180
|
+
|
181
|
+
### `-G`/`--guardfile` option
|
182
|
+
|
183
|
+
Guard can use a Guardfile not located in the current directory:
|
184
|
+
|
185
|
+
``` bash
|
186
|
+
$ guard --guardfile ~/.your_global_guardfile
|
187
|
+
$ guard -G ~/.your_global_guardfile # shortcut
|
188
|
+
```
|
189
|
+
|
166
190
|
An exhaustive list of options is available with:
|
167
191
|
|
168
192
|
``` bash
|
@@ -193,6 +217,12 @@ Add it to your Gemfile (inside the `development` group):
|
|
193
217
|
gem '<guard-name>'
|
194
218
|
```
|
195
219
|
|
220
|
+
You can list all guards installed on your system with:
|
221
|
+
|
222
|
+
``` bash
|
223
|
+
$ guard list
|
224
|
+
```
|
225
|
+
|
196
226
|
Insert default guard's definition to your Guardfile by running this command:
|
197
227
|
|
198
228
|
``` bash
|
@@ -284,7 +314,7 @@ You can list the defined groups and guards for the current Guardfile from the co
|
|
284
314
|
shell
|
285
315
|
Group backend:
|
286
316
|
bundler
|
287
|
-
rspec: cli => "--color --format doc
|
317
|
+
rspec: cli => "--color --format doc"
|
288
318
|
Group frontend:
|
289
319
|
coffeescript: output => "public/javascripts/compiled"
|
290
320
|
livereload
|
data/lib/guard.rb
CHANGED
@@ -14,28 +14,31 @@ module Guard
|
|
14
14
|
# initialize this singleton
|
15
15
|
def setup(options = {})
|
16
16
|
@options = options
|
17
|
-
@listener = Listener.select_and_init
|
17
|
+
@listener = Listener.select_and_init(@options[:watchdir] ? File.expand_path(@options[:watchdir]) : Dir.pwd)
|
18
18
|
@guards = []
|
19
19
|
|
20
20
|
@options[:notify] && ENV["GUARD_NOTIFY"] != 'false' ? Notifier.turn_on : Notifier.turn_off
|
21
21
|
|
22
|
+
UI.clear if @options[:clear]
|
23
|
+
debug_command_execution if @options[:debug]
|
24
|
+
|
22
25
|
self
|
23
26
|
end
|
24
27
|
|
25
28
|
def start(options = {})
|
26
|
-
|
29
|
+
Interactor.init_signal_traps
|
30
|
+
|
27
31
|
setup(options)
|
28
32
|
|
29
|
-
Interactor.init_signal_traps
|
30
33
|
Dsl.evaluate_guardfile(options)
|
31
34
|
|
32
35
|
listener.on_change do |files|
|
33
|
-
Dsl.
|
36
|
+
Dsl.reevaluate_guardfile if Watcher.match_guardfile?(files)
|
34
37
|
|
35
38
|
run { run_on_change_for_all_guards(files) } if Watcher.match_files?(guards, files)
|
36
39
|
end
|
37
40
|
|
38
|
-
UI.info "Guard is now watching at '#{
|
41
|
+
UI.info "Guard is now watching at '#{listener.directory}'"
|
39
42
|
guards.each { |guard| supervised_task(guard, :start) }
|
40
43
|
listener.start
|
41
44
|
end
|
@@ -43,12 +46,14 @@ module Guard
|
|
43
46
|
def run_on_change_for_all_guards(files)
|
44
47
|
guards.each do |guard|
|
45
48
|
paths = Watcher.match_files(guard, files)
|
46
|
-
|
49
|
+
unless paths.empty?
|
50
|
+
UI.debug "#{guard.class.name}#run_on_change with #{paths.inspect}"
|
51
|
+
supervised_task(guard, :run_on_change, paths)
|
52
|
+
end
|
47
53
|
end
|
48
54
|
|
49
55
|
# Reparse the whole directory to catch new files modified during the guards run
|
50
|
-
new_modified_files = listener.modified_files([
|
51
|
-
listener.update_last_event
|
56
|
+
new_modified_files = listener.modified_files([listener.directory], :all => true)
|
52
57
|
if !new_modified_files.empty? && Watcher.match_files?(guards, new_modified_files)
|
53
58
|
run { run_on_change_for_all_guards(new_modified_files) }
|
54
59
|
end
|
@@ -98,8 +103,9 @@ module Guard
|
|
98
103
|
else
|
99
104
|
UI.error "Could not find class Guard::#{const_name.capitalize}"
|
100
105
|
end
|
101
|
-
rescue LoadError
|
106
|
+
rescue LoadError => loadError
|
102
107
|
UI.error "Could not load 'guard/#{name.downcase}' or find class Guard::#{const_name.capitalize}"
|
108
|
+
UI.error loadError.to_s
|
103
109
|
end
|
104
110
|
end
|
105
111
|
|
@@ -113,5 +119,29 @@ module Guard
|
|
113
119
|
UI.error "Could not find 'guard-#{name}' gem path."
|
114
120
|
end
|
115
121
|
|
122
|
+
##
|
123
|
+
# Returns a list of guard Gem names installed locally.
|
124
|
+
def guard_gem_names
|
125
|
+
if Gem::Version.create(Gem::VERSION) >= Gem::Version.create('1.8.0')
|
126
|
+
Gem::Specification.find_all.select { |x| x.name =~ /^guard-/ }
|
127
|
+
else
|
128
|
+
Gem.source_index.find_name(/^guard-/)
|
129
|
+
end.map { |x| x.name.sub /^guard-/, '' }
|
130
|
+
end
|
131
|
+
|
132
|
+
def debug_command_execution
|
133
|
+
Kernel.send(:alias_method, :original_system, :system)
|
134
|
+
Kernel.send(:define_method, :system) do |command, *args|
|
135
|
+
::Guard::UI.debug "Command execution: #{command} #{args.join(' ')}"
|
136
|
+
original_system command, *args
|
137
|
+
end
|
138
|
+
|
139
|
+
Kernel.send(:alias_method, :original_backtick, :"`")
|
140
|
+
Kernel.send(:define_method, :"`") do |command|
|
141
|
+
::Guard::UI.debug "Command execution: #{command}"
|
142
|
+
original_backtick command
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
116
146
|
end
|
117
147
|
end
|
data/lib/guard/cli.rb
CHANGED
@@ -5,16 +5,39 @@ module Guard
|
|
5
5
|
class CLI < Thor
|
6
6
|
default_task :start
|
7
7
|
|
8
|
-
method_option :clear,
|
9
|
-
method_option :notify,
|
10
|
-
method_option :debug,
|
11
|
-
method_option :group,
|
8
|
+
method_option :clear, :type => :boolean, :default => false, :aliases => '-c', :banner => "Auto clear shell before each change/run_all/reload"
|
9
|
+
method_option :notify, :type => :boolean, :default => true, :aliases => '-n', :banner => "Notifications feature (growl/libnotify)"
|
10
|
+
method_option :debug, :type => :boolean, :default => false, :aliases => '-d', :banner => "Print debug messages"
|
11
|
+
method_option :group, :type => :array, :default => [], :aliases => '-g', :banner => "Run only the passed groups"
|
12
|
+
method_option :watchdir, :type => :string, :aliases => '-w', :banner => "Specify the directory to watch"
|
13
|
+
method_option :guardfile, :type => :string, :aliases => '-G', :banner => "Specify a Guardfile"
|
12
14
|
|
13
15
|
desc "start", "Starts Guard"
|
14
16
|
def start
|
15
17
|
::Guard.start(options)
|
16
18
|
end
|
17
19
|
|
20
|
+
desc "list", "Lists guards that can be used with init"
|
21
|
+
def list
|
22
|
+
::Guard::DslDescriber.evaluate_guardfile(options)
|
23
|
+
installed = []
|
24
|
+
::Guard::DslDescriber.guardfile_structure.each do |group|
|
25
|
+
group[:guards].each {|x| installed << x[:name]} if group[:guards]
|
26
|
+
end
|
27
|
+
|
28
|
+
::Guard::UI.info "Available guards:"
|
29
|
+
::Guard::guard_gem_names.sort.each do |name|
|
30
|
+
if installed.include? name
|
31
|
+
::Guard::UI.info " #{name} *"
|
32
|
+
else
|
33
|
+
::Guard::UI.info " #{name}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
::Guard::UI.info ' '
|
37
|
+
::Guard::UI.info "See also https://github.com/guard/guard/wiki/List-of-available-Guards"
|
38
|
+
::Guard::UI.info "* denotes ones already in your Guardfile"
|
39
|
+
end
|
40
|
+
|
18
41
|
desc "version", "Prints Guard's version"
|
19
42
|
def version
|
20
43
|
::Guard::UI.info "Guard version #{Guard::VERSION}"
|
data/lib/guard/dsl.rb
CHANGED
@@ -12,7 +12,7 @@ module Guard
|
|
12
12
|
UI.error "No guards found in Guardfile, please add at least one." if !::Guard.guards.nil? && ::Guard.guards.empty?
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
15
|
+
def reevaluate_guardfile
|
16
16
|
::Guard.guards.clear
|
17
17
|
Dsl.evaluate_guardfile(@@options)
|
18
18
|
msg = "Guardfile has been re-evaluated."
|
@@ -45,11 +45,11 @@ module Guard
|
|
45
45
|
|
46
46
|
def fetch_guardfile_contents
|
47
47
|
# TODO: do we need .rc file interaction?
|
48
|
-
if @@options
|
48
|
+
if @@options[:guardfile_contents]
|
49
49
|
UI.info "Using inline Guardfile."
|
50
50
|
@@options[:guardfile_path] = 'Inline Guardfile'
|
51
51
|
|
52
|
-
elsif @@options
|
52
|
+
elsif @@options[:guardfile]
|
53
53
|
if File.exist?(@@options[:guardfile])
|
54
54
|
read_guardfile(@@options[:guardfile])
|
55
55
|
UI.info "Using Guardfile at #{@@options[:guardfile]}."
|
data/lib/guard/guard.rb
CHANGED
@@ -10,7 +10,7 @@ module Guard
|
|
10
10
|
# Guardfile template needed inside guard gem
|
11
11
|
def self.init(name)
|
12
12
|
if ::Guard::Dsl.guardfile_include?(name)
|
13
|
-
::Guard::UI.info "Guardfile already
|
13
|
+
::Guard::UI.info "Guardfile already includes #{name} guard"
|
14
14
|
else
|
15
15
|
content = File.read('Guardfile')
|
16
16
|
guard = File.read("#{::Guard.locate_guard(name)}/lib/guard/#{name}/templates/Guardfile")
|
data/lib/guard/interactor.rb
CHANGED
data/lib/guard/listener.rb
CHANGED
@@ -9,7 +9,8 @@ module Guard
|
|
9
9
|
autoload :Polling, 'guard/listeners/polling'
|
10
10
|
|
11
11
|
class Listener
|
12
|
-
|
12
|
+
|
13
|
+
attr_reader :directory
|
13
14
|
|
14
15
|
def self.select_and_init(*a)
|
15
16
|
if mac? && Darwin.usable?
|
@@ -25,14 +26,14 @@ module Guard
|
|
25
26
|
end
|
26
27
|
|
27
28
|
def initialize(directory=Dir.pwd, options={})
|
28
|
-
@directory
|
29
|
+
@directory = directory.to_s
|
29
30
|
@sha1_checksums_hash = {}
|
30
|
-
@
|
31
|
+
@relativize_paths = options.fetch(:relativize_paths, true)
|
31
32
|
update_last_event
|
32
33
|
end
|
33
34
|
|
34
35
|
def start
|
35
|
-
watch
|
36
|
+
watch(@directory)
|
36
37
|
end
|
37
38
|
|
38
39
|
def stop
|
@@ -46,9 +47,10 @@ module Guard
|
|
46
47
|
@last_event = Time.now
|
47
48
|
end
|
48
49
|
|
49
|
-
def modified_files(dirs, options
|
50
|
+
def modified_files(dirs, options={})
|
50
51
|
files = potentially_modified_files(dirs, options).select { |path| file_modified?(path) }
|
51
|
-
|
52
|
+
update_last_event
|
53
|
+
relativize_paths(files)
|
52
54
|
end
|
53
55
|
|
54
56
|
def worker
|
@@ -61,35 +63,48 @@ module Guard
|
|
61
63
|
end
|
62
64
|
|
63
65
|
def all_files
|
64
|
-
potentially_modified_files
|
66
|
+
potentially_modified_files([@directory], :all => true)
|
65
67
|
end
|
66
68
|
|
67
69
|
# scopes all given paths to the current #directory
|
68
|
-
def
|
69
|
-
return paths unless
|
70
|
+
def relativize_paths(paths)
|
71
|
+
return paths unless relativize_paths?
|
70
72
|
paths.map do |path|
|
71
|
-
path.gsub(%r
|
73
|
+
path.gsub(%r{^#{@directory}/}, '')
|
72
74
|
end
|
73
75
|
end
|
74
76
|
|
75
|
-
|
76
|
-
|
77
|
-
!!@relativate_paths
|
77
|
+
def relativize_paths?
|
78
|
+
!!@relativize_paths
|
78
79
|
end
|
79
80
|
|
80
81
|
private
|
81
82
|
|
82
|
-
def potentially_modified_files(dirs, options
|
83
|
-
|
84
|
-
|
83
|
+
def potentially_modified_files(dirs, options={})
|
84
|
+
paths = Dir.glob(dirs.map { |d| "#{d.sub(%r{/+$}, '')}/*" }, File::FNM_DOTMATCH).reject do |path|
|
85
|
+
%w[. .. .bundle .git log tmp vendor].include?(File.basename(path))
|
86
|
+
end
|
87
|
+
|
88
|
+
if options[:all]
|
89
|
+
paths.inject([]) do |array, path|
|
90
|
+
if File.file?(path)
|
91
|
+
array << path
|
92
|
+
else
|
93
|
+
array += Dir.glob("#{path}/**/*", File::FNM_DOTMATCH).select { |p| File.file?(p) }
|
94
|
+
end
|
95
|
+
array
|
96
|
+
end
|
97
|
+
else
|
98
|
+
paths.select { |path| File.file?(path) }
|
99
|
+
end
|
85
100
|
end
|
86
101
|
|
87
102
|
# Depending on the filesystem, mtime is probably only precise to the second, so round
|
88
103
|
# both values down to the second for the comparison.
|
89
104
|
def file_modified?(path)
|
90
|
-
if File.mtime(path).to_i == last_event.to_i
|
105
|
+
if File.mtime(path).to_i == @last_event.to_i
|
91
106
|
file_content_modified?(path, sha1_checksum(path))
|
92
|
-
elsif File.mtime(path).to_i > last_event.to_i
|
107
|
+
elsif File.mtime(path).to_i > @last_event.to_i
|
93
108
|
set_sha1_checksums_hash(path, sha1_checksum(path))
|
94
109
|
true
|
95
110
|
end
|
@@ -98,7 +113,7 @@ module Guard
|
|
98
113
|
end
|
99
114
|
|
100
115
|
def file_content_modified?(path, sha1_checksum)
|
101
|
-
if sha1_checksums_hash[path] != sha1_checksum
|
116
|
+
if @sha1_checksums_hash[path] != sha1_checksum
|
102
117
|
set_sha1_checksums_hash(path, sha1_checksum)
|
103
118
|
true
|
104
119
|
else
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Guard
|
2
2
|
class Darwin < Listener
|
3
|
-
attr_reader :fsevent
|
4
3
|
|
5
4
|
def initialize(*)
|
6
5
|
super
|
@@ -13,12 +12,12 @@ module Guard
|
|
13
12
|
|
14
13
|
def start
|
15
14
|
super
|
16
|
-
|
15
|
+
worker.run
|
17
16
|
end
|
18
17
|
|
19
18
|
def stop
|
20
19
|
super
|
21
|
-
|
20
|
+
worker.stop
|
22
21
|
end
|
23
22
|
|
24
23
|
def self.usable?
|
@@ -38,10 +37,9 @@ module Guard
|
|
38
37
|
private
|
39
38
|
|
40
39
|
def watch(directory)
|
41
|
-
worker.watch
|
40
|
+
worker.watch(directory) do |modified_dirs|
|
42
41
|
files = modified_files(modified_dirs)
|
43
|
-
|
44
|
-
callback.call(files)
|
42
|
+
@callback.call(files) unless files.empty?
|
45
43
|
end
|
46
44
|
end
|
47
45
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Guard
|
2
2
|
class Linux < Listener
|
3
|
-
attr_reader :inotify, :files, :latency
|
4
3
|
|
5
4
|
def initialize(*)
|
6
5
|
super
|
@@ -19,7 +18,7 @@ module Guard
|
|
19
18
|
def stop
|
20
19
|
super
|
21
20
|
@stop = true
|
22
|
-
sleep
|
21
|
+
sleep(@latency)
|
23
22
|
end
|
24
23
|
|
25
24
|
def self.usable?
|
@@ -59,15 +58,14 @@ module Guard
|
|
59
58
|
def watch_change
|
60
59
|
@watch_change = true
|
61
60
|
until @stop
|
62
|
-
if RbConfig::CONFIG['build'] =~ /java/ || IO.select([
|
61
|
+
if RbConfig::CONFIG['build'] =~ /java/ || IO.select([worker.to_io], [], [], @latency)
|
63
62
|
break if @stop
|
64
63
|
|
65
|
-
sleep
|
66
|
-
|
64
|
+
sleep(@latency)
|
65
|
+
worker.process
|
67
66
|
|
68
|
-
|
69
|
-
|
70
|
-
callback.call(modified_files) unless modified_files.empty?
|
67
|
+
files = modified_files(@files.shift(@files.size).map { |f| File.dirname(f) }.uniq)
|
68
|
+
@callback.call(files) unless files.empty?
|
71
69
|
end
|
72
70
|
end
|
73
71
|
@watch_change = false
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Guard
|
2
2
|
class Polling < Listener
|
3
|
-
attr_reader :latency
|
4
3
|
|
5
4
|
def initialize(*)
|
6
5
|
super
|
@@ -23,10 +22,9 @@ module Guard
|
|
23
22
|
def watch_change
|
24
23
|
until @stop
|
25
24
|
start = Time.now.to_f
|
26
|
-
files = modified_files([
|
27
|
-
|
28
|
-
|
29
|
-
nap_time = latency - (Time.now.to_f - start)
|
25
|
+
files = modified_files([@directory], :all => true)
|
26
|
+
@callback.call(files) unless files.empty?
|
27
|
+
nap_time = @latency - (Time.now.to_f - start)
|
30
28
|
sleep(nap_time) if nap_time > 0
|
31
29
|
end
|
32
30
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Guard
|
2
2
|
class Windows < Listener
|
3
|
-
attr_reader :fchange
|
4
3
|
|
5
4
|
def initialize(*)
|
6
5
|
super
|
@@ -10,12 +9,12 @@ module Guard
|
|
10
9
|
|
11
10
|
def start
|
12
11
|
super
|
13
|
-
|
12
|
+
worker.run
|
14
13
|
end
|
15
14
|
|
16
15
|
def stop
|
17
16
|
super
|
18
|
-
|
17
|
+
worker.stop
|
19
18
|
end
|
20
19
|
|
21
20
|
def self.usable?
|
@@ -34,10 +33,9 @@ module Guard
|
|
34
33
|
|
35
34
|
def watch(directory)
|
36
35
|
worker.watch(directory, :all_events, :recursive) do |event|
|
37
|
-
paths = [File.expand_path(event.watcher.path)
|
38
|
-
files = modified_files(paths,
|
39
|
-
|
40
|
-
callback.call(files)
|
36
|
+
paths = [File.expand_path(event.watcher.path)]
|
37
|
+
files = modified_files(paths, :all => true)
|
38
|
+
@callback.call(files) unless files.empty?
|
41
39
|
end
|
42
40
|
end
|
43
41
|
|
data/lib/guard/notifier.rb
CHANGED
@@ -4,6 +4,7 @@ require 'guard/ui'
|
|
4
4
|
|
5
5
|
module Guard
|
6
6
|
module Notifier
|
7
|
+
APPLICATION_NAME = "Guard"
|
7
8
|
|
8
9
|
def self.turn_off
|
9
10
|
ENV["GUARD_NOTIFY"] = 'false'
|
@@ -45,13 +46,16 @@ module Guard
|
|
45
46
|
|
46
47
|
def self.notify_mac(title, message, image, options)
|
47
48
|
require_growl # need for guard-rspec formatter that is called out of guard scope
|
48
|
-
|
49
|
-
|
49
|
+
|
50
|
+
options = { :description => message, :title => title, :icon => image_path(image), :application_name => APPLICATION_NAME }.merge(options)
|
51
|
+
options.delete(:name)
|
52
|
+
|
53
|
+
GrowlNotify.send_notification(options) if enabled?
|
50
54
|
end
|
51
55
|
|
52
56
|
def self.notify_linux(title, message, image, options)
|
53
57
|
require_libnotify # need for guard-rspec formatter that is called out of guard scope
|
54
|
-
default_options = { :body => message, :summary => title, :icon_path => image_path(image) }
|
58
|
+
default_options = { :body => message, :summary => title, :icon_path => image_path(image), :transient => true }
|
55
59
|
Libnotify.show default_options.merge(options) if enabled?
|
56
60
|
end
|
57
61
|
|
@@ -90,10 +94,17 @@ module Guard
|
|
90
94
|
end
|
91
95
|
|
92
96
|
def self.require_growl
|
93
|
-
require '
|
97
|
+
require 'growl_notify'
|
98
|
+
|
99
|
+
if GrowlNotify.application_name != APPLICATION_NAME
|
100
|
+
GrowlNotify.config do |c|
|
101
|
+
c.notifications = c.default_notifications = [ APPLICATION_NAME ]
|
102
|
+
c.application_name = c.notifications.first
|
103
|
+
end
|
104
|
+
end
|
94
105
|
rescue LoadError
|
95
106
|
turn_off
|
96
|
-
UI.info "Please install
|
107
|
+
UI.info "Please install growl_notify gem for Mac OS X notification support and add it to your Gemfile"
|
97
108
|
end
|
98
109
|
|
99
110
|
def self.require_libnotify
|
data/lib/guard/ui.rb
CHANGED
@@ -1,32 +1,55 @@
|
|
1
1
|
module Guard
|
2
2
|
module UI
|
3
|
+
|
4
|
+
ANSI_ESCAPE_BRIGHT = "1"
|
5
|
+
|
6
|
+
ANSI_ESCAPE_BLACK = "30"
|
7
|
+
ANSI_ESCAPE_RED = "31"
|
8
|
+
ANSI_ESCAPE_GREEN = "32"
|
9
|
+
ANSI_ESCAPE_YELLOW = "33"
|
10
|
+
ANSI_ESCAPE_BLUE = "34"
|
11
|
+
ANSI_ESCAPE_MAGENTA = "35"
|
12
|
+
ANSI_ESCAPE_CYAN = "36"
|
13
|
+
ANSI_ESCAPE_WHITE = "37"
|
14
|
+
|
15
|
+
ANSI_ESCAPE_BGBLACK = "40"
|
16
|
+
ANSI_ESCAPE_BGRED = "41"
|
17
|
+
ANSI_ESCAPE_BGGREEN = "42"
|
18
|
+
ANSI_ESCAPE_BGYELLOW = "43"
|
19
|
+
ANSI_ESCAPE_BGBLUE = "44"
|
20
|
+
ANSI_ESCAPE_BGMAGENTA = "45"
|
21
|
+
ANSI_ESCAPE_BGCYAN = "46"
|
22
|
+
ANSI_ESCAPE_BGWHITE = "47"
|
23
|
+
|
3
24
|
class << self
|
4
25
|
|
26
|
+
color_enabled = nil
|
27
|
+
|
5
28
|
def info(message, options = {})
|
6
29
|
unless ENV["GUARD_ENV"] == "test"
|
7
30
|
reset_line if options[:reset]
|
8
|
-
puts
|
31
|
+
puts color(message) if message != ''
|
9
32
|
end
|
10
33
|
end
|
11
34
|
|
12
35
|
def error(message, options = {})
|
13
36
|
unless ENV["GUARD_ENV"] == "test"
|
14
37
|
reset_line if options[:reset]
|
15
|
-
puts
|
38
|
+
puts color('ERROR: ', :red) + message
|
16
39
|
end
|
17
40
|
end
|
18
41
|
|
19
42
|
def deprecation(message, options = {})
|
20
43
|
unless ENV["GUARD_ENV"] == "test"
|
21
44
|
reset_line if options[:reset]
|
22
|
-
puts
|
45
|
+
puts color('DEPRECATION: ', :red) + message
|
23
46
|
end
|
24
47
|
end
|
25
48
|
|
26
49
|
def debug(message, options = {})
|
27
50
|
unless ENV["GUARD_ENV"] == "test"
|
28
51
|
reset_line if options[:reset]
|
29
|
-
puts "DEBUG
|
52
|
+
puts color("DEBUG (#{Time.now.strftime('%T')}): ", :yellow) + message if ::Guard.options && ::Guard.options[:debug]
|
30
53
|
end
|
31
54
|
end
|
32
55
|
|
@@ -40,29 +63,46 @@ module Guard
|
|
40
63
|
|
41
64
|
private
|
42
65
|
|
66
|
+
# @deprecated
|
43
67
|
def reset_color(text)
|
68
|
+
deprecation('UI.reset_color(text) is deprecated, please use color(text, "") instead.')
|
44
69
|
color(text, "")
|
45
70
|
end
|
46
71
|
|
47
|
-
def color(text,
|
72
|
+
def color(text, *color_options)
|
73
|
+
color_code = ""
|
74
|
+
color_options.each do |color_option|
|
75
|
+
color_option = color_option.to_s
|
76
|
+
if color_option != ""
|
77
|
+
if !(color_option =~ /\d+/)
|
78
|
+
color_option = const_get("ANSI_ESCAPE_#{color_option.upcase}")
|
79
|
+
end
|
80
|
+
color_code += ";" + color_option
|
81
|
+
end
|
82
|
+
end
|
48
83
|
color_enabled? ? "\e[0#{color_code}m#{text}\e[0m" : text
|
49
84
|
end
|
50
85
|
|
51
86
|
def color_enabled?
|
52
|
-
@color_enabled
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
87
|
+
if @color_enabled.nil?
|
88
|
+
if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
|
89
|
+
if ENV['ANSICON']
|
90
|
+
@color_enabled = true
|
91
|
+
else
|
92
|
+
begin
|
93
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
94
|
+
require 'Win32/Console/ANSI'
|
95
|
+
@color_enabled = true
|
96
|
+
rescue LoadError
|
97
|
+
@color_enabled = false
|
98
|
+
info "You must 'gem install win32console' to use color on Windows"
|
99
|
+
end
|
61
100
|
end
|
101
|
+
else
|
102
|
+
@color_enabled = true
|
62
103
|
end
|
63
|
-
else
|
64
|
-
true
|
65
104
|
end
|
105
|
+
@color_enabled
|
66
106
|
end
|
67
107
|
|
68
108
|
end
|
data/lib/guard/version.rb
CHANGED
data/man/guard.1
CHANGED
@@ -1,64 +1,130 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "GUARD" "1" "
|
4
|
+
.TH "GUARD" "1" "August 2011" "" ""
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBguard\fR \- Guard keeps an eye on your file modifications\.
|
8
8
|
.
|
9
|
+
.SH "DESCRIPTION"
|
10
|
+
Guard is a command line tool that easily handle events on files modifications\.
|
11
|
+
.
|
9
12
|
.SH "SYNOPSIS"
|
10
13
|
guard \fIcommand\fR \fIoptions\fR
|
11
14
|
.
|
12
|
-
.SH "
|
13
|
-
Guard is a command line tool that easily handle events on files modifications\.
|
15
|
+
.SH "COMMANDS"
|
14
16
|
.
|
15
|
-
.
|
16
|
-
|
17
|
+
.SS "start"
|
18
|
+
Starts Guard\. This is the default command if none is provided\.
|
17
19
|
.
|
18
|
-
.
|
20
|
+
.P
|
21
|
+
The following options are available:
|
19
22
|
.
|
20
|
-
.
|
21
|
-
\fB\-c\fR
|
22
|
-
Clears the Shell after each change\.
|
23
|
+
.P
|
24
|
+
\fB\-c\fR/\fB\-\-clear\fR
|
23
25
|
.
|
24
|
-
.
|
25
|
-
\fB\-n\fR \fIflag\fR, \fB\-\-notify\fR \fIflag\fR
|
26
|
-
Disable notifications (Growl or Libnotify depending on your system)\. Note that notifications can also be disabled globally by setting a GUARD_NOTIFY environment variable to false\. The \fIflag\fR part can be passed to guard using true/false or t/f\.
|
26
|
+
.IP "" 4
|
27
27
|
.
|
28
|
-
.
|
29
|
-
|
30
|
-
|
28
|
+
.nf
|
29
|
+
|
30
|
+
Clears the Shell after each change\.
|
31
31
|
.
|
32
|
-
.
|
33
|
-
\fB\-d\fR, \fB\-\-debug\fR
|
34
|
-
Runs Guard in debug mode\.
|
32
|
+
.fi
|
35
33
|
.
|
36
|
-
.
|
37
|
-
\fB\-h\fR
|
38
|
-
List all of Guard\'s available commands\.
|
34
|
+
.IP "" 0
|
39
35
|
.
|
40
|
-
.
|
36
|
+
.P
|
37
|
+
\fB\-n\fR/\fB\-\-notify\fR \fIflag\fR
|
41
38
|
.
|
42
|
-
.
|
43
|
-
\fBstart\fR
|
44
|
-
Starts Guard\. This is the default command if none is provided\.
|
39
|
+
.IP "" 4
|
45
40
|
.
|
46
|
-
.
|
47
|
-
|
41
|
+
.nf
|
42
|
+
|
43
|
+
Disable notifications (Growl or Libnotify depending on your system)\.
|
44
|
+
Note that notifications can also be disabled globally by setting a GUARD_NOTIFY environment variable to false\.
|
45
|
+
The <flag> part can be passed to guard using true/false or t/f\.
|
46
|
+
.
|
47
|
+
.fi
|
48
|
+
.
|
49
|
+
.IP "" 0
|
50
|
+
.
|
51
|
+
.P
|
52
|
+
\fB\-d\fR/\fB\-\-debug\fR
|
53
|
+
.
|
54
|
+
.IP "" 4
|
55
|
+
.
|
56
|
+
.nf
|
57
|
+
|
58
|
+
Runs Guard in debug mode\.
|
59
|
+
.
|
60
|
+
.fi
|
61
|
+
.
|
62
|
+
.IP "" 0
|
63
|
+
.
|
64
|
+
.P
|
65
|
+
\fB\-g\fR/\fB\-\-group\fR \fIgroup\fR \.\.\.
|
66
|
+
.
|
67
|
+
.IP "" 4
|
68
|
+
.
|
69
|
+
.nf
|
70
|
+
|
71
|
+
Runs only the groups specified\.
|
72
|
+
.
|
73
|
+
.fi
|
74
|
+
.
|
75
|
+
.IP "" 0
|
76
|
+
.
|
77
|
+
.P
|
78
|
+
\fB\-w\fR/\fB\-\-watchdir\fR \fIfolder\fR
|
79
|
+
.
|
80
|
+
.IP "" 4
|
81
|
+
.
|
82
|
+
.nf
|
83
|
+
|
84
|
+
Specify the directory to watch\.
|
85
|
+
.
|
86
|
+
.fi
|
87
|
+
.
|
88
|
+
.IP "" 0
|
89
|
+
.
|
90
|
+
.P
|
91
|
+
\fB\-G\fR/\fB\-\-guardfile\fR \fIfile\fR
|
92
|
+
.
|
93
|
+
.IP "" 4
|
94
|
+
.
|
95
|
+
.nf
|
96
|
+
|
97
|
+
Specify a Guardfile by giving its path\.
|
98
|
+
.
|
99
|
+
.fi
|
100
|
+
.
|
101
|
+
.IP "" 0
|
102
|
+
.
|
103
|
+
.SS "init [guard]"
|
48
104
|
Add the requested guard\'s default Guardfile configuration to the current Guardfile\.
|
49
105
|
.
|
50
|
-
.
|
51
|
-
\
|
106
|
+
.SS "list"
|
107
|
+
Lists guards that can be used with the \fBinit\fR command\.
|
108
|
+
.
|
109
|
+
.SS "\-T/show"
|
52
110
|
List defined groups and guards for the current Guardfile\.
|
53
111
|
.
|
112
|
+
.SH "OPTIONS"
|
113
|
+
.
|
114
|
+
.TP
|
115
|
+
\fB\-h\fR
|
116
|
+
List all of Guard\'s available commands\.
|
117
|
+
.
|
118
|
+
.SS "start"
|
119
|
+
.
|
54
120
|
.SH "EXAMPLES"
|
55
|
-
\fB[bundle exec] guard \-\-clear \-\-group backend frontend \-\-notify false \-\-debug\fR
|
121
|
+
\fB[bundle exec] guard [start] \-\-watchdir ~/dev \-\-guardfile ~/env/Guardfile \-\-clear \-\-group backend frontend \-\-notify false \-\-debug\fR
|
56
122
|
.
|
57
123
|
.P
|
58
124
|
or in a more concise way:
|
59
125
|
.
|
60
126
|
.P
|
61
|
-
\fB[bundle exec] guard \-c \-g backend frontend \-n f \-d\fR
|
127
|
+
\fB[bundle exec] guard [start] \-w ~/dev \-G ~/env/Guardfile \-c \-g backend frontend \-n f \-d\fR
|
62
128
|
.
|
63
129
|
.SH "AUTHORS / CONTRIBUTORS"
|
64
130
|
Thibaud Guillaume\-Gentil is the main author\.
|
@@ -68,3 +134,9 @@ A list of contributors based on all commits can be found here: https://github\.c
|
|
68
134
|
.
|
69
135
|
.P
|
70
136
|
For an exhaustive list of all the contributors, please see the CHANGELOG: https://github\.com/guard/guard/blob/master/CHANGELOG\.md
|
137
|
+
.
|
138
|
+
.P
|
139
|
+
This manual has been written by Remy Coutable\.
|
140
|
+
.
|
141
|
+
.SH "WWW"
|
142
|
+
https://github\.com/guard/guard
|
data/man/guard.1.html
CHANGED
@@ -54,13 +54,13 @@
|
|
54
54
|
|
55
55
|
<div class='man-navigation' style='display:none'>
|
56
56
|
<a href="#NAME">NAME</a>
|
57
|
-
<a href="#SYNOPSIS">SYNOPSIS</a>
|
58
57
|
<a href="#DESCRIPTION">DESCRIPTION</a>
|
59
|
-
<a href="#
|
60
|
-
<a href="#OPTIONS">OPTIONS</a>
|
58
|
+
<a href="#SYNOPSIS">SYNOPSIS</a>
|
61
59
|
<a href="#COMMANDS">COMMANDS</a>
|
60
|
+
<a href="#OPTIONS">OPTIONS</a>
|
62
61
|
<a href="#EXAMPLES">EXAMPLES</a>
|
63
62
|
<a href="#AUTHORS-CONTRIBUTORS">AUTHORS / CONTRIBUTORS</a>
|
63
|
+
<a href="#WWW">WWW</a>
|
64
64
|
</div>
|
65
65
|
|
66
66
|
<ol class='man-decor man-head man head'>
|
@@ -74,47 +74,82 @@
|
|
74
74
|
<code>guard</code> - <span class="man-whatis">Guard keeps an eye on your file modifications.</span>
|
75
75
|
</p>
|
76
76
|
|
77
|
+
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
78
|
+
|
79
|
+
<p>Guard is a command line tool that easily handle events on files modifications.</p>
|
80
|
+
|
77
81
|
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
78
82
|
|
79
83
|
<p>guard <var>command</var> <var>options</var></p>
|
80
84
|
|
81
|
-
<h2 id="
|
85
|
+
<h2 id="COMMANDS">COMMANDS</h2>
|
82
86
|
|
83
|
-
<
|
87
|
+
<h3 id="start">start</h3>
|
84
88
|
|
85
|
-
<
|
89
|
+
<p> Starts Guard. This is the default command if none is provided.</p>
|
86
90
|
|
87
|
-
<p>
|
91
|
+
<p>The following options are available:</p>
|
88
92
|
|
89
|
-
<
|
93
|
+
<p> <code>-c</code>/<code>--clear</code></p>
|
90
94
|
|
91
|
-
<
|
92
|
-
|
93
|
-
<dt><code>-n</code> <var>flag</var>, <code>--notify</code> <var>flag</var></dt><dd><p>Disable notifications (Growl or Libnotify depending on your system).
|
94
|
-
Note that notifications can also be disabled globally by setting a GUARD_NOTIFY environment variable to false.
|
95
|
-
The <var>flag</var> part can be passed to guard using true/false or t/f.</p></dd>
|
96
|
-
<dt><code>-g</code> <var>group</var> ..., <code>--group</code> <var>group</var> ...</dt><dd><p>Runs only the groups specified.</p></dd>
|
97
|
-
<dt><code>-d</code>, <code>--debug</code></dt><dd><p>Runs Guard in debug mode.</p></dd>
|
98
|
-
<dt class="flush"><code>-h</code></dt><dd><p>List all of Guard's available commands.</p></dd>
|
99
|
-
</dl>
|
95
|
+
<pre><code> Clears the Shell after each change.
|
96
|
+
</code></pre>
|
100
97
|
|
98
|
+
<p> <code>-n</code>/<code>--notify</code> <var>flag</var></p>
|
101
99
|
|
102
|
-
<
|
100
|
+
<pre><code> Disable notifications (Growl or Libnotify depending on your system).
|
101
|
+
Note that notifications can also be disabled globally by setting a GUARD_NOTIFY environment variable to false.
|
102
|
+
The <flag> part can be passed to guard using true/false or t/f.
|
103
|
+
</code></pre>
|
104
|
+
|
105
|
+
<p> <code>-d</code>/<code>--debug</code></p>
|
106
|
+
|
107
|
+
<pre><code> Runs Guard in debug mode.
|
108
|
+
</code></pre>
|
109
|
+
|
110
|
+
<p> <code>-g</code>/<code>--group</code> <var>group</var> ...</p>
|
111
|
+
|
112
|
+
<pre><code> Runs only the groups specified.
|
113
|
+
</code></pre>
|
114
|
+
|
115
|
+
<p> <code>-w</code>/<code>--watchdir</code> <var>folder</var></p>
|
116
|
+
|
117
|
+
<pre><code> Specify the directory to watch.
|
118
|
+
</code></pre>
|
119
|
+
|
120
|
+
<p> <code>-G</code>/<code>--guardfile</code> <var>file</var></p>
|
121
|
+
|
122
|
+
<pre><code> Specify a Guardfile by giving its path.
|
123
|
+
</code></pre>
|
124
|
+
|
125
|
+
<h3 id="init-guard-">init [guard]</h3>
|
126
|
+
|
127
|
+
<p> Add the requested guard's default Guardfile configuration to the current Guardfile.</p>
|
128
|
+
|
129
|
+
<h3 id="list">list</h3>
|
130
|
+
|
131
|
+
<p> Lists guards that can be used with the <code>init</code> command.</p>
|
132
|
+
|
133
|
+
<h3 id="-T-show">-T/show</h3>
|
134
|
+
|
135
|
+
<p> List defined groups and guards for the current Guardfile.</p>
|
136
|
+
|
137
|
+
<h2 id="OPTIONS">OPTIONS</h2>
|
103
138
|
|
104
139
|
<dl>
|
105
|
-
<dt class="flush"><code
|
106
|
-
<dt><code>init</code> [guard]</dt><dd><p>Add the requested guard's default Guardfile configuration to the current Guardfile.</p></dd>
|
107
|
-
<dt><code>show</code>, <code>-T</code></dt><dd><p>List defined groups and guards for the current Guardfile.</p></dd>
|
140
|
+
<dt class="flush"><code>-h</code></dt><dd>List all of Guard's available commands.</dd>
|
108
141
|
</dl>
|
109
142
|
|
110
143
|
|
144
|
+
<h3 id="start">start</h3>
|
145
|
+
|
111
146
|
<h2 id="EXAMPLES">EXAMPLES</h2>
|
112
147
|
|
113
|
-
<p><code>[bundle exec] guard --clear --group backend frontend --notify false --debug</code></p>
|
148
|
+
<p><code>[bundle exec] guard [start] --watchdir ~/dev --guardfile ~/env/Guardfile --clear --group backend frontend --notify false --debug</code></p>
|
114
149
|
|
115
150
|
<p>or in a more concise way:</p>
|
116
151
|
|
117
|
-
<p><code>[bundle exec] guard -c -g backend frontend -n f -d</code></p>
|
152
|
+
<p><code>[bundle exec] guard [start] -w ~/dev -G ~/env/Guardfile -c -g backend frontend -n f -d</code></p>
|
118
153
|
|
119
154
|
<h2 id="AUTHORS-CONTRIBUTORS">AUTHORS / CONTRIBUTORS</h2>
|
120
155
|
|
@@ -126,10 +161,16 @@ https://github.com/guard/guard/contributors</p>
|
|
126
161
|
<p>For an exhaustive list of all the contributors, please see the CHANGELOG:
|
127
162
|
https://github.com/guard/guard/blob/master/CHANGELOG.md</p>
|
128
163
|
|
164
|
+
<p>This manual has been written by Remy Coutable.</p>
|
165
|
+
|
166
|
+
<h2 id="WWW">WWW</h2>
|
167
|
+
|
168
|
+
<p>https://github.com/guard/guard</p>
|
169
|
+
|
129
170
|
|
130
171
|
<ol class='man-decor man-foot man foot'>
|
131
172
|
<li class='tl'></li>
|
132
|
-
<li class='tc'>
|
173
|
+
<li class='tc'>August 2011</li>
|
133
174
|
<li class='tr'>guard(1)</li>
|
134
175
|
</ol>
|
135
176
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-08-13 00:00:00.000000000 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
17
|
-
requirement: &
|
17
|
+
requirement: &2151817180 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2151817180
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rspec
|
28
|
-
requirement: &
|
28
|
+
requirement: &2151815560 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 2.6.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2151815560
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: guard-rspec
|
39
|
-
requirement: &
|
39
|
+
requirement: &2151813940 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 0.3.1
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2151813940
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: thor
|
50
|
-
requirement: &
|
50
|
+
requirement: &2151811280 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
@@ -55,7 +55,7 @@ dependencies:
|
|
55
55
|
version: 0.14.6
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2151811280
|
59
59
|
description: Guard is a command line tool to easily handle events on file system modifications.
|
60
60
|
email:
|
61
61
|
- thibaud@thibaud.me
|