right_scraper 1.0.26 → 3.0.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.
Files changed (92) hide show
  1. data/Gemfile +16 -0
  2. data/README.rdoc +9 -28
  3. data/Rakefile +51 -39
  4. data/lib/right_scraper/builders/base.rb +64 -0
  5. data/lib/right_scraper/builders/filesystem.rb +96 -0
  6. data/lib/right_scraper/builders/union.rb +57 -0
  7. data/lib/right_scraper/logger.rb +102 -0
  8. data/lib/right_scraper/loggers/noisy.rb +85 -0
  9. data/lib/right_scraper/processes/ssh.rb +188 -0
  10. data/lib/right_scraper/repositories/base.rb +299 -0
  11. data/lib/right_scraper/repositories/download.rb +90 -0
  12. data/lib/right_scraper/repositories/git.rb +92 -0
  13. data/lib/right_scraper/repositories/mock.rb +70 -0
  14. data/lib/right_scraper/repositories/svn.rb +96 -0
  15. data/lib/right_scraper/resources/base.rb +70 -0
  16. data/{spec/scraper_base_spec.rb → lib/right_scraper/resources/cookbook.rb} +9 -23
  17. data/lib/right_scraper/resources/workflow.rb +55 -0
  18. data/lib/right_scraper/retrievers/base.rb +114 -0
  19. data/lib/right_scraper/retrievers/checkout.rb +79 -0
  20. data/lib/right_scraper/retrievers/download.rb +97 -0
  21. data/lib/right_scraper/retrievers/git.rb +140 -0
  22. data/lib/right_scraper/retrievers/svn.rb +87 -0
  23. data/lib/right_scraper/scanners/base.rb +111 -0
  24. data/lib/right_scraper/scanners/cookbook_manifest.rb +59 -0
  25. data/lib/right_scraper/scanners/cookbook_metadata.rb +69 -0
  26. data/lib/right_scraper/scanners/cookbook_s3_upload.rb +84 -0
  27. data/lib/right_scraper/scanners/union.rb +89 -0
  28. data/lib/right_scraper/scanners/workflow_manifest.rb +86 -0
  29. data/lib/right_scraper/scanners/workflow_metadata.rb +70 -0
  30. data/lib/right_scraper/scanners/workflow_s3_upload.rb +85 -0
  31. data/lib/right_scraper/scraper.rb +81 -57
  32. data/lib/right_scraper/scraper_logger.rb +61 -0
  33. data/lib/right_scraper/scrapers/base.rb +262 -0
  34. data/lib/right_scraper/scrapers/cookbook.rb +73 -0
  35. data/lib/right_scraper/scrapers/workflow.rb +88 -0
  36. data/lib/right_scraper/svn_client.rb +101 -0
  37. data/lib/right_scraper/version.rb +28 -0
  38. data/lib/right_scraper.rb +35 -11
  39. data/right_scraper.gemspec +26 -13
  40. data/right_scraper.rconf +13 -0
  41. data/spec/builder_spec.rb +50 -0
  42. data/spec/cookbook_helper.rb +73 -0
  43. data/spec/cookbook_manifest_spec.rb +55 -0
  44. data/spec/cookbook_s3_upload_spec.rb +152 -0
  45. data/spec/download/download_retriever_spec.rb +118 -0
  46. data/spec/download/download_retriever_spec_helper.rb +72 -0
  47. data/spec/download/download_spec.rb +130 -0
  48. data/spec/download/multi_dir_spec.rb +106 -0
  49. data/spec/download/multi_dir_spec_helper.rb +40 -0
  50. data/spec/git/cookbook_spec.rb +166 -0
  51. data/spec/git/demokey +27 -0
  52. data/spec/git/demokey.pub +1 -0
  53. data/spec/git/password_key +30 -0
  54. data/spec/git/password_key.pub +1 -0
  55. data/spec/git/repository_spec.rb +110 -0
  56. data/spec/git/retriever_spec.rb +505 -0
  57. data/spec/git/retriever_spec_helper.rb +112 -0
  58. data/spec/git/scraper_spec.rb +136 -0
  59. data/spec/git/ssh_spec.rb +170 -0
  60. data/spec/git/url_spec.rb +103 -0
  61. data/spec/logger_spec.rb +185 -0
  62. data/spec/repository_spec.rb +89 -23
  63. data/spec/{scraper_spec_helper_base.rb → retriever_spec_helper.rb} +41 -27
  64. data/spec/scanner_spec.rb +61 -0
  65. data/spec/scraper_helper.rb +96 -0
  66. data/spec/scraper_spec.rb +123 -45
  67. data/spec/spec_helper.rb +87 -14
  68. data/spec/svn/cookbook_spec.rb +97 -0
  69. data/spec/svn/multi_svn_spec.rb +64 -0
  70. data/spec/svn/multi_svn_spec_helper.rb +40 -0
  71. data/spec/svn/repository_spec.rb +72 -0
  72. data/spec/svn/retriever_spec.rb +261 -0
  73. data/spec/svn/scraper_spec.rb +90 -0
  74. data/spec/svn/{svn_scraper_spec_helper.rb → svn_retriever_spec_helper.rb} +46 -27
  75. data/spec/svn/url_spec.rb +47 -0
  76. data/spec/url_spec.rb +164 -0
  77. metadata +203 -31
  78. data/lib/right_scraper/linux/process_monitor.rb +0 -84
  79. data/lib/right_scraper/repository.rb +0 -78
  80. data/lib/right_scraper/scraper_base.rb +0 -175
  81. data/lib/right_scraper/scrapers/download_scraper.rb +0 -67
  82. data/lib/right_scraper/scrapers/git_scraper.rb +0 -283
  83. data/lib/right_scraper/scrapers/svn_scraper.rb +0 -119
  84. data/lib/right_scraper/watcher.rb +0 -158
  85. data/lib/right_scraper/win32/process_monitor.rb +0 -98
  86. data/spec/download/download_scraper_spec.rb +0 -94
  87. data/spec/git/git_scraper_spec.rb +0 -165
  88. data/spec/git/git_scraper_spec_helper.rb +0 -72
  89. data/spec/rcov.opts +0 -1
  90. data/spec/spec.opts +0 -2
  91. data/spec/svn/svn_scraper_spec.rb +0 -148
  92. data/spec/watcher_spec.rb +0 -74
