sass 3.2.0.alpha.269 → 3.2.0.alpha.273
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 +1 -1
- data/lib/sass/script/functions.rb +8 -9
- data/lib/sass/script/number.rb +1 -1
- data/lib/sass/tree/visitors/check_nesting.rb +19 -19
- data/lib/sass/tree/visitors/perform.rb +2 -2
- data/lib/sass/tree/visitors/to_css.rb +2 -3
- data/test/sass/engine_test.rb +3 -22
- data/test/sass/scss/css_test.rb +15 -0
- data/test/sass/scss/scss_test.rb +69 -3
- data/vendor/listen/CHANGELOG.md +70 -13
- data/vendor/listen/Gemfile +4 -16
- data/vendor/listen/README.md +3 -3
- data/vendor/listen/lib/listen/adapter.rb +1 -1
- data/vendor/listen/lib/listen/adapters/linux.rb +1 -1
- data/vendor/listen/lib/listen/directory_record.rb +9 -8
- data/vendor/listen/lib/listen/version.rb +1 -1
- data/vendor/listen/spec/listen/directory_record_spec.rb +105 -1
- data/vendor/listen/spec/spec_helper.rb +4 -2
- metadata +6 -8
- data/test/sass/templates/bork5.sass +0 -3
- data/test/sass/templates/nested_bork5.sass +0 -2
data/REVISION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
9b1820a2b092ba228eb20bea33b07ddd0793146f
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.0.alpha.
|
1
|
+
3.2.0.alpha.273
|
@@ -973,23 +973,22 @@ module Sass::Script
|
|
973
973
|
|
974
974
|
Sass::Util.check_range("Weight", 0..100, weight, '%')
|
975
975
|
|
976
|
-
# This algorithm factors in both the user-provided weight
|
977
|
-
#
|
978
|
-
# to
|
976
|
+
# This algorithm factors in both the user-provided weight (w) and the
|
977
|
+
# difference between the alpha values of the two colors (a) to decide how
|
978
|
+
# to perform the weighted average of the two RGB values.
|
979
979
|
#
|
980
980
|
# It works by first normalizing both parameters to be within [-1, 1],
|
981
|
-
# where 1 indicates "only use color1", -1 indicates "only use
|
982
|
-
#
|
981
|
+
# where 1 indicates "only use color1", -1 indicates "only use color2", and
|
982
|
+
# all values in between indicated a proportionately weighted average.
|
983
983
|
#
|
984
|
-
# Once we have the normalized variables w and a,
|
985
|
-
#
|
986
|
-
# to get the combined weight (in [-1, 1]) of color1.
|
984
|
+
# Once we have the normalized variables w and a, we apply the formula
|
985
|
+
# (w + a)/(1 + w*a) to get the combined weight (in [-1, 1]) of color1.
|
987
986
|
# This formula has two especially nice properties:
|
988
987
|
#
|
989
988
|
# * When either w or a are -1 or 1, the combined weight is also that number
|
990
989
|
# (cases where w * a == -1 are undefined, and handled as a special case).
|
991
990
|
#
|
992
|
-
# * When a is 0, the combined weight is w, and vice versa
|
991
|
+
# * When a is 0, the combined weight is w, and vice versa.
|
993
992
|
#
|
994
993
|
# Finally, the weight of color1 is renormalized to be within [0, 1]
|
995
994
|
# and the weight of color2 is given by 1 minus the weight of color1.
|
data/lib/sass/script/number.rb
CHANGED
@@ -73,20 +73,6 @@ class Sass::Tree::Visitors::CheckNesting < Sass::Tree::Visitors::Base
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
-
def invalid_function_parent?(parent, child)
|
77
|
-
"Functions may only be defined at the root of a document." unless parent.is_a?(Sass::Tree::RootNode)
|
78
|
-
end
|
79
|
-
|
80
|
-
VALID_FUNCTION_CHILDREN = [
|
81
|
-
Sass::Tree::CommentNode, Sass::Tree::DebugNode, Sass::Tree::ReturnNode,
|
82
|
-
Sass::Tree::VariableNode, Sass::Tree::WarnNode
|
83
|
-
] + CONTROL_NODES
|
84
|
-
def invalid_function_child?(parent, child)
|
85
|
-
unless is_any_of?(child, VALID_FUNCTION_CHILDREN)
|
86
|
-
"Functions can only contain variable declarations and control directives."
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
76
|
INVALID_IMPORT_PARENTS = CONTROL_NODES +
|
91
77
|
[Sass::Tree::MixinDefNode, Sass::Tree::MixinNode]
|
92
78
|
def invalid_import_parent?(parent, child)
|
@@ -95,10 +81,6 @@ class Sass::Tree::Visitors::CheckNesting < Sass::Tree::Visitors::Base
|
|
95
81
|
end
|
96
82
|
return if parent.is_a?(Sass::Tree::RootNode)
|
97
83
|
return "CSS import directives may only be used at the root of a document." if child.css_import?
|
98
|
-
# If this is a nested @import, we need to make sure it doesn't have anything
|
99
|
-
# that's legal at top-level but not in the current context (e.g. mixin defs).
|
100
|
-
child.imported_file.to_tree.children.each {|c| visit(c)}
|
101
|
-
nil
|
102
84
|
rescue Sass::SyntaxError => e
|
103
85
|
e.modify_backtrace(:filename => child.imported_file.options[:filename])
|
104
86
|
e.add_backtrace(:filename => child.filename, :line => child.line)
|
@@ -106,7 +88,25 @@ class Sass::Tree::Visitors::CheckNesting < Sass::Tree::Visitors::Base
|
|
106
88
|
end
|
107
89
|
|
108
90
|
def invalid_mixindef_parent?(parent, child)
|
109
|
-
|
91
|
+
unless (@parents.map {|p| p.class} & INVALID_IMPORT_PARENTS).empty?
|
92
|
+
return "Mixins may not be defined within control directives or other mixins."
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def invalid_function_parent?(parent, child)
|
97
|
+
unless (@parents.map {|p| p.class} & INVALID_IMPORT_PARENTS).empty?
|
98
|
+
return "Functions may not be defined within control directives or other mixins."
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
VALID_FUNCTION_CHILDREN = [
|
103
|
+
Sass::Tree::CommentNode, Sass::Tree::DebugNode, Sass::Tree::ReturnNode,
|
104
|
+
Sass::Tree::VariableNode, Sass::Tree::WarnNode
|
105
|
+
] + CONTROL_NODES
|
106
|
+
def invalid_function_child?(parent, child)
|
107
|
+
unless is_any_of?(child, VALID_FUNCTION_CHILDREN)
|
108
|
+
"Functions can only contain variable declarations and control directives."
|
109
|
+
end
|
110
110
|
end
|
111
111
|
|
112
112
|
VALID_PROP_CHILDREN = [Sass::Tree::CommentNode, Sass::Tree::PropNode, Sass::Tree::MixinNode] + CONTROL_NODES
|
@@ -113,7 +113,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
|
|
113
113
|
|
114
114
|
# Loads the function into the environment.
|
115
115
|
def visit_function(node)
|
116
|
-
@environment.
|
116
|
+
@environment.set_local_function(node.name,
|
117
117
|
Sass::Callable.new(node.name, node.args, @environment, node.children, !:has_content))
|
118
118
|
[]
|
119
119
|
end
|
@@ -155,7 +155,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
|
|
155
155
|
|
156
156
|
# Loads a mixin into the environment.
|
157
157
|
def visit_mixindef(node)
|
158
|
-
@environment.
|
158
|
+
@environment.set_local_mixin(node.name,
|
159
159
|
Sass::Callable.new(node.name, node.args, @environment, node.children, node.has_content))
|
160
160
|
[]
|
161
161
|
end
|
@@ -59,9 +59,8 @@ class Sass::Tree::Visitors::ToCss < Sass::Tree::Visitors::Base
|
|
59
59
|
return if node.invisible?
|
60
60
|
spaces = (' ' * [@tabs - node.resolved_value[/^ */].size, 0].max)
|
61
61
|
|
62
|
-
content = node.resolved_value.gsub(/^/, spaces)
|
63
|
-
|
64
|
-
end
|
62
|
+
content = node.resolved_value.gsub(/^/, spaces)
|
63
|
+
content.gsub!(%r{^(\s*)//(.*)$}) {|md| "#{$1}/*#{$2} */"} if node.type == :silent
|
65
64
|
content.gsub!(/\n +(\* *(?!\/))?/, ' ') if (node.style == :compact || node.style == :compressed) && node.type != :loud
|
66
65
|
content
|
67
66
|
end
|
data/test/sass/engine_test.rb
CHANGED
@@ -73,7 +73,7 @@ MSG
|
|
73
73
|
"=foo\n :color red\n.bar\n +bang" => "Undefined mixin 'bang'.",
|
74
74
|
"=foo\n :color red\n.bar\n +bang_bop" => "Undefined mixin 'bang_bop'.",
|
75
75
|
"=foo\n :color red\n.bar\n +bang-bop" => "Undefined mixin 'bang-bop'.",
|
76
|
-
".
|
76
|
+
".foo\n =foo\n :color red\n.bar\n +foo" => "Undefined mixin 'foo'.",
|
77
77
|
" a\n b: c" => ["Indenting at the beginning of the document is illegal.", 1],
|
78
78
|
" \n \n\t\n a\n b: c" => ["Indenting at the beginning of the document is illegal.", 4],
|
79
79
|
"a\n b: c\n b: c" => ["Inconsistent indentation: 1 space was used for indentation, but the rest of the document was indented using 2 spaces.", 3],
|
@@ -105,7 +105,6 @@ MSG
|
|
105
105
|
"@function foo($)\n @return 1" => ['Invalid CSS after "(": expected variable (e.g. $foo), was "$)"', 1],
|
106
106
|
"@function foo()\n @return" => 'Invalid @return: expected expression.',
|
107
107
|
"@function foo()\n @return 1\n $var: val" => 'Illegal nesting: Nothing may be nested beneath return directives.',
|
108
|
-
"foo\n @function bar()\n @return 1" => ['Functions may only be defined at the root of a document.', 2],
|
109
108
|
"@function foo($a)\n @return 1\na\n b: foo()" => 'Function foo is missing argument $a',
|
110
109
|
"@function foo()\n @return 1\na\n b: foo(2)" => 'Wrong number of arguments (1 for 0) for `foo\'',
|
111
110
|
"@function foo()\n @return 1\na\n b: foo($a: 1)" => "Function foo doesn't have an argument named $a",
|
@@ -274,7 +273,7 @@ SASS
|
|
274
273
|
end
|
275
274
|
|
276
275
|
def test_imported_exception
|
277
|
-
[1, 2, 3, 4
|
276
|
+
[1, 2, 3, 4].each do |i|
|
278
277
|
begin
|
279
278
|
Sass::Engine.new("@import bork#{i}", :load_paths => [File.dirname(__FILE__) + '/templates/']).render
|
280
279
|
rescue Sass::SyntaxError => err
|
@@ -296,7 +295,7 @@ SASS
|
|
296
295
|
end
|
297
296
|
|
298
297
|
def test_double_imported_exception
|
299
|
-
[1, 2, 3, 4
|
298
|
+
[1, 2, 3, 4].each do |i|
|
300
299
|
begin
|
301
300
|
Sass::Engine.new("@import nested_bork#{i}", :load_paths => [File.dirname(__FILE__) + '/templates/']).render
|
302
301
|
rescue Sass::SyntaxError => err
|
@@ -723,24 +722,6 @@ CSS
|
|
723
722
|
SASS
|
724
723
|
end
|
725
724
|
|
726
|
-
def test_nested_import_with_toplevel_constructs
|
727
|
-
Sass::Engine.new(".foo\n @import importee", :load_paths => [File.dirname(__FILE__) + '/templates/']).render
|
728
|
-
rescue Sass::SyntaxError => err
|
729
|
-
assert_equal(3, err.sass_line)
|
730
|
-
assert_match(/(\/|^)importee\.sass$/, err.sass_filename)
|
731
|
-
|
732
|
-
assert_hash_has(err.sass_backtrace.first,
|
733
|
-
:filename => err.sass_filename, :line => err.sass_line)
|
734
|
-
|
735
|
-
assert_nil(err.sass_backtrace[1][:filename])
|
736
|
-
assert_equal(2, err.sass_backtrace[1][:line])
|
737
|
-
|
738
|
-
assert_match(/(\/|^)importee\.sass:3$/, err.backtrace.first)
|
739
|
-
assert_equal("(sass):2", err.backtrace[1])
|
740
|
-
else
|
741
|
-
assert(false, "Exception not raised for importing mixins nested")
|
742
|
-
end
|
743
|
-
|
744
725
|
def test_units
|
745
726
|
renders_correctly "units"
|
746
727
|
end
|
data/test/sass/scss/css_test.rb
CHANGED
@@ -1027,6 +1027,21 @@ bar {baz: bang}
|
|
1027
1027
|
SCSS
|
1028
1028
|
end
|
1029
1029
|
|
1030
|
+
def test_single_line_comment_within_multiline_comment
|
1031
|
+
assert_equal(<<CSS, render(<<SCSS))
|
1032
|
+
body {
|
1033
|
+
/*
|
1034
|
+
//comment here
|
1035
|
+
*/ }
|
1036
|
+
CSS
|
1037
|
+
body {
|
1038
|
+
/*
|
1039
|
+
//comment here
|
1040
|
+
*/
|
1041
|
+
}
|
1042
|
+
SCSS
|
1043
|
+
end
|
1044
|
+
|
1030
1045
|
private
|
1031
1046
|
|
1032
1047
|
def assert_selector_parses(selector)
|
data/test/sass/scss/scss_test.rb
CHANGED
@@ -1073,17 +1073,83 @@ $domain: "sass-lang.com";
|
|
1073
1073
|
SCSS
|
1074
1074
|
end
|
1075
1075
|
|
1076
|
+
def test_nested_mixin_def
|
1077
|
+
assert_equal <<CSS, render(<<SCSS)
|
1078
|
+
foo {
|
1079
|
+
a: b; }
|
1080
|
+
CSS
|
1081
|
+
foo {
|
1082
|
+
@mixin bar {a: b}
|
1083
|
+
@include bar; }
|
1084
|
+
SCSS
|
1085
|
+
end
|
1086
|
+
|
1087
|
+
def test_nested_mixin_shadow
|
1088
|
+
assert_equal <<CSS, render(<<SCSS)
|
1089
|
+
foo {
|
1090
|
+
c: d; }
|
1091
|
+
|
1092
|
+
baz {
|
1093
|
+
a: b; }
|
1094
|
+
CSS
|
1095
|
+
@mixin bar {a: b}
|
1096
|
+
|
1097
|
+
foo {
|
1098
|
+
@mixin bar {c: d}
|
1099
|
+
@include bar;
|
1100
|
+
}
|
1101
|
+
|
1102
|
+
baz {@include bar}
|
1103
|
+
SCSS
|
1104
|
+
end
|
1105
|
+
|
1106
|
+
def test_nested_function_def
|
1107
|
+
assert_equal <<CSS, render(<<SCSS)
|
1108
|
+
foo {
|
1109
|
+
a: 1; }
|
1110
|
+
|
1111
|
+
bar {
|
1112
|
+
b: foo(); }
|
1113
|
+
CSS
|
1114
|
+
foo {
|
1115
|
+
@function foo() {@return 1}
|
1116
|
+
a: foo(); }
|
1117
|
+
|
1118
|
+
bar {b: foo()}
|
1119
|
+
SCSS
|
1120
|
+
end
|
1121
|
+
|
1122
|
+
def test_nested_function_shadow
|
1123
|
+
assert_equal <<CSS, render(<<SCSS)
|
1124
|
+
foo {
|
1125
|
+
a: 2; }
|
1126
|
+
|
1127
|
+
baz {
|
1128
|
+
b: 1; }
|
1129
|
+
CSS
|
1130
|
+
@function foo() {@return 1}
|
1131
|
+
|
1132
|
+
foo {
|
1133
|
+
@function foo() {@return 2}
|
1134
|
+
a: foo();
|
1135
|
+
}
|
1136
|
+
|
1137
|
+
baz {b: foo()}
|
1138
|
+
SCSS
|
1139
|
+
end
|
1140
|
+
|
1076
1141
|
## Errors
|
1077
1142
|
|
1078
|
-
def
|
1143
|
+
def test_nested_mixin_def_is_scoped
|
1079
1144
|
render <<SCSS
|
1080
1145
|
foo {
|
1081
1146
|
@mixin bar {a: b}}
|
1147
|
+
bar {@include bar}
|
1082
1148
|
SCSS
|
1083
1149
|
assert(false, "Expected syntax error")
|
1084
1150
|
rescue Sass::SyntaxError => e
|
1085
|
-
assert_equal "
|
1086
|
-
assert_equal
|
1151
|
+
assert_equal "Undefined mixin 'bar'.", e.message
|
1152
|
+
assert_equal 3, e.sass_line
|
1087
1153
|
end
|
1088
1154
|
|
1089
1155
|
def test_rules_beneath_properties
|
data/vendor/listen/CHANGELOG.md
CHANGED
@@ -1,23 +1,63 @@
|
|
1
|
+
## 0.4.7 - June 27, 2012
|
2
|
+
|
3
|
+
### Bug fixes
|
4
|
+
|
5
|
+
- Increase latency to 0.25, to avoid useless polling fallback. (fixed by [@thibaudgg][])
|
6
|
+
- Change watched inotify events, to avoid duplication callback. (fixed by [@thibaudgg][])
|
7
|
+
- [#41](https://github.com/guard/listen/issues/41) Use lstat instead of stat when calculating mtime. (fixed by [@ebroder][])
|
8
|
+
|
9
|
+
## 0.4.6 - June 20, 2012
|
10
|
+
|
11
|
+
### Bug fix
|
12
|
+
|
13
|
+
- [#39](https://github.com/guard/listen/issues/39) Fix digest race condition. (fixed by [@dkubb][])
|
14
|
+
|
15
|
+
## 0.4.5 - June 13, 2012
|
16
|
+
|
17
|
+
### Bug fix
|
18
|
+
|
19
|
+
- [#39](https://github.com/guard/listen/issues/39) Rescue Errno::ENOENT when path inserted doesn't exist. (reported by [@textgoeshere][], fixed by [@thibaudgg][] and [@rymai][])
|
20
|
+
|
21
|
+
## 0.4.4 - June 8, 2012
|
22
|
+
|
23
|
+
### Bug fixes
|
24
|
+
|
25
|
+
- ~~[#39](https://github.com/guard/listen/issues/39) Non-existing path insertion bug. (reported by [@textgoeshere][], fixed by [@thibaudgg][])~~
|
26
|
+
- Fix relative path for directories containing special characters. (reported by [@napcs][], fixed by [@netzpirat][])
|
27
|
+
|
28
|
+
## 0.4.3 - June 6, 2012
|
29
|
+
|
30
|
+
### Bug fixes
|
31
|
+
|
32
|
+
- [#24](https://github.com/guard/listen/issues/24) Fail gracefully when the inotify limit is not enough for Listen to function. (reported by [@daemonza][], fixed by [@Maher4Ever][])
|
33
|
+
- [#32](https://github.com/guard/listen/issues/32) Fix a crash when trying to calculate the checksum of unreadable files. (reported by [@nex3][], fixed by [@Maher4Ever][])
|
34
|
+
|
35
|
+
### Improvements
|
36
|
+
|
37
|
+
- Add `#relative_paths` method to listeners. ([@Maher4Ever][])
|
38
|
+
- Add `#started?` query-method to adapters. ([@Maher4Ever][])
|
39
|
+
- Dynamically detect the mtime precision used on a system. ([@Maher4Ever][] with help from [@nex3][])
|
40
|
+
|
1
41
|
## 0.4.2 - May 1, 2012
|
2
42
|
|
3
43
|
### Bug fixes
|
4
44
|
|
5
|
-
- [#21](https://github.com/guard/listen/issues/21)
|
6
|
-
- [#27](https://github.com/guard/listen/issues/27)
|
45
|
+
- [#21](https://github.com/guard/listen/issues/21) Issues when listening to changes in relative paths. (reported by [@akerbos][], fixed by [@Maher4Ever][])
|
46
|
+
- [#27](https://github.com/guard/listen/issues/27) Wrong reports for files modifications. (reported by [@cobychapple][], fixed by [@Maher4Ever][])
|
7
47
|
- Fix segmentation fault when profiling on Windows. ([@Maher4Ever][])
|
8
48
|
- Fix redundant watchers on Windows. ([@Maher4Ever][])
|
9
49
|
|
10
50
|
### Improvements
|
11
51
|
|
12
|
-
- [#17](https://github.com/guard/listen/issues/17)
|
52
|
+
- [#17](https://github.com/guard/listen/issues/17) Use regexp-patterns with the `ignore` method instead of supplying paths. (reported by [@fny][], added by [@Maher4Ever][])
|
13
53
|
- Speed improvement when listening to changes in directories with ignored paths. ([@Maher4Ever][])
|
14
54
|
- Added `.rbx` and `.svn` to ignored directories. ([@Maher4Ever][])
|
15
55
|
|
16
56
|
## 0.4.1 - April 15, 2012
|
17
57
|
|
18
|
-
### Bug
|
58
|
+
### Bug fix
|
19
59
|
|
20
|
-
- [#18](
|
60
|
+
- [#18](https://github.com/guard/listen/issues/18) Listener crashes when removing directories with nested paths. (reported by [@daemonza][], fixed by [@Maher4Ever][])
|
21
61
|
|
22
62
|
## 0.4.0 - April 9, 2012
|
23
63
|
|
@@ -37,19 +77,19 @@
|
|
37
77
|
- Encapsulate thread spawning in the windows-adapter. ([@Maher4Ever][])
|
38
78
|
- Fix linux-adapter bug where Listen would report file-modification events on the parent-directory. ([@Maher4Ever][])
|
39
79
|
|
40
|
-
###
|
80
|
+
### Change
|
41
81
|
|
42
82
|
- Remove `wait_until_listening` as adapters doesn't need to run inside threads anymore ([@Maher4Ever][])
|
43
83
|
|
44
84
|
## 0.3.3 - March 6, 2012
|
45
85
|
|
46
|
-
###
|
86
|
+
### Improvement
|
47
87
|
|
48
88
|
- Improve pause/unpause. ([@thibaudgg][])
|
49
89
|
|
50
90
|
## 0.3.2 - March 4, 2012
|
51
91
|
|
52
|
-
### New
|
92
|
+
### New feature
|
53
93
|
|
54
94
|
- Add pause/unpause listener's methods. ([@thibaudgg][])
|
55
95
|
|
@@ -57,7 +97,7 @@
|
|
57
97
|
|
58
98
|
### Bug fix
|
59
99
|
|
60
|
-
- [#9](https://github.com/guard/listen/issues/9)
|
100
|
+
- [#9](https://github.com/guard/listen/issues/9) Ignore doesn't seem to work. (reported by [@markiz][], fixed by [@thibaudgg][])
|
61
101
|
|
62
102
|
## 0.3.0 - February 21, 2012
|
63
103
|
|
@@ -81,10 +121,27 @@
|
|
81
121
|
|
82
122
|
- First version with only a polling adapter and basic features set (ignore & filter). ([@thibaudgg][])
|
83
123
|
|
84
|
-
|
85
|
-
[
|
124
|
+
<!--- The following link definition list is generated by PimpMyChangelog --->
|
125
|
+
[#9]: https://github.com/guard/listen/issues/9
|
126
|
+
[#17]: https://github.com/guard/listen/issues/17
|
127
|
+
[#18]: https://github.com/guard/listen/issues/18
|
128
|
+
[#21]: https://github.com/guard/listen/issues/21
|
129
|
+
[#24]: https://github.com/guard/listen/issues/24
|
130
|
+
[#27]: https://github.com/guard/listen/issues/27
|
131
|
+
[#32]: https://github.com/guard/listen/issues/32
|
132
|
+
[#39]: https://github.com/guard/listen/issues/39
|
86
133
|
[@Maher4Ever]: https://github.com/Maher4Ever
|
87
|
-
[@
|
134
|
+
[@dkubb]: https://github.com/dkubb
|
135
|
+
[@ebroder]: https://github.com/ebroder
|
88
136
|
[@akerbos]: https://github.com/akerbos
|
89
|
-
[@fny]: https://github.com/fny
|
90
137
|
[@cobychapple]: https://github.com/cobychapple
|
138
|
+
[@daemonza]: https://github.com/daemonza
|
139
|
+
[@fny]: https://github.com/fny
|
140
|
+
[@markiz]: https://github.com/markiz
|
141
|
+
[@napcs]: https://github.com/napcs
|
142
|
+
[@netzpirat]: https://github.com/netzpirat
|
143
|
+
[@nex3]: https://github.com/nex3
|
144
|
+
[@rymai]: https://github.com/rymai
|
145
|
+
[@scottdavis]: https://github.com/scottdavis
|
146
|
+
[@textgoeshere]: https://github.com/textgoeshere
|
147
|
+
[@thibaudgg]: https://github.com/thibaudgg
|
data/vendor/listen/Gemfile
CHANGED
@@ -6,23 +6,11 @@ gem 'rake'
|
|
6
6
|
|
7
7
|
group :development do
|
8
8
|
platform :ruby do
|
9
|
-
gem '
|
9
|
+
gem 'coolline'
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
when /darwin/i
|
15
|
-
# gem 'ruby_gntp', '~> 0.3.4', :require => false
|
16
|
-
gem 'growl', :require => false
|
17
|
-
when /linux/i
|
18
|
-
gem 'libnotify', '~> 0.7.1', :require => false
|
19
|
-
when /mswin|mingw/i
|
20
|
-
gem 'win32console', :require => false
|
21
|
-
gem 'rb-notifu', '>= 0.0.4', :require => false
|
22
|
-
end
|
23
|
-
|
24
|
-
gem 'guard', '~> 1.0.0'
|
25
|
-
gem 'guard-rspec', '~> 0.7.0'
|
12
|
+
gem 'guard'
|
13
|
+
gem 'guard-rspec'
|
26
14
|
gem 'yard'
|
27
15
|
gem 'redcarpet'
|
28
16
|
gem 'pry'
|
@@ -31,5 +19,5 @@ group :development do
|
|
31
19
|
end
|
32
20
|
|
33
21
|
group :test do
|
34
|
-
gem 'rspec'
|
22
|
+
gem 'rspec'
|
35
23
|
end
|
data/vendor/listen/README.md
CHANGED
@@ -32,12 +32,12 @@ Feel free to give your feeback via [Listen issues](https://github.com/guard/list
|
|
32
32
|
|
33
33
|
``` ruby
|
34
34
|
# Listen to a single directory.
|
35
|
-
Listen.to('dir/path/to/listen', filter
|
35
|
+
Listen.to('dir/path/to/listen', :filter => /\.rb$/, :ignore => %r{ignored/path/}) do |modified, added, removed|
|
36
36
|
# ...
|
37
37
|
end
|
38
38
|
|
39
39
|
# Listen to multiple directories.
|
40
|
-
Listen.to('dir/to/awesome_app', 'dir/to/other_app', filter
|
40
|
+
Listen.to('dir/to/awesome_app', 'dir/to/other_app', :filter => /\.rb$/, :latency => 0.1) do |modified, added, removed|
|
41
41
|
# ...
|
42
42
|
end
|
43
43
|
```
|
@@ -191,7 +191,7 @@ These options can be set through `Listen.to` params or via methods (see the "Obj
|
|
191
191
|
# default: See DEFAULT_IGNORED_DIRECTORIES and DEFAULT_IGNORED_EXTENSIONS in Listen::DirectoryRecord
|
192
192
|
|
193
193
|
:latency => 0.5 # Set the delay (**in seconds**) between checking for changes
|
194
|
-
# default: 0.
|
194
|
+
# default: 0.25 sec (1.0 sec for polling)
|
195
195
|
|
196
196
|
:relative_paths => true # Enable the use of relative paths in the callback.
|
197
197
|
# default: false
|
@@ -8,7 +8,7 @@ module Listen
|
|
8
8
|
attr_accessor :directories, :latency, :paused
|
9
9
|
|
10
10
|
# The default delay between checking for changes.
|
11
|
-
DEFAULT_LATENCY = 0.
|
11
|
+
DEFAULT_LATENCY = 0.25
|
12
12
|
|
13
13
|
# The default warning message when falling back to polling adapter.
|
14
14
|
POLLING_FALLBACK_MESSAGE = "WARNING: Listen has fallen back to polling, learn more at https://github.com/guard/listen#fallback."
|
@@ -10,7 +10,7 @@ module Listen
|
|
10
10
|
# @see http://www.tin.org/bin/man.cgi?section=7&topic=inotify
|
11
11
|
# @see https://github.com/nex3/rb-inotify/blob/master/lib/rb-inotify/notifier.rb#L99-L177
|
12
12
|
#
|
13
|
-
EVENTS = %w[recursive attrib
|
13
|
+
EVENTS = %w[recursive attrib create delete move close_write]
|
14
14
|
|
15
15
|
# The message to show when the limit of inotify watchers is not enough
|
16
16
|
#
|
@@ -163,7 +163,7 @@ module Listen
|
|
163
163
|
#
|
164
164
|
def relative_to_base(path)
|
165
165
|
return nil unless path[@directory]
|
166
|
-
path.sub(%r{^#{@directory}#{File::SEPARATOR}?}, '')
|
166
|
+
path.sub(%r{^#{Regexp.quote(@directory)}#{File::SEPARATOR}?}, '')
|
167
167
|
end
|
168
168
|
|
169
169
|
private
|
@@ -239,8 +239,8 @@ module Listen
|
|
239
239
|
elsif !ignored?(path) && filtered?(path) && !existing_path?(path)
|
240
240
|
if File.file?(path)
|
241
241
|
@changes[:added] << (options[:relative_paths] ? relative_to_base(path) : path)
|
242
|
+
insert_path(path)
|
242
243
|
end
|
243
|
-
insert_path(path)
|
244
244
|
end
|
245
245
|
end
|
246
246
|
end
|
@@ -253,11 +253,11 @@ module Listen
|
|
253
253
|
def content_modified?(path)
|
254
254
|
sha1_checksum = Digest::SHA1.file(path).to_s
|
255
255
|
return false if @sha1_checksums[path] == sha1_checksum
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
256
|
+
@sha1_checksums.key?(path)
|
257
|
+
rescue Errno::EACCES, Errno::ENOENT
|
258
|
+
false
|
259
|
+
ensure
|
260
|
+
@sha1_checksums[path] = sha1_checksum if sha1_checksum
|
261
261
|
end
|
262
262
|
|
263
263
|
# Traverses the base directory looking for paths that should
|
@@ -292,6 +292,7 @@ module Listen
|
|
292
292
|
meta_data.type = File.directory?(path) ? 'Dir' : 'File'
|
293
293
|
meta_data.mtime = mtime_of(path) unless meta_data.type == 'Dir' # mtimes of dirs are not used yet
|
294
294
|
@paths[File.dirname(path)][File.basename(path)] = meta_data
|
295
|
+
rescue Errno::ENOENT
|
295
296
|
end
|
296
297
|
|
297
298
|
# Returns whether or not a path exists in the paths hash.
|
@@ -311,7 +312,7 @@ module Listen
|
|
311
312
|
# @return [Fixnum, Float] the mtime of the file
|
312
313
|
#
|
313
314
|
def mtime_of(file)
|
314
|
-
File.
|
315
|
+
File.lstat(file).mtime.send(HIGH_PRECISION_SUPPORTED ? :to_f : :to_i)
|
315
316
|
end
|
316
317
|
end
|
317
318
|
end
|
@@ -193,6 +193,25 @@ describe Listen::DirectoryRecord do
|
|
193
193
|
it 'returns nil when the passed path is not inside the base-directory' do
|
194
194
|
subject.relative_to_base('/tmp/some_random_path').should be_nil
|
195
195
|
end
|
196
|
+
|
197
|
+
context 'when containing regexp characters in the base directory' do
|
198
|
+
before do
|
199
|
+
fixtures do |path|
|
200
|
+
mkdir 'a_directory$'
|
201
|
+
@dir = described_class.new(path + '/a_directory$')
|
202
|
+
@dir.build
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'removes the path of the base-directory from the passed path' do
|
207
|
+
path = 'dir/to/app/file.rb'
|
208
|
+
@dir.relative_to_base(File.join(@dir.directory, path)).should eq path
|
209
|
+
end
|
210
|
+
|
211
|
+
it 'returns nil when the passed path is not inside the base-directory' do
|
212
|
+
@dir.relative_to_base('/tmp/some_random_path').should be_nil
|
213
|
+
end
|
214
|
+
end
|
196
215
|
end
|
197
216
|
|
198
217
|
describe '#fetch_changes' do
|
@@ -385,7 +404,7 @@ describe Listen::DirectoryRecord do
|
|
385
404
|
end
|
386
405
|
end
|
387
406
|
|
388
|
-
context '
|
407
|
+
context 'when a file is created and then checked for modifications at the same second - #27' do
|
389
408
|
# This issue was the result of checking a file for content changes when
|
390
409
|
# the mtime and the checking time are the same. In this case there
|
391
410
|
# is no checksum saved, so the file was reported as being changed.
|
@@ -1030,5 +1049,90 @@ describe Listen::DirectoryRecord do
|
|
1030
1049
|
end
|
1031
1050
|
end
|
1032
1051
|
end
|
1052
|
+
|
1053
|
+
context 'within a directory containing unreadble paths - #32' do
|
1054
|
+
it 'detects changes more than a second apart' do
|
1055
|
+
fixtures do |path|
|
1056
|
+
touch 'unreadable_file.txt'
|
1057
|
+
chmod 000, 'unreadable_file.txt'
|
1058
|
+
|
1059
|
+
modified, added, removed = changes(path) do
|
1060
|
+
sleep 1.1
|
1061
|
+
touch 'unreadable_file.txt'
|
1062
|
+
end
|
1063
|
+
|
1064
|
+
added.should be_empty
|
1065
|
+
modified.should =~ %w(unreadable_file.txt)
|
1066
|
+
removed.should be_empty
|
1067
|
+
end
|
1068
|
+
end
|
1069
|
+
|
1070
|
+
context 'with multiple changes within the same second' do
|
1071
|
+
before { ensure_same_second }
|
1072
|
+
|
1073
|
+
it 'does not detect changes even if content changes', :unless => described_class::HIGH_PRECISION_SUPPORTED do
|
1074
|
+
fixtures do |path|
|
1075
|
+
touch 'unreadable_file.txt'
|
1076
|
+
|
1077
|
+
modified, added, removed = changes(path) do
|
1078
|
+
open('unreadable_file.txt', 'w') { |f| f.write('foo') }
|
1079
|
+
chmod 000, 'unreadable_file.txt'
|
1080
|
+
end
|
1081
|
+
|
1082
|
+
added.should be_empty
|
1083
|
+
modified.should be_empty
|
1084
|
+
removed.should be_empty
|
1085
|
+
end
|
1086
|
+
end
|
1087
|
+
end
|
1088
|
+
end
|
1089
|
+
|
1090
|
+
context 'within a directory containing a removed file - #39' do
|
1091
|
+
it 'does not raise an exception when hashing a removed file' do
|
1092
|
+
|
1093
|
+
# simulate a race condition where the file is removed after the
|
1094
|
+
# change event is tracked, but before the hash is calculated
|
1095
|
+
Digest::SHA1.should_receive(:file).and_raise(Errno::ENOENT)
|
1096
|
+
|
1097
|
+
lambda {
|
1098
|
+
fixtures do |path|
|
1099
|
+
file = 'removed_file.txt'
|
1100
|
+
touch file
|
1101
|
+
changes(path) { touch file }
|
1102
|
+
end
|
1103
|
+
}.should_not raise_error(Errno::ENOENT)
|
1104
|
+
end
|
1105
|
+
end
|
1106
|
+
|
1107
|
+
context 'with symlinks' do
|
1108
|
+
it 'looks at symlinks not their targets' do
|
1109
|
+
fixtures do |path|
|
1110
|
+
touch 'target'
|
1111
|
+
symlink 'target', 'symlink'
|
1112
|
+
|
1113
|
+
record = described_class.new(path)
|
1114
|
+
record.build
|
1115
|
+
|
1116
|
+
sleep 1
|
1117
|
+
touch 'target'
|
1118
|
+
|
1119
|
+
record.fetch_changes([path], :relative_paths => true)[:modified].should == ['target']
|
1120
|
+
end
|
1121
|
+
end
|
1122
|
+
|
1123
|
+
it 'handles broken symlinks' do
|
1124
|
+
fixtures do |path|
|
1125
|
+
symlink 'target', 'symlink'
|
1126
|
+
|
1127
|
+
record = described_class.new(path)
|
1128
|
+
record.build
|
1129
|
+
|
1130
|
+
sleep 1
|
1131
|
+
rm 'symlink'
|
1132
|
+
symlink 'new-target', 'symlink'
|
1133
|
+
record.fetch_changes([path], :relative_paths => true)
|
1134
|
+
end
|
1135
|
+
end
|
1136
|
+
end
|
1033
1137
|
end
|
1034
1138
|
end
|
@@ -1,14 +1,16 @@
|
|
1
1
|
require 'listen'
|
2
2
|
|
3
|
-
ENV["TEST_LATENCY"] ||= "0.
|
3
|
+
ENV["TEST_LATENCY"] ||= "0.25"
|
4
4
|
|
5
5
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
6
6
|
|
7
7
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
8
8
|
RSpec.configure do |config|
|
9
|
+
config.color_enabled = true
|
10
|
+
config.order = :random
|
11
|
+
config.filter_run :focus => true
|
9
12
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
10
13
|
config.run_all_when_everything_filtered = true
|
11
|
-
config.filter_run :focus
|
12
14
|
end
|
13
15
|
|
14
16
|
def test_latency
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 592302399
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 2
|
9
9
|
- 0
|
10
10
|
- alpha
|
11
|
-
-
|
12
|
-
version: 3.2.0.alpha.
|
11
|
+
- 273
|
12
|
+
version: 3.2.0.alpha.273
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Nathan Weizenbaum
|
@@ -19,7 +19,7 @@ autorequire:
|
|
19
19
|
bindir: bin
|
20
20
|
cert_chain: []
|
21
21
|
|
22
|
-
date: 2012-07-
|
22
|
+
date: 2012-07-20 00:00:00 -04:00
|
23
23
|
default_executable:
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|
@@ -110,10 +110,10 @@ files:
|
|
110
110
|
- lib/sass/script/list.rb
|
111
111
|
- lib/sass/script/literal.rb
|
112
112
|
- lib/sass/script/node.rb
|
113
|
-
- lib/sass/script/null.rb
|
114
113
|
- lib/sass/script/number.rb
|
115
114
|
- lib/sass/script/operation.rb
|
116
115
|
- lib/sass/script/parser.rb
|
116
|
+
- lib/sass/script/null.rb
|
117
117
|
- lib/sass/script/string.rb
|
118
118
|
- lib/sass/script/string_interpolation.rb
|
119
119
|
- lib/sass/script/unary_operation.rb
|
@@ -154,6 +154,7 @@ files:
|
|
154
154
|
- lib/sass/tree/content_node.rb
|
155
155
|
- lib/sass/tree/css_import_node.rb
|
156
156
|
- lib/sass/tree/variable_node.rb
|
157
|
+
- lib/sass/tree/warn_node.rb
|
157
158
|
- lib/sass/tree/visitors/base.rb
|
158
159
|
- lib/sass/tree/visitors/check_nesting.rb
|
159
160
|
- lib/sass/tree/visitors/convert.rb
|
@@ -163,7 +164,6 @@ files:
|
|
163
164
|
- lib/sass/tree/visitors/perform.rb
|
164
165
|
- lib/sass/tree/visitors/set_options.rb
|
165
166
|
- lib/sass/tree/visitors/to_css.rb
|
166
|
-
- lib/sass/tree/warn_node.rb
|
167
167
|
- lib/sass/tree/while_node.rb
|
168
168
|
- lib/sass/tree/supports_node.rb
|
169
169
|
- lib/sass/tree/trace_node.rb
|
@@ -275,7 +275,6 @@ files:
|
|
275
275
|
- test/sass/templates/bork2.sass
|
276
276
|
- test/sass/templates/bork3.sass
|
277
277
|
- test/sass/templates/bork4.sass
|
278
|
-
- test/sass/templates/bork5.sass
|
279
278
|
- test/sass/templates/compact.sass
|
280
279
|
- test/sass/templates/complex.sass
|
281
280
|
- test/sass/templates/compressed.sass
|
@@ -298,7 +297,6 @@ files:
|
|
298
297
|
- test/sass/templates/nested_bork2.sass
|
299
298
|
- test/sass/templates/nested_bork3.sass
|
300
299
|
- test/sass/templates/nested_bork4.sass
|
301
|
-
- test/sass/templates/nested_bork5.sass
|
302
300
|
- test/sass/templates/nested_import.sass
|
303
301
|
- test/sass/templates/nested_mixin_bork.sass
|
304
302
|
- test/sass/templates/options.sass
|