Git-Database

 view release on metacpan or  search on metacpan

t/lib/TestUtil.pm  view on Meta::CPAN

use strict;
use warnings;

# don't load extra subs, or run any import
use Module::Runtime     ();
use File::Spec          ();
use File::Temp          ();
use File::Basename      ();
use Test::Requires::Git ();

# Git::Database objects
use Git::Database::Object::Blob;
use Git::Database::Object::Tree;
use Git::Database::Object::Commit;
use Git::Database::Object::Tag;

use Git::Database::Backend::None;

our @kinds = qw( blob tree commit tag );

# all the following functions will end up in the caller's namespace

# test data
sub objects_from {
    my ($name) = @_;
    my $perl = File::Spec->catfile( 't', 'bundles', "$name.perl" );

    # slurp and eval the content of the file
    my $objects = do { local @ARGV = ($perl); local $/; eval <> }
      or die "Failed processing $perl";

    # add extra information
    for my $kind ( @kinds ) {
        for my $object ( @{ $objects->{$kind} } ) {
            $object->{kind} = $kind;
            $object->{desc} ||= join ' ', $object->{kind}, $object->{digest};
            $object->{sha1} = $object->{digest};
            $object->{size} ||= length $object->{content};
            $object->{string} ||= $object->{content};
            $object->{commit_info}{parents_digest} ||= []
              if $kind eq 'commit';
        }
    }

    return $objects;
}

sub repository_from {
    my ($name) = @_;
    my $bundle = File::Spec->catfile( qw( t bundles ), "$name.bundle" );
    my $dir = File::Temp::tempdir( CLEANUP => 1 );

    Test::Requires::Git::test_requires_git '1.6.5';
    `git clone -q $bundle $dir`;
    die "`git clone -q $bundle $dir` failed" if $?;

    return $dir;
}

sub empty_repository {
    my $dir = File::Temp::tempdir( CLEANUP => 1 );

    Test::Requires::Git::test_requires_git '1.6.5';
    `git init $dir`;
    die "`git init $dir` failed" if $?;

    return $dir;
}

# build a store from a repository directory
my %builder_for = (
    'None' => sub { '' },    # ignored by Git::Database::Backend::None
    'Cogit' => sub { Cogit->new( directory => shift ); },
    'Git'             => sub { Git->repository( Directory      => shift ); },
    'Git::PurePerl'   => sub { Git::PurePerl->new( directory   => shift ); },
    'Git::Repository' => sub { Git::Repository->new( work_tree => shift ); },
    'Git::Sub'        => sub { shift },
    'Git::Wrapper'    => sub { Git::Wrapper->new( shift ); },
    'Git::Raw::Repository' => sub { Git::Raw::Repository->open( shift ); },
);
my %min_version = (
    map ( { ( $_ => 0 ) } keys %builder_for ),
    'Git::Raw::Repository' => 0.74,
    'Git::Repository'      => 1.300,
    'Git::Sub'             => 0.163320,
);

sub store_for { return $builder_for{ $_[0] }->( $_[1] ); }



( run in 0.996 second using v1.01-cache-2.11-cpan-5735350b133 )