1 package Git::PurePerl::Loose;
3 use MooseX::StrictConstructor;
4 use MooseX::Types::Path::Class;
5 use Compress::Zlib qw(compress uncompress);
7 use namespace::autoclean;
11 isa => 'Path::Class::Dir',
17 my ( $self, $sha1 ) = @_;
20 = file( $self->directory, substr( $sha1, 0, 2 ), substr( $sha1, 2 ) );
21 return unless -f $filename;
23 my $compressed = $filename->slurp;
24 my $data = uncompress($compressed);
25 my ( $kind, $size, $content ) = $data =~ /^(\w+) (\d+)\0(.+)$/s;
26 return ( $kind, $size, $content );
30 my ( $self, $object ) = @_;
34 substr( $object->sha1, 0, 2 ),
35 substr( $object->sha1, 2 )
37 $filename->parent->mkpath;
38 my $compressed = compress( $object->raw );
39 my $fh = $filename->openw;
40 binmode($fh); #important for Win32
41 $fh->print($compressed) || die "Error writing to $filename: $!";
46 my $files = Data::Stream::Bulk::Path::Class->new(
47 dir => $self->directory,
50 return Data::Stream::Bulk::Filter->new(
52 [ map { m{([a-z0-9]{2})[/\\]([a-z0-9]{38})}; $1 . $2 }
53 grep {m{[/\\][a-z0-9]{2}[/\\]}} @$_
60 __PACKAGE__->meta->make_immutable;