Method: OcflTools::OcflValidator#verify_directory
- Defined in:
- lib/ocfl_tools/ocfl_validator.rb
#verify_directory(version) ⇒ OcflTools::OcflResults
We may also want to only verify a specific directory, not the entire object. For example, if we’ve just added a new version, we might want to just check those files and not the rest of the object (esp. if it has some very large version directories).
604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 |
# File 'lib/ocfl_tools/ocfl_validator.rb', line 604 def verify_directory(version) # start by getting version format and directories. get_version_format # sets @version_format, one way or another. version_name = @version_format % version.to_i # Make sure this directory actually exists. unless File.directory?("#{@ocfl_object_root}/#{version_name}") raise "Requested version directory doesn't exist!" end # OK, now we need an inventory.json to tell use what the contentDirectory should be. if File.exist?("#{ocfl_object_root}/#{version_name}/inventory.json") my_content_dir = OcflTools::Utils::Inventory.get_contentDirectory("#{ocfl_object_root}/#{version_name}/inventory.json") @inventory = OcflTools::OcflInventory.new.from_file("#{ocfl_object_root}/#{version_name}/inventory.json") else my_content_dir = OcflTools::Utils::Inventory.get_contentDirectory("#{ocfl_object_root}/inventory.json") @inventory = OcflTools::OcflInventory.new.from_file("#{ocfl_object_root}/inventory.json") end # Get a list of fully-resolvable files for this version directory from disk. my_files_on_disk = OcflTools::Utils::Files.get_version_dir_files(@ocfl_object_root, version) # Now process my_inventory.manifest # Flip and invert it. manifest_checksums = OcflTools::Utils::Files.(@inventory.manifest, @ocfl_object_root) # Now we need to trim manifest_checksums to the stuff that only matches # ocfl_object_root/version_string/content_dir filtered_checksums = {} manifest_checksums.each do |file, digest| if file =~ %r{^#{ocfl_object_root}/#{version_name}/#{my_content_dir}} filtered_checksums[file] = digest end end # Now generate checksums for the files we found on disk, and Hash them. disk_checksums = OcflTools::Utils::Files.create_digests(my_files_on_disk, @inventory.digestAlgorithm) # Finally! Pass them to checksum checker. OcflTools::Utils.compare_hash_checksums(disk_checksums: disk_checksums, inventory_checksums: filtered_checksums, results: @my_results, context: "verify_directory #{version_name}") end |