fswatch 0.0.1 → 0.0.2
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/README.md +30 -2
- data/fswatch.gemspec +1 -1
- data/lib/fswatch.rb +43 -4
- data/lib/fswatch/version.rb +1 -1
- metadata +17 -6
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# fswatch
|
2
|
-
A
|
2
|
+
A trivial Ruby script for triggering a command on file system change in OS X.
|
3
3
|
|
4
4
|
## Installation
|
5
5
|
|
@@ -11,4 +11,32 @@ The point was mainly to shove this into gemcutter so it's easy to deploy:
|
|
11
11
|
|
12
12
|
On file system change execute `ls -l`:
|
13
13
|
|
14
|
-
$ fswatch ls -l
|
14
|
+
$ fswatch ls -l
|
15
|
+
|
16
|
+
Watch a specific path:
|
17
|
+
|
18
|
+
$ fswatch -d / ls -l
|
19
|
+
|
20
|
+
Wait at least 5 seconds before refreshing using deferral:
|
21
|
+
|
22
|
+
$ fswatch -t5 ls -l
|
23
|
+
|
24
|
+
If the command is long running and you want to forcibly restart it on file system change:
|
25
|
+
|
26
|
+
$ fswatch -x ls -l
|
27
|
+
|
28
|
+
If you want to pass the paths which have changed as a parameter to the command:
|
29
|
+
|
30
|
+
$ fswatch -p echo
|
31
|
+
|
32
|
+
If you want to place the paths somewhere other than at the end, use the `@fspaths` token:
|
33
|
+
|
34
|
+
$ fswatch -p "echo @fspaths | wc -l"
|
35
|
+
|
36
|
+
You can also use `@fspathscolon` for colon-separated paths and `@fspatchcomma` for comma-separated paths.
|
37
|
+
|
38
|
+
## Examples
|
39
|
+
|
40
|
+
Automatically rsync on changes:
|
41
|
+
|
42
|
+
$ fswatch -t 5 "rsync -av . devbox:/devfolder-on-devbox/"
|
data/fswatch.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
# specify any dependencies here; for example:
|
22
22
|
# s.add_development_dependency "rspec"
|
23
|
-
# s.add_runtime_dependency "rest-client"
|
24
23
|
s.add_runtime_dependency 'rb-fsevent'
|
24
|
+
s.add_runtime_dependency 'trollop'
|
25
25
|
s.add_runtime_dependency 'term-ansicolor'
|
26
26
|
end
|
data/lib/fswatch.rb
CHANGED
@@ -1,16 +1,55 @@
|
|
1
1
|
require 'fswatch/version'
|
2
2
|
|
3
|
+
require 'rubygems'
|
4
|
+
require 'trollop'
|
3
5
|
require 'rb-fsevent'
|
4
6
|
require 'term/ansicolor'
|
5
7
|
|
6
8
|
include Term::ANSIColor
|
7
9
|
|
8
10
|
module FSWatch
|
9
|
-
|
10
|
-
|
11
|
-
|
11
|
+
|
12
|
+
opts = Trollop::options do
|
13
|
+
version "fswatch - #{VERSION} (c) 2012 w.k.macura - Released under BSD license"
|
14
|
+
banner <<-EOS
|
15
|
+
A utility for triggering a command on file system change.
|
16
|
+
EOS
|
17
|
+
|
18
|
+
opt :dir, "the directory to watch", :default => '.'
|
19
|
+
opt :throttle, "only allow one fsevent in the given amount of seconds", :default => 1
|
20
|
+
opt :kill, "forcibly restart the command if it's still running during an fs trigger", :short => :x
|
21
|
+
opt :paths, "append the changed paths when calling the command"
|
22
|
+
end
|
23
|
+
|
24
|
+
if opts[:dir] == '.'
|
25
|
+
dir = Dir.pwd
|
26
|
+
else
|
27
|
+
dir = opts[:dir]
|
28
|
+
end
|
29
|
+
|
30
|
+
fsevent = FSEvent.new
|
31
|
+
fsevent.watch dir, { :latency => opts[:throttle], :no_defer => true } do |directories|
|
12
32
|
print red, "\n\n--- Changed: ", bold, blue, directories.inspect, reset, "\n"
|
13
|
-
|
33
|
+
if @processPid
|
34
|
+
status = Process.wait(@processPid, Process::WNOHANG)
|
35
|
+
if status == nil
|
36
|
+
print red, "!!! Killing #{@processPid}", reset, "\n"
|
37
|
+
Process.kill("KILL", @processPid)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
command = ARGV.join(' ')
|
42
|
+
command.sub!("@fspathscolon", directories.join(':'))
|
43
|
+
command.sub!("@fspathscomma", directories.join(','))
|
44
|
+
command.sub!("@fspaths", directories.join(' '))
|
45
|
+
|
46
|
+
if opts[:paths]
|
47
|
+
command << ' ' << directories.join(' ')
|
48
|
+
end
|
49
|
+
|
50
|
+
@processPid = fork {
|
51
|
+
system(command)
|
52
|
+
}
|
14
53
|
end
|
15
54
|
|
16
55
|
fsevent.run
|
data/lib/fswatch/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fswatch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-26 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rb-fsevent
|
16
|
-
requirement: &
|
16
|
+
requirement: &70115501893640 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,21 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70115501893640
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: trollop
|
27
|
+
requirement: &70115501893220 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70115501893220
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: term-ansicolor
|
27
|
-
requirement: &
|
38
|
+
requirement: &70115501892800 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ! '>='
|
@@ -32,7 +43,7 @@ dependencies:
|
|
32
43
|
version: '0'
|
33
44
|
type: :runtime
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *70115501892800
|
36
47
|
description: ''
|
37
48
|
email:
|
38
49
|
- wiktor@tumblr.com
|