diff options
author | Thom May <thom@may.lt> | 2015-05-13 16:18:00 +0100 |
---|---|---|
committer | Thom May <thom@may.lt> | 2015-05-13 16:18:00 +0100 |
commit | 8370069243b751ca7db5adc798212e5d795f0a33 (patch) | |
tree | 51c0369239046c0628ae515b242811d5d29ce8fa | |
parent | c896044e0bd27f0ca0dace8ab2bbbb5626d44063 (diff) | |
parent | 38b381e46236e020348b9b38d7310cec65b80545 (diff) | |
download | chef-8370069243b751ca7db5adc798212e5d795f0a33.tar.gz |
Merge pull request #3357 from chef/jdm/3055
Escape string inside regex
-rw-r--r-- | lib/chef/formatters/error_inspectors/resource_failure_inspector.rb | 12 | ||||
-rw-r--r-- | spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb | 7 |
2 files changed, 18 insertions, 1 deletions
diff --git a/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb b/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb index 48572d909b..6e4d9322f9 100644 --- a/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +++ b/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb @@ -63,7 +63,7 @@ class Chef def recipe_snippet return nil if dynamic_resource? @snippet ||= begin - if file = resource.source_line[/^(([\w]:)?[^:]+):([\d]+)/,1] and line = resource.source_line[/^#{file}:([\d]+)/,1].to_i + if file = parse_source and line = parse_line(file) return nil unless ::File.exists?(file) lines = IO.readlines(file) @@ -111,6 +111,16 @@ class Chef line_nr_string + line end + def parse_source + resource.source_line[/^(([\w]:)?[^:]+):([\d]+)/,1] + end + + def parse_line(source) + resource.source_line[/^#{Regexp.escape(source)}:([\d]+)/,1].to_i + end + + + end end end diff --git a/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb b/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb index a42d234601..5594d6e18a 100644 --- a/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +++ b/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb @@ -126,6 +126,13 @@ describe Chef::Formatters::ErrorInspectors::ResourceFailureInspector do expect(@inspector.recipe_snippet).to match(/^# In C:\/Users\/btm/) end + it "parses a Windows path" do + source_line = "C:\\Windows\\Temp\\packer\\cookbooks\\fake_file.rb:2: undefined local variable or method `non_existent' for main:Object (NameError)" + @resource.source_line = source_line + @inspector = Chef::Formatters::ErrorInspectors::ResourceFailureInspector.new(@resource, :create, @exception) + expect(@inspector.recipe_snippet).to match(/^# In C:\\Windows\\Temp\\packer\\/) + end + it "parses a unix path" do source_line = "/home/btm/src/chef/chef/spec/unit/fake_file.rb:2: undefined local variable or method `non_existent' for main:Object (NameError)" @resource.source_line = source_line |