@@ -0,0 +1,90 @@
1
+ #--
2
+ # Copyright: Copyright (c) 2010-2011 RightScale, Inc.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # 'Software'), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
+ # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
+ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
+ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ require 'stringio'
25
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
26
+ require File.expand_path(File.join(File.dirname(__FILE__), 'svn_retriever_spec_helper'))
27
+ require 'tmpdir'
28
+ require 'flexmock'
29
+
30
+ describe RightScraper::Scraper do
31
+ include RightScraper::SpecHelpers::DevelopmentModeEnvironment
32
+
33
+ include RightScraper::SharedExamples
34
+
35
+ before(:each) do
36
+ @stream = StringIO.new()
37
+ @tmpdir = Dir.mktmpdir
38
+ @scraper = RightScraper::Scraper.new(:basedir => @tmpdir, :kind => :cookbook)
39
+ end
40
+
41
+ after(:each) do
42
+ FileUtils.remove_entry_secure @tmpdir
43
+ end
44
+
45
+ context 'given a SVN repository' do
46
+ before(:each) do
47
+ @helper = RightScraper::SvnRetrieverSpecHelper.new
48
+ @repo = @helper.repo
49
+ end
50
+
51
+ after(:each) do
52
+ @helper.close
53
+ end
54
+
55
+ it_should_behave_like "a normal repository"
56
+
57
+ it 'should log correctly as it scrapes' do
58
+ callback = flexmock("callback")
59
+ callback.should_receive(:call).with(:begin, :retrieving, "from #{@repo}", nil).once.ordered
60
+ callback.should_receive(:call).with(:begin, :initialize, String, nil).once.ordered
61
+ callback.should_receive(:call).with(:commit, :initialize, String, nil).once.ordered
62
+ callback.should_receive(:call).with(:begin, :checkout, "", nil).once.ordered
63
+ callback.should_receive(:call).with(:begin, :checkout_revision, "", nil).once.ordered
64
+ callback.should_receive(:call).with(:commit, :checkout_revision, "", nil).once.ordered
65
+ callback.should_receive(:call).with(:commit, :checkout, "", nil).once.ordered
66
+ callback.should_receive(:call).with(:commit, :retrieving, "from #{@repo}", nil).once.ordered
67
+ callback.should_receive(:call).with(:begin, :scraping, String, nil).once.ordered
68
+ callback.should_receive(:call).with(:begin, :finding_next_cookbook, String, nil).once.ordered
69
+ callback.should_receive(:call).with(:begin, :reading_cookbook, String, nil).once.ordered
70
+ callback.should_receive(:call).with(:begin, :scanning_filesystem, String, nil).once.ordered
71
+ callback.should_receive(:call).with(:begin, :metadata_parsing, "", nil).once.ordered
72
+ callback.should_receive(:call).with(:commit, :metadata_parsing, "", nil).once.ordered
73
+ callback.should_receive(:call).with(:commit, :scanning_filesystem, String, nil).once.ordered
74
+ callback.should_receive(:call).with(:commit, :reading_cookbook, String, nil).once.ordered
75
+ callback.should_receive(:call).with(:commit, :finding_next_cookbook, String, nil).once.ordered
76
+ callback.should_receive(:call).with(:begin, :next, "", nil).once.ordered
77
+ callback.should_receive(:call).with(:begin, :searching, "", nil).once.ordered
78
+ callback.should_receive(:call).with(:commit, :searching, "", nil).once.ordered
79
+ callback.should_receive(:call).with(:commit, :next, "", nil).once.ordered
80
+ callback.should_receive(:call).with(:begin, :next, "", nil).once.ordered
81
+ callback.should_receive(:call).with(:commit, :next, "", nil).once.ordered
82
+ callback.should_receive(:call).with(:commit, :scraping, String, nil).once.ordered
83
+ @scraper.scrape(@repo) do |phase, operation, explanation, exception|
84
+ callback.call(phase, operation, explanation, exception)
85
+ end
86
+ @scraper.errors.should == []
87
+ @scraper.succeeded?.should be_true
88
+ end
89
+ end
90
+ end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright: Copyright (c) 2010 RightScale, Inc.
2
+ # Copyright: Copyright (c) 2010-2011 RightScale, Inc.
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -21,16 +21,25 @@
21
21
  # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'scraper_spec_helper_base'))
