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