The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use warnings;
use strict;
use Getopt::Long;
use DBIx::FileStore;

my $verbose = 0;
# fdbput: copies a file (or files) into the db

main();

sub Usage {
    "fdbput [-local=filename] FILENAME [FILENAMES...]\n" .
    "  Copies files into of the filestore from the filesystem.\n" .
    "  --local=filename specifies source on the filesystem different\n".
    "  from target name in filestore and can only be used with a\n" .
    "  single filename\n" . 
    "  NOTE: currently will place dup files into the filestore!\n";
}

sub main {
    my $localname = "";
    GetOptions( "verbose!" => \$verbose,
                "localname=s" => \$localname ) || die Usage();
    my $filestore = new DBIx::FileStore();

    die "fdbput: pass files to copy into DB\n" unless @ARGV;
    die "fdbput: can't use --local option with multiple files\n" if (@ARGV > 1 && $localname);

    for my $filename (@ARGV) {
        print "fdbput: writing to filestore: $filename\n" if $verbose;
        my $file_to_read = $localname || $filename;
        unless(-e $file_to_read) {
            warn "fdbput: file doesn't exist on fs: $file_to_read\n" && next;
        } 
        eval { $filestore->write_to_db($file_to_read, $filename); }; 
        # read it from $localname if set, otherwise look in the same name they call it
        
        warn "fdbput: Error writing $filename: $@" if $@;
    }
}

=pod

=head1 NAME     
            
fdbput - Copies files from filesystem to DBIx::FileStore tables
                    
=head1 SYNOPSIS     
                
    % fdbput filename.txt

writes filename.txt from filesystem to filestore

    % fdbput filename.txt filename2.txt

puts named files into filestore

    % fdbput filename.txt -local=/tmp/filename-now.txt

puts contents of file /tmp/filename-now.txt into filestore
under the name 'filename.txt'.

=head1 DESCRIPTION 

Copies files from the filesystem to DBIx::Filestore. 

--local option allows user to specify a different name 
in the filestore from the name used in the filesystem.

=head1 AUTHOR

Josh Rabinowitz <joshr>
    
=head1 SEE ALSO
    
L<DBIx::FileStore>, L<fdbcat>,  L<fdbls>, L<fdbmv>,  L<fdbget>,  L<fdbrm>,  L<fdbstat>,  L<fdbtidy>
    
=cut