24
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'retriever_spec_helper'))
25
+ require 'process_watcher'
25
26
 
26
- module RightScale
27
+ module RightScraper
27
28
 
28
- # SVN implementation of scraper spec helper
29
+ # SVN implementation of retriever spec helper
29
30
  # See parent class for methods headers comments
30
- class SvnScraperSpecHelper < ScraperSpecHelperBase
31
+ class SvnRetrieverSpecHelper < RetrieverSpecHelper
32
+ include RightScraper::SvnClient
31
33
 
32
34
  def svn_repo_path
33
- svn_repo_path = File.expand_path(File.join(File.dirname(__FILE__), '__svn_repo'))
35
+ File.join(@tmpdir, "svn")
36
+ end
37
+
38
+ attr_reader :repo
39
+ alias_method :repository, :repo
40
+
41
+ def scraper_path
42
+ File.join(@tmpdir, "scraper")
34
43
  end
35
44
 
36
45
  def repo_url
@@ -39,34 +48,44 @@ module RightScale
39
48
  url = "#{file_prefix}#{svn_repo_path}"
40
49
  end
41
50
 
42
- def setup_test_repo
43
- FileUtils.rm_rf(repo_path)
44
- FileUtils.mkdir_p(repo_path)
45
- FileUtils.rm_rf(svn_repo_path)
46
- res, status = exec("svnadmin create \"#{svn_repo_path}\"")
47
- raise "Failed to initialize SVN repository: #{res}" unless status.success?
48
- res, status = exec("svn checkout \"#{repo_url}\" \"#{repo_path}\"")
49
- raise "Failed to checkout repository: #{res}" unless status.success?
50
- create_file_layout(repo_path, repo_content)
51
+ alias_method :repo_dir, :repo_path
52
+
53
+ def initialize
54
+ super()
55
+ FileUtils.mkdir(svn_repo_path)
56
+ @repo = RightScraper::Repositories::Base.from_hash(
57
+ :display_name => 'test repo',
58
+ :repo_type => :svn,
59
+ :url => repo_url)
60
+ output, status = ProcessWatcher.run("svnadmin", "create", svn_repo_path)
61
+ raise "Can't create repo: #{output}" if status != 0
62
+ run_svn_no_chdir "checkout", repo_url, repo_path
63
+ make_cookbooks
51
64
  commit_content
