summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespie <espie@openbsd.org>2004-07-11 20:46:08 +0000
committerespie <espie@openbsd.org>2004-07-11 20:46:08 +0000
commit8e1a17ae9e4c81a4f50ce529aa6ccef3e90caab6 (patch)
treec0308eb585c03393a27c8e8fc783e8b27989ff3a
parentchange lower bound to 0, row shouldn't be negative; suggested & ok vincent (diff)
downloadwireguard-openbsd-8e1a17ae9e4c81a4f50ce529aa6ccef3e90caab6.tar.xz
wireguard-openbsd-8e1a17ae9e4c81a4f50ce529aa6ccef3e90caab6.zip
hunt for the originating packages in case of collision, and sort
the colliding files by package. okay naddy@, and typo fix naddy/pval.
-rw-r--r--usr.sbin/pkg_add/pkg_add35
1 files changed, 32 insertions, 3 deletions
diff --git a/usr.sbin/pkg_add/pkg_add b/usr.sbin/pkg_add/pkg_add
index 6ec35894cd7..62b577f853b 100644
--- a/usr.sbin/pkg_add/pkg_add
+++ b/usr.sbin/pkg_add/pkg_add
@@ -1,7 +1,7 @@
#! /usr/bin/perl
# ex:ts=8 sw=4:
-# $OpenBSD: pkg_add,v 1.32 2004/06/21 15:19:33 miod Exp $
+# $OpenBSD: pkg_add,v 1.33 2004/07/11 20:46:08 espie Exp $
#
# Copyright (c) 2003 Marc Espie.
#
@@ -403,6 +403,36 @@ sub borked_script($)
}
}
+sub collision_report
+{
+ my $list = shift;
+ my %todo = map {($_, 1)} @$list;
+ my $bypkg = {};
+
+
+ for my $pkg (installed_packages()) {
+ my $plist = OpenBSD::PackingList->fromfile(installed_info($pkg).CONTENTS, \&OpenBSD::PackingList::FilesOnly);
+ for my $item (@{$plist->{items}}) {
+ next unless $item->IsFile();
+ my $name = $item->fullname();
+ if (defined $todo{$name}) {
+ $bypkg->{$pkg} = [] unless defined $bypkg->{$pkg};
+ push(@{$bypkg->{$pkg}}, $name);
+ delete $todo{$name};
+ }
+ }
+ }
+ print "Collision: the following files already exist\n";
+ for my $pkg (sort keys %$bypkg) {
+ for my $item (sort @{$bypkg->{$pkg}}) {
+ print "\t$item ($pkg)\n";
+ }
+ }
+ for my $item (sort keys %todo) {
+ print "\t$item\n";
+ }
+}
+
sub really_add($$)
{
my ($handle, $destdir) = @_;
@@ -442,8 +472,7 @@ sub really_add($$)
}
}
if (@$colliding > 0) {
- print "Collision: the following files already exists\n\t",
- join("\n\t", @$colliding), "\n";
+ collision_report($colliding);
}
exit(1) if $problems;