/usr/local/CPAN/Vimana/Vimana/Installer/Vimball.pm


package Vimana::Installer::Vimball;
use warnings;
use strict;
use base qw(Vimana::Installer);
use File::Temp qw(tempfile);
use Vimana::Util;
use Vimana::Logger;
use Vimana::Record;

sub scan_vimball {
    my ($self,$file) = @_;
    open IN, "<" , $file;
    my @lines = <IN>;
    close IN;
    my @filelist = ();
    for my $line ( @lines ) {
        if( $line =~ m{^(.*?)\s\[\[\[\d} ) {
            push @filelist,$1;
        }
    }
    return @filelist;
}


sub run {
    my $self = shift;
    my $verbose = $self->verbose;
    my $file = $self->target;
    # my $vim = find_vim();

    # The first runtime path will be the location that vimball install to. 
    # vim -c "redir > rtp" -c "echo &rtp" -c "q"
    # /Users/c9s/.vim,/opt/local/share/vim/vimfiles,/opt/local/share/vim/vim72,/opt/local/share/vim/vimfiles/after,/Users/c9s/.vim/after
    my @rtps = get_vim_rtp();


    my @filelist = $self->scan_vimball( $file );

    # XXX: check file conflicts.
    #
    #

    my $fh = File::Temp->new( TEMPLATE => 'tempXXXXXX', 
                SUFFIX => '.log' , UNLINK => 0 );
    # my $logfile = $fh->filename;
    my $logfile = "vimana-@{[ $self->package_name ]}-log";
    print "Installing Vimball File: $file\n";
    system( qq|vim $file -c "redir > $logfile" -c ":so %" -c 'sleep 500ms' -c q|);

    print "Vimball Installation Log: $logfile\n";
    if( $verbose ) {
        print "======== VimBall Installation Log Start ======";
        open LOG, "<",$logfile;
        local $/;
        print <LOG>;
        close LOG;
        print "======== VimBall Installation Log End ========";
    }


    # pre-append vim runtime path
    @filelist = map { File::Spec->join( $rtps[0], $_ )  } @filelist ;

    my @e = Vimana::Record->mk_file_digests( @filelist );
    Vimana::Record->add( {
            version => 0.3,    # record spec version
            package => $self->package_name, 
            generated_by => 'Vimana-' . $Vimana::VERSION,
            installer_type =>  $self->installer_type ,
            files => \@e 
    } );
}

1;