52
65
  end
53
66
 
67
+ def make_cookbooks
68
+ create_cookbook(repo_path, repo_content)
69
+ end
70
+
71
+ def delete(location, log="")
72
+ run_svn "delete", location
73
+ end
74
+
54
75
  def commit_content(commit_message='commit message')
55
- Dir.chdir(repo_path) do
56
- res, status = exec('svn add *')
57
- res, status = exec("svn commit --quiet -m \"#{commit_message}\"") if status.success?
58
- raise "Failed to commit changes from #{branch}: #{res}" unless status.success?
59
- end
76
+ run_svn "add", Dir.glob(File.join(repo_path, '**/*'))
77
+ run_svn "commit", "--message", commit_message
60
78
  end
61
79
 
62
80
  def commit_id(index_from_last=0)
63
- res = nil
64
- Dir.chdir(repo_path) do
65
- res, status = exec("svn log --quiet #{repo_url}")
66
- raise "Failed to retrieve commit revision #{index_from_last}: #{res}" unless status.success?
81
+ output = run_svn "log", "-l", (index_from_last + 1).to_s, "-r", "HEAD:0"
82
+ id = nil
83
+ output.split(/\n/).each do |line|
84
+ if line =~ /^r(\d+)/
85
+ id = $1
86
+ end
67
87
  end
68
- commit_id = res.split("\n")[ 1 + index_from_last * 2].split(' ').first
88
+ id
69
89
  end
70
-
71
90
  end
