Subversion Repositories DevTools

Rev

Rev 7410 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7410 Rev 7413
Line 106... Line 106...
106
    'verbose'         => {'default'   => 0      , 'fmt' => 'int'},                  # Debug ...
106
    'verbose'         => {'default'   => 0      , 'fmt' => 'int'},                  # Debug ...
107
    'active'          => {'default'   => 1      , 'fmt' => 'bool'},                 # Disable alltogether
107
    'active'          => {'default'   => 1      , 'fmt' => 'bool'},                 # Disable alltogether
108
    'debug'           => {'default'   => 0      , 'fmt' => 'bool'},                 # Log to screen
108
    'debug'           => {'default'   => 0      , 'fmt' => 'bool'},                 # Log to screen
109
    'txdetail'        => {'default'   => 0      , 'fmt' => 'bool'},                 # Show transfer times
109
    'txdetail'        => {'default'   => 0      , 'fmt' => 'bool'},                 # Show transfer times
110
    'noTransfers'     => {'default'   => 0      , 'fmt' => 'bool'},                 # Debugging option to prevent transfers
110
    'noTransfers'     => {'default'   => 0      , 'fmt' => 'bool'},                 # Debugging option to prevent transfers
111
    'transferDir'     => {'default'   => 'pkg/S3TRANSFER' , 'fmt' => 'text'},
111
    's3File'          => {'default'   => 's3Transfer.json', 'fmt' => 'text'},       # Undocumented - debug only
112
 
112
 
113
    'tagdir'          => {'mandatory' => 1      , 'fmt' => 'mkdir'},
113
    'tagdir'          => {'mandatory' => 1      , 'fmt' => 'mkdir'},
114
    'workdir'         => {'mandatory' => 1      , 'fmt' => 'mkdir'},
114
    'workdir'         => {'mandatory' => 1      , 'fmt' => 'mkdir'},
115
    'forcedirscan'    => {'default'   => 100    , 'fmt' => 'period'},
115
    'forcedirscan'    => {'default'   => 100    , 'fmt' => 'period'},
116
    'forces3update'   => {'default'   => '30m'  , 'fmt' => 'period'},
116
    'forces3update'   => {'default'   => '30m'  , 'fmt' => 'period'},
Line 675... Line 675...
675
        $reason = 'NoS3Data';
675
        $reason = 'NoS3Data';
676
 
676
 
