|  line  | 
 !l  | 
 l&&!r  | 
 l&&r  | 
 condition  | 
 
| 
55
 | 
 0  | 
 0  | 
 7  | 
 ref $cas and ref($cas)->can('get')  | 
 
| 
 | 
 0  | 
 0  | 
 7  | 
 ref $cas and ref($cas)->can('get') and ref($cas)->can('put')  | 
 
| 
61
 | 
 7  | 
 0  | 
 0  | 
 @_ == 1 && ref $_[0] eq 'HASH'  | 
 
| 
77
 | 
 0  | 
 0  | 
 7  | 
 defined $self->dir_cache and $self->dir_cache->can('clear')  | 
 
| 
84
 | 
 0  | 
 2  | 
 5  | 
 ref $root and ref($root)->isa('DataStore::CAS::FS::DirEnt')  | 
 
| 
100
 | 
 0  | 
 0  | 
 7  | 
 ref $self->root_entry and ref($self->root_entry)->can('type')  | 
 
| 
 | 
 0  | 
 0  | 
 7  | 
 ref $self->root_entry and ref($self->root_entry)->can('type') and $self->root_entry->type eq 'dir'  | 
 
| 
 | 
 0  | 
 0  | 
 7  | 
 ref $self->root_entry and ref($self->root_entry)->can('type') and $self->root_entry->type eq 'dir' and defined $self->root_entry->ref  | 
 
| 
118
 | 
 124  | 
 0  | 
 0  | 
 ref $hash_or_file && $hash_or_file->can('hash')  | 
 
| 
159
 | 
 3  | 
 0  | 
 0  | 
 @_ == 1 && ref $_[0] eq 'HASH'  | 
 
| 
213
 | 
 757  | 
 4  | 
 0  | 
 $ent->type eq 'symlink' and $flags->{'follow_symlinks'}  | 
 
| 
216
 | 
 0  | 
 0  | 
 4  | 
 defined $target and length $target  | 
 
| 
238
 | 
 0  | 
 113  | 
 644  | 
 defined $name and length $name  | 
 
| 
 | 
 113  | 
 6  | 
 638  | 
 defined $name and length $name and $name ne '.'  | 
 
| 
257
 | 
 425  | 
 204  | 
 0  | 
 not defined $subnode and defined $nodes->[-1]{'dir'} || defined $ent->ref  | 
 
| 
322
 | 
 2  | 
 5  | 
 45  | 
 not defined $node->{'dir'} and defined $ent->ref  | 
 
| 
337
 | 
 1  | 
 7  | 
 0  | 
 ref $subnode and $subnode->{'invalid'}  | 
 
| 
378
 | 
 0  | 
 0  | 
 3  | 
 defined $ent_hash{'name'} and length $ent_hash{'name'}  | 
 
| 
393
 | 
 0  | 
 10  | 
 0  | 
 ++$_->{'invalid'} and &_invalidate_subtree  | 
 
| 
406
 | 
 1  | 
 0  | 
 1  | 
 defined $$entref->type && $$entref->type eq 'dir'  | 
 
| 
417
 | 
 1  | 
 1  | 
 0  | 
 ($old_dir_ref || '') ne ($new_dir_ref || '') and $nodes->[-1]{'subtree'}  | 
 
| 
436
 | 
 21  | 
 0  | 
 4  | 
 $_->{'changed'} and not $_->{'invalid'}  | 
 
| 
476
 | 
 0  | 
 0  | 
 0  | 
 $self->{'_nodes'} and $self->{'_nodes'}{'changed'}  | 
 
| 
486
 | 
 0  | 
 2  | 
 0  | 
 $self->_nodes and $self->_nodes->{'changed'}  | 
 
| 
508
 | 
 1  | 
 10  | 
 0  | 
 defined $v and $v eq 0 || $v->{'changed'}  | 
 
| 
514
 | 
 9  | 
 0  | 
 1  | 
 not %changes and defined $node->{'dirent'}->ref  | 
 
| 
532
 | 
 2  | 
 0  | 
 8  | 
 $_->{'subtree'} and $_->{'dirent'}->type eq 'dir'  | 
 