72
- end
91
+ end
@@ -0,0 +1,47 @@
1
+ #--
2
+ # Copyright: Copyright (c) 2010-2011 RightScale, Inc.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # 'Software'), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
+ # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
+ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
+ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
25
+
26
+ describe RightScraper::Repositories::Svn do
27
+ def make_repo(url)
28
+ @repo = RightScraper::Repositories::Svn.from_hash(:display_name => 'test repo',
29
+ :repo_type => :svn,
30
+ :url => url,
31
+ :first_credential => "foo:b/ar",
32
+ :second_credential => "blah")
33
+ end
34
+ include RightScraper::SpecHelpers::ProductionModeEnvironment
35
+
36
+ it 'should not throw an error when creating a repository for SVN URIs' do
37
+ lambda do
38
+ make_repo "http://rightscale.com/%20CBLAH"
39
+ end.should_not raise_exception
40
+ lambda do
41
+ make_repo "svn://rightscale.com/%20CBLAH"
42
+ end.should_not raise_exception
43
+ lambda do
44
+ make_repo "svn+ssh://rightscale.com/%20CBLAH"
45
+ end.should_not raise_exception
46
+ end
47
+ end
data/spec/url_spec.rb ADDED
@@ -0,0 +1,164 @@
1
+ #--
2
+ # Copyright: Copyright (c) 2010-2011 RightScale, Inc.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # 'Software'), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18
+ # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19
+ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20
+ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21
+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
25
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'right_scraper'))
26
+
27
+ describe RightScraper::Repositories::Svn do
28
+ def make_repo(url)
29
+ @repo = RightScraper::Repositories::Svn.from_hash(
30
+ :display_name => 'test repo',
31
+ :repo_type => :download,
32
+ :url => url,
33
+ :first_credential => "foo:b/ar",
34
+ :second_credential => "foo@bar")
35
+ end
36
+ before(:each) do
37
+ @oldtest = ENV['DEVELOPMENT']
38
+ end
39
+ after(:each) do
40
+ if @oldtest.nil?
41
+ ENV.delete('DEVELOPMENT')
42
+ else
43
+ ENV['DEVELOPMENT'] = @oldtest
44
+ end
45
+ end
46
+
47
+ context 'in production mode' do
48
+ before(:each) do
49
+ ENV.delete('DEVELOPMENT')
50
+ end
51
+
52
+ it 'should not throw an error when creating a repository for a normal URI' do
53
+ lambda do
54
+ make_repo "http://rightscale.com/%20CBLAH"
55
+ end.should_not raise_exception
56
+ lambda do
57
+ make_repo "http://172.12.3.42/%20CBLAH"
58
+ end.should_not raise_exception
59
+ lambda do
60
+ make_repo "http://110.12.3.42/%20CBLAH"
61
+ end.should_not raise_exception
62
+ end
63
+
64
+ it 'should refuse to create repositories for hosts that don\'t exist' do
65
+ lambda do
66
+ make_repo "http://nonexistent.invalid/%20CBLAH"
67
+ end.should raise_exception(RuntimeError, /Invalid URI/)
68
+ end
69
+
70
+ it 'should refuse to create repositories for private networks' do
71
+ ["10.0.2.43", "172.18.3.42", "192.168.4.2"].each do |ip|
72
+ lambda do
73
+ make_repo "http://#{ip}/%20CBLAH"
74
+ end.should raise_exception(RuntimeError, /Invalid URI/)
75
+ end
76
+ end
77
+
78
+ it 'should refuse to create repositories for loopback addresses' do
79
+ lambda do
80
+ make_repo "http://localhost/%20CBLAH"
81
+ end.should raise_exception(RuntimeError, /Invalid URI/)
82
+ lambda do
83
+ make_repo "http://127.0.0.1/%20CBLAH"
84
+ end.should raise_exception(RuntimeError, /Invalid URI/)
85
+ lambda do
86
+ make_repo "http://127.3.2.1/%20CBLAH"
87
+ end.should raise_exception(RuntimeError, /Invalid URI/)
88
+ end
89
+
90
+ it 'should refuse to create repositories for file:/// URIs' do
91
+ lambda do
92
+ make_repo "file://var/run/something/%20CBLAH"
93
+ end.should raise_exception(RuntimeError, /Invalid URI/)
94
+ end
95
+
96
+ it 'should refuse to create repositories for our EC2 metadata server' do
97
+ lambda do
98
+ make_repo "http://169.254.169.254/%20CBLAH"
99
+ end.should raise_exception(RuntimeError, /Invalid URI/)
100
+ end
101
+
102
+ it 'should refuse to create repositories for even valid IPv6 addresses' do
103
+ lambda do
104
+ make_repo "http://[::ffff:128.111.1.1]/%20CBLAH"
105
+ end.should raise_exception(RuntimeError, /Invalid URI/)
106
+ end
107
+ end
108
+
109
+ context 'in development mode' do
110
+ before(:each) do
111
+ ENV['DEVELOPMENT'] = "yes"
112
+ end
113
+
114
+ it 'should not throw an error when creating a repository for a normal URI' do
115
+ lambda do
116
+ make_repo "http://rightscale.com/%20CBLAH"
117
+ end.should_not raise_exception
118
+ end
119
+
120
+ it 'should create repositories for hosts that don\'t exist' do
121
+ lambda do
122
+ make_repo "http://nonexistent.invalid/%20CBLAH"
123
+ end.should_not raise_exception
124
+ end
125
+
126
+ it 'should create repositories for private networks' do
127
+ ["10.0.2.43", "172.18.3.42", "192.168.4.2"].each do |ip|
128
+ lambda do
129
+ make_repo "http://#{ip}/%20CBLAH"
130
+ end.should_not raise_exception
131
+ end
132
+ end
133
+
134
+ it 'should create repositories for loopback addresses' do
135
+ lambda do
136
+ make_repo "http://localhost/%20CBLAH"
137
+ end.should_not raise_exception
138
+ lambda do
139
+ make_repo "http://127.0.0.1/%20CBLAH"
140
+ end.should_not raise_exception
141
+ lambda do
142
+ make_repo "http://127.3.2.1/%20CBLAH"
143
+ end.should_not raise_exception
144
+ end
145
+
146
+ it 'should create repositories for file:/// URIs' do
147
+ lambda do
148
+ make_repo "file://var/run/something/%20CBLAH"
149
+ end.should_not raise_exception
150
+ end
151
+
152
+ it 'should create repositories for our EC2 metadata server' do
153
+ lambda do
154
+ make_repo "http://169.254.169.254/%20CBLAH"
155
+ end.should_not raise_exception
156
+ end
157
+
158
+ it 'should create repositories for even valid IPv6 addresses' do
159
+ lambda do
160
+ make_repo "http://[::ffff:128.111.1.1]/%20CBLAH"
161
+ end.should_not raise_exception
162
+ end
163
+ end
164
+ end
metadata CHANGED
@@ -1,25 +1,145 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_scraper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 35
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
- - 1
7
+ - 3
8
8
  - 0
