reused cached repo data file to speed up building
authorZhang Qiang <qiang.z.zhang@intel.com>
Tue, 28 Aug 2012 07:40:05 +0000 (15:40 +0800)
committerMichael Schroeder <mls@suse.de>
Thu, 27 Sep 2012 16:35:13 +0000 (18:35 +0200)
checksum and size is checked before trying to resuse it.

createrepomddeps

index b3d8593..cc9b2b0 100755 (executable)
@@ -34,9 +34,13 @@ my $repomdparser = {
   repomd => {
     data => {
       _start => \&repomd_handle_data_start,
+      _end => \&repomd_handle_data_end,
       location => {
        _start => \&repomd_handle_location,
       },
+      size => {
+       _text => \&repomd_handle_size,
+      },
     },
   },
 };
@@ -72,6 +76,7 @@ my $primaryparser = {
 # [ [tag, \%], ... ]
 my @cursor = ();
 
+my %datafile;
 sub repomd_handle_data_start
 {
   my $p = shift;
@@ -83,6 +88,14 @@ sub repomd_handle_data_start
   }
 }
 
+sub repomd_handle_data_end
+{
+  my $p = shift;
+  my $el = shift;
+  push @primaryfiles, {%datafile};
+}
+
+
 sub repomd_handle_location
 {
   my $p = shift;
@@ -90,9 +103,16 @@ sub repomd_handle_location
 
   my $attr = map_attrs(@_);
   if(exists $attr->{'href'}) {
-    push @primaryfiles, { location => $attr->{'href'} };
+    $datafile{location} = $attr->{'href'};
   }
 }
+sub repomd_handle_size
+{
+  my $p = shift;
+  my $el = shift;
+  $datafile{size} = $el;
+}
+
 
 sub generic_handle_start
 {
@@ -421,7 +441,13 @@ for my $url (@ARGV) {
     @cursor = ([undef, $primaryparser]);
 
     my $u = $dir . $f->{'location'};
-    if ($url =~ /^http[s]?:\/\/([^\/]*)\/?/) {
+    my $size = 0;
+    my $cached = 0;
+    if ( -e $u ) {
+        $size = (stat($u))[7];
+        $cached = 1 if ($f->{'size'} == $size);
+    }
+    if ($url =~ /^http[s]?:\/\/([^\/]*)\/?/ and !$cached) {
         if (system($INC[0].'/download', $dir . "repodata/", $baseurl . "repodata/" . basename($u))) {
          die("download failed\n");
        }