| 
 | 
 2  | 
 8  | 
 0  | 
 $_->{'subtree'} and $_->{'dirent'}->type eq 'dir' and $_->{'changed'}  | 
 
| 
594
 | 
 101  | 
 2  | 
 111  | 
 $nodes and ref $nodes->[-1]  | 
 
| 
 | 
 103  | 
 0  | 
 111  | 
 $nodes and ref $nodes->[-1] and not $nodes->[-1]{'invalid'}  | 
 
| 
677
 | 
 1  | 
 0  | 
 0  | 
 @_ == 1 && ref $_[0] eq 'HASH'  | 
 
| 
691
 | 
 3  | 
 0  | 
 0  | 
 @_ == 1 && ref $_[0] eq 'HASH'  | 
 
| 
702
 | 
 97  | 
 0  | 
 4  | 
 @_ and ref $_[0] eq $class  | 
|  line  | 
 l  | 
 !l&&r  | 
 !l&&!r  | 
 condition  | 
 
| 
127
 | 
 0  | 
 48  | 
 0  | 
 $file ||= $self->store->get($hash)  | 
 
| 
233
 | 
 0  | 
 0  | 
 0  | 
 $mkdir_defaults ||= _build_mkdir_defaults($flags)  | 
 
| 
257
 | 
 125  | 
 71  | 
 8  | 
 defined $nodes->[-1]{'dir'} || defined $ent->ref  | 
 
| 
259
 | 
 125  | 
 71  | 
 0  | 
 $nodes->[-1]{'dir'} ||= $self->get_dir($ent->ref)  | 
 
| 
274
 | 
 8  | 
 0  | 
 7  | 
 $flags->{'mkdir'} or $flags->{'partial'}  | 
 
| 
280
 | 
 3  | 
 3  | 
 0  | 
 $mkdir_defaults ||= _build_mkdir_defaults($flags)  | 
 
| 
373
 | 
 3  | 
 0  | 
 0  | 
 ref $newent eq 'HASH' or not defined $newent->name  | 
 
| 
 | 
 3  | 
 0  | 
 0  | 
 ref $newent eq 'HASH' or not defined $newent->name or not defined $newent->type  | 
 
| 
508
 | 
 0  | 
 0  | 
 10  | 
 $v eq 0 || $v->{'changed'}  | 
 
| 
517
 | 
 4  | 
 0  | 
 5  | 
 defined $node->{'dir'} or defined $node->{'dirent'}->ref  | 
 
| 
519
 | 
 4  | 
 0  | 
 0  | 
 $node->{'dir'} ||= $self->get_dir($node->{'dirent'}->ref)  | 
 
| 
574
 | 
 0  | 
 0  | 
 0  | 
 $self->{'canonical_path'} ||= do {
	my $name = $self->path_names;
my $path = '/' . join('/', grep({$_ ne '.' if length $_;} @$name));
$path .= '/' if $name->[-1] eq '' or $name->[-1] eq '.';
$path =~ s[//+][/]g;
$path
}  | 
 
| 
577
 | 
 0  | 
 0  | 
 0  | 
 $name->[-1] eq '' or $name->[-1] eq '.'  | 
 
| 
601
 | 
 2  | 
 0  | 
 2  | 
 not ref $_ or $_->{'invalid'}  | 
 
| 
647
 | 
 0  | 
 2  | 
 0  | 
 $_[0]{'file'} ||= do {
	my $ent = $_[0]->dirent;
Carp::croak('Path is not a file') unless $ent->type eq 'file';
Carp::croak('File was not stored in CAS') unless defined(my $hash = $ent->ref);
$_[0]->filesystem->get($hash)
}  | 
 
| 
661
 | 
 0  | 
 0  | 
 0  | 
 $_[0]{'dir'} ||= do {
	my $ent = $_[0]->dirent;
Carp::croak('Path is not a directory') unless $ent->type eq 'dir';
Carp::croak('Directory was not stored in CAS') unless defined(my $hash = $ent->ref);
$_[0]->filesystem->get_dir($hash)
}  | 
 
| 
693
 | 
 6  | 
 0  | 
 0  | 
 defined $self->{$_} or croak("'${_}' is required")  |