9
- - 26
10
- version: 1.0.26
9
+ - 0
10
+ version: 3.0.0
11
11
  platform: ruby
12
12
  authors:
13
+ - Graham Hughes
13
14
  - Raphael Simon
14
15
  autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2010-10-19 00:00:00 -07:00
19
+ date: 2011-09-26 00:00:00 -07:00
19
20
  default_executable:
20
- dependencies: []
21
-
22
- description: " RightScraper provides a simple interface to download and keep local copies of remote\n repositories up-to-date using the following protocols:\n * git: RightScraper will clone then pull repos from git\n * SVN: RightScraper will checkout then update SVN repositories\n * tarballs: RightScraper will download, optionally uncompress and expand a given tar file\n"
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 13
29
+ segments:
30
+ - 1
31
+ - 4
32
+ - 5
33
+ version: 1.4.5
34
+ requirement: *id001
35
+ type: :runtime
36
+ name: json
37
+ prerelease: false
38
+ - !ruby/object:Gem::Dependency
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 21
45
+ segments:
46
+ - 1
47
+ - 2
48
+ - 5
49
+ version: 1.2.5
50
+ requirement: *id002
51
+ type: :runtime
52
+ name: git
53
+ prerelease: false
54
+ - !ruby/object:Gem::Dependency
55
+ version_requirements: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 25
61
+ segments:
62
+ - 0
63
+ - 1
64
+ - 1
65
+ version: 0.1.1
66
+ requirement: *id003
67
+ type: :runtime
68
+ name: libarchive
69
+ prerelease: false
70
+ - !ruby/object:Gem::Dependency
71
+ version_requirements: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 2
79
+ - 0
80
+ version: "2.0"
81
+ requirement: *id004
82
+ type: :runtime
83
+ name: right_aws
84
+ prerelease: false
85
+ - !ruby/object:Gem::Dependency
86
+ version_requirements: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ hash: 13
92
+ segments:
93
+ - 0
94
+ - 3
95
+ version: "0.3"
96
+ requirement: *id005
97
+ type: :runtime
98
+ name: process_watcher
99
+ prerelease: false
100
+ - !ruby/object:Gem::Dependency
101
+ version_requirements: &id006 !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ requirement: *id006
111
+ type: :development
112
+ name: rspec
113
+ prerelease: false
114
+ - !ruby/object:Gem::Dependency
115
+ version_requirements: &id007 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ hash: 3
121
+ segments:
122
+ - 0
123
+ version: "0"
124
+ requirement: *id007
125
+ type: :development
126
+ name: flexmock
127
+ prerelease: false
128
+ - !ruby/object:Gem::Dependency
129
+ version_requirements: &id008 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ hash: 3
135
+ segments:
136
+ - 0
137
+ version: "0"
138
+ requirement: *id008
139
+ type: :development
140
+ name: rtags
141
+ prerelease: false
142
+ description: " RightScraper provides a simple interface to download and keep local copies of remote\n repositories up-to-date using the following protocols:\n * git: RightScraper will clone then pull repos from git\n * SVN: RightScraper will checkout then update SVN repositories\n * tarballs: RightScraper will download, optionally uncompress and expand a given tar file\n On top of retrieving remote repositories, right_scraper also include \"scrapers\" that\n will analyze the repository content and instantiate \"resources\" as a result. Currently\n supported resources are Chef cookbooks and RightScale workflow definitions.\n"
23
143
  email: raphael@rightscale.com
