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 )