677
    } elsif (! exists $activeReleases->{$rtag_id}{depsig}) {
677
    } elsif (! exists $activeReleases->{$rtag_id}{depsig}) {
678
        $reason = 'NoSavedData';
678
        $reason = 'NoSavedData';
679
 
679
 
680
    } elsif ($activeReleases->{$rtag_id}{depsig} ne $depsig ) {
680
    } elsif ( $activeReleases->{$rtag_id}{depsig} ne $depsig ) {
681
        $reason = "Mismatch: $activeReleases->{$rtag_id}{depsig} ne $depsig";
681
        $reason = "Mismatch: $activeReleases->{$rtag_id}{depsig} ne $depsig";
682
 
682
 
683
    } else {
683
    } else {
684
        $logger->verbose("Dependencies unchanged - upload skipped");
684
        $logger->verbose("Dependencies unchanged - upload skipped");
685
        $activeReleases->{$rtag_id}{seqnum} = $seqnum;
685
        $activeReleases->{$rtag_id}{seqnum} = $seqnum;
Line 700... Line 700...
700
    #       Update the manifest entries
700
    #       Update the manifest entries
701
    #
701
    #
702
    my $startTime = time;
702
    my $startTime = time;
703
    my $zip = Archive::Zip->new();
703
    my $zip = Archive::Zip->new();
704
    foreach my $entry (@{$curData}) {
704
    foreach my $entry (@{$curData}) {
-
 
705
 
-
 
706
        #
-
 
707
        #   The TxList will contain information on every file to be transferred
-
 
708
        #   The data is an array of entries
-
 
709
        #   Each entry is a hash of name, version, an array of files
-
 
710
        #   Each file entry will be of the form
-
 
711
        #       srcFilePath [targetFilePath]
-
 
712
        #       The [targetFilePath] is optional. If not present, then the target is the same as the source 
-
 
713
        #
705
        my $src = getPackageBase($entry->[0], $entry->[1]);
714
        my $pkgList = getPackageTxList($entry->[0], $entry->[1]);
706
        if (defined $src) {
715
        if ($pkgList) {
707
            $logger->verbose("Zip addTree Src: $src");
-
 
708
 
716
 
709
            my %data;
717
            my %data;
710
            $data{name} = $entry->[0];
718
            $data{name} = $entry->[0];
711
            $data{version} = $entry->[1];
719
            $data{version} = $entry->[1];
712
            $data{pvid} = $entry->[2];
720
            $data{pvid} = $entry->[2];
713
            push @{$manifest->{Packages}}, \%data;
721
            push @{$manifest->{Packages}}, \%data;
714
 
722
 
-
 
723
            foreach my $pentry (@{$pkgList->{packages}}) {
-
 
724
                my $pkgBase = getPackageBase($pentry->{name}, $pentry->{version}); 
-
 
725
                if ($pkgBase) {
-
 
726
                    my @txList = @{$pentry->{files}};
715
            if ( $zip->addTree( $src, '' ) != AZ_OK ) {
727
                    foreach my $fileEntry (@txList) {
-
 
728
                        my ($src,$dst);
-
 
729
                        if ($fileEntry =~ m~(.*) \[(.*)\]$~) {
-
 
730
                            $src = $1;
-
 
731
                            $dst = $2;
-
 
732
                            $logger->verbose("Zip add: $pentry->{name}:$pentry->{version}:$src as $dst");
-
 
733
                        } else {
-
 
734
                            $dst = $src = $fileEntry;
-
 
735
                            $logger->verbose("Zip add: $pentry->{name}:$pentry->{version}:$src");
-
 
736
                        }
-
 
737
                        $src = catdir($pkgBase, $src);
-
 
738
                        unless (-f $src) {
716
                $logger->warn("Zip addTree Error: $rtag_id");
739
                            $logger->warn("Cannot find file: $src");
-
 
740
                            return;
-
 
741
                        }
-
 
742
                        $zip->addFile($src, $dst);
717
                return;
743
                    }
-
 
744
                }
718
            }
745
            }
719
        }
746
        }
720
    }
747
    }
721
 
748
 
722
    #   Add the manifest into the zip
749
    #   Add the manifest into the zip
-
 
750
    #       Set its modifiedTime to a fixed value, so that it doesn't keep changing
-
 
751
    #       Must use a time >= 1980.
-
 
752
    #   
723
    my $jsonText = to_json( $manifest, { ascii => 1, pretty => 1 });
753
    my $jsonText = to_json( $manifest, { ascii => 1, pretty => 1, canonical => 1 });
-
 
754
    $logger->verbose("Zip add: ReleaseManifest.json" );
724
    $zip->addString( $jsonText, 'ReleaseManifest.json' );
755
    my $member = $zip->addString( $jsonText, 'ReleaseManifest.json' );
-
 
756
    $member->setLastModFileDateTimeFromUnix( 900000000 );
725
    $logger->verbose("ManfestJson: $jsonText");
757
    $logger->verbose2("ManifestJson: $jsonText");
726
 
758
 
727
    #   Generate the zip file
759
    #   Generate the zip file
728
    my $zipFile = catdir( $conf->{'workdir'} , 'Images-' . $rtag_id . '.zip');
760
    my $zipFile = catdir( $conf->{'workdir'} , 'Images-' . $rtag_id . '.zip');
729
    if ( $zip->writeToFileNamed($zipFile) != AZ_OK ) {
761
    if ( $zip->writeToFileNamed($zipFile) != AZ_OK ) {
730
        $logger->warn("Zip write Error: $rtag_id");
762
        $logger->warn("Zip write Error: $rtag_id");
Line 830... Line 862...
830
        $activeReleases->{$rtag_id}{s3}{sent} = 1;
862
        $activeReleases->{$rtag_id}{s3}{sent} = 1;
831
    }
863
    }
832
}
864
}
833
 
865
 
834
#-------------------------------------------------------------------------------
866
#-------------------------------------------------------------------------------
-
 
867
# Function        : getPackageTxList 
-
 
868
#
-
 
869
# Description     : Locate and read in the s3Transfer.json file found with
-
 
870
#                   the specified package
-
 
871
#
-
 
872
# Inputs          : $pname      - Package name
-
 