24
144
  executables: []
25
145
 
@@ -28,33 +148,83 @@ extensions: []
28
148
  extra_rdoc_files:
29
149
  - README.rdoc
30
150
  files:
151
+ - Gemfile
31
152
  - LICENSE
32
153
  - README.rdoc
33
154
  - Rakefile
34
155
  - lib/right_scraper.rb
35
- - lib/right_scraper/linux/process_monitor.rb
36
- - lib/right_scraper/repository.rb
156
+ - lib/right_scraper/builders/base.rb
157
+ - lib/right_scraper/builders/filesystem.rb
158
+ - lib/right_scraper/builders/union.rb
159
+ - lib/right_scraper/logger.rb
160
+ - lib/right_scraper/loggers/noisy.rb
161
+ - lib/right_scraper/processes/ssh.rb
162
+ - lib/right_scraper/repositories/base.rb
163
+ - lib/right_scraper/repositories/download.rb
164
+ - lib/right_scraper/repositories/git.rb
165
+ - lib/right_scraper/repositories/mock.rb
166
+ - lib/right_scraper/repositories/svn.rb
167
+ - lib/right_scraper/resources/base.rb
168
+ - lib/right_scraper/resources/cookbook.rb
169
+ - lib/right_scraper/resources/workflow.rb
170
+ - lib/right_scraper/retrievers/base.rb
171
+ - lib/right_scraper/retrievers/checkout.rb
172
+ - lib/right_scraper/retrievers/download.rb
173
+ - lib/right_scraper/retrievers/git.rb
174
+ - lib/right_scraper/retrievers/svn.rb
175
+ - lib/right_scraper/scanners/base.rb
176
+ - lib/right_scraper/scanners/cookbook_manifest.rb
177
+ - lib/right_scraper/scanners/cookbook_metadata.rb
178
+ - lib/right_scraper/scanners/cookbook_s3_upload.rb
179
+ - lib/right_scraper/scanners/union.rb
180
+ - lib/right_scraper/scanners/workflow_manifest.rb
181
+ - lib/right_scraper/scanners/workflow_metadata.rb
182
+ - lib/right_scraper/scanners/workflow_s3_upload.rb
37
183
  - lib/right_scraper/scraper.rb
