diff options
author | 2004-07-11 20:46:08 +0000 | |
---|---|---|
committer | 2004-07-11 20:46:08 +0000 | |
commit | 8e1a17ae9e4c81a4f50ce529aa6ccef3e90caab6 (patch) | |
tree | c0308eb585c03393a27c8e8fc783e8b27989ff3a | |
parent | change lower bound to 0, row shouldn't be negative; suggested & ok vincent (diff) | |
download | wireguard-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_add | 35 |
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; |