checkm 0.0.0 → 0.0.1
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/VERSION +1 -1
- data/checkm.gemspec +64 -0
- data/lib/checkm.rb +55 -23
- data/test/test_checkm.rb +27 -0
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
data/checkm.gemspec
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{checkm}
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Chris Beer"]
|
12
|
+
s.date = %q{2010-11-26}
|
13
|
+
s.email = %q{chris@cbeer.info}
|
14
|
+
s.extra_rdoc_files = [
|
15
|
+
"LICENSE.txt",
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".document",
|
20
|
+
"Gemfile",
|
21
|
+
"Gemfile.lock",
|
22
|
+
"LICENSE.txt",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"checkm.gemspec",
|
27
|
+
"lib/checkm.rb",
|
28
|
+
"test/helper.rb",
|
29
|
+
"test/test_1/1",
|
30
|
+
"test/test_checkm.rb"
|
31
|
+
]
|
32
|
+
s.homepage = %q{http://github.com/cbeer/checkm}
|
33
|
+
s.licenses = ["MIT"]
|
34
|
+
s.require_paths = ["lib"]
|
35
|
+
s.rubygems_version = %q{1.3.7}
|
36
|
+
s.summary = %q{Checkm is a general-purpose text-based file manifest format}
|
37
|
+
s.test_files = [
|
38
|
+
"test/helper.rb",
|
39
|
+
"test/test_checkm.rb"
|
40
|
+
]
|
41
|
+
|
42
|
+
if s.respond_to? :specification_version then
|
43
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
44
|
+
s.specification_version = 3
|
45
|
+
|
46
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
48
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
49
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
|
50
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
53
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
54
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
55
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
56
|
+
end
|
57
|
+
else
|
58
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
59
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
60
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
61
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
data/lib/checkm.rb
CHANGED
@@ -1,4 +1,27 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
1
3
|
module Checkm
|
4
|
+
CHUNK_SIZE = 8*1024*1024
|
5
|
+
def self.checksum file, alg
|
6
|
+
digest_alg = case alg
|
7
|
+
when nil
|
8
|
+
return true
|
9
|
+
when /md5/
|
10
|
+
Digest::MD5.new if alg == 'md5'
|
11
|
+
when /sha1/
|
12
|
+
when /sha256/
|
13
|
+
when /dir/
|
14
|
+
return File.directory? file
|
15
|
+
else
|
16
|
+
return false
|
17
|
+
end
|
18
|
+
|
19
|
+
while not file.eof? and chunk = file.readpartial(CHUNK_SIZE)
|
20
|
+
digest_alg << chunk
|
21
|
+
end
|
22
|
+
digest_alg.hexdigest
|
23
|
+
end
|
24
|
+
|
2
25
|
class Manifest
|
3
26
|
def self.parse str, args = {}
|
4
27
|
Manifest.new str, args
|
@@ -10,6 +33,7 @@ module Checkm
|
|
10
33
|
attr_reader :path
|
11
34
|
|
12
35
|
def initialize checkm, args = {}
|
36
|
+
@args = args
|
13
37
|
@version = nil
|
14
38
|
@checkm = checkm
|
15
39
|
@lines = checkm.split "\n"
|
@@ -20,6 +44,26 @@ module Checkm
|
|
20
44
|
@path ||= Dir.pwd
|
21
45
|
parse_lines
|
22
46
|
# xxx error on empty entries?
|
47
|
+
@lines.unshift('#%checkm_0.7') and @version = '0.7' if @version.nil?
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
def valid?
|
52
|
+
@entries.map { |e| e.valid? }.any? { |b| b == false }
|
53
|
+
end
|
54
|
+
|
55
|
+
def add path, args = {}
|
56
|
+
line = Checkm::Entry.create path, args
|
57
|
+
|
58
|
+
Checkm::Manifest.new [@lines, line].flatten.join("\n"), args
|
59
|
+
end
|
60
|
+
|
61
|
+
def remove path
|
62
|
+
Checkm::Manifest.new @lines.reject { |x| x =~ /^@?#{path}/ }.join("\n"), args
|
63
|
+
end
|
64
|
+
|
65
|
+
def to_s
|
66
|
+
@lines.join("\n")
|
23
67
|
end
|
24
68
|
|
25
69
|
private
|
@@ -67,17 +111,20 @@ module Checkm
|
|
67
111
|
@entries << Entry.new(line, self)
|
68
112
|
end
|
69
113
|
|
70
|
-
def valid?
|
71
|
-
@entries.map { |e| e.valid? }.any? { |b| b == false }
|
72
|
-
end
|
73
|
-
|
74
114
|
end
|
75
115
|
|
76
116
|
class Entry
|
77
|
-
CHUNK_SIZE = 8*1024*1024
|
78
117
|
BASE_FIELDS = ['sourcefileorurl', 'alg', 'digest', 'length', 'modtime', 'targetfileorurl']
|
79
118
|
attr_reader :values
|
80
119
|
|
120
|
+
def self.create path, args = {}
|
121
|
+
base = args[:base] || Dir.pwd
|
122
|
+
alg = args[:alg] || 'md5'
|
123
|
+
file = File.new File.join(base, path)
|
124
|
+
|
125
|
+
"%s | %s | %s | %s | %s | %s" % [path, alg, Checkm.checksum(file, alg), File.size(file.path), file.mtime.utc.xmlschema, nil]
|
126
|
+
end
|
127
|
+
|
81
128
|
def initialize line, manifest = nil
|
82
129
|
@line = line.strip
|
83
130
|
@include = false
|
@@ -109,26 +156,11 @@ module Checkm
|
|
109
156
|
|
110
157
|
def valid_checksum?
|
111
158
|
file = File.new source
|
112
|
-
|
113
|
-
|
114
|
-
return true
|
115
|
-
when /md5/
|
116
|
-
Digest::MD5.new if alg == 'md5'
|
117
|
-
when /sha1/
|
118
|
-
when /sha256/
|
119
|
-
when /dir/
|
120
|
-
return File.directory? file
|
121
|
-
else
|
122
|
-
return false
|
123
|
-
end
|
124
|
-
|
125
|
-
while not file.eof? and chunk = file.readpartial(CHUNK_SIZE)
|
126
|
-
digest_alg << chunk
|
127
|
-
end
|
128
|
-
|
129
|
-
return digest_alg.hexdigest == digest
|
159
|
+
checksum = Checkm.checksum(file, alg)
|
160
|
+
checksum === true or checksum == digest
|
130
161
|
end
|
131
162
|
|
163
|
+
|
132
164
|
def valid_length?
|
133
165
|
throw NotImplementedError
|
134
166
|
end
|
data/test/test_checkm.rb
CHANGED
@@ -80,4 +80,31 @@ class TestCheckm < Test::Unit::TestCase
|
|
80
80
|
assert_equal(res.entries.length, 1)
|
81
81
|
assert_equal(res.entries.first.valid?, false)
|
82
82
|
end
|
83
|
+
|
84
|
+
def test_create_entry
|
85
|
+
res = Checkm::Entry.create('LICENSE.txt')
|
86
|
+
assert_match( /LICENSE\.txt | md5 | 927368f89ca84dbec878a8d017f06443 | 1054 | \d{4}/, res)
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_manifest_add
|
90
|
+
m = Checkm::Manifest.parse('')
|
91
|
+
n = m.add('LICENSE.txt')
|
92
|
+
assert_equal(n.entries.length, 1)
|
93
|
+
assert_equal(n.entries.first.valid?, true)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_manifest_add
|
97
|
+
m = Checkm::Manifest.parse('')
|
98
|
+
n = m.add('LICENSE.txt')
|
99
|
+
assert_equal(n.entries.length, 1)
|
100
|
+
assert_equal(n.entries.first.valid?, true)
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_manifest_to_s
|
104
|
+
m = Checkm::Manifest.parse('')
|
105
|
+
n = m.add('LICENSE.txt')
|
106
|
+
lines = n.to_s.split "\n"
|
107
|
+
assert_equal(lines[0], '#%checkm_0.7')
|
108
|
+
assert_match(/^LICENSE\.txt/, lines[1])
|
109
|
+
end
|
83
110
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: checkm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Chris Beer
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- README.rdoc
|
96
96
|
- Rakefile
|
97
97
|
- VERSION
|
98
|
+
- checkm.gemspec
|
98
99
|
- lib/checkm.rb
|
99
100
|
- test/helper.rb
|
100
101
|
- test/test_1/1
|