percy-cli 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a959d330004f2968d18a568f537c181d357c9647
4
- data.tar.gz: 06797a482a138ed5e8ef7794a13a89d3c8a9962d
3
+ metadata.gz: 0bacd3f31c9a5045f5f9696e03a55b150d68bbc7
4
+ data.tar.gz: 363609d9f91e061966b7b88252b58682ee82ded1
5
5
  SHA512:
6
- metadata.gz: 0be0b08394cd24de759f916880666b5d0dc6d90b3d4c028ceb19d53a44b29990703b11dae19de7c0f8849d9bd68fda33274042e947c283be453047481ff55b45
7
- data.tar.gz: d357287bf1c592ee8fe7a521c59f811c13e404d9e77f7fc673823026ad3032971585a1222c94e112e4f12450b98eb3b65792a493e11e827845e536e01d0f7c39
6
+ metadata.gz: dfac04fe59707361fe44d12198747a67537397f7e8cfd7440dd301ba7b86a23a403b4586050ac604a72ec43e76468c311bfc05fdeca327d07dbbf352f3a5f9de
7
+ data.tar.gz: 3bf6624f8fbc4929c59b6756b69fcfb951c94cf3bacd00404c40d24d7131e974071bd58e74d9cde208c3e965c70bf86dc98d989c3d63a04c6fc48fd1fa8b4575
@@ -19,7 +19,8 @@ module Percy
19
19
 
20
20
  def run_snapshot(root_dir, options = {})
21
21
  repo = options[:repo] || Percy.config.repo
22
- strip_prefix = File.absolute_path(options[:strip_prefix] || root_dir)
22
+ root_dir = File.expand_path(File.absolute_path(root_dir))
23
+ strip_prefix = File.expand_path(File.absolute_path(options[:strip_prefix] || root_dir))
23
24
  num_threads = options[:threads] || 10
24
25
  snapshot_limit = options[:snapshot_limit]
25
26
  baseurl = options[:baseurl] || '/'
@@ -32,22 +33,22 @@ module Percy
32
33
  # Find all the static files in the given root directory.
33
34
  root_paths = find_root_paths(root_dir, snapshots_regex: options[:snapshots_regex])
34
35
  resource_paths = find_resource_paths(root_dir)
35
- root_resources = build_resources(root_paths, base_resource_options.merge(is_root: true))
36
- related_resources = build_resources(resource_paths, base_resource_options)
37
- all_resources = root_resources + related_resources
36
+ root_resources = list_resources(root_paths, base_resource_options.merge(is_root: true))
37
+ build_resources = list_resources(resource_paths, base_resource_options)
38
+ all_resources = root_resources + build_resources
38
39
 
39
40
  if root_resources.empty?
40
41
  say "No root resource files found. Are there HTML files in the given directory?"
41
42
  exit(-1)
42
43
  end
43
44
 
44
- related_resources.each do |resource|
45
+ build_resources.each do |resource|
45
46
  Percy.logger.debug { "Found build resource: #{resource.resource_url}" }
46
47
  end
47
48
 
48
49
  build = rescue_connection_failures do
49
50
  say 'Creating build...'
50
- build = Percy.create_build(repo, resources: related_resources)
51
+ build = Percy.create_build(repo, resources: build_resources)
51
52
 
52
53
  say 'Uploading build resources...'
53
54
  upload_missing_resources(build, build, all_resources, {num_threads: num_threads})
@@ -56,7 +57,7 @@ module Percy
56
57
  end
57
58
  return if failed?
58
59
 
59
- # Upload a snapshot for every root resource, and associate the related_resources.
60
+ # Upload a snapshot for every root resource, and associate the build_resources.
60
61
  output_lock = Mutex.new
61
62
  snapshot_thread_pool = Thread.pool(num_threads)
62
63
  total = snapshot_limit ? [root_resources.length, snapshot_limit].min : root_resources.length
@@ -113,10 +114,7 @@ module Percy
113
114
  snapshots_regex = options[:snapshots_regex] || DEFAULT_SNAPSHOTS_REGEX
114
115
 
115
116
  file_paths = []
116
- Find.find(dir_path).each do |relative_path|
117
- path = File.absolute_path(relative_path)
118
- # Skip directories.
119
- next if !FileTest.file?(path)
117
+ _find_files(dir_path).each do |path|
120
118
  # Skip files that don't match the snapshots_regex.
