chriseppstein-compass 0.8.14 → 0.8.15
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/REVISION +1 -1
- data/VERSION.yml +1 -1
- data/lib/vendor/fssm/backends/fsevents.rb +3 -2
- data/lib/vendor/fssm/backends/polling.rb +3 -1
- data/lib/vendor/fssm/ext.rb +26 -1
- data/lib/vendor/fssm/state.rb +8 -7
- data/lib/vendor/fssm/tree.rb +176 -0
- data/lib/vendor/fssm.rb +7 -3
- metadata +4 -4
data/REVISION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
495854bb78b7b4ffbd94fbdaaaefbc5892ad47c4
|
data/VERSION.yml
CHANGED
@@ -8,16 +8,17 @@ module FSSM::Backends
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def add_path(path, preload=true)
|
11
|
-
handler = FSSM::State.new(path
|
11
|
+
handler = FSSM::State.new(path)
|
12
12
|
@handlers["#{path}"] = handler
|
13
13
|
|
14
|
-
fsevent = Rucola::FSEvents.new("#{path}") do |events|
|
14
|
+
fsevent = Rucola::FSEvents.new("#{path}", {:latency => 0.5}) do |events|
|
15
15
|
events.each do |event|
|
16
16
|
handler.refresh(event.path)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
fsevent.create_stream
|
21
|
+
handler.refresh(path.to_pathname, true) if preload
|
21
22
|
fsevent.start
|
22
23
|
@fsevents << fsevent
|
23
24
|
end
|
data/lib/vendor/fssm/ext.rb
CHANGED
@@ -4,7 +4,32 @@ class Pathname
|
|
4
4
|
path.is_a?(Pathname) ? path : new(path)
|
5
5
|
end
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
|
+
# before overwriting chop_basename:
|
9
|
+
# %total - 29.50%
|
10
|
+
# %self - 20.50%
|
11
|
+
# after overwriting chop_basename:
|
12
|
+
# %total - 24.36%
|
13
|
+
# %self - 15.47%
|
14
|
+
CHOP_PAT = /\A#{SEPARATOR_PAT}?\z/
|
15
|
+
def chop_basename(path)
|
16
|
+
base = File.basename(path)
|
17
|
+
# the original version of this method recalculates this regexp
|
18
|
+
# each run, despite the pattern never changing.
|
19
|
+
if CHOP_PAT =~ base
|
20
|
+
return nil
|
21
|
+
else
|
22
|
+
return path[0, path.rindex(base)], base
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def segments
|
27
|
+
prefix, names = split_names(@path)
|
28
|
+
names.unshift(prefix) unless prefix.empty?
|
29
|
+
names.shift if names[0] == '.'
|
30
|
+
names
|
31
|
+
end
|
32
|
+
|
8
33
|
def names
|
9
34
|
prefix, names = split_names(@path)
|
10
35
|
names
|
data/lib/vendor/fssm/state.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
class FSSM::State
|
3
|
-
def initialize(path
|
3
|
+
def initialize(path)
|
4
4
|
@path = path
|
5
|
-
@cache = FSSM::Cache.new
|
6
|
-
snapshot(@path.to_pathname) if preload
|
5
|
+
@cache = FSSM::Tree::Cache.new
|
7
6
|
end
|
8
7
|
|
9
|
-
def refresh(base=nil)
|
8
|
+
def refresh(base=nil, skip_callbacks=false)
|
10
9
|
previous, current = recache(base || @path.to_pathname)
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
unless skip_callbacks
|
12
|
+
deleted(previous, current)
|
13
|
+
created(previous, current)
|
14
|
+
modified(previous, current)
|
15
|
+
end
|
15
16
|
end
|
16
17
|
|
17
18
|
private
|
@@ -0,0 +1,176 @@
|
|
1
|
+
module FSSM::Tree
|
2
|
+
module NodeBase
|
3
|
+
def initialize
|
4
|
+
@children = {}
|
5
|
+
end
|
6
|
+
|
7
|
+
protected
|
8
|
+
|
9
|
+
def child(segment)
|
10
|
+
@children["#{segment}"]
|
11
|
+
end
|
12
|
+
|
13
|
+
def child!(segment)
|
14
|
+
(@children["#{segment}"] ||= Node.new)
|
15
|
+
end
|
16
|
+
|
17
|
+
def has_child?(segment)
|
18
|
+
@children.has_key?("#{segment}")
|
19
|
+
end
|
20
|
+
|
21
|
+
def remove_child(segment)
|
22
|
+
@children.delete("#{segment}")
|
23
|
+
end
|
24
|
+
|
25
|
+
def remove_children
|
26
|
+
@children.clear
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module NodeEnumerable
|
31
|
+
include NodeBase
|
32
|
+
include Enumerable
|
33
|
+
|
34
|
+
def each(prefix=nil, &block)
|
35
|
+
@children.each do |segment, node|
|
36
|
+
cprefix = prefix ?
|
37
|
+
Pathname.for(prefix).join(segment) :
|
38
|
+
Pathname.for(segment)
|
39
|
+
block.call(cprefix, node)
|
40
|
+
node.each(cprefix, &block)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
module NodeInsertion
|
46
|
+
include NodeBase
|
47
|
+
|
48
|
+
def unset(path)
|
49
|
+
key = key_segments(path)
|
50
|
+
|
51
|
+
if key.empty?
|
52
|
+
remove_children
|
53
|
+
return nil
|
54
|
+
end
|
55
|
+
|
56
|
+
segment = key.pop
|
57
|
+
node = descendant(key)
|
58
|
+
|
59
|
+
return unless node
|
60
|
+
|
61
|
+
node.remove_child(segment)
|
62
|
+
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
|
66
|
+
def set(path)
|
67
|
+
node = descendant!(path)
|
68
|
+
node.from_path(path).mtime
|
69
|
+
end
|
70
|
+
|
71
|
+
protected
|
72
|
+
|
73
|
+
def key_segments(key)
|
74
|
+
return key if key.is_a?(Array)
|
75
|
+
Pathname.for(key).segments
|
76
|
+
end
|
77
|
+
|
78
|
+
def descendant(path)
|
79
|
+
recurse(path, false)
|
80
|
+
end
|
81
|
+
|
82
|
+
def descendant!(path)
|
83
|
+
recurse(path, true)
|
84
|
+
end
|
85
|
+
|
86
|
+
def recurse(key, create=false)
|
87
|
+
key = key_segments(key)
|
88
|
+
node = self
|
89
|
+
|
90
|
+
until key.empty?
|
91
|
+
segment = key.shift
|
92
|
+
node = create ? node.child!(segment) : node.child(segment)
|
93
|
+
return nil unless node
|
94
|
+
end
|
95
|
+
|
96
|
+
node
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
module CacheDebug
|
101
|
+
def set(path)
|
102
|
+
FSSM.dbg("Cache#set(#{path})")
|
103
|
+
super
|
104
|
+
end
|
105
|
+
|
106
|
+
def unset(path)
|
107
|
+
FSSM.dbg("Cache#unset(#{path})")
|
108
|
+
super
|
109
|
+
end
|
110
|
+
|
111
|
+
def ftype(ft)
|
112
|
+
FSSM.dbg("Cache#ftype(#{ft})")
|
113
|
+
super
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
class Node
|
118
|
+
include NodeBase
|
119
|
+
include NodeEnumerable
|
120
|
+
|
121
|
+
attr_accessor :mtime
|
122
|
+
attr_accessor :ftype
|
123
|
+
|
124
|
+
def <=>(other)
|
125
|
+
return unless other.is_a?(::FSSM::Tree::Node)
|
126
|
+
self.mtime <=> other.mtime
|
127
|
+
end
|
128
|
+
|
129
|
+
def from_path(path)
|
130
|
+
path = Pathname.for(path)
|
131
|
+
@ftype = path.ftype
|
132
|
+
# this handles bad symlinks without failing. why handle bad symlinks at
|
133
|
+
# all? well, we could still be interested in their creation and deletion.
|
134
|
+
@mtime = path.symlink? ? Time.at(0) : path.mtime
|
135
|
+
self
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
class Cache
|
140
|
+
include NodeBase
|
141
|
+
include NodeEnumerable
|
142
|
+
include NodeInsertion
|
143
|
+
include CacheDebug if $DEBUG
|
144
|
+
|
145
|
+
def set(path)
|
146
|
+
# all paths set from this level need to be absolute
|
147
|
+
# realpath will fail on broken links
|
148
|
+
path = Pathname.for(path).expand_path
|
149
|
+
super(path)
|
150
|
+
end
|
151
|
+
|
152
|
+
def files
|
153
|
+
ftype('file')
|
154
|
+
end
|
155
|
+
|
156
|
+
def directories
|
157
|
+
ftype('directory')
|
158
|
+
end
|
159
|
+
|
160
|
+
def links
|
161
|
+
ftype('link')
|
162
|
+
end
|
163
|
+
alias symlinks links
|
164
|
+
|
165
|
+
private
|
166
|
+
|
167
|
+
def ftype(ft)
|
168
|
+
inject({}) do |hash, entry|
|
169
|
+
path, node = entry
|
170
|
+
hash["#{path}"] = node.mtime if node.ftype == ft
|
171
|
+
hash
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
data/lib/vendor/fssm.rb
CHANGED
@@ -4,9 +4,13 @@ $LOAD_PATH.unshift dir unless $LOAD_PATH.include?(dir)
|
|
4
4
|
module FSSM
|
5
5
|
FileNotFoundError = Class.new(StandardError)
|
6
6
|
CallbackError = Class.new(StandardError)
|
7
|
-
|
7
|
+
|
8
8
|
class << self
|
9
|
-
def
|
9
|
+
def dbg(msg=nil)
|
10
|
+
STDERR.puts(msg)
|
11
|
+
end
|
12
|
+
|
13
|
+
def monitor(*args, &block)
|
10
14
|
monitor = FSSM::Monitor.new
|
11
15
|
context = args.empty? ? monitor : monitor.path(*args)
|
12
16
|
|
@@ -28,7 +32,7 @@ require 'pathname'
|
|
28
32
|
|
29
33
|
require 'fssm/ext'
|
30
34
|
require 'fssm/support'
|
31
|
-
require 'fssm/
|
35
|
+
require 'fssm/tree'
|
32
36
|
require 'fssm/path'
|
33
37
|
require 'fssm/state'
|
34
38
|
require 'fssm/monitor'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chriseppstein-compass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Eppstein
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-05 00:00:00 -07:00
|
13
13
|
default_executable: compass
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -270,6 +270,7 @@ files:
|
|
270
270
|
- lib/vendor/fssm/path.rb
|
271
271
|
- lib/vendor/fssm/state.rb
|
272
272
|
- lib/vendor/fssm/support.rb
|
273
|
+
- lib/vendor/fssm/tree.rb
|
273
274
|
- test/command_line_helper.rb
|
274
275
|
- test/command_line_test.rb
|
275
276
|
- test/compass_test.rb
|
@@ -307,7 +308,6 @@ files:
|
|
307
308
|
- test/test_rails_helper.rb
|
308
309
|
has_rdoc: false
|
309
310
|
homepage: http://compass-style.org
|
310
|
-
licenses:
|
311
311
|
post_install_message:
|
312
312
|
rdoc_options:
|
313
313
|
- --charset=UTF-8
|
@@ -328,7 +328,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
328
328
|
requirements: []
|
329
329
|
|
330
330
|
rubyforge_project: compass
|
331
|
-
rubygems_version: 1.
|
331
|
+
rubygems_version: 1.2.0
|
332
332
|
signing_key:
|
333
333
|
specification_version: 3
|
334
334
|
summary: A Real Stylesheet Framework
|