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