summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/MDV/Distribconf/Utils.pm18
1 files changed, 10 insertions, 8 deletions
diff --git a/lib/MDV/Distribconf/Utils.pm b/lib/MDV/Distribconf/Utils.pm
index ecdb7ce..1551789 100644
--- a/lib/MDV/Distribconf/Utils.pm
+++ b/lib/MDV/Distribconf/Utils.pm
@@ -4,6 +4,7 @@ use strict;
use warnings;
use MDV::Packdrakeng;
use Digest::MD5;
+use Devel::Peek;
our ($VERSION) = (qq$Revision$ =~ /(\d+)/)[0];
@@ -28,29 +29,30 @@ sub hdlist_vs_dir {
my (@only_pack, @only_dir);
my @rpms;
foreach my $dir (@dir) {
- push(@rpms, glob("$dir/*.rpm"));
+ push(@rpms, grep { -e $_ } glob("$dir/*.rpm"));
}
- @rpms = sort { ($b =~ m:.*/+(.*):)[0] cmp ($a =~ m:.*/+(.*):)[0] } @rpms;
+ @rpms = sort { ($b =~ m:.*/+(.*):)[0] cmp ($a =~ m:([^/]+)$:)[0] } @rpms;
if (-f $hdlist and my $pack = MDV::Packdrakeng->open(archive => $hdlist)) {
my $hdlisttime = (stat($hdlist))[9];
my (undef, $files, undef) = $pack->getcontent();
my @hdrs = sort { $b cmp $a } map { "$_.rpm" } @{$files || []};
my ($r, $h) = ("", "");
do {
- my $comp = (($r =~ m:.*/+(.*):)[0] || '') cmp $h;
- # print "< $r - $h > $comp\n";
+ my $base_r = ($r =~ m:([^/]+)$:)[0] || '';
+ my $comp = ($base_r cmp $h);
+ my $st_d = (stat($r))[9] if ($r);
if ($comp < 0) { push(@only_pack, $h); }
- elsif ($comp > 0) { push(@only_dir, ($r =~ m:.*/+(.*):)[0]); }
- elsif ($r && (stat($r))[9] > $hdlisttime) {
+ elsif ($comp > 0) { push(@only_dir, $base_r); }
+ elsif ($r && (!defined($st_d) || $st_d > $hdlisttime)) {
push(@only_pack, $h);
push(@only_dir, ($r =~ m:.*/+(.*):)[0]);
}
if ($comp <= 0) {
- $h = shift(@hdrs) || "";
+ $h = shift(@hdrs) || '';
}
if ($comp >= 0) {
- $r = shift(@rpms) || "";
+ $r = shift(@rpms) || '';
}
} while (scalar(@rpms) || scalar(@hdrs));
} else {