1*6e49571cSdaniel$OpenBSD: RequiredBy.pod,v 1.1 2020/12/20 15:30:58 daniel Exp $ 2*6e49571cSdaniel 3*6e49571cSdaniel=head1 NAME 4*6e49571cSdaniel 5*6e49571cSdanielOpenBSD::RequiredBy - manage installed package dependencies 6*6e49571cSdaniel 7*6e49571cSdaniel=head1 SYNOPSIS 8*6e49571cSdaniel 9*6e49571cSdaniel use OpenBSD::RequiredBy; 10*6e49571cSdaniel 11*6e49571cSdaniel 12*6e49571cSdaniel # let's do things for real 13*6e49571cSdaniel our $not = 0; 14*6e49571cSdaniel 15*6e49571cSdaniel my $o = OpenBSD::RequiredBy->new($pkgname); 16*6e49571cSdaniel 17*6e49571cSdaniel my $o2 = OpenBSD::Requiring->new($pkgname); 18*6e49571cSdaniel 19*6e49571cSdaniel print "Requirements for $pkgname are ", join(' ',$o2->list), "\n"; 20*6e49571cSdaniel 21*6e49571cSdaniel # add some reverse dependencies 22*6e49571cSdaniel $o->add($reverse_dep1, $reverse_dep2); 23*6e49571cSdaniel 24*6e49571cSdaniel # remove some dependency 25*6e49571cSdaniel $o2->delete($dep); 26*6e49571cSdaniel 27*6e49571cSdaniel # forget some cache entry 28*6e49571cSdaniel OpenBSD::RequiredBy->forget(installed_info($pkgname)); 29*6e49571cSdaniel 30*6e49571cSdaniel # compute the transitive closure of some dependencies 31*6e49571cSdaniel my @fulldeps = OpenBSD::Requiring->compute_closure($pkg1, $pkg2); 32*6e49571cSdaniel 33*6e49571cSdaniel 34*6e49571cSdaniel=head1 DESCRIPTION 35*6e49571cSdaniel 36*6e49571cSdaniel=for comment should add a reference to L<PackageInfo/installed_info> 37*6e49571cSdanielwhen it's documented. 38*6e49571cSdaniel 39*6e49571cSdanielC<OpenBSD::RequiredBy> handles lists of forward and reverse dependencies 40*6e49571cSdanielfor installed packages. 41*6e49571cSdaniel 42*6e49571cSdanielIf C<$main::not> is true, all change operations are done internally and 43*6e49571cSdanielnever written to disk. 44*6e49571cSdaniel 45*6e49571cSdanielC<$o = OpenBSD::RequiredBy-E<gt>new($pkgname)> gives access to the reverse 46*6e49571cSdanieldependencies, 47*6e49571cSdanielC<$o =OpenBSD::Requiring-E<gt>new($pkgname)> gives access to the forward 48*6e49571cSdanieldependencies. 49*6e49571cSdaniel 50*6e49571cSdanielSuch an object can be used to list the dependencies C<$o-E<gt>list>, 51*6e49571cSdanieladd names to them C<$o-E<gt>add(name1, name2, ...)> or remove name from 52*6e49571cSdanielthem C<$o-E<gt>delete(name1, name2, ...)>. 53*6e49571cSdaniel 54*6e49571cSdanielThe full list of forward dependencies (transitive closure) from a set of 55*6e49571cSdanielpackages is given by 56*6e49571cSdanielC<OpenBSD::RequiredBy-E<gt>compute_closure($name1, name2, ...)>. 57*6e49571cSdanielLikewise, 58*6e49571cSdanielC<OpenBSD::Requiring-E<gt>compute_closure($name1, name2, ...)> 59*6e49571cSdanielyields the list of reverse dependencies. 60*6e49571cSdaniel 61*6e49571cSdanielThose lists of dependencies trim duplicates and, unless C<$main::not> is true, 62*6e49571cSdanieldisk files are automatically synchronized whenever the lists change. 63*6e49571cSdaniel 64*6e49571cSdanielC<OpenBSD::RequiredBy> maintains a cache for efficiency. When an 65*6e49571cSdanielinstalled package is deleted completely, 66*6e49571cSdanielC<OpenBSD::RequiredBy-E<gt>forget($dir)> and 67*6e49571cSdanielC<OpenBSD::Requiring-E<gt>forget($dir)> will remove the cache entries. 68