diff options
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/Delete.pm | 14 | ||||
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/Update.pm | 39 | ||||
-rw-r--r-- | usr.sbin/pkg_add/pkg_add | 8 |
3 files changed, 43 insertions, 18 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/Delete.pm b/usr.sbin/pkg_add/OpenBSD/Delete.pm index d306666bfba..e7c918cd601 100644 --- a/usr.sbin/pkg_add/OpenBSD/Delete.pm +++ b/usr.sbin/pkg_add/OpenBSD/Delete.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: Delete.pm,v 1.9 2004/11/11 22:40:38 espie Exp $ +# $OpenBSD: Delete.pm,v 1.10 2004/11/14 19:25:45 espie Exp $ # # Copyright (c) 2003-2004 Marc Espie <espie@openbsd.org> # @@ -138,6 +138,18 @@ sub delete_plist } $removed->{$name} = 1; } + for my $name (OpenBSD::Requiring->new($pkgname)->list()) { + next if defined $removed->{$name}; + print "remove dependency in $name\n" + if $state->{very_verbose} or $state->{not}; + local $@; + eval { OpenBSD::RequiredBy->new($name)->delete($pkgname) unless $state->{not}; }; + if ($@) { + print STDERR "$@\n"; + } + $removed->{$name} = 1; + } + remove_packing_info($dir) unless $state->{not}; $plist->forget(); } diff --git a/usr.sbin/pkg_add/OpenBSD/Update.pm b/usr.sbin/pkg_add/OpenBSD/Update.pm index cbd4712355e..71edc223357 100644 --- a/usr.sbin/pkg_add/OpenBSD/Update.pm +++ b/usr.sbin/pkg_add/OpenBSD/Update.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: Update.pm,v 1.31 2004/11/14 11:40:08 espie Exp $ +# $OpenBSD: Update.pm,v 1.32 2004/11/14 19:25:45 espie Exp $ # # Copyright (c) 2004 Marc Espie <espie@openbsd.org> # @@ -272,6 +272,19 @@ sub split_libs return $splitted; } +sub convert_to_requiring +{ + my $pkg = shift; + + my $plist = OpenBSD::PackingList->from_installation($pkg); + my $r = OpenBSD::Requiring->new($pkg); + for my $item (@{$plist->{pkgdep}}) { + $r->add($item->{name}); + } + delete $plist->{pkgdep}; + $plist->to_installation(); +} + sub walk_depends_closure { my ($start, $name, $state) = @_; @@ -289,11 +302,14 @@ sub walk_depends_closure next if $done->{$pkg2}; push(@todo, $pkg2); print "\t$pkg2\n" if $state->{beverbose}; - $write->add($pkg2) unless $state->{not}; - my $plist = OpenBSD::PackingList->from_installation($pkg2); - OpenBSD::PackingElement::PkgDep->add($plist, $name); - $plist->to_installation() unless $state->{not}; $done->{$pkg2} = 1; + next if $state->{not}; + $write->add($pkg2); + my $l = OpenBSD::Requiring->new($pkg2); + if (!$l->list()) { + convert_to_requiring($pkg2); + } + $l->add($name); } } } @@ -344,14 +360,11 @@ sub adjust_dependency { my ($dep, $from, $into) = @_; - my $plist = OpenBSD::PackingList->from_installation($dep); - my $items = []; - for my $item (@{$plist->{pkgdep}}) { - next if $item->{'name'} eq $from; - push(@$items, $item); + my $l = OpenBSD::Requiring->new($dep); + if (!$l->list()) { + convert_to_requiring($dep); } - $plist->{pkgdep} = $items; - OpenBSD::PackingElement::PkgDep->add($plist, $into); - $plist->to_installation(); + $l->delete($from); + $l->add($into); } 1; diff --git a/usr.sbin/pkg_add/pkg_add b/usr.sbin/pkg_add/pkg_add index c8c930d6efd..169c822e17d 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.121 2004/11/14 13:20:07 espie Exp $ +# $OpenBSD: pkg_add,v 1.122 2004/11/14 19:25:45 espie Exp $ # # Copyright (c) 2003-2004 Marc Espie <espie@openbsd.org> # @@ -423,8 +423,11 @@ sub really_add($$) if (defined $handle->{solved_dependencies}) { require OpenBSD::RequiredBy; + my $r = OpenBSD::Requiring->new($pkgname); + for my $dep (@{$handle->{solved_dependencies}}) { OpenBSD::RequiredBy->new($dep)->add($pkgname); + $r->add($dep); } } } @@ -549,9 +552,6 @@ sub install_package } } } - for my $dep (@{$handle->{solved_dependencies}}) { - OpenBSD::PackingElement::PkgDep->add($plist, $dep); - } really_add($handle, $state); $state->{conflict_list}->{$plist->pkgname()} = $handle->{conflicts}; return (); |