blob: 1446f1b2c0831c28b21957d881214273b38d36a2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#!/usr/bin/perl -w
($SELF = $0) =~ s,.*/,,;
sub usage() {
print <<EOF;
Usage: $SELF [-s]
Finds conflicting files in Slackware packages.
Options:
-s Ignore 3rd-party packages (core Slackware only).
-a Include aaa_* packages and openssl-solibs (normally ignored).
EOF
}
$slackware_only = 0;
$ignore_aaa = 1;
for(@ARGV) {
last unless defined;
/^-s$/ && do { $slackware_only++; next; };
/^-a$/ && do { $ignore_aaa = 0; next; };
/^(?:-h|--help)$/ && do { usage(); };
die "Unknown argument '$_', try --help.\n";
}
$pkgdir = $ENV{PACKAGE_DIR} || "/var/log/packages";
chdir $pkgdir or die "$!\n";
$conflicts = $files = $packages = 0;
for $pkg (<*>) {
next if ($ignore_aaa && $pkg =~ /^(?:aaa_|openssl-solibs-)/);
next if ($slackware_only && $pkg !~ /(?:\d|slack[\d.]+)$/);
my $fh;
if(!open $fh, '<', $pkg) {
warn "can't read $pkg: $!\n";
next;
}
$packages++;
while(<$fh>) {
last if /^FILE LIST:/;
}
while(<$fh>) {
chomp;
next if m{/$};
next if m{^install/};
push @{$files{$_}}, $pkg;
$files++;
}
close $fh;
}
for(sort keys %files) {
my @pkgs = @{$files{$_}};
next unless @pkgs > 1;
$conflicts++;
print "$_:\n\t" . join("\n\t", @pkgs) . "\n";
}
print "\n== Found $conflicts conflicts in $files files (in $packages packages)\n";
|