Provided by: dh-debputy_0.1.67_all 

NAME
debputy - Manifest style Debian-based package builder
SYNOPSIS
debputy [general options ] command ... [ command options ]
debputy migrate-from-dh [--apply-changes] [--acceptable-migration-issues=issue[,issue,...]]
debputy lint [--auto-fix]
debputy reformat [--no-auto-fix]
debputy check-manifest [--debputy-manifest=path/to/debputy.manifest]
debputy lsp editor-config [NAME]
debputy lsp server [--tcp|--ws [--host BIND-ADDRESS] [--port PORT]]
DESCRIPTION
The debputy program is a manifest style Debian-based package builder. This man page documents some of the
user facing commands.
If you are using debputy with a screen reader, consider setting the environment variable
OPTIMIZE_FOR_SCREEN_READER to 1. This will make many debputy commands remove a lot of irrelevant visual
rendering. Especially ASCII art style rendering that will just be annoying to listen to. Additionally,
some output will be described with text to replace the visual rendering.
Commands
check-manifest
The check-manifest command will cause debputy to parse the manifest and examine it for obvious
mistakes.
Note that the command will not catch all mistakes as some problems can only be detected during a
build. As an example, check-manifest can detect mistyped manifest variables but not typos in path
names for installation rules.
migrate-from-dh
The migrate-from-dh command will attempt to migrate the current package to debputy.
For this command to be successful, it must be run from the root of an unpacked Debian source package
and the package should be using the dh sequencer.
If you are looking to migrate to debputy from dh, you may want to have a look at the
GETTING-STARTED-WITH-dh-debputy.md file (in the source root or in /usr/share/doc/). That document is
a how-to guide that as extended advice on migration from dh.
The migration can rerun with newer version of debputy that might provide more features since the
previous one even inside the same level of adoption. As an example, debputy/0.1.21 added support for
automatic relationship substvars. Re-running the migrator for an already migrated package can be used
to detect any unnecessary explicit relationship substvars as unnecessary.
The default migration target is based on existing features in the packaging where present. As an
example, a build-dependency on dh-sequence-zz-debputy-rrr will make the migration tool only run
migrators relevant for dh-sequence-zz-debputy-rrr (assuming no other markers are present). If the
migration cannot identify any target markers, it has a built-in default target. The default target
will change over time as debputy and the migrator mature. The --migration-target option can be used
to overrule this automatic detection. This can be useful both to expand on the migration level
without performing any changes or to choose a non default initial migration level.
Generally, the migration tool can take you from "less adoption" towards "more adoption" of debputy
but not the inverse. As an example, migrating from dh-sequence-zz-debputy-rrr towards dh-sequence-zz-
debputy is supposed, but the reverse is not. Use of version control is recommended for undoing
transition if necessary.
If any migrations involve creating a new or changing an existing debian/debputy.manifest, the
migration tool will first write a draft to debian/debputy.manifest.new. From there, it may be renamed
to debian/debputy.manifest automatically depending on --apply-changes or --no-apply-changes.
It supports the following options:
--migration-target TARGET-NAME
Explicitly define how far the migration should go. This will override the detected or built-in
default as the desired migration target.
See "INTEGRATION LEVELS" for details about the concrete levels of integration that can be used.
--acceptable-migration-issues NAME[,...,NAME], --acceptable-migration-issues=ALL
The migration may detect unsupported features in the package. Some, but not all, of these can be
reduced to a warning by passing --acceptable-migration-issues with the name of the issue as
provided in the error message. The special value ALL in all upper case will cause all issues that
can be reduced to a warning to be reduced to a warning.
This is only useful to reduce issues to warnings if you are reasonable sure that you can remove
the feature or convert it to something that debputy supports.
In some cases, it might be helpful to comment out the offending feature and re-run the migration
rather than using --acceptable.migration-issues. As an example, if a single line of
debian/install file is problematic, commenting it out will have debputy migrate the rest of the
file for you leaving you only to manually migrate a single line.
--apply-changes, --no-act, --no-apply-changes
These options decide whether the migration tool should perform destructive actions such as
overwriting the existing debian/debputy.manifest and deleting packaging files that have
successfully migrated.
The default is currently to not perform destructive actions as the migration tool does not detect
version control systems. If support for detecting version control systems is added, this default
may change.
Note that the migration may replace debian/debputy.manifest.new regardless of this option as that
is its output for the updated draft manifest.
The --no-act is an alias of --no-apply-changes to match the name that debhelper commands use.
reformat
Note: This subcommand needs optional dependencies to work from Recommends or Suggests
Apply the formatting style on the packaging files.
This is the same style that debputy lsp server would have applied if requested to reformat the files.
The debputy tool reacts to having a X-Style field in debian/control from where you can pick a named
style. The recommended style is black, which is named such to match the black code formatter for
Python (which imposes a style that evolves over time).
For packages that does not have the X-Style field, debputy will result to looking up the maintainer
(and possibly co-maintainers) for known style preferences in its built-in configuration. If debputy
can derive a style that all parties would agree too (or the team style for packaging teams), then
that style will be used.
The black style started as similar to that of wrap-and-sort -ast, since that was one of the most
common styles according to <https://bugs.debian.org/895570>, but the style is expected to evolve over
time and the two styles may diverge over time.
The command accepts the following options:
--style=black
Override the package style and use the black style. Any auto-detection or X-Style setting will be
ignored.
--auto-fix, --no-auto-fix
Decide whether any changes should be fixed automatically.
Either way, a difference (diff -u) is displayed to stdout if any changes were detected.
--linter-exit-code, --no-linter-exit-code
There is a convention among linter tools to return a non-zero exit code for "issues". The
--linter-exit-code will enforce this behavior while the --no-linter-exit-code will disable it.
The debputy program will use exit code 2 for "issues" as a "linter exit code" when linting based
exit codes are active.
Not having a linter based exit code can be useful if you want to run the tool programmatically to
perform the action and you only want the exit code to tell whether there was a problem providing
the results.
If you rely on the exit code, you are recommended to explicitly pass the relevant variant of the
flag even if the current default matches your wishes.
--unknown-or-unsupported-style-is-ok, --missing-style-is-ok
By default, debputy reformat will exit with an error when it cannot determine which style to use.
This is generally what you want for "per package" CI or other lint checks to inform you that the
reformatting will not work.
However, for "cross package" pipelines, like the default Debian Salsa CI pipeline, having debputy
reformat automatically work when a style is set and doing nothing otherwise is preferable, since
the pipeline can then provide a debputy reformat job for all consumers without worrying about
breaking their pipelines.
It can also be useful for scripts or automated mass-edits where you want debputy to fixup the
changes you did if there is a known style without being hampered by the packages that have no
known style.
The --missing-style-is-ok is a deprecated name since it does not correctly imply that unsupported
styles are also considered ok.
--supported-style-is-required
Exit with an error if no supported style can be found. This is the default behavior but this
option can be used to override settings to disable it. The error does not distinguish between no
style found or an unsupported style found (both lead to an error).
If you rely on the exit code, please set this option explicitly.
lint
Note: This subcommand needs optional dependencies to work from Recommends or Suggests
Run the linting tooling for Debian packaging files. This will run a linter to check the Debian
packaging files. This command is useful for CI or for when you cannot use the language server
feature. It provides the same diagnostics as debputy lsp server would but without requiring an LSP
capable editor as intermediate. The output is only intended for human consumption. Machine readable
is not a goal at this time.
The debputy lint command is a form of static analysis and will not load nor execute code from the
code it is scanning. It is a security bug for debputy lint to violate this principle directly or
indirectly. Therefore, debputy can only provide diagnostics from libraries and tools that takes this
principle seriously. It also means that debputy will likely have false-positives for self-hosting
code, since it is not allowed to load the self-hosted code.
Note that at the time of writing, the debputy.manifest file is only partially supported. If you have
debian/debputy.manifest, please also run debputy check-manifest to get more thorough checks for that
file for now. The lint command will inform you about this issue in the output if a
debian/debputy.manifest file is detected.
Some relevant options for this subcommand include:
--auto-fix
If debputy is aware of one "obvious" solution to the issue, just apply it. This will apply the
changes directly to the file. Use of version control for the Debian packaging is recommended when
using this option in case you want to undo the result.
--spellcheck
Include spellchecking in the linting results. These are by default omitted, since they are slower
and there are often false-positives.
Caveat: Before version 0.1.55 of debputy, --auto-fix with --spellcheck would auto-correct all
spelling mistakes with a single correction available. This can be suboptimal behavior in some
cases. As of 0.1.55, debputy no longer automatically applies typo fixes for free text fields when
--auto-fix --spellcheck. Instead, they will be reported as not being fixable automatically (but
instead have a "[LSP interactive quickfix]" tag associated with them).
--linter-exit-code, --no-linter-exit-code
There is a convention among linter tools to return a non-zero exit code for "severe issues". The
--linter-exit-code will enforce this behavior while the --no-linter-exit-code will disable it.
The debputy program will use exit code 2 for "severe issue" as a "linter exit code" when linting
based exit codes are active.
Not having a linter based exit code can be useful if you want to run the tool programmatically to
display the results and you only want the exit code to tell whether there was a problem providing
the results.
If you rely on the exit code, you are recommended to explicitly pass the relevant variant of the
flag even if the current default matches your wishes.
--lint-report-format term|junit-xml
Choose the output format of the resulting report. The term report is a terminal output report.
The junit-xml writes the output to an XML in a JUnit 4 format (should be compatible with the
xunit2 family of JUnit4 style input). This is useful for GitLab CI pipelines to get the results
imported via GitLab's junit CI pipeline feature.
--report-output DEST
For reports that generate file system artifacts, choose where the output should be placed.
Ignored with a warning for formats that do not generate file system outputs such as the term
report format.
--warn-about-check-manifest, --no-warn-about-check-manifest
Whether debputy lint should remind you that it has short comings in regards to validating the
debian/debputy.manifest file. The warning will only appear if the manifest file exists. That is,
the options have no effect either way when the file is not present.
The --no-warn-about-check-manifest is mostly used for generic pipelines that separately call
debputy check-manifest to ensure that the manifest is also validated or for cases where the
limitation is known and accepted.
A short comparison of debputy lint vs. other tools:
debputy lsp server
The language server feature from debputy lsp server provides an interactive and online version of
the linting from debputy lint directly in any LSP capable editor with the proper glue
configuration. The LSP feature gives you instant gratification, some additional editor-only
features and interactive choices of available quickfixes.
The "downside" of the debputy lsp server feature is that it requires a LSP capable editor and
each editor has their own glue configuration. Since the debputy language server is new, almost no
editor has built-in glue configuration meaning it has a steeper learning curve to get started.
Additionally, some times you want the checks for CI checks or the current state of the package
without having to open each file in an editor. Here debputy lint covers the same issues without
the need for anything else.
lintian
The primary difference between the debputy linter and lintian is that lintian works on "binary"
artifacts. Even the source checks of lintian checks the packaged version of the source rather
than the files you are directly working. This means that you have to do a package "build" for
lintian to spot any changes, which causes slow feedback loops. Additionally, debputy lint can
provide feedback regardless of whether your package can currently build. Accordingly, you can get
help and hints even for problems that would prevent a package build. By nature of how lintian
works, you can only get hints from lintian on matters that does not break the package build.
On the flip side, because lintian is checking the assembled artifacts, it can check for issues
that are only visible after a package build. Additionally, lintian also checks for issues in the
upstream sources to some extent. Checking upstream artifacts and the resulting Debian packages
are not in scope for debputy lint as the debputy lint is intended to be a mirror of the language
server diagnostics.
In summary: Use debputy lint (or debputy lsp server) for short feedback loops. Use lintian for
slower but more thorough checks on resulting packages.
lintian-brush
The lintian-brush has a broader scope than debputy lint. If you are a happy lintian-brush user,
odds are that debputy lint will not do a lot for you. Though, debputy lsp server might still be
relevant as the language server provides additional editor related features.
lsp server
Note: This subcommand needs optional dependencies to work from Recommends or Suggests
Start the debputy language server (per Language Server Protocol specification).
Many modern editors can delegate language support to a Language Server or indirectly via other
features like supporting youcompleteme (which in turn can delegate to a language server). The debputy
tool provides one for many common packaging formats via the lsp server subcommand for file formats
such as debian/control, debian/changelog and debian/copyright (DEP-5).
You will often need some editor specific glue configuration to link a given file format or name to
the language server. The debputy lsp editor-config might provide an example glue snippet for your
editor. In that glue configuration, you will need to provide a command. Often, debputy lsp server
will suffice (using the stdio transport). See debputy lsp server --help for other integration options
such as TCP (--tcp) or websocket (--ws) plus related supporting options.
The debputy lsp server command provides several features including a form of static analysis in the
form of "as-you-type" diagnostics. For the diagnostics, is debputy lsp server not allowed load nor
execute code from the code it is scanning. It is a security bug for debputy lsp server to violate
this principle directly or indirectly. Therefore, debputy can only provide diagnostics from libraries
and tools that takes this principle seriously. It also means that debputy will likely have false-
positives for self-hosting code, since it is not allowed to load the self-hosted code.
This security principle also applies to hover docs, completion suggestions and other trivial code
editing or viewing features. However, it is not universal, since certain LSP features are
deliberately designed to run the code you are viewing. As an example, debputy lsp server can provide
a "code lens" (LSP term) for building the current package. On activation of the code lens, debputy
will trigger code from the package to be run and that is expected. The critical points here are that
the user must explicitly trigger the feature and it must use terms commonly associated with running
code such as build, run or execute (non-exhaustive list).
If you need to debug an issue with the language server, the TCP integration (--tcp) can be quite
helpful. In this mode, you run debputy lsp server --tcp in a terminal before starting your editor.
This means you have direct and unfiltered access to the debputy command and its output. Remember to
update your editor to use TCP integration rather than stdio integration (and remember to swap back
when you are done). Check the debputy lsp server --help if you need a different bind address for the
language server.
If you can choose the language ID for a given file, you are recommended to use the file name relative
to the source root (such as debian/control). The service does account for some known variations such
as debian-control (as used by eglot from emacs) and debcontrol (as used by vim). See debputy lsp
features for a list of known language IDs along with their aliases.
When properly set up, the language server will offer a variety of features such as completion
suggestions, hover documentation, "as you type" diagnostics, quickfixes, etc. Please see debputy lsp
features for the full list of features per format. That command will also help identify mandatory and
optional dependencies for the debputy lsp server command.
Note many of the features are subject to the editor supporting them, correct language IDs being
passed to debputy, etc.
Options for this subcommand
--ignore-language-ids
When provided, debputy will ignore any language ID that the editor provides for any file.
Instead, debputy will only rely on the file name for determining how to interpret the file
content.
Since debputy supports multiple file formats, it is needs to know what kind of file it is working
with. The editor is supposed to provide this via a "Language ID" attribute. This enables you as a
user in the editor to override the file format and have proper editor support no matter the
filename. Unfortunately, most Debian packaging files do not have a language ID assigned in the
LSP specification, so editors either provide a custom language ID or no custom language ID at all
(that is, an empty string).
When the editor does not provide a language ID for file, debputy will since 0.1.25 automatically
attempt to derive the language from the filename. With this option (introduced in 0.1.29),
debputy will always derive the language from the filename even if the editor provided a language
ID. This can be helpful if your editor is providing language IDs that debputy does not recognize.
As an example, in emacs with eglot the language ID is derived from the name of the buffer's major
mode. If you tried to use debputy lsp server with a major mode that debputy does not recognize
then without this option, debputy would "silently" do nothing. With this option, it would have
worked provided the filename matched debputy's expectation no matter the major mode.
On the downside, debputy will not provide correct advice unless the paths matches
.../debian/filename. This can provide issues with some setups where the debian directory is
implicit such as some "packaging-only" repos or some editor scratch pads.
--force-locale=XX
When provided, debputy will always use the provided locale code for deciding the localization.
By default, the editor may provide a locale, which is then used. Alternatively, debputy will
attempt to guess the desired localization from defaults (like the LC_ALL variable). With this
option, you can override both of these and instead directly pick the locale you want.
Note that debputy will default to using US English for strings that are not translated into the
desired locale (no matter how that locale was chosen). If you still see untranslated strings with
this options, check you have the relevant translations installed and that the locale code is
correct.
--tcp or --ws
By default, the debputy language server will use stdio for communication with the editor. These
options provide either the TCP integration mode (--tcp) or the websocket integration mode (--ws).
In this mode, the --host and --port options can be used to choose the bind address.
These options are mutually exclusive.
The --ws option requires python3-websockets Debian package.
--host HOSTNAME, --port PORT
With --tcp or --ws, these option determines the bind address. The default is 127.0.0.1 for host
and 2087 for the port.
In integration modes that does not need a bind address (such as the stdio mode), this option is
ignored.
lsp editor-config [EDITOR]
Provide an example configuration glue for using the debputy lsp server with the given editor if
known. If EDITOR is not provided, then list the names of editors that debputy knows about.
The snippets are maintained on a best effort basis for editors without built-in config glue for the
debputy lsp server. Please file an issue (or a merge request) at
<https://salsa.debian.org/debian/debputy> if a snippet needs to be updated, added or removed.
lsp features
List in a human readable format details about what language IDs are handled by the debputy lsp server
along with what features are provided for each file format/language ID.
The command can also be used to determine if all the relevant dependencies have been installed for
the language server and linting features. It will also check for optional dependencies that can
enhance the feature set.
tool-support
These commands are intended for other tools to consume the output. Output is generally JSON by
default or supported via --output-format=json.
export-reference-data [DATASET]
The export-reference-data command export reference data. If provided, only the named dataset will
be exported. Otherwise, all datasets will be exported.
The reference data includes descriptions of the keywords used in the data set, which is helpful
to understand the data.
supports-tool-command <COMMAND>
Tests whether debputy knows about the named command. Returns successfully if known and
unsuccessfully if not known.
annotate-debian-directory
The annotate-debian-directory command will make debputy scan the debian/ directory for known
packaging files and annotate them with information.
Identifying known packaging files is done on a best effort basis and debputy has the following
sources of information:
Data from plugins
Any installed debputy plugin can provide data about known packaging files. Most of debputy's
"built-in" rules are stored in the debputy-documentation or the debhelper-documentation
plugin. These are installed in /usr/share/debputy/debputy/plugins/ by default. If any of the
data in there is wrong, please file a bug or a bug against the package providing the data
(often debputy or debhelper).
If the plugin provides the relevant data, debputy will expose install-pattern and install-
path, which are best-effort guesses for the file is installed (or where files listed in it
will be installed). Please check the config-features and file-categories for the file to see
when these field are applicable (and which case it is).
Note that some files can be matched multiple times. As an example debian/changelog and
debian/copyright will generally appear once per package, because they are installed in each
package.
Dynamic data from debhelper(7) (via dh_assistant(1)>)
Additionally, debputy will ask dh_assistant to resolve all relevant helper commands and their
relevant config snippets. This data will be cross referenced with the plugin provided data
where possible. This will detect files that debputy (and its plugins) does not know about,
but it cannot provide any additional information.
This part requires debhelper (>= 13.12~) to work fully. With older versions, the output will
include an issues attribute denoting that dh_assistant returned non-zero. Additionally, with
debhelper (>= 13.16~) the command will also provide data about files associated with some
dh_-commands not active with the current set of dh addons.
When dh_assistant list-guessed-dh-config-files is missing a file, it is typically because the
command that uses that config file is not introspectable. Typically, that can be fixed by
patching the command to include a command line a la:
# INTROSPECTABLE: CONFIG-FILES pkgfile(foo)
Assuming the command uses pkgfile($package, "foo") from Debian::Debhelper::Dh_Lib to look up
the config file.
Notable case that will likely not work is debian/foo.service where there is no foo package in
debian/control but debian/rules calls dh_installsystemd --name foo. This holds equally for
all debhelper config files and related commands. Here, the resulting file (if detected at
all) might be associated with the wrong package.
plugin list [TOPIC]
plugin show TOPIC identifier
These commands provides access to features that are provided by plugins (Note: many debputy features
are plugin provided, so these commands also covers a lot of "built-in" features).
These commands will access features of all plugins available even if the current package will not
activate all of these plugins. Unless otherwise stated, all output is intended to be human readable
rather than machine readable. Formatting may change between any version.
Many of the list subcommands also provide a csv format. Note this output is not intended for
scripting as the output is subject to change - both in form of format availability and content. The
csv output is intended as an aid to users of screen readers for which csv files are easier to deal
with than visually rendered tables. If you need a stable format of some particular output, please
file a feature request at <https://salsa.debian.org/debian/debputy/-/issues> or via reportbug
debputy.
You can use debputy plugin list --help and debputy plugin show --help to see which topics are
applicable for each subcommand.
Noteworthy topics include:
plugins
This topic provides a listing of all plugins that debputy is aware of.
This topic can only used with plugin list and not with plugin show.
pluggable-manifest-rules (aliases: pmr, p-m-r)
The debputy manifest provides a number of places where the packager can provide a number of
different rules such as install vs. install-doc vs. install-examples under installations:. These
are called pluggable manifest rules and this topic provides insights to which rules are available
where.
When used with list, debputy will list all pluggable manifest rules available. When used with
show, a rule name must be provided and debputy will then provide details about the rule. These
details include attributes available (where applicable) and any reference documentation provided
by the plugin.
As an example, here is how you get the details about the install rule:
debputy plugin show pluggable-manifest-rules install
When a rule name is ambiguous, debputy will ask that you use rule-type::rule-name instead of just
rule-name. As an example:
debputy plugin show pluggable-manifest-rules TransformationRule::remove
debputy plugin show pluggable-manifest-rules DpkgMaintscriptHelperCommand::remove
Note the type names (such as TransformationRule) are currently an implementation detail and may
change in the future.
packager-provided-files (aliases: ppf, p-p-f)
This topic provides details about all "packager provided files". Packager provided files can be
put into debian from where debputy will pick them up and install them somewhere in the package.
While this command shows all possible variants (by their stems), the used-packager-provided-files
topic will list real files matched.
When used with list, debputy will list all the packager provided files that debputy knows about.
When used with show, some additional details will be given.
In a few cases, the packager provided file will be processed first (as an example debian/symbols
will be passed to dpkg-gensymbols and the processed version will then be installed instead).
used-packager-provided-files (aliases: uppf, u-p-p-f)
This topic provides a list of all packager provided files used in this source package. This topic
differs from packager-provided-files in that it only shows files in actual use whereas the other
topic lists all known stems.
The listing will potentially include files that debputy could have picked up, but will not do so
during a package build because the relevant plugin is not explicitly requested (typically via a
Build-Depends). These cases are placed in a separate table and will be clearly marked.
This topic can only used with plugin list and not with plugin show.
This topic only works when the command is run from the root of an unpacked Debian source package
(as debputy needs to read debian/control and scan the debian/ directory).
metadata-detectors
This topic provides a listing of all "metadata detectors". These are plugin provided code
snippets that scan the final form of the package and add substvars (for dpkg-gencontrol),
generate maintscript snippets, or/and declare triggers.
This topic can only used with plugin list and not with plugin show.
manifest-variables
This topic covers plugin provided manifest variables. The listing will list the common manifest
variables by default along with their values in source context (if possible). Some of the special
case manifest variables are hidden by default (use debputy plugin list manifest-variables --help
to see the filter options).
When used with show VARIABLE, debputy will list the reference documentation (if provided by the
plugin) related to the value along with a few other details.
As implied above, this will only show plugin provided variables. Any manifest variables provided
directly in the manifest is not covered by these commands.
automatic-discard-rules
This topic covers automatic discard rules, which are rules that automatically filters out
(discards) sources from installation rules by default. The listing will list all the available
automatic discard rules. The show RULE command will show reference documentation and an example
of what the rule reacts to (if these have been provided by the plugin).
As an example:
debputy plugin show automatic-discard-rules la-files
type-mappings
This topic cover type mappings that explains how some non-trivial types are interpreted. These
covers types like FileSystemMatchRule and FileSystemMode, which are used by other features such
as pluggable manifest rules.
When used with show NAME, any plugin provided documentation and example inputs will be displayed
for that rule.
autopkgtest-test-runner
The autopkgtest-test-runner command is intended to be used by autodep8 or from autopkgtests to run
the tests of plugins in installed mode.
internal-command
This is for internal-only usage only. Any subcommand under internal-command may disappear or change
options between any release without any warning.
GENERAL OPTIONS
The following options general options or root level options are available.
-h, --help
Print usage information and exits.
The information printed depends on which subcommands appear prior to this option.
--version
Prints version information and exists.
Cannot be used with subcommands.
-d, --debug
Enable debug logging and raw stack traces on errors.
Some warnings become errors as a consequence.
It is also possible to set the environment variable DEBPUTY_DEBUG to 1, which also enable debug
logging. In general, the two methods are the same. However, there may be some subtle differences
involving early initialization, where the two might differ. Note that DEBPUTY_DEBUG must be set to
exactly 1 to enable debug logging that matches --debug.
--no-pager
Some subcommands will in their default output format pipe it to a pager to give you a more pleasant
experience if standard out is a terminal. Examples include many of the plugin list commands. This
option will disable the pager feature.
Most option formats via --output-format will imply --no-pager as well for subcommands that support
that option.
Note: Assuming the environment has no pager configuration at all, debputy will use less(1) with the
LESS environment variable set to -FRMQSX. Notable, the -F option will cause less to immediately
terminate if the output fits on the screen.
--plugin REQUIRED_PLUGIN
This option causes REQUIRED_PLUGIN to be loaded as a part of the commands execution if the command
needs to load plugin data. For commands that load all plugins by default, this option causes the
command to fail if REQUIRED_PLUGIN cannot be loaded. For commands that are restrictive about which
plugins are loaded, subcommand will load REQUIRED_PLUGIN in addition other plugins that would
normally be loaded.
The REQUIRED_PLUGIN can either be a plugin name or a filename. The debputy program considers
parameter with a forward slash as a filename. Otherwise, the parameter is interpreted as a plugin
name. When given a plugin name, debputy will search for the plugin in its plugin search path and load
it from there. When given a file name, debputy will read that file as a plugin and use the basename
minus any .json or .json.in extension as the plugin name.
For packages that need a plugin that they provide themselves during their build process, this option
can be useful to tell debputy about it. For the build itself, usually you want to use dh_debputy
--plugin path/to/plugin.json. But this option can still be useful for debputy check-manifest etc.
The other use-case is to load a plugin not installed into the plugin search directories. Notably, you
can use this to shadow an existing plugin, which can be useful for debugging and developing your
plugin changes.
This option cannot be used with bundled plugins. As an example, both --plugin debputy and --plugin
path/to/a/debputy.json will result in an error.
--debputy-manifest FILE
If the command needs to parse a manifest, have it read FILE instead of debian/debputy.manifest.
Note this is mostly for testing as other features might not work correctly if the manifest is not
aligned with the current working directory.
FILES
debian/debputy.manifest
Please see /usr/share/doc/dh-debputy/MANIFEST-FORMAT.md.gz for details on the format.
If you are converting your first package, you may want to read
/usr/share/doc/dh-debputy/GETTING-STARTED-WITH-dh-debputy.md.gz first.
Unlike most debhelper like tools, this file is per source package rather than per binary package.
Therefore, you cannot use debian/package.debputy.manifest to provide a specialized manifest for
package. Instead, all the needed parts should be written into the manifest itself.
The --debputy-manifest option can be used to have debputy process manifest other than
debian/debputy.manifest, which may be useful for testing or running debputy check-manifest but not
much else.
INTEGRATION LEVELS
The debputy has multiple levels of integrations, which defines how much of the packaging that debputy is
handling relative to the default dh sequence. The following integrations levels are available:
dh-sequence-zz-debputy-rrr
This integration level replaces the minimal number of commands necessary to provide Rules-Requires-
Root: no support for any package (even those needing static ownership). The sequence is often
compatible with other debhelper sequences. To use this debputy integration level, any custom file
ownership and mode should be migrated to the debian/debputy.manifest. Custom binary package version
(-v to dpkg-gencontrol) is supported via the manifest.
This migration level corresponds to a Build-Depends on dh-sequence-zz-debputy-rrr.
The following debhelper commands are removed:
- dh_fixperms
- dh_shlibdeps
- dh_gencontrol
- dh_md5sums
- dh_builddeb
Note the following debputy features are disabled in this integration mode:
- Installation rule (the installations keyword in the manifest). Any installation of content that
should go resulting .deb or .udeb should happen via debhelper's mechanisms such as dh_install.
- Metadata detectors from plugins. Instead, substvars, maintscripts and triggers are handled and
generated per debhelper conventions.
dh-sequence-zz-debputy
With this integration level, debputy will take over all installation of files into the packages.
This will replace basically all commands after the dh_auto_install command in the standard dh
sequence. This also makes the integration level incompatible with many debhelper add-ons, since they
expect to run after dh_auto_install and assume contents will be materialized into debian/package.
This migration level corresponds to a Build-Depends on dh-sequence-debputy or dh-sequence-zz-debputy.
REPORTING BUGS
If you found a bug, please report it at <https://salsa.debian.org/debian/debputy/-/issues>. For Debian
users, you can also use report debputy if you prefer using the Debian Bug Tracker.
SEE ALSO
dh_debputy(1)
AUTHOR
Niels Thykier <niels@thykier.net>
perl v5.40.1 2025-03-13 debputy(1)