anvil-cli 0.0.6 → 0.1.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.
- data/lib/anvil/cli.rb +15 -3
- data/lib/anvil/manifest.rb +20 -4
- data/lib/anvil/version.rb +1 -1
- metadata +17 -6
data/lib/anvil/cli.rb
CHANGED
@@ -2,6 +2,7 @@ require "anvil"
|
|
2
2
|
require "anvil/builder"
|
3
3
|
require "anvil/manifest"
|
4
4
|
require "anvil/version"
|
5
|
+
require "progress"
|
5
6
|
require "thor"
|
6
7
|
require "uri"
|
7
8
|
|
@@ -30,9 +31,18 @@ class Anvil::CLI < Thor
|
|
30
31
|
Anvil::Builder.new(source)
|
31
32
|
else
|
32
33
|
manifest = Anvil::Manifest.new(File.expand_path(source))
|
33
|
-
print "
|
34
|
-
|
35
|
-
puts "done, #{
|
34
|
+
print "Checking for files to sync... "
|
35
|
+
missing = manifest.missing
|
36
|
+
puts "done, #{missing.length} files needed"
|
37
|
+
|
38
|
+
if missing.length > 0
|
39
|
+
Progress.start("Uploading", missing.map { |hash, file| file["size"].to_i }.inject(&:+))
|
40
|
+
manifest.upload(missing.keys) do |file|
|
41
|
+
Progress.step file["size"].to_i
|
42
|
+
end
|
43
|
+
puts "Uploading, done "
|
44
|
+
end
|
45
|
+
|
36
46
|
manifest
|
37
47
|
end
|
38
48
|
|
@@ -41,6 +51,8 @@ class Anvil::CLI < Thor
|
|
41
51
|
end
|
42
52
|
|
43
53
|
old_stdout.puts slug_url if options[:pipeline]
|
54
|
+
rescue Anvil::Builder::BuildError => ex
|
55
|
+
error "Build Error: #{ex.message}"
|
44
56
|
end
|
45
57
|
|
46
58
|
desc "version", "Display Anvil version"
|
data/lib/anvil/manifest.rb
CHANGED
@@ -74,9 +74,21 @@ class Anvil::Manifest
|
|
74
74
|
res.headers[:location]
|
75
75
|
end
|
76
76
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
77
|
+
def manifest_by_hash(manifest)
|
78
|
+
manifest.inject({}) do |ax, (name, file)|
|
79
|
+
ax.update file["hash"] => file.merge("name" => name)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def missing
|
84
|
+
mbh = manifest_by_hash(@manifest)
|
85
|
+
json_decode(anvil["/manifest/diff"].post(:manifest => self.to_json).to_s).inject({}) do |ax, hash|
|
86
|
+
ax.update hash => mbh[hash]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def upload(missing, &blk)
|
91
|
+
upload_hashes missing, &blk
|
80
92
|
missing.length
|
81
93
|
end
|
82
94
|
|
@@ -107,6 +119,7 @@ private
|
|
107
119
|
next(hash) if File.pipe?(file)
|
108
120
|
next(hash) if file =~ /\.git/
|
109
121
|
next(hash) if file =~ /\.swp$/
|
122
|
+
next(hash) unless file =~ /^[A-Za-z0-9\-\_\.\/]*$/
|
110
123
|
hash[Pathname.new(file).relative_path_from(root).to_s] = file_manifest(file)
|
111
124
|
hash
|
112
125
|
end
|
@@ -117,6 +130,7 @@ private
|
|
117
130
|
manifest = {
|
118
131
|
"mtime" => stat.mtime.to_i,
|
119
132
|
"mode" => "%o" % stat.mode,
|
133
|
+
"size" => stat.size.to_s
|
120
134
|
}
|
121
135
|
if File.symlink?(file)
|
122
136
|
manifest["link"] = File.readlink(file)
|
@@ -138,7 +152,8 @@ private
|
|
138
152
|
error "error uploading #{filename}: #{ex.http_body}"
|
139
153
|
end
|
140
154
|
|
141
|
-
def upload_hashes(hashes)
|
155
|
+
def upload_hashes(hashes, &blk)
|
156
|
+
mbh = manifest_by_hash(@manifest)
|
142
157
|
filenames_by_hash = @manifest.inject({}) do |ax, (name, file_manifest)|
|
143
158
|
ax.update file_manifest["hash"] => File.join(@dir.to_s, name)
|
144
159
|
end
|
@@ -152,6 +167,7 @@ private
|
|
152
167
|
Thread.new do
|
153
168
|
hashes.each do |hash|
|
154
169
|
upload_file filenames_by_hash[hash], hash
|
170
|
+
blk.call mbh[hash]
|
155
171
|
end
|
156
172
|
end
|
157
173
|
end
|
data/lib/anvil/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anvil-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: progress
|
16
|
+
requirement: &70322453636400 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.4.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70322453636400
|
14
25
|
- !ruby/object:Gem::Dependency
|
15
26
|
name: rest-client
|
16
|
-
requirement: &
|
27
|
+
requirement: &70322453635920 !ruby/object:Gem::Requirement
|
17
28
|
none: false
|
18
29
|
requirements:
|
19
30
|
- - ~>
|
@@ -21,10 +32,10 @@ dependencies:
|
|
21
32
|
version: 1.6.7
|
22
33
|
type: :runtime
|
23
34
|
prerelease: false
|
24
|
-
version_requirements: *
|
35
|
+
version_requirements: *70322453635920
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: thor
|
27
|
-
requirement: &
|
38
|
+
requirement: &70322453635460 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ~>
|
@@ -32,7 +43,7 @@ dependencies:
|
|
32
43
|
version: 0.15.2
|
33
44
|
type: :runtime
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *70322453635460
|
36
47
|
description: Alternate Heroku build workflow
|
37
48
|
email: david@dollar.io
|
38
49
|
executables:
|