121
119
  next if !path.match(snapshots_regex)
122
120
  file_paths << path
@@ -126,11 +124,7 @@ module Percy
126
124
 
127
125
  def find_resource_paths(dir_path)
128
126
  file_paths = []
129
- Find.find(dir_path).each do |relative_path|
130
- path = File.absolute_path(relative_path)
131
-
132
- # Skip directories.
133
- next if !FileTest.file?(path)
127
+ _find_files(dir_path).each do |path|
134
128
  # Skip dot files.
135
129
  next if path.match(/\/\./)
136
130
  # Only include files with the above static extensions.
@@ -145,8 +139,8 @@ module Percy
145
139
  url[0..1] == '//' ? "http:#{url}" : url
146
140
  end
147
141
 
148
- def build_resources(paths, options = {})
149
- strip_prefix = options[:strip_prefix]
142
+ def list_resources(paths, options = {})
143
+ strip_prefix = File.expand_path(options[:strip_prefix])
150
144
  baseurl = options[:baseurl]
151
145
  resources = []
152
146
 
@@ -194,6 +188,18 @@ module Percy
194
188
  uploader_thread_pool.wait
195
189
  uploader_thread_pool.shutdown
196
190
  end
191
+
192
+ # A file find method that follows directory and file symlinks.
193
+ def _find_files(*paths)
194
+ paths.flatten!
195
+ paths.map! { |p| Pathname.new(p) }
196
+ files = paths.select { |p| p.file? }
197
+ (paths - files).each do |dir|
198
+ files << _find_files(dir.children)
199
+ end
200
+ files.flatten.map { |path| path.to_s }
201
+ end
202
+ private :_find_files
197
203
  end
198
204
  end
199
205
  end
@@ -1,5 +1,5 @@
1
1
  module Percy
2
2
  class Cli
3
- VERSION = '1.2.1'
3
+ VERSION = '1.2.2'
4
4
  end
5
5
  end
@@ -3,6 +3,9 @@ require 'digest'
3
3
  RSpec.describe Percy::Cli::Snapshot do
4
4
  let(:root_dir) { File.expand_path('../testdata/', __FILE__) }
5
5
 
6
+ # Used for testing that paths are collapsed before use.r
7
+ let(:root_dir_relative) { root_dir + '/../testdata' }
8
+
6
9
  describe '#run_snapshot' do
7
10
  xit 'snapshots a root directory of static files' do
8
11
  # TODO(fotinakis): tests for the full flow.
@@ -55,6 +58,11 @@ RSpec.describe Percy::Cli::Snapshot do
55
58
  expect(paths).to match_array([
56
59
  File.join(root_dir, 'index.html'),
57
60
  File.join(root_dir, 'subdir/test.html'),
61
+ # Make sure file symlinks are followed.
62
+ File.join(root_dir, 'subdir/test_symlink.html'),
63
+ # Make sure directory symlinks are followed.
64
+ File.join(root_dir, 'subdir_symlink/test.html'),
65
+ File.join(root_dir, 'subdir_symlink/test_symlink.html'),
58
66
  ])
59
67
  end
60
68
  end
@@ -65,14 +73,19 @@ RSpec.describe Percy::Cli::Snapshot do
65
73
  File.join(root_dir, 'css/base.css'),
66
74
  File.join(root_dir, 'css/test with spaces.css'),
67
75
  File.join(root_dir, 'images/jellybeans.png'),
76
+ # Make sure file symlinks are followed.
77
+ File.join(root_dir, 'images/jellybeans-symlink.png'),
78
+ # Make sure directory symlinks are followed.
79
+ File.join(root_dir, 'images_symlink/jellybeans.png'),
80
+ File.join(root_dir, 'images_symlink/jellybeans-symlink.png'),
68
81
  ])
69
82
  end
70
83
  end
71
- describe '#build_resources' do
84
+ describe '#list_resources' do
72
85
  it 'returns resource objects' do
73
86
  paths = [File.join(root_dir, 'css/base.css')]
74
87
  options = {baseurl: '/', strip_prefix: root_dir}
75
- resources = Percy::Cli.new.send(:build_resources, paths, options)
88
+ resources = Percy::Cli.new.send(:list_resources, paths, options)
76
89
 
77
90
  expect(resources.length).to eq(1)
78
91
  expect(resources.first.sha).to eq(Digest::SHA256.hexdigest(File.read(paths.first)))
@@ -80,10 +93,18 @@ RSpec.describe Percy::Cli::Snapshot do
80
93
  expect(resources.first.content).to be_nil
81
94
  expect(resources.first.path).to eq(paths.first)
82
95
  end
96
+ it 'correctly strips the prefix from resource_url' do
97
+ paths = [File.join(root_dir, 'index.html')]
98
+ options = {baseurl: '/', strip_prefix: root_dir_relative, is_root: true}
99
+ resources = Percy::Cli.new.send(:list_resources, paths, options)
100
+
101
+ expect(resources.length).to eq(1)
102
+ expect(resources.first.resource_url).to eq('/index.html')
103
+ end
83
104
  it 'returns resource objects with is_root set if given' do
84
105
  paths = [File.join(root_dir, 'index.html')]
85
106
  options = {baseurl: '/', strip_prefix: root_dir, is_root: true}
86
- resources = Percy::Cli.new.send(:build_resources, paths, options)
107
+ resources = Percy::Cli.new.send(:list_resources, paths, options)
87
108
 
88
109
  expect(resources.length).to eq(1)
89
110
  expect(resources.first.resource_url).to eq('/index.html')
@@ -95,7 +116,7 @@ RSpec.describe Percy::Cli::Snapshot do
95
116
  it 'encodes the resource_url' do
96
117
  paths = [File.join(root_dir, 'css/test with spaces.css')]
97
118
  options = {baseurl: '/', strip_prefix: root_dir}
98
- resources = Percy::Cli.new.send(:build_resources, paths, options)
119
+ resources = Percy::Cli.new.send(:list_resources, paths, options)
99
120
 
100
121
  expect(resources.length).to eq(1)
101
122
  expect(resources.first.resource_url).to eq('/css/test%20with%20spaces.css')
@@ -107,7 +128,7 @@ RSpec.describe Percy::Cli::Snapshot do
107
128
  it 'prepends the baseurl if given' do
108
129
  paths = [File.join(root_dir, 'index.html')]
109
130
  options = {strip_prefix: root_dir, is_root: true, baseurl: '/test baseurl/'}
110
- resources = Percy::Cli.new.send(:build_resources, paths, options)
131
+ resources = Percy::Cli.new.send(:list_resources, paths, options)
111
132
 
112
133
  expect(resources.length).to eq(1)
113
134
  expect(resources.first.resource_url).to eq('/test%20baseurl/index.html')
@@ -0,0 +1 @@
1
+ <!DOCTYPE html><html>Hello World!</html>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perceptual Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-28 00:00:00.000000000 Z
11
+ date: 2016-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -132,9 +132,11 @@ files:
132
132
  - spec/percy/cli/testdata/css/base.css
133
133
  - spec/percy/cli/testdata/css/test with spaces.css
134
134
  - spec/percy/cli/testdata/css/unrelated-no-extension
135
+ - spec/percy/cli/testdata/images/jellybeans-symlink.png
135
136
  - spec/percy/cli/testdata/images/jellybeans.png
136
137
  - spec/percy/cli/testdata/index.html
137
138
  - spec/percy/cli/testdata/subdir/test.html
139
+ - spec/percy/cli/testdata/subdir/test_symlink.html
138
140
  - spec/spec_helper.rb
139
141
  homepage: ''
140
142
  licenses:
@@ -165,7 +167,9 @@ test_files:
165
167
  - spec/percy/cli/testdata/css/base.css
166
168
  - spec/percy/cli/testdata/css/test with spaces.css
167
169
  - spec/percy/cli/testdata/css/unrelated-no-extension
170
+ - spec/percy/cli/testdata/images/jellybeans-symlink.png
168
171
  - spec/percy/cli/testdata/images/jellybeans.png
169
172
  - spec/percy/cli/testdata/index.html
170
173
  - spec/percy/cli/testdata/subdir/test.html
174
+ - spec/percy/cli/testdata/subdir/test_symlink.html
171
175
  - spec/spec_helper.rb