38
- - lib/right_scraper/scraper_base.rb
39
- - lib/right_scraper/scrapers/download_scraper.rb
40
- - lib/right_scraper/scrapers/git_scraper.rb
41
- - lib/right_scraper/scrapers/svn_scraper.rb
42
- - lib/right_scraper/watcher.rb
43
- - lib/right_scraper/win32/process_monitor.rb
184
+ - lib/right_scraper/scraper_logger.rb
185
+ - lib/right_scraper/scrapers/base.rb
186
+ - lib/right_scraper/scrapers/cookbook.rb
187
+ - lib/right_scraper/scrapers/workflow.rb
188
+ - lib/right_scraper/svn_client.rb
189
+ - lib/right_scraper/version.rb
44
190
  - right_scraper.gemspec
45
- - spec/download/download_scraper_spec.rb
46
- - spec/git/git_scraper_spec.rb
47
- - spec/git/git_scraper_spec_helper.rb
48
- - spec/rcov.opts
191
+ - right_scraper.rconf
192
+ - spec/builder_spec.rb
193
+ - spec/cookbook_helper.rb
194
+ - spec/cookbook_manifest_spec.rb
195
+ - spec/cookbook_s3_upload_spec.rb
196
+ - spec/download/download_retriever_spec.rb
197
+ - spec/download/download_retriever_spec_helper.rb
198
+ - spec/download/download_spec.rb
199
+ - spec/download/multi_dir_spec.rb
200
+ - spec/download/multi_dir_spec_helper.rb
201
+ - spec/git/cookbook_spec.rb
202
+ - spec/git/demokey
203
+ - spec/git/demokey.pub
204
+ - spec/git/password_key
205
+ - spec/git/password_key.pub
206
+ - spec/git/repository_spec.rb
207
+ - spec/git/retriever_spec.rb
208
+ - spec/git/retriever_spec_helper.rb
209
+ - spec/git/scraper_spec.rb
210
+ - spec/git/ssh_spec.rb
211
+ - spec/git/url_spec.rb
212
+ - spec/logger_spec.rb
49
213
  - spec/repository_spec.rb
50
- - spec/scraper_base_spec.rb
214
+ - spec/retriever_spec_helper.rb
215
+ - spec/scanner_spec.rb
216
+ - spec/scraper_helper.rb
51
217
  - spec/scraper_spec.rb
52
- - spec/scraper_spec_helper_base.rb
53
- - spec/spec.opts
54
218
  - spec/spec_helper.rb
55
- - spec/svn/svn_scraper_spec.rb
56
- - spec/svn/svn_scraper_spec_helper.rb
57
- - spec/watcher_spec.rb
219
+ - spec/svn/cookbook_spec.rb
220
+ - spec/svn/multi_svn_spec.rb
221
+ - spec/svn/multi_svn_spec_helper.rb
222
+ - spec/svn/repository_spec.rb
223
+ - spec/svn/retriever_spec.rb
224
+ - spec/svn/scraper_spec.rb
225
+ - spec/svn/svn_retriever_spec_helper.rb
226
+ - spec/svn/url_spec.rb
227
+ - spec/url_spec.rb
58
228
  has_rdoc: true
59
229
  homepage: https://github.com/rightscale/right_scraper
60
230
  licenses: []
@@ -72,12 +242,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
242
  requirements:
73
243
  - - ">="
74
244
  - !ruby/object:Gem::Version
75
- hash: 59
245
+ hash: 57
76
246
  segments:
77
247
  - 1
78
248
  - 8
79
- - 6
80
- version: 1.8.6
249
+ - 7
250
+ version: 1.8.7
81
251
  required_rubygems_version: !ruby/object:Gem::Requirement
82
252
  none: false
83
253
  requirements:
@@ -87,8 +257,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
257
  segments:
88
258
  - 0
89
259
  version: "0"
90
- requirements: []
91
-
260
+ requirements:
261
+ - libarchive, 2.8.4
262
+ - curl command line client
263
+ - Subversion command line client
92
264
  rubyforge_project: right_scraper
93
265
  rubygems_version: 1.3.7
94
266
  signing_key: