bagit 0.4.6 → 0.5.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.
- checksums.yaml +4 -4
- data/bagit.gemspec +1 -1
- data/lib/bagit/bag.rb +24 -2
- data/lib/bagit/valid.rb +5 -1
- data/lib/bagit/version.rb +1 -1
- data/spec/bagit_spec.rb +27 -0
- data/spec/validation_spec.rb +65 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e17d65c9af15cfc4638a668291c406670609270c26824fd83634b088ff0a086d
|
4
|
+
data.tar.gz: 23aee83a592d8d722946ae9d6c5ad9b5e93f11dab79fdfef83ee0286800243a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17dcf7d21f86cb2c92e74505e509344c45b3febd7d137b34cf43fef08d60a01caf49b58bb2ff3bae6da997344de8da801e879b64f54f83d99953c0dd84b93d79
|
7
|
+
data.tar.gz: a63f38b5c951c8c6d207fd831fbdb3467a2fd9c19e6b12d1ce88b364ab5e74d42c6303cc48ae68a55e7e851f9c2dad12b5940e08645f4ddfeec104cf5c14a009
|
data/bagit.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.authors = ["Tom Johnson, Francesco Lazzarino, Jamie Little"]
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
|
-
spec.required_ruby_version = ">= 2.0", "< 3.
|
17
|
+
spec.required_ruby_version = ">= 2.0", "< 3.4"
|
18
18
|
|
19
19
|
spec.add_dependency "validatable", "~> 1.6"
|
20
20
|
spec.add_dependency "docopt", "~> 0.5.0"
|
data/lib/bagit/bag.rb
CHANGED
@@ -8,9 +8,28 @@ require "bagit/string"
|
|
8
8
|
require "bagit/valid"
|
9
9
|
|
10
10
|
module BagIt
|
11
|
+
class FileFinder
|
12
|
+
def self.find(dir)
|
13
|
+
raise NotImplementedError
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class StandardFileFinder < FileFinder
|
18
|
+
def self.find(dir)
|
19
|
+
Dir[File.join(dir, "**", "*")].select { |f| File.file? f }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class StandardWithHiddenFileFinder < FileFinder
|
24
|
+
def self.find(dir)
|
25
|
+
Dir.glob(File.join(dir, "**", "*"), File::FNM_DOTMATCH).select { |f| File.file? f }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
11
29
|
# Represents the state of a bag on a filesystem
|
12
30
|
class Bag
|
13
31
|
attr_reader :bag_dir
|
32
|
+
attr_reader :detect_hidden
|
14
33
|
|
15
34
|
include Validity # Validity functionality
|
16
35
|
include Info # bagit & bag info functionality
|
@@ -18,8 +37,11 @@ module BagIt
|
|
18
37
|
include Fetch # fetch related functionality
|
19
38
|
|
20
39
|
# Make a new Bag based at path
|
21
|
-
def initialize(path, info = {}, _create = false)
|
40
|
+
def initialize(path, info = {}, _create = false, detect_hidden = false)
|
22
41
|
@bag_dir = path
|
42
|
+
@detect_hidden = detect_hidden
|
43
|
+
@file_finder = @detect_hidden ? StandardWithHiddenFileFinder : StandardFileFinder
|
44
|
+
|
23
45
|
# make the dir structure if it doesn't exist
|
24
46
|
FileUtils.mkdir bag_dir unless File.directory? bag_dir
|
25
47
|
FileUtils.mkdir data_dir unless File.directory? data_dir
|
@@ -37,7 +59,7 @@ module BagIt
|
|
37
59
|
|
38
60
|
# Return the paths to each bag file relative to bag_dir
|
39
61
|
def bag_files
|
40
|
-
|
62
|
+
@file_finder.find(data_dir)
|
41
63
|
end
|
42
64
|
|
43
65
|
# Return the paths to each tag file relative to bag_dir
|
data/lib/bagit/valid.rb
CHANGED
@@ -33,7 +33,11 @@ module BagIt
|
|
33
33
|
|
34
34
|
empty_manifests.each do |file|
|
35
35
|
logger.error("#{file} is manifested but not present".red)
|
36
|
-
|
36
|
+
error_message = "#{file} is manifested but not present"
|
37
|
+
if !detect_hidden && file.start_with?(File.join("data", "."))
|
38
|
+
error_message += "; consider turning on hidden file detection"
|
39
|
+
end
|
40
|
+
errors.add :completeness, error_message
|
37
41
|
end
|
38
42
|
tag_empty_manifests.each do |file|
|
39
43
|
logger.error("#{file} is a manifested tag but not present".red)
|
data/lib/bagit/version.rb
CHANGED
data/spec/bagit_spec.rb
CHANGED
@@ -165,4 +165,31 @@ RSpec.describe BagIt::Bag do
|
|
165
165
|
end
|
166
166
|
end
|
167
167
|
end
|
168
|
+
|
169
|
+
describe "bag with hidden files" do
|
170
|
+
before do
|
171
|
+
@sandbox = Sandbox.new
|
172
|
+
|
173
|
+
# make the bag
|
174
|
+
@bag_path = File.join @sandbox.to_s, "the_bag"
|
175
|
+
@bag = described_class.new @bag_path, {}, false, true
|
176
|
+
|
177
|
+
# add some files
|
178
|
+
@bag.add_file(".keep") { |io| io.puts "" }
|
179
|
+
@bag.add_file("test.txt") { |io| io.puts "testing testing" }
|
180
|
+
end
|
181
|
+
|
182
|
+
after do
|
183
|
+
@sandbox.cleanup!
|
184
|
+
end
|
185
|
+
|
186
|
+
describe "#bag_files" do
|
187
|
+
it "returns an array including non-hidden and hidden files" do
|
188
|
+
files = @bag.bag_files.map { |f| f.sub(File.join(@bag_path, "data", ""), "") }
|
189
|
+
expect(files).to be_a_kind_of(Array)
|
190
|
+
expect(files).not_to be_empty
|
191
|
+
expect(files).to eq([".keep", "test.txt"])
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
168
195
|
end
|
data/spec/validation_spec.rb
CHANGED
@@ -44,13 +44,17 @@ describe BagIt::Bag do
|
|
44
44
|
|
45
45
|
it "is invalid if there are files that are in the manifest but not in the bag" do
|
46
46
|
# add a file and then remove it through the back door
|
47
|
-
|
47
|
+
file_name = "file-k"
|
48
|
+
@bag.add_file(file_name) { |io| io.puts "time to go" }
|
48
49
|
@bag.manifest!
|
49
50
|
|
50
|
-
FileUtils.rm File.join(@bag.bag_dir, "data",
|
51
|
+
FileUtils.rm File.join(@bag.bag_dir, "data", file_name)
|
51
52
|
|
52
53
|
@bag.validate_only("true_for/completeness")
|
53
54
|
expect(@bag.errors.on(:completeness)).not_to be_empty
|
55
|
+
expect(@bag.errors.on(:completeness)).to include(
|
56
|
+
"#{File.join("data", file_name)} is manifested but not present"
|
57
|
+
)
|
54
58
|
expect(@bag).not_to be_valid
|
55
59
|
end
|
56
60
|
|
@@ -139,4 +143,63 @@ describe BagIt::Bag do
|
|
139
143
|
end
|
140
144
|
end
|
141
145
|
end
|
146
|
+
|
147
|
+
describe "a bag with unmanifested hidden files" do
|
148
|
+
before do
|
149
|
+
@sandbox = Sandbox.new
|
150
|
+
|
151
|
+
# make a bag with hidden files not manifested
|
152
|
+
@source_bag_path = File.join @sandbox.to_s, "the_bag"
|
153
|
+
@source_bag = described_class.new @source_bag_path, {}, false, false
|
154
|
+
@source_bag.add_file(".keep") { |io| io.puts "" }
|
155
|
+
@source_bag.add_file("test.txt") { |io| io.puts "testing testing" }
|
156
|
+
@source_bag.manifest!
|
157
|
+
end
|
158
|
+
|
159
|
+
after do
|
160
|
+
@sandbox.cleanup!
|
161
|
+
end
|
162
|
+
|
163
|
+
it "fails validation when hidden file detection is on" do
|
164
|
+
@aware_bag = described_class.new @source_bag_path, {}, false, true
|
165
|
+
expect(@aware_bag).to_not be_valid
|
166
|
+
expect(@aware_bag.errors.on(:completeness)).not_to be_empty
|
167
|
+
end
|
168
|
+
|
169
|
+
it "passes validation when hidden file detection is off" do
|
170
|
+
@unaware_bag = described_class.new @source_bag_path, {}, false, false
|
171
|
+
expect(@unaware_bag).to be_valid
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
describe "a bag with manifested hidden files" do
|
176
|
+
before do
|
177
|
+
@sandbox = Sandbox.new
|
178
|
+
|
179
|
+
# make a bag with hidden files manifested
|
180
|
+
@source_bag_path = File.join @sandbox.to_s, "the_bag"
|
181
|
+
@source_bag = described_class.new @source_bag_path, {}, false, true
|
182
|
+
@source_bag.add_file(".keep") { |io| io.puts "" }
|
183
|
+
@source_bag.add_file("test.txt") { |io| io.puts "testing testing" }
|
184
|
+
@source_bag.manifest!
|
185
|
+
end
|
186
|
+
|
187
|
+
after do
|
188
|
+
@sandbox.cleanup!
|
189
|
+
end
|
190
|
+
|
191
|
+
it "passes validation when hidden file detection is on" do
|
192
|
+
@aware_bag = described_class.new @source_bag_path, {}, false, true
|
193
|
+
expect(@aware_bag).to be_valid
|
194
|
+
end
|
195
|
+
|
196
|
+
it "fails validation when hidden file detection is off, with suggested fix offered" do
|
197
|
+
@unaware_bag = described_class.new @source_bag_path, {}, false, false
|
198
|
+
expect(@unaware_bag).to_not be_valid
|
199
|
+
expect(@unaware_bag.errors.on(:completeness)).not_to be_empty
|
200
|
+
expect(@unaware_bag.errors.on(:completeness)).to include(
|
201
|
+
"data/.keep is manifested but not present; consider turning on hidden file detection"
|
202
|
+
)
|
203
|
+
end
|
204
|
+
end
|
142
205
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bagit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Johnson, Francesco Lazzarino, Jamie Little
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: validatable
|
@@ -184,7 +184,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
184
184
|
version: '2.0'
|
185
185
|
- - "<"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version: '3.
|
187
|
+
version: '3.4'
|
188
188
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
189
189
|
requirements:
|
190
190
|
- - ">="
|