873
#                   $pver       - Package version
-
 
874
#
-
 
875
#
-
 
876
# Returns         : undef - bad
-
 
877
#                   Ref to a hash of data
-
 
878
sub getPackageTxList {
-
 
879
    my ($pname, $pver) = @_;
-
 
880
 
-
 
881
    #
-
 
882
    #   Locate package
-
 
883
    #
-
 
884
    my $pkgBase = getPackageBase($pname, $pver);
-
 
885
    return undef unless $pkgBase;
-
 
886
 
-
 
887
    my $src = catdir( $pkgBase, $conf->{s3File});
-
 
888
    unless ( -f $src ) {
-
 
889
        $logger->verbose("getPackageTxList: Package has no $conf->{s3File}: $pname, $pver");
-
 
890
        return undef;
-
 
891
    }
-
 
892
 
-
 
893
    #
-
 
894
    #   Read the entire file into a string
-
 
895
    #
-
 
896
    my $fh;
-
 
897
    unless (open ( $fh, '<', $src) ) {
-
 
898
        $logger->verbose("getPackageTxList: Cannot open s3Transfer.json: $pname, $pver, $!");
-
 
899
        return undef;
-
 
900
    }
-
 
901
    my $jsontext = do { local $/; <$fh> };
-
 
902
    close $fh;
-
 
903
 
-
 
904
    my $json = from_json($jsontext);
-
 
905
    unless ( exists $json->{format}) {
-
 
906
        $logger->verbose("getPackageTxList: s3Transfer.json has no format: $pname, $pver");
-
 
907
        return undef;
-
 
908
    }
-
 
909
    unless ( exists $json->{packages}) {
-
 
910
        $logger->verbose("getPackageTxList: s3Transfer.json has no packages: $pname, $pver");
-
 
911
        return undef;
-
 
912
    }
-
 
913
    return $json;
-
 
914
}
-
 
915
 
-
 
916
#-------------------------------------------------------------------------------
835
# Function        : getPackageBase 
917
# Function        : getPackageBase
836
#
918
#
837
# Description     : Calculate the base of a package in dpkg_archive
919
# Description     : Calculate the base of a package in dpkg_archive
838
#                   With errors and wanings
920
#                   With errors and wanings
839
#
921
#
840
# Inputs          : $pname      - Package name
922
# Inputs          : $pname      - Package name
841
#                   $pver       - Package version
923
#                   $pver       - Package version
842
#
924
#
843
#
925
#
844
# Returns         : undef - bad
926
# Returns         : undef - bad
845
#                   Path to the S3TRANSFER section within the archive
927
#                   Path to root of the package in dpkg_archive
846
sub getPackageBase {
928
sub getPackageBase {
847
    my ($pname, $pver) = @_;
929
    my ($pname, $pver) = @_;
848
 
930
 
849
    #
931
    #
850
    #   Locate package
932
    #   Locate package
851
    #
933
    #
852
    unless ( -d $conf->{'dpkg_archive'}) {
934
    unless ( -d $conf->{'dpkg_archive'}) {
853
        $logger->warn("addPartsToImage: dpkg_archive not found");
935
        $logger->warn("getPackageBase: dpkg_archive not found");
854
        return undef;
936
        return undef;
855
    }
937
    }
856
    
938
    
857
    my $src = catdir($conf->{'dpkg_archive'}, $pname, $pver);
939
    my $src = catdir($conf->{'dpkg_archive'}, $pname, $pver);
858
    unless ( -d $src ) {
940
    unless ( -d $src ) {
859
        $logger->warn("addPartsToImage: Package not found: $pname, $pver");
941
        $logger->warn("getPackageBase: Package not found: $pname, $pver");
860
        return undef;
942
        return undef;
861
    }
943
    }
862
 
944
 
863
    $src = catdir( $src, $conf->{'transferDir'});
-
 
864
    unless ( -d $src ) {
-
 
865
        $logger->verbose("addPartsToImage: Package has no $conf->{'transferDir'}: $pname, $pver");
-
 
866
        return undef;
-
 
867
    }
-
 
868
    return $src;
945
    return $src;
869
}
946
}
870
 
947
 
871
#-------------------------------------------------------------------------------
948
#-------------------------------------------------------------------------------
872
# Function        : generateBucketZipName 
949
# Function        : generateBucketZipName