File Coverage

blib/lib/DataCube/FileUtils/TableMerger.pm
Criterion Covered Total %
statement 16 18 88.8
branch n/a
condition n/a
subroutine 6 6 100.0
pod n/a
total 22 24 91.6


line stmt bran cond sub pod time code
1              
2              
3              
4             package DataCube::FileUtils::TableMerger;
5              
6 1     1   1802 use strict;
  1         3  
  1         32  
7 1     1   4 use warnings;
  1         3  
  1         28  
8              
9 1     1   6 use File::Copy;
  1         2  
  1         60  
10 1     1   6 use Time::HiRes;
  1         1  
  1         48  
11 1     1   65 use Storable qw(nstore retrieve);
  1         1  
  1         36  
12              
13 1     1   35 use DataCube;
  0            
  0            
14             use DataCube::Schema;
15             use DataCube::FileUtils;
16             use DataCube::MeasureUpdater;
17             use DataCube::FileUtils::FileMerger;
18              
19             my $utils = DataCube::FileUtils->new;
20              
21             sub new {
22             my($class,%opts) = @_;
23             bless {%opts}, ref($class) || $class;
24             }
25              
26             sub merge {
27             my($self,%opts) = @_;
28            
29             $opts{source} = [$opts{source}] unless ref($opts{source});
30             my $schema = Storable::retrieve("$opts{source}->[0]/.schema");
31            
32             $self->merge_auxillary_files(%opts);
33            
34             my %files;
35             for(@{$opts{source}}){
36             my $source = $_;
37             my @files = grep {/^[a-f0-9]+$/i} $utils->dir($source);
38             push @{$files{$_}}, "$source/$_" for @files;
39             }
40            
41             for(keys %files){
42             my $file_merger = DataCube::FileUtils::FileMerger->new;
43             $file_merger->merge(
44             source => $files{$_},
45             target => $opts{target} . "/$_",
46             schema => $schema,
47             unlink => $opts{unlink},
48             );
49             }
50            
51             return $self;
52             }
53              
54              
55             sub merge_auxillary_files {
56             my($self,%opts) = @_;
57            
58             my $digests = {};
59             for(@{$opts{source}}){
60             my $source_digests = Storable::retrieve("$_/.digests");
61             $digests->{$_} = $source_digests->{$_} for keys %$source_digests;
62             }
63             Storable::nstore($digests,"$opts{target}/.digests");
64            
65             File::Copy::copy("$opts{source}->[0]/.schema","$opts{target}/.schema")
66             unless -f("$opts{target}/.schema");
67            
68             File::Copy::copy("$opts{source}->[0]/.config","$opts{target}/.config")
69             unless -f("$opts{target}/.config");
70            
71             return $self;
72             }
73              
74              
75              
76              
77              
78              
79             1;
80              
81              
82              
83              
84             __DATA__