---
name: "Debian::AptContents"
section: "3pm"
platform: "linux"
package: "dh-make-perl"
version: "0.128"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Debian::AptContents"
---

# Debian::AptContents(3pm)

parse/search through apt-file's Contents files

## NAME

Debian::AptContents - parse/search through apt-file's Contents files

## SYNOPSIS

```
    my $c = Debian::AptContents->new( { cache_dir => '~/.cache/dh-make-perl' } );
    my @pkgs = $c->find_file_packages('/usr/bin/foo');
    my $dep = $c->find_perl_module_package('Foo::Bar');
```

## TODO

This needs to really work not only for Perl modules.

A module specific to Perl modules is needed by dh-make-perl, but it can subclass Debian::AptContents, which needs to become more generic.

## CONSTRUCTOR

- new

  Constructs new instance of the class. Expects at least `"cache_dir"` option.

## FIELDS

- cache\_dir

  (**mandatory**) Directory where the object stores its cache.

- homedir

  Legacy option to specify the cache directory.

- dist

  Used for filtering on the `"distributon"` part of the repository paths listed in sources.list. Default is empty, meaning no filtering.

- contents\_files

  Arrayref of *Contents* file names. Default is to let **apt-file** find them.

- cache\_file

  Path to the file with cached parsed information from all *Contents* files. Default is *Contents.cache* under `"cache_dir"`.

- cache

  Filled by `"read_cache"`. Used by `"find_file_packages"` and (obviously) `"store_cache"`

- verbose

  Verbosity level. 0 means silent, the bigger the more the jabber. Default is 1.

## OBJECT METHODS

- warning

  Used internally. Given a verbosity level and a message, prints the message to STDERR if the verbosity level is greater than or equal of the value of `"verbose"`.

- get\_contents\_files

  Reads *sources.list*, gives the repository paths to `"repo_source_to_contents_paths"` and returns an arrayref of file names of Contents files.

- read\_cache

  Reads the cached parsed *Contents* files. If there are *Contents* files with more recent mtime than that of the cache (or if there is no cache at all), parses all *Contents* and stores the cache via `"store_cache"` for later invocation.

- store\_cache

  Writes the contents of the parsed `"cache"` to the `"cache_file"`.

  Storable is used to stream the data. Along with the information from *Contents* files, a time stamp is stored.

- find\_file\_packages

  Returns a list of packages where the given file was found.

  *Contents* files store the package section together with package name. That is stripped.

  Returns an empty list of the file is not found in any package.

- find\_perl\_module\_package( $module, $version )

  Given Perl module name (e.g. Foo::Bar), returns a Debian::Dependency object representing the required Debian package and version. If the module is only in perl core, a suitable dependency on perl is returned.

  For dual-lived modules, which are in perl and in a separate package, only the latter is returned, as the perl package has versioned Provides for them.

## AUTHOR

- Damyan Ivanov \<dmn@debian.org\>

  - gregor herrmann \<gregoa@debian.org\>

  ## COPYRIGHT & LICENSE

- Copyright (C) 2008, 2009, 2010, 2017 Damyan Ivanov \<dmn@debian.org\>

  - Copyright (C) 2016, 2019 gregor herrmann \<gregoa@debian.org\>

  This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
