arvados 0.1.20150609141135 → 0.1.20150614013129
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.
- checksums.yaml +4 -4
- data/lib/arvados/keep.rb +57 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e88a98ecf81a0992ac43e751b78eb89abf1e78f
|
4
|
+
data.tar.gz: 64d1b0e574cbcb44c6722d9f2ccde1a4f88b1d8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a546031d80c6c08133e7a2987fe5abdc61644c88dbc7515d8d6d50a47fabd4382a4cceedd69418f0a27707621614a3d985e38819d13b184a83c3b726f3496172
|
7
|
+
data.tar.gz: 0c7a3631101f1ec8f5b3607b0c076094a8eb2be9ff6bb4f2b7c391137feb8df92c32cb89a470ad23010a1a7275ae896df7e50dd431bd97fe2c739fecefb599fc
|
data/lib/arvados/keep.rb
CHANGED
@@ -97,6 +97,9 @@ module Keep
|
|
97
97
|
end
|
98
98
|
|
99
99
|
class Manifest
|
100
|
+
STRICT_STREAM_TOKEN_REGEXP = /^(\.)(\/[^\/\s]+)*$/
|
101
|
+
STRICT_FILE_TOKEN_REGEXP = /^[[:digit:]]+:[[:digit:]]+:([^\s\/]+(\/[^\s\/]+)*)$/
|
102
|
+
|
100
103
|
# Class to parse a manifest text and provide common views of that data.
|
101
104
|
def initialize(manifest_text)
|
102
105
|
@text = manifest_text
|
@@ -224,5 +227,59 @@ module Keep
|
|
224
227
|
end
|
225
228
|
false
|
226
229
|
end
|
230
|
+
|
231
|
+
# Verify that a given manifest is valid according to
|
232
|
+
# https://arvados.org/projects/arvados/wiki/Keep_manifest_format
|
233
|
+
def self.validate! manifest
|
234
|
+
raise ArgumentError.new "Invalid manifest: does not end with newline" if !manifest.end_with?("\n")
|
235
|
+
line_count = 0
|
236
|
+
manifest.each_line do |line|
|
237
|
+
line_count += 1
|
238
|
+
|
239
|
+
words = line[0..-2].split(/ /)
|
240
|
+
raise ArgumentError.new "Manifest invalid for stream #{line_count}: missing stream name" if words.empty?
|
241
|
+
|
242
|
+
count = 0
|
243
|
+
|
244
|
+
word = words.shift
|
245
|
+
count += 1 if word =~ STRICT_STREAM_TOKEN_REGEXP and word !~ /\/\.\.?(\/|$)/
|
246
|
+
raise ArgumentError.new "Manifest invalid for stream #{line_count}: missing or invalid stream name #{word.inspect if word}" if count != 1
|
247
|
+
|
248
|
+
count = 0
|
249
|
+
word = words.shift
|
250
|
+
while word =~ Locator::LOCATOR_REGEXP
|
251
|
+
word = words.shift
|
252
|
+
count += 1
|
253
|
+
end
|
254
|
+
raise ArgumentError.new "Manifest invalid for stream #{line_count}: missing or invalid locator #{word.inspect if word}" if count == 0
|
255
|
+
|
256
|
+
count = 0
|
257
|
+
while word =~ STRICT_FILE_TOKEN_REGEXP and ($~[1].split('/') & ['..','.']).empty?
|
258
|
+
word = words.shift
|
259
|
+
count += 1
|
260
|
+
end
|
261
|
+
|
262
|
+
if word
|
263
|
+
raise ArgumentError.new "Manifest invalid for stream #{line_count}: invalid file token #{word.inspect}"
|
264
|
+
elsif count == 0
|
265
|
+
raise ArgumentError.new "Manifest invalid for stream #{line_count}: no file tokens"
|
266
|
+
end
|
267
|
+
|
268
|
+
# Ruby's split() method silently drops trailing empty tokens
|
269
|
+
# (which are not allowed by the manifest format) so we have to
|
270
|
+
# check trailing spaces manually.
|
271
|
+
raise ArgumentError.new "Manifest invalid for stream #{line_count}: trailing space" if line.end_with? " \n"
|
272
|
+
end
|
273
|
+
true
|
274
|
+
end
|
275
|
+
|
276
|
+
def self.valid? manifest
|
277
|
+
begin
|
278
|
+
validate! manifest
|
279
|
+
true
|
280
|
+
rescue ArgumentError
|
281
|
+
false
|
282
|
+
end
|
283
|
+
end
|
227
284
|
end
|
228
285
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arvados
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.20150614013129
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arvados Authors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-api-client
|
@@ -104,7 +104,7 @@ dependencies:
|
|
104
104
|
- - "<"
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: 1.0.0
|
107
|
-
description: Arvados client library, git commit
|
107
|
+
description: Arvados client library, git commit 4617a33da4f02639db5a63d925abdf1eaa01145c
|
108
108
|
email: gem-dev@curoverse.com
|
109
109
|
executables: []
|
110
110
|
extensions: []
|