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 )