Catmandu-BagIt
view release on metacpan or search on metacpan
script/bagit.pl view on Meta::CPAN
my $bagit = Catmandu::BagIt->new(algorithm => $algorithm, version => $version);
my $cdirectory = File::Spec->canonpath($directory);
for my $path (@files) {
next unless -f $path;
my $cpath = substr(File::Spec->canonpath($path),length($cdirectory) + 1);
$bagit->add_file($cpath, IO::File->new($path));
print "$cpath <-- $path\n";
}
if ($bagit->errors) {
print STDERR join("\n",$bagit->errors);
exit 2;
}
unless ($bagit->locked) {
$bagit->write($directory, overwrite => 1);
}
}
sub cmd_read {
my ($directory) = shift;
croak "No such directory: $directory" unless -d $directory;
my $bagit = Catmandu::BagIt->read($directory);
unless ($bagit) {
print STDERR "$directory is not a bag\n";
exit(2);
}
printf "path: %s\n", $bagit->path;
printf "version: %s\n" , $bagit->version;
printf "encoding: %s\n" , $bagit->encoding;
printf "tags:\n";
for my $tag ($bagit->list_info_tags) {
my @values = $bagit->get_info($tag);
for my $value (@values) {
printf " - $tag: \"%s\"\n" , $value;
}
}
printf "tag-sums:\n";
for my $file ($bagit->list_tagsum) {
my $sum = $bagit->get_tagsum($file);
printf " $file: %s\n" , $sum;
}
printf "file-sums:\n";
for my $file ($bagit->list_checksum) {
my $sum = $bagit->get_checksum($file);
printf " $file: %s\n" , $sum;
}
printf "files:\n";
for my $file ($bagit->list_files) {
my $stat = [stat($file->path)];
printf " -";
printf " name: %s\n", $file->filename;
printf " size: %d\n", $stat->[7];
printf " last-mod: %s\n", scalar(localtime($stat->[9]));
}
}
sub cmd_holey {
my ($directory) = shift;
croak "No such directory: $directory" unless -d $directory;
my $bagit = Catmandu::BagIt->read($directory);
unless ($bagit) {
print STDERR "$directory is not a bag\n";
exit(2);
}
if ($bagit->is_holey) {
print "$directory is holey\n";
exit 0;
}
else {
print "$directory is not holey!\n";
if ($bagit->errors) {
print STDERR join("\n",$bagit->errors);
}
exit 2;
}
}
sub cmd_complete {
my ($directory) = shift;
croak "No such directory: $directory" unless -d $directory;
my $bagit = Catmandu::BagIt->read($directory);
unless ($bagit) {
print STDERR "$directory is not a bag\n";
exit(2);
}
if ($bagit->complete) {
print "$directory is complete\n";
exit 0;
}
else {
print "$directory is not complete!\n";
if ($bagit->errors) {
print STDERR join("\n",$bagit->errors);
}
exit 2;
}
}
sub cmd_valid {
my ($directory) = shift;
( run in 0.835 second using v1.01-cache-2.11-cpan-14f38c9f855 )