diff options
-rw-r--r-- | debian/changelog | 1148 | ||||
-rw-r--r-- | debian/control | 62 | ||||
-rw-r--r-- | debian/copyright | 49 | ||||
-rw-r--r-- | debian/debputy.manifest | 7 | ||||
-rw-r--r-- | debian/gbp.conf | 6 | ||||
-rwxr-xr-x | debian/rules | 11 | ||||
-rw-r--r-- | debian/source/format | 1 | ||||
-rw-r--r-- | debian/tests/control | 19 | ||||
-rwxr-xr-x | debian/tests/debputy-cli | 49 | ||||
-rwxr-xr-x | debian/tests/debputy-cli-lint-lsp | 6 | ||||
-rwxr-xr-x | debian/tests/debputy-py.test | 33 |
11 files changed, 1391 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..7c26793 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,1148 @@ +debputy (0.1.21) unstable; urgency=medium + + * Plugin API: + - VirtualPath API: The `lookup` method now resolves symlinks if + necessary + - VirtualPath API: Provide `interpreter` method to resolve the + interpreter of a file (based on the `#!`-line). + + * migrate-from-dh: + - Support different integration levels using the new --migration-target + option with defaults derived from existing packaging where possible. + + * debputy: Code better with faulty optional plugins (Closes: debputy#73) + * README.md: Document communication channels + * debputy: Accept usr/lib/MA/Package as private python dir + * debputy: Provide `plugin {list,show} type-mappings` subcommand + * debputy: Preserve name of mapped type in most cases for plugin show p-m-r + * d/changelog: Typo fixes and re-align some entries that were "too long". + * Preserve mtime from ref_path where possible + * Fix bug where `binary-version` from the manifest was not used + * Add minimal `R³ dh` integration mode for `util-linux` and other packages + that want to migrate away from `fakeroot`. Use + `debputy migrate-from-dh --migration-target dh-sequence-zz-debputy-rrr` + to get migration aid for this integration mode. + * debputy: Make `mtime` resolution more robust (Closes: debputy#75) + * Auto-correct common interpreters + * Update handling of `t64:Provides` to match debhelper + * debputy: Fix crash bug when packages did not use debhelper + * debputy: Avoid passing the substvars file to dh_gencontrol for -dbgsym + packages + * debputy: Automatically apply relationship substvars. See + https://lists.debian.org/debian-devel/2024/03/msg00030.html for + details. + * debputy: Use `shlibs:Pre-Depends` by default for essential packages + * Implement initial Language Server based on `pygls` and linter. With this + comes the following new subcommands: + - `debputy lsp server` starts the language server to support editors + with Debian packaging files. + - `debputy lsp editor-config NAME` provides config snippets for + known editors. + - `debputy lsp features` provides a human readable list of features + and language IDs currently supported. Mostly useful for people + trying to determine what to put in their editor config where + `debputy lsp editor-config` cannot help them. + - `debputy lint` provides a "batch" (non-interactive) version of + the diagnostics that `debputy lsp server` provides for the case + where you want these without an editor as intermediate (or + where you editor does not support LSP). + + Most of these features will require optional dependencies. Check the + Recommends and Suggests for packages that may be relevant for you. + The `debputy` manpage has a section on how `debputy lint` relates + to other tools such as `debputy lsp` and `lintian`. + + * Vendor a copy of the `python-debian` RTS parser until the relevant + features are merged into `python-debian`. + + -- Niels Thykier <niels@thykier.net> Sun, 24 Mar 2024 11:29:19 +0100 + +debputy (0.1.20) unstable; urgency=medium + + * Plugin API: + - Support cross package content checks in metadata detectors. + The feature prevents the metadata detector from "unsafe" + access to other packages. As an example, arch:any packages + can never see the content for arch:all packages (since + they are not always built together). + + * migrate-from-dh: + - Add migration support for the `sodeps` sequence along with its + related `so:Depends` substvar. + + * debputy: Support the `X-Time64-Compat` field as used by `debhelper` + * debputy: Tweak wording of automatic-discard-rules examples in + the output of `debputy plugin show a-d-r ...`. + * debputy: Accessibility related changes: + - Add CSV output for *human* consumption on many of the plugin + list commands. This enables easier consumption for screen + readers when the user wants structured data. Note the CSV + is *not* guaranteed to remain stable for scripting purposes. + - Do not describe the table for screen readers. Instead, + generate the ASCII table again but without the divider + lines, which would just be line noise. + - Revert on URL rewriting of manpages for screen readers. For now + also disable creating urls when the link text is not equal to + the url as it is not clear how the screen reader reacts to the + hyperlinks. + * debputy: Fix automatic pager feature not working as intended. + This was a regression in the previous release. + * debputy.pod: Improve `debputy` manpage. Among other, + document more subcommands. Example, `migrate-from-dh` was + not documented previously. + * debputy: Provide a better error message for + `--plugin ./fake/debputy.json`. It never worked and now you + just get a better error message than `debputy` saying that + `debputy` was already loaded. + * debputy: Support bug#950723 style pkgfiles when `dh_assistant` + announces it for `annotate-debian-directory`. + * debputy: Fallbackless only applies to files without an explicit + package. Unclear whether it could be abused or cause issues. + * debputy: Make ASCII list headers bold face for terminal output. + * debputy: Generate `libfooX (= ${binary:Version})` `misc:Depends` + via libfoo.so symlink. This largely replaces `dh_sodeps. + * d/changelog: Fix typo in a previous entry. + + -- Niels Thykier <niels@thykier.net> Wed, 31 Jan 2024 21:14:21 +0100 + +debputy (0.1.19) unstable; urgency=medium + + * Plugin API: + - Breaking change (JSON-only): Group reference documentation + attributes for packager provided files under the new + `reference-documentation` attribute. + + * debputy: Fix double inverted boolean + * debputy: Improve the command output in multiple ways + - When users set `OPTIMIZE_FOR_SCREEN_READER=1`, `debputy` now + prints less visualization. Notably, ASCII formatting such as + underlying is removed. Some commands now also uses a more + textual description rather than a visual output. As the + poster example, compare `debputy plugin show a-d-r la-files` + with and without this option. + - Documentation URLs are now rendered as clickable links for + terminal emulators that support the relevant ANSI escape + sequence. When optimizing output for screen readers, + `man:name(section)` URIs are unconditionally written to + their `https://manpages.debian.org/name.section` as manpages + are generally not working very well with screen readers + unlike HTML based documentation. + - With `python3-colors`, output now uses a bit more + formatting such as boldface text when outputting to a + terminal. + * debputy: Fix crash when doing `annotate-debian-directory` on a + `debputy`-based package + * d/changelog: Document plugin API change in 0.1.18 + * Move `lua` plugin into a separate folder to avoid failing in + autopkgtests. + * d/tests/debputy-cli: Fix invalid usage of a subcommand that + failed the test. + + -- Niels Thykier <niels@thykier.net> Sun, 28 Jan 2024 16:12:42 +0100 + +debputy (0.1.18) unstable; urgency=medium + + * Plugin API: + - Packager Provided Files can now reference documentation + in the form of a generic description and URIs documenting + the file format. + + * Plugins: + - Add `perl-openssl` plugin to mirror `dh-perl-openssl`. + + * debputy: Refactor to make root level partly introspectable + * migrate-from-dh: Avoid asking users to remove Build-Depends + on dh sequences that are replaced. This is because they often + also provide relevant dependencies that the `debputy` plugin + dependency cannot provide (as long as the plugin is provided + by `dh-debputy`). + * Added partial migration of the `dh-lua` sequence. It is not + installed because the `lua` debhelper build system uses + build-time `d/pkg.install` files, which are not supported + by `debputy`. Omitted the migration code for `lua` as it + would just lead to false-hopes and broken hearts! + * debputy: Provide a `show` for packager provided files + * debputy: Provide a `used-packager-provided-files` list topic + * debputy: Add new `tool-support` command with the following + subcommands: + - annotate-debian-directory: Will scan the `debian` directory + for known packager files and annotate with hints and + documentation URIs. Data partly sourced from plugins and + from `dh_assistant`. Output is always JSON. + - export-reference-data: Provides access to reference data + used in other commands. Outputs text by default, but + supports `--output-format=json` for json exports. + - supports-tool-command: Test whether a particular + `tool-support` command is supported (without having to + parse `--help` output). + * debputy: Avoid printing `Loading plugin` in all sub commands + * Support nested `TypedDict`s in the declarative parsers + + -- Niels Thykier <niels@thykier.net> Sat, 27 Jan 2024 20:54:33 +0100 + +debputy (0.1.17) unstable; urgency=medium + + * Plugin API: + - VirtualPath: Introduce `size` attribute to simplify some code + + * debputy: Auto-detect and provide maintscripts for pam-config files. + Specifically, add the `pam-auth-update` call to relevant + maintscripts. + * MANIFEST-FORMAT.md: Clarify conflict resolution description + * debputy: Tweak the wording of the reference documentation placeholder + for when a plugin does not provide any (online) documentation. + * debputy: Refactored some internals to add a (non-public) plugin + infrastructure for adding parsing hooks to `packages.<PKG>`. + As a side-effect: + - `debputy plugin list/show p-m-r` can now access and describe these + hooks. + - The `show` output for these rules that reference certain other + rules now report them by their type name. As an example, + `when` is now described as a `ManifestCondition` rather than + `string or mapping`. This provides better traceability between + the rules. + * debputy: Fix bug in generated scripts for `clean-after-removal` + where a start quote (`"`) was missing. + * debputy: Fix bug where Installed-Size was wrong for -dbgsym packages + (it incorrectly excluded the size for anything in the data.tar). + * debputy: Fix online description for `not`, which was a copy-waste + from another rule. + + -- Niels Thykier <niels@thykier.net> Sat, 20 Jan 2024 11:18:45 +0100 + +debputy (0.1.16) unstable; urgency=medium + + * migrate-from-dh: + - Remove `d/tmp` from sources in d/install files. Having + `d/tmp` in the paths would not work the same without an + explicit `as` or `dest-dir`. + + * debputy: Fix crash when showing certain plugable-manifest-rules + * d/changelog: Avoid using `install-{,-doc}-as` like it is an install + rule. It was used as a short-hand for `install` (or `install-doc`) + with the `as` attribute but implied you could write `install-as` + in the manifest. + * docs: Correct the description of `required-when` for `discard` + * debputy: Fix source date epoch for strip-nondeterminism with + binNMU builds. + * Test API: Provide features to validate/test manifest variables + * d/tests/debputy-cli: Add tests for recent broken doc + * test: Add negative test for automatic discard rule example checks + * d/control: Add dependency on `man-db` needed to run `man-recode`. + Previously, we relied on the `debhelper` to pull this dependency. + * THANKS.md: Acknowledge Paul Gevers for his early adoption and + testing. + * debputy: Incomplete support for `dh_installdebconf`. Any debconf + templates (such as `debian/templates`) will now be processed and + lead to a `DEBIAN/templates` file in the resulting deb and the + `postrm` will run `db_purge` on `purge`. However, it is not possible + to provide a `DEBIAN/config` or custom `postinst` snippets leveraging + the debconf templates. Accordingly, the migration tool still flags + `templates` files as unsupported for now. + * debputy.pod: Provide manpage for `debputy` itself. + + -- Niels Thykier <niels@thykier.net> Mon, 08 Jan 2024 15:44:03 +0100 + +debputy (0.1.15) unstable; urgency=medium + + * manifest: + - Support `capabilities` via `path-metadata` (Closes: debputy#62) + + * debputy: Fix regression where maintscripts would not be generated. + * debputy: Fix a bug where `systemctl daemon-reload` would always + be added to postrm. + + -- Niels Thykier <niels@thykier.net> Fri, 29 Dec 2023 17:30:54 +0100 + +debputy (0.1.14) unstable; urgency=medium + + * manifest: + - Breaking change: The `discard` rule must now match at least one + path by default when it applies to at least one existing + search directory. + - Breaking change: Renamed `when` to `required-when` for `discard` + rules. The name better reflects that the `discard` rule is + always applied. The conditional decides whether it is an error + for a path to match nothing + - Support `**/non-glob` as a basename match. This form must use + the leading `**/` part to be a basename match. Without the leading + `**/`, the pattern would be interpreted as an exact path match + for a top-level file/directory. + + * migrate-from-dh: + - List `dh_install` as replaced which ensures `debputy` will + detect overrides/hook targets for `dh_install`. + + * debputy: Align md5sums order with `dh_md5sums` to reduce the diffs + between a `debhelper` and a `debputy` produced `.deb`. + * debputy: Support processing files with `strip-nondeterminism` to + reduce the amount of non-deterministic content in a package. + + -- Niels Thykier <niels@thykier.net> Thu, 28 Dec 2023 17:39:07 +0100 + +debputy (0.1.13) unstable; urgency=medium + + * Manifest: + - Support per-package installation search directories via the new + `installation-search-dirs` attribute (under `packages.*`) . + - The `discard` install rule now accepts a `search-dir`/`search-dirs` + attribute, which can be used to restrict which search directories + the discarding applies too. + - Added new `multi-dest-install` rule for the rare case where a + package needs to install the same source *twice*. This was needed + for `kafs-client`. (Closes: debputy#66) + - Any `udeb` packages are ignored when install-doc (etc.) evaluates + default for `into`. This means if a source package only builds a + single `deb` plus one or more `udeb`s, then `into` is now optional + for all documentation related `install-X` rules. + + * migrate-from-dh: + - Support migrating multi-dest sources in d/install. + + * Plugin API: + - VirtualPath API: Use of `path.replace_fs_path_content` no longer + detaches the path + + * debputy: Fix `FileNotFoundError` when building `udeb` packages + * debputy: Fix bug where install rules with multiple `into` did not + always work correctly + * debputy: Fix online documentation for `into` in most install rules + * debputy: Fix bug where `shlibs` where not generated when it should + have been. This was a regression introduced in 0.1.10. + * debputy: Let dpkg-shlibdeps see SONAMEs from other packages. This + was necessary for `kafs-client`. (Closes: debputy#66) + * debputy: Fix bug where plugin provided triggers were silently + discarded. + + -- Niels Thykier <niels@thykier.net> Mon, 25 Dec 2023 22:41:13 +0100 + +debputy (0.1.12) unstable; urgency=medium + + * Plugin API: + - Test API: Breaking change. Make metadata related tests stateless + - `VirtualPath` API: Add an `is_executable` property + + * migrate-from-dh: + - Assume minimum compat of 12 for all packages now to match the + `dh_installinit` mechanics that `debputy` now perform when an + `init` script is present. + + * d/control: Use `Debian-based` in the description to appease lintian + * d/control: Canonicalize the URL in the Vcs-Browser field + * d/control: Use `debputy@packages.debian.org` as maintainer address + * debputy: Tweak wording for several error messages + * Add initial support for service management. It covers the default + flow of `dh_installinit` and `dh_installsystemd`. Notably, the + `dh_installsystemduser` is *not* covered. + * Fix bug in `install-man` rule that made it unusable + * Internal refactoring (notably of the installation rules code). + + -- Niels Thykier <niels@thykier.net> Sun, 17 Dec 2023 18:08:13 +0000 + +debputy (0.1.11) unstable; urgency=medium + + * Manifest: + - Breaking change: Correct spelling of `build-profiles-matches` + so it now matches the documentation. + - The `install-docs` rule now supports `dest-dir` and `as`. Its + default `dest-dir` remains the same. + - Provide `path:GNU_INFO_DIR` manifest variable that represents + the directory where GNU info files should be installed into. + + * Plugin API: + - VirtualPath now supports `open` with buffering. + - When declaring manifest snippets, automatically pick up + `FileSystemMatchRule` (and subclasses) up as `path hints` (used + to provide context for error messages) + + * migrate-from-dh: + - Improve some error messages to provide the actual file path + instead on an internal object name/id. + - Fix detection of `dh-exec` conditionals that could cause the + conditions to be interpreted as literal values rather than + conditionals. + - Support `dh-exec` conditionals in `d/install`. + - Provide more support for dh-exec features in d/manpages. Notably, + `SOURCE => DEST` is now rewritten into an `install-doc` (with `as`) + rule and conditionals are now supported. + - Multiple conditions in `d/links` files are now supported + and will be translated into an `all-of`. + - Avoid single-item `sources` for migrated bash-completions. + (Style-only change) + - Create a placeholder variable for unknown manifest variables. + Previously, it would result in a hard error as the resulting + manifest could not be parsed. (Closes: debian/debputy#65) + - Support migrating `d/info` files + + * debputy: Convert transformation and install rules to using + `FileSystemMatchRule`s for paths. This unifies parsing of globs for + all rules except `clean-after-removal` (which still uses shell glob + semantics). + * online doc for path-metadata: Fix copy-paste mistake + * Fix crash bug where `d/tmp` is not a directory but an install rule is + used (unclear if this was reproducible in older versions). + * debputy: Fix internal error by `debputy` setting wrong "CoW"-flag on + some paths + * d/changelog: Clarify wording of a previous entry and fix a few typos. + * debputy: Correct two error messages that should have shown valid attribute + names when incorrect values were provided. + * debputy: Fix bug in parsing of `all-of` and `any-of` manifest conditions + that made it impossible to use these manifest conditions. + * tests: Provide initial tests of basic install rules. Required some + refactoring related to the virtual file system to support these + tests. + + -- Niels Thykier <niels@thykier.net> Sun, 10 Dec 2023 14:40:05 +0000 + +debputy (0.1.10) unstable; urgency=medium + + * Manifest changes: + - Support `clean-after-removal` feature, where you can ask + `debputy` to remove files when the package has been removed + or is being purged. This feature is similar in spirit to + `rpm`'s `%ghost` files. (Closes: debputy#35) + + + * plugin API: Fix bug where `path.chmod("symbolic-mode")` would + raise an exception + * debputy: Defer error'ing out when dpkg-gensymbols returns with a non-zero + exit code until all packages have been processed + * debputy: Optimize materialization to require less copying via + the following features: + - Properly implement lazy copy-on-write actions to avoid + copying a file into the scratch directory only to copy it + to the materialization directory later. Now, the case + only performs one copy (directly from the source to the + materialization directory). + - When a file has already been copied into the scratch + directory because `debputy` needed to mutate the file, + use a `mv` rather than a `cp` to move the file to its + final destination. + + -- Niels Thykier <niels@thykier.net> Sun, 03 Dec 2023 16:01:57 +0100 + +debputy (0.1.9.3) unstable; urgency=medium + + * migrate-from-dh: + - Support full migration of `dh-sequence-numpy3`. Though, there + is still no `dh-sequence-python3` migration support, which + may make this less useful at the moment. + * tests: Fix bug where `debputy` provided plugins fails in + installed mode causing `debputy` autopkgtests to fail. + * tests: Improve test coverage for gnome plugin. + + -- Niels Thykier <niels@thykier.net> Wed, 29 Nov 2023 21:24:15 +0100 + +debputy (0.1.9.2) unstable; urgency=medium + + * gnome plugin: Fix broken version in substvars and add a basic + regression test. + * debputy: Some internal refactoring. + + -- Niels Thykier <niels@thykier.net> Tue, 28 Nov 2023 19:23:53 +0100 + +debputy (0.1.9.1) unstable; urgency=medium + + * plugin test API: Enable the test API to validate ADR examples + * debputy: Skip compression of .html/.htm files. + Thanks to Sven Joachim <svenjoac@gmx.de> (Closes: #1057001) + * debputy: Special-case doc-base files to minimize delta between + `debputy` and debhelper. + + -- Niels Thykier <niels@thykier.net> Mon, 27 Nov 2023 22:01:14 +0100 + +debputy (0.1.9) unstable; urgency=medium + + * Plugin changes: + - Breaking change: The features of the `bash-completion` + plugin has been embedded into the `debputy` plugin. The + `bash-completion` plugin has been removed without a + backwards compatibility feature. + - Breaking change (test-api): The `virtual_path` function + got renamed to `virtual_path_def` and got promoted to + the non-test API. + - Add more features to the `VirtualPath` API. Notably some + mutations are now supported when the file system is in + read-write mode. + - InstallRule's no longer accept an explicit search dir. + Search dir handling is now done differently and plugins + are not involved in that process. + + * migrate-from-dh: + - Support full migration of `dh-sequence-bash-completion`. + - Support partial migration of `dh-sequence-gnome`. The + `dh_gnome` side will be migrated, but `dh_gnome_clean` + will still be done via the `dh-sequence-gnome`. + - List which `dh-sequence-X` Build-Dependencies should be + removed. These are listed as manual migrations. + - Migration now detects *simple* cases of `dh` addons + loaded via `--with` in `debian/rules`. + + * Let `debputy` handle loading of additional variables + * d/changelog: Reformat line in the 0.1.8 entry + * MANIFEST-FORMAT.md: Correct name of two example manifest variables + * MANIFEST-FORMAT.md: Improve documentation related to manifest variables + * Add private plugin api for package processors and migrate some + `debputy` code to use this feature. + * debputy: Provide a `clean .la files` feature by default based on a + similar feature from `dh_gnome`. + * debputy: Filter out doxygen related cruft (replacing `dh_doxygen`) + * Make discard rules a plugin provided feature (currently private) + and provide (validated) examples for automatic discard rules. + These can be seen via the example command: + `debputy plugin list a-d-r doxygen-cruft-files` + * debputy: Show which paths have been matched by an automatic discard + rule in the build out along with how to override them. + + -- Niels Thykier <niels@thykier.net> Sun, 26 Nov 2023 15:20:44 +0100 + +debputy (0.1.8) unstable; urgency=medium + + * Manifest changes: + - Breaking change: Rename some manifest variables like `{{TAB}}` + `{{token:TAB}}`. This change only affects manifest variables + intended to provide textual tokens that might be hard to write + literally or to avoid triggering substitution of another manifest + variable. + - Split `arch-matches` condition into three. The `arch-matches` + is still preferred. The other two variants are for special-cases + related to cross-building. As a side-effect of this change, + `arch-matches` can now be used in source context. + - Support manifest declared variables. A new `definitions.variables` + key is defined where variables can be declared. See + MANIFEST-FORMAT.md for the details. (Closes: debputy#58) + - It is now possible to use substitution variables in package names + in the manifest. This enables the use of `libfoo{{SONAME}}` instead + of hard-coding the value. + + * Plugin changes: + - Breaking change: Remove the previously required plugin-version + attribute. + - Streamline installation process for "simple" `debputy` plugins by + providing a debhelper tool and by having `debputy` take + responsibility for the Python byte-compilation requirement for + `debputy` plugins. Additionally, support for running plugin tests + have been added too (both as build-time and as installed tests). + - Breaking (test-only) change: The test API for loading plugins have + been renamed and should no longer be passed a JSON descriptor file. + Instead, the test framework will attempt to find the JSON descriptor + file on its own. With this method, the test does not have to + distinguish between install-time and build-time test runs. + - A metadata detector can now request the binary package version + of a package via the context parameter. + - Plugins can now provide literal manifest variables like `path:FOO_DIR`. + + * debputy: Provide online documentation for most manifest rules + * debputy: Correct detection of required/conditional fields in + `plugin show pmr` + * debputy: Provide "on-line" documentation of manifest conditions + * MANIFEST-FORMAT.md: Correct some anchors that would cause broken links + in HTML rendered versions of the file. + * MANIFEST-FORMAT.md: Clarify `replacement-rule` for `create-symlink` only + applies if the declared symlink path exists. If it does not exist and + cannot be because it would require a non-directory to become a directory, + then `replace-rule` cannot be used. + * plugin changes: Make single-file Python module easier to provide + * debputy: Add `--plugin` parameter to load plugins for most commands. + * debputy: Fix bug where some common args were ignored depending on argument + order. + * dh_installdebputy: New helper to install `debputy` plugins from + debhelper packages. + * d/control: Have `dh-debputy` provide `dh-sequence-installdebputy`. + * dh-sequence-debputy: Restore `dh_installdir` command. This enables packages + to still use the `dh_installdir` helper to work around upstreams that does + assumes install directories exist (such as `DEST_DIR`). + * debputy: Support d/alternatives files like `dh_installalternatives`. + * Provide basic plugin to support d/bash-completion files. The feature is + deliberately written as a stand-alone plugin, so it is easier to migrate + to the `bash-completion` package later if that is relevant. + * GETTING-STARTED-WITH-dh-debputy.md: List `dh_installalternatives` as a + replaced command. It has been replaced for quite a while and the omission + in the docs was unintentional. + * Provide basic bash-completion plugin and provide migrations for the + users of `dh-sequence-bash-completion`. + * d/tests/control: Add explicit test dependency on python3-all + (Closes: #1056240) + * debputy: Provide a `plugin list manifest-variables` subcommand that will + list known variables. Default special-case and token manifest variables + are hidden and have to be requested explicitly. + * debputy: Provide a `plugin show manifest-variables VAR` subcommand that + will show information about a given manifest variable. + * Breaking change: Plugins can now provide manifest variables + * d/changelog: Bump snapshot version + + -- Niels Thykier <niels@thykier.net> Sun, 19 Nov 2023 19:00:00 +0100 + +debputy (0.1.7.8) unstable; urgency=medium + + * Manifest changes: + - Breaking change: The `remove` transformation now prunes empty + dirs by default. The previous behaviour can be restored with + an explicit `keep-empty-parent-dirs: true`. + + * d/tests/debputy-py.test: Fix bugs in autopkgtest + * debputy: Provide new `plugable-manifest-rules` topic for `plugin list`. + This subcommand enables the user to get a list of all rules available + under `installations` or `packages.{{PACKAGE}}.transformations`, etc. + * debputy: Provide a `plugin show plugable-manifest-rules` command that + can provide some details about each rule (such as `install`). + * MANIFEST-FORMAT.md: Clarify some of the "shell"-like examples. + * MANIFEST-FORMAT.md: Clarify that "install" (with `as`) behaves like + `foo => bar`. Previously, the documentation said `=>` which could also + cover the `=> bar` feature from `dh-exec`. However, that feature is + handled by the `installations` itself rather than "install" (with + `as`). + * d/tests/control: Add superficial test of `debputy` command line + + -- Niels Thykier <niels@thykier.net> Sat, 28 Oct 2023 17:15:55 +0200 + +debputy (0.1.7.7) unstable; urgency=medium + + * debputy: Mention `yamllint` in YAML-level parse errors + * debputy: Avoid crashing on usr/share/doc/foo symlinks for non-native + packages. Thanks to Paul Gevers <elbrus@debian.org> (Closes: debputy#49) + * debputy: Fix crash on octal mode being specified as an int. + Thanks to Paul Gevers <elbrus@debian.org> (Closes: debputy#54) + * debputy: Ensure dh-integration based scratch (temp) dir is used when called + from dh_debputy. This ensures that `dh_clean` will always clean up after + `debputy` when `debputy` is used with `debhelper`. + * debputy: Resolve variables when processing `as` in `install` rules. + Thanks to Paul Gevers <elbrus@debian.org>. It resolves debputy#57, but a + regression test has not been added yet. + * debputy: Provide contextual error message when using `{{PACKAGE}}` variable + when it is not available + * debputy: Fix multiple bugs related to installing upstream changelogs + * debputy: Unlink empty `conffiles` in the control.tar + * d/control: Version the Provides for `dh-sequence-*` + Thanks to Paul Gevers <elbrus@debian.org> for the suggestion. + * packaging: Add initial autopkgtests + + -- Niels Thykier <niels@thykier.net> Fri, 27 Oct 2023 16:19:48 +0200 + +debputy (0.1.7.6) unstable; urgency=medium + + * Manifest changes: + - Implement substitution in symlink target. Thanks to Paul Gevers + for reporting the issue. (Closes: debputy#56) + - Add `replacement-rule` parameter to `create-symlink`. With the + `replacement-rule` parameter, you can control how `debputy` + should react to the `path` of a symlink clashing with an + existing file system object. The default behavior remains + unchanged. + + * migrate-from-dh: + - Merge more `debian/install` rules. Most install rules from + `dh_install` will now be grouped by `dest-dir`. There are a few + special-cases, where merging is not applied (`=> usr/bin/foo`) + and probably will not be. + + [ Paul Gevers ] + * MANIFEST-FORMAT.md: Make the difference between the YAML version and the + `debputy` manifest-version more explicit. (Closes: debputy#51) + + [ Niels Thykier ] + * debputy. Improve error handling of some transformation rules for dir vs. + non-dir clashes + * debputy: Avoid crashing on an attempt to replace a symlink with a non-empty + dir. (Closes: debputy#48) + * MANIFEST-FORMAT.md: Remove references to aliases that are not applicable + * Declarative parser: Support `Literal` values as type. It is basically + interpreted as an enum-like input. + * debputy: Fix exception on `remove` rules that used globs (Closes: debputy#52) + + -- Niels Thykier <niels@thykier.net> Sun, 22 Oct 2023 19:08:55 +0200 + +debputy (0.1.7.5) unstable; urgency=medium + + * migrate-from-dh: + - migrate-from-dh: Provide better error message for unresolvable + subst vars + - migrate-from-dh: Support DEB_VERSION-related substvars. + Thanks to Paul Gevers <elbrus@debian.org>. (Closes: debputy#53) + + [ Paul Gevers ] + * MANIFEST-FORMAT.md: Multiple improvements to the wording and + correction of several examples. + * README.md: remove double 'better support' + * d/control: same as previous README fix + + [ Niels Thykier ] + * GETTING-STARTED-WITH-dh-debputy.md: Correct example + * Makefile: Correct name of dh_debputy.1 manpage + * debputy: Provide better error messages for invalid YAML. + Thanks to Paul Gevers <elbrus@debian.org> (Closes: debputy#47) + * debputy: Fix crash on relative symlinks when compressing files. + Thanks to Paul Gevers <elbrus@debian.org> (Closes: debputy#50) + + -- Niels Thykier <niels@thykier.net> Fri, 20 Oct 2023 18:12:52 +0200 + +debputy (0.1.7.4) unstable; urgency=medium + + [ Andres Salomon ] + * Fix typo in GETTING-STARTED-WITH-dh-debputy.md + + [ Niels Thykier ] + * debputy: Insert explicit shebang line + `set -e` (Closes: debputy#46) + * Makefile: Provide and install a manpage for dh_debputy + * debputy: Use `dpkg-parsechangelog` to determine version during self-hosted + clean chroot builds. + + -- Niels Thykier <niels@thykier.net> Sun, 15 Oct 2023 15:59:28 +0200 + +debputy (0.1.7.3) unstable; urgency=medium + + * Correct copy-paste mistake in a warning + * migrate-from-dh: Avoid internal error with d/package.foo being a directory + * Support `open` on symlink for `FSROOverlay` as OS can resolve the symlink. + + -- Niels Thykier <niels@thykier.net> Tue, 10 Oct 2023 19:59:18 +0200 + +debputy (0.1.7.2) unstable; urgency=medium + + * Changes related to `migrate-from-dh`: + - Merge multiple d/install lines when no dest-dir is provided + - Group d/manpages lines by language + * debputy: Fix internal error triggered while building src:remind. + Thanks to Jochen Sprickerhof <jspricke@debian.org> + * debputy: Include document references in some parse errors (when available) + + -- Niels Thykier <niels@thykier.net> Mon, 09 Oct 2023 18:24:49 +0200 + +debputy (0.1.7.1) unstable; urgency=medium + + * migrate-from-dh: Correct some messages to provide the proper path name + * debputy: Fix internal error caused by some manifest errors + + -- Niels Thykier <niels@thykier.net> Sun, 08 Oct 2023 18:10:47 +0200 + +debputy (0.1.7) unstable; urgency=low + + * Upload to unstable. + + * Manifest changes: + - Breaking change: `path-metadata` rules never match symlinks. + Previously, you could match symlinks when ownership information + was changed. However, there is no known case in Debian where this + feature would be useful. To keep the logic and documentation simple, + symlinks are now no longer matched. + + * Plugin API changes: + - Breaking change: Rewrite the API declaring packager provided files to + use a full path format rather than dir + basename. + - Breaking change: The directory `/usr/share/debputy/debputy/plugins` is + now the official plugin directory. Previously, it was not explicitly + defined (but ended up being `/usr/share/dh-debputy/plugins`). + - It is now possible declare packager provided files in the plugin json + file (that is, without needing any python code at all). + + * Changes related to `migrate-from-dh`: + - Remove the `systemd` dh addon from the list of supported add-on. The + addon implies compat 10 and `debputy` assumes compat 11 at least. + Users are better off migrating to compat 11 and then to `debputy`. + - When generating an updated manifest, the migration will now verify + that the generated manifest can be parsed. If not, `debputy` will + raise an internal error promoting the user to file a bug. + + * Parse plugin json via the declarative parser + * debputy: Avoid stacktrace if run outside package root + * debputy: Support running some subcommands outside of source roots + * IMPLEMENTATION-DECISIONS.md: Document some decisions behind plugin integration + * debputy: Package builds and `check-manifest` now only loads explicitly + requested plugins to ensure deterministic behaviour. Other commands (notably + the `plugin`) still loads all plugins that `debputy` can find. Plugins are + "explicitly requested" when the package has a `Build-Depends` on + `debputy-plugin-X` where `X` is the name of the plugin. + * MIGRATING-A-DH-PLUGIN.md: Advice against providing Python-based plugins for + now as the logistics are not fully prepared. + * debputy: Pipe to pager for some subcommands (such as + `debputy plugin list ppf`), if `DEBPUTY_PAGER` or `PAGER` is set, or if `less` + is available in `PATH`. The `LESS` variable is set to `-FRSXMQ` if not set. + * debputy: Show where the plugin is installed when listing plugins + (`debputy plugin list`) + * debputy: Provide more details in `debputy plugin list ppf` + * debputy: Restore ability to build packages with non-root static ownership. + There was a regression in a recent release that made `debputy` not realize + it would need to account for `(fake)root`. + * debputy: Provide better error message when plugin JSON is invalid. + Previously, you would just get a stack trace. + * Support sub-second mtime in the intermediate manifest + * debputy: Preserve `mtime` for compressed files like `gzip` does. + * debputy: Reduce the number of `stat`s when performing installations. + * debputy: Align changelog trimming closer with `debhelper` to minimize any + diffs between a `debhelper` produced deb and a `debputy` produced deb. + * debputy: Fix a cache retention issue that caused `Installed-Size` to be + wrong some cases. + + -- Niels Thykier <niels@thykier.net> Sun, 08 Oct 2023 13:38:22 +0200 + +debputy (0.1.6) experimental; urgency=medium + + * Manifest changes: + - Breaking change: Replace `exclude` with `discard` and remove inline + `exclude` rule + - Breaking change: Rename `exclude` (transformation) to `remove` + - Breaking change: Symlink creation is now a transformation rule + - Breaking change: Empty directory creation is now a transformation rule + - Permit str/list forms of current install rules + - Support `install-man` rule similar to `dh_installman`. Note that + `install-man` does *not* automatically fallback to guessing the + language from the basename like `dh_installman`. The feature is + supported but requires explicit opt-in. + + * Changes related to `migrate-from-dh`: + - Fix invalid error message on `${env:FOO}` variables + - The migration tool is now more clear on "unsupported" vs. "supported but + there is no automatic migration feature". The former will require an + explicit "I know and I am ignoring it" parameter, whereas the latter + gets a "manual migration" warning. + - Automatic migration from `d/manpages` to the new `install-man` rule. Be + sure to double-check the `language` attribute (of lack thereof). You may + need to add `language: derive-from-basename` in some cases. + - Automatic migration to translate `debian/not-installed` into `discard` + rules. + - The migration tool now detects unsupported dh sequence add-ons used. + - The migration tool now detects missing `dh-sequence-debputy` (or the `-zz-` + variant) in the Builds-Depends and provides you with a warning. + + * Plugin API changes: + - `VirtualPath` now has a new `open` method. + + * d/changelog: Correct a `Closes` to specific it was a gitlab issue + * IMPLEMENTATION-DECISIONS.md: New file that document some implementation + decisions in a new document. + * MANIFEST-FORMAT.md: Tweak some wording and remove an invalid exclude example + * MANIFEST-FORMAT.md: Clarify that conditions may partially evaluate rules + * Parse transformation rules via declarative parsers. Same behaviour, just + with better error messages. + * Set `DPKG_NLS=0` when calling `dpkg-architecture` + * FSPath: Support tracking ownership and rewrite mode tracking + * Remove internal `show-manifest-rules` command + * Avoid crash if two ELF binaries have the same build-id + * Support running `dwz` for ELF binaries + * GETTING-STARTED-WITH-dh-debputy.md: Improve migration section + * Correct python public directory detection. Previously, if the debug + version of the directory was available, only that was checked for + python scripts. Now `debputy` checks both directories when they are + both present. + * Remove shlibs + symbols migration code it is no longer necessary. + * migration: Fix `min` that should have been `max` causing it to use the + min dh-compat level rather than the max compat level required by + migrations. + * migrate-from-dh: Detect unsupported dh-addons and missing debputy B-D + * debputy: Clarify that `plugin list --help` will list topics + * Remove support for `menutest` and `isinstallable` scripts for now. + There is no support for the deb maintscripts. It seems weird to have + support for the udeb ones. + * Generate the control root in a tempdir to reset state between runs. + * shlibs.py: Fix crash when no `shlibs` and `symbols` files were provided + * Generate temp names with `__` separating the original basename for making + the original basename a little easier to spot. + * Fix bug where perl shebang lines were always rewritten + * debputy: Provide better contextual error messages + * Default most scripts with shebang lines to 755 if no other rule matches it. + This applies to any file having /usr/bin, /usr/sbin, /bin, or /sbin + in its #!-line, where a more specific rule does not apply. + (Closes: debputy#36) + + -- Niels Thykier <niels@thykier.net> Sun, 01 Oct 2023 22:21:03 +0200 + +debputy (0.1.5) experimental; urgency=medium + + * New migration features: + - Lower the min dh compat to 11 for the simplest cases. Some cases + will require higher compat levels (notably, any arch:any packages bumps + the minimum to compat 12). + + * debputy: Breaking change: Detect missing installation rules for `debian/tmp` + similar to `dh_missing`. The `debputy` detects completely directories as + possible integration points and provides a bit of context to what kind of + path entry the missing file system object is. The new install-time `exclude` + rule can be used to deliberately ignore uninteresting path objects that is + this feature detects. + + * Manifest changes: + - Breaking change: Make `all-of` and `any-of` consistent (case-wise) with + other conditions. + - The `into` key on installation rules are now optional for single binary + packages. + - Fix bug where `dest-dir`, `as` and `when` was ignored for `install` (etc.) + - Support symbolic mode for mode attributes in additional to octal modes. + - Support `exclude` as an install rule (under `installations`) as an + experimental feature. + - Support `exclude` as an inline attribute in some `install` rules. + + * Fix error in built-in permission normalization rule that broke directory modes + in some cases. + * Support main-doc package in install rules and apply_compression + * Remove support for debian/udev as it involves `/lib` and `debputy` should not + be involved in the `/usr-merge` transition. + * util.py: Fix bug in detect_fakeroot that would neuter the check + * util.py: Implement an xargs-like interface + * highlevel_manifest_parser.py: Prettify the definition reference + * highlevel_manifest_parser.py: Detect typos if python3-levenshtein is installed + * Remove debug symbols from static libraries (Closes: debputy#32) + * Remove remaining code for supporting "install"- and "mtree"-like formats. + * Provide a new declarative parser and migrate installation rules to use it. + * Replace internal attribute path tracking strings with the new AttributePath + class. + * Improve handling of installation rules that are disabled by conditionals. + * Ensure binNMU changelogs are split out of the main changelog + (Closes: debputy#34) + * Use declarative parser as a subparser for more parts of the manifest + * MANIFEST-FORMAT.md: Installations is now its own top level section + * Generate `${t64:Provides}` for the t64 migration (Closes: debputy#37) + * Fix invalid root dir for multi-binary packages + * MANIFEST-FORMAT.md: Write a conflict rule to apply to `installations` too. + * Avoid assertion error when `owning-package` was used without + `prior-to-version`. + * Support bash-completion via python3-argcomplete. For now, this must be + activated manually via `eval "$(register-python-argcomplete debputy)"`. It is + a bit slow due to start up times not being optimized for this case. + * Breaking change: Rewrite command line handling to remove special case options + (such as `-p`) from the root level. On the other hand, the new logic supports + providing default options on all subparsers, enabling default options such as + `--debug` to appear in all subparsers. + * Make symbols + shlibs "discoverable" by pretending they are packager provided + files. Reuse the detection logic from provider provided files rather than + "hand-rolling" a similar logic. + + -- Niels Thykier <niels@thykier.net> Tue, 12 Sep 2023 20:43:15 +0200 + +debputy (0.1.4) experimental; urgency=medium + + * debputy.pm: Breaking change: The debputy dh sequence now removes the + following debhelper tools from the sequence: + + - dh_installdirs + - dh_install + - dh_installdocs + - dh_installchangelogs + - dh_installexamples + - dh_installman + - dh_installcatalogs (!) + - dh_installdebconf (!) + - dh_installemacsen (!) + - dh_installinfo + - dh_installinit (!) + - dh_installsysusers + - dh_installsystemd (!) + - dh_installsystemduser (!) + - dh_installmenu (!) + - dh_ucf (!) + - dh_perl + - dh_usrlocal (!) + - dh_installwm (!) + - dh_strip_nondeterminism (!) + - dh_dwz (!) + - dh_strip + - dh_missing (!) + + At this point, basically any command *after* dh_auto_install (plus + dh_installdirs, which runs before dh_auto_install) has been removed. + As a consequence, the `debputy.pm` sequence no longer interacts very + well with most debhelper sequence addons. Basically any command + relying on content in `debian/<pkg>` will no longer work with + `dh-debputy`. + + Commands marked with (!) has no or almost no replacement support. + If a package rely on these commands, odds are debputy will be + unlikely to support that package. Other commands will have + support for common cases (similar to debhelper's default behavior). + + * debputy.py: Breaking change: Remove support for services, debhelper + provided maintscripts and triggers. + + * New migration features: + - Auto-migrate `debian/tmpfile` to `debian/tmpfiles` + - Auto-migrate `debian/README.debian` to `debian/README.Debian`. + (debhelper allowed both, debputy only supports the latter, which + is the more common variant). + - Auto-migrate `debian/doc-base.<suffix>` to + `debian/<pkg>.<suffix>.doc-base`. Note that debhelper and debputy + are not aligned on the naming scheme here. Applying this migration + causes debhelper to no longer see the doc-base files. + - Auto-migrate common `debian/install`, `debian/docs` and + `debian/examples` into the `installations` feature (see + "manifest changes" below). Some (but not 100%) dh-exec support + provided as well. + - Detect `debian/<foo>` files for unsupported debhelper tools or + where no migration has been written yet and warn about their usage + affecting the migration. + - Migration now works with debhelper compat 13 rather than compat 14 + in most cases. Notable exception being packages that have a + `debian/pam`, which will still trigger a min compat of 14. + + * manifest changes: + - Implement `installations` to replace `dh_install`, `dh_installdocs` + and `dh_installexamples`. Please see the `Installations` section + in `MANIFEST-FORMAT.md` for how to use it. Note that `debputy` + installations work differently than debhelper when multiple + patterns match the same path. + + * debputy plugin API: Important changes: + - Detached paths are now less volatile. Notably, the `path` + attribute will now always work for plugins. The `parent_dir` + attribute should still be avoided however. Additionally, the + `.lookup` method will now always trigger an exception for a + detached path (previously, it would "sometimes" trigger the + exception depending on the path being resolved). + - Plugins can now choose whether a Packager Provided File (PPF) + should have name segments or have architecture specific + segments. Additionally, the plugin can request that + `debian/foo` is considered a fallback for all packages for + a given file. + - The `BinaryPackagePath` type has been renamed to + `VirtualPath`. + + * Improve wording in documentation and fix typos various places. + * Remove `> /dev/null` for `systemd-tmpfiles`. + * Add support for systemd's sysusers file. + * Provide standard excludes for commonly unwanted things + * Support pruning changelog files. When pruning NEWS, keep only entries listed + in the Debian changelog. + * Ensure man, info pages, changelog files and Debian.NEWS files are always + compressed. Previously, these would only be compressed if they had a + certain size. This change makes `debputy` match `dh_compress` better. + * migration: Renames count as successful changes. Previously, the migration + tool would say it could do renames and then claim nothing could be done + followed by not doing anything at the end. + * Fix bug where mode was used as mtime for symlinks. + * manifest/parser: Recognise -dbgsym packages. The package names + are now known and will not trigger an "unknown" package + exception when used. However, currently no directives are allowed + for dbgsym packages so the net result of specifying them is still + an error. + * Migrate to the python logging. Along with a dependency on colorlogs, + this means that output will have some color support. This changes means + more "info" level messages now have basic colors. + * util.py: Fix double quote handling when doing shell escapes. + * debputy.py: Improve error reporting a bit. Notably, previously + some exceptions that should have been caught and rendered in a + user-friendly way now are as intended. Additionally, the debputy + frontend now catches a common cause of exceptions (`RuntimeError`) + and classifies them as "Unexpected exceptions" along with a note + recommending filing a bug for debputy. + * debputy.py: Hide unstable/internal commands. Most of the frontend + commands are now hidden behind an `internal-command` subcommand. + this means that the default help output now only uses 1-2 lines on + the internal or unstable subcommands. + * debputy.py: Provide a `check-manifest` command to parse the manifest + and check for obvious errors without having to build debs. + * Do not mandate dpkg archs to be known. Previously, debputy + would trigger an error if the manifest in the `arch-matches` + condition listed an unknown dpkg arch. This error has been + removed as it is common practice to list new architectures + long before dpkg in stable/oldstable knows the architecture. + * Tweak the auto-generated maintscripts. Notably, indentation + is now two spaces and applied better to avoid weird hanging + lines. Additionally, the first line of a snippet is no longer + accidentally merged into the condition line, which could + cause syntax errors if the fixed line did not have + indentation. + * Detect and register python byte compilation for public + dist-packages dirs and default "package private" dirs + similar to `dh_python3`. This is done because `debputy` + cannot rely on `dh_python3` when it is self-hosting. + Other `dh_python3` are not ported. + * Move all of dh-debputy's files from `usr/share/debputy` + to `usr/share/dh-debputy`. In tandem with the previous + change, this causes debputy now to properly integrate with + the python byte compilation system. + * Correct the "inner" snippet order of generated maintscripts. + All postrm and prerm snippets are supposed in reverse order + and previously some snippets were not reordered correctly. + * migrate-from-dh: Reduce the output to make warnings less likely + to drown in other output. + * migrate-from-dh: Better error reporting on failed executable + dh config emulation. + * migrate-from-dh: Require an explicit --apply-changes for + migrations to performed. + + -- Niels Thykier <niels@thykier.net> Thu, 24 Aug 2023 19:14:48 +0200 + +debputy (0.1.3) experimental; urgency=medium + + * debputy.pm: Breaking change: The debputy dh sequence now removes the + following debhelper tools from the sequence: + - dh_lintian + - dh_bugfiles + - dh_compress (note: hardlinks are not supported correctly) + * Create a basic plugin API infrastructure and move some of the + debputy into a plugin. Plugins can currently register packager + provided files (`d/pkg.foo -> usr/.../pkg[.conf]`) and detection + (and generation) of maintscript snippets, substvars and triggers. + However, plugins cannot alter the contents of the data.tar. + Additionally, the plugins are not loaded deterministically during + builds (unclean chroot can load too many plugins), so they are not + ready for prime time yet. + * Fixed a bug in debputy's handling of icon-cache generation + (dh_icons). + * Detect kernel modules under /usr in addition to /lib. + * debputy.py: When migrating from dh, detect use of `=>` in + debhelper config files and report it as unsupported. The migrator + would not generate the correct code for these lines. Currently, + none of the debhelper tools where you can use `=>` would be migrated, + so this is just future proofing. + * debputy.py: Provide a `plugin` subcommand to interact with the + plugins. Currently, it can only list plugins and a bit of the + content they provide. + * all frontends: Show colorized error and warning messages similar to + debhelper. + * all frontends: Provide a `--version` that prints the version of + debputy. + * debputy.py: Detect `/usr/local` paths and abort as they are unhandled. + Note that `dh_usrlocal` would normally be run and clean up these + directories, so this is only an issue if you bypass `dh_usrlocal` or + ask debputy to create content in `/usr/local`. + + -- Niels Thykier <niels@thykier.net> Sun, 23 Jul 2023 07:52:46 +0000 + +debputy (0.1.2) experimental; urgency=medium + + * debputy.pm: Breaking change: The debputy dh sequence now removes the + following debhelper tools from the sequence: + - dh_installudev + - dh_installgsettings + - dh_makeshlibs + * debputy.py: Breaking change: The manifest use `{{X}}` rather than + `${X}` for substitution and remove support for environment variables + in substitutions. + * deb_packer.py: Support most of the dpkg-deb environment variables for + compress settings (etc.). Only known omission is thread count, which + despite having a `--threads-max` option, `deb_packer.py` ignores the + value in the name of compatibility. + * deb_packer.py: Reset the `mtime` of control.tar members according + to the SOURCE_DATE_EPOCH rules (clamping). Previously, the `mtime` + was unconditionally reset. Most control.tar members are + generated at runtime, so it only mattered when the control file + is not generated. + * deb_materialization.py: New internal command for materializing the + data.tar part of the deb before assembly (or debugging). The + command can also be used to assembling the materialized deb by + using dpkg-deb or deb_packer.py (referred to as `debputy`). + * debputy.py: Default to using `deb_materialization.py` to + materialize the package and then assemble it with dpkg-deb where + possible. However, automatically fallback to the internal assembly + method when (fake)root is required and `Rules-Requires-Root` is + `no`. + * debputy.py: When using the `migrate-from-dh` subcommand, use + `dh_assistant` to detect override targets that might cause issues + with the migration. + * debputy.py: Rename `show-manifest-changes` to `show-manifest-rules` + and `--show-implicit-changes` to `--show-implicit-rules`. + * builtin_manifest_rules.py: Correct permission for two bugreport + builtin rules when matching a directory. Previously, the + directories would keep their file system mode. Now they are + correctly normalized to 0755 as other directories would have been. + * manifest_conditions.py: Fix a bug where the description of build + profile conditionals where rendered poorly. + * packages.py: Prevent assertion error when user provides a typo'ed + package name for `-p`. + + -- Niels Thykier <niels@thykier.net> Sun, 18 Jun 2023 14:30:41 +0000 + +debputy (0.1.1) experimental; urgency=medium + + * Initial release. (Closes: #1029645) + + -- Niels Thykier <niels@thykier.net> Sun, 05 Feb 2023 18:27:25 +0000 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..b393718 --- /dev/null +++ b/debian/control @@ -0,0 +1,62 @@ +Source: debputy +Section: devel +Priority: optional +Maintainer: Debputy Maintainers <debputy@packages.debian.org> +Uploaders: Niels Thykier <niels@thykier.net>, +Build-Depends: debhelper-compat (= 13), +# man-db <pkg.debputy.ci>, + hunspell-en-us <!nocheck>, + python3:any, + python3-colorlog <!pkg.debputy.minimal>, + python3-colored <!pkg.debputy.minimal>, + python3-debian, + python3-hunspell <!nocheck>, + python3-pytest <!nocheck>, + python3-lsprotocol <!nocheck>, + python3-ruamel.yaml, + dh-sequence-single-binary, +# debputy-plugin-foo, + strip-nondeterminism <!nocheck>, +Rules-Requires-Root: no +Standards-Version: 4.6.2 +Homepage: https://salsa.debian.org/debian/debputy +Vcs-Git: https://salsa.debian.org/debian/debputy.git +Vcs-Browser: https://salsa.debian.org/debian/debputy + +Package: dh-debputy +Architecture: all +Depends: debhelper, + man-db <!pkg.debputy.minimal>, + python3, +# The colors dependencies are not necessary for debputy to work. +# However, to have coloring work, we need to use Depends because +# Recommends/Suggests are not resolved for builds and this should +# "just work" for users. + python3-colorlog <!pkg.debputy.no-color>, + python3-colored <!pkg.debputy.no-color>, + python3-debian, + python3-ruamel.yaml, + strip-nondeterminism, +Recommends: python3-argcomplete, +Suggests: hunspell-en-us, + python3-pygls, + python3-lsprotocol, + python3-hunspell, +Provides: dh-sequence-debputy (= ${binary:Version}), + dh-sequence-installdebputy (= ${binary:Version}), + dh-sequence-zz-debputy (= ${binary:Version}), + dh-sequence-zz-debputy-rrr (= ${binary:Version}), + debputy-plugin-gnome, + debputy-plugin-numpy3, + debputy-plugin-perl-openssl, +Multi-Arch: foreign +Description: Manifest style Debian-based package builder (debhelper integration) + Package builder that provides a declarative manifest for building Debian-based + packages. + . + This version integrates with the debhelper sequencer dh and will replace + several of debhelper's tools that are covered by debputy. + . + The debputy package builder aims to reduce cognitive load for the packager + and provide better introspection to packagers, linters and the Debian + janitor. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..7523343 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,49 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ + +Files: * +Copyright: 2022 Niels Thykier <niels@thykier.net> +License: GPL-2+ + +Files: deb_packer.py +Copyright: 2022 Niels Thykier <niels@thykier.net> + 2022 Chris Hofstaedtler <zeha@debian.org> +License: GPL-2+ + +Files: src/debputy/lsp/text_edit.py +Copyright: Copyright 2017-2020 Palantir Technologies, Inc. + Copyright 2021- Python Language Server Contributors. +License: Expat + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Files: tests/* +Copyright: 2022 Niels Thykier <niels@thykier.net> + 2022 Chris Hofstaedtler <zeha@debian.org> +License: GPL-2+ + +Files: dh_debputy +Copyright: 1997-2011 Joey Hess <joeyh@debian.org> + 2015-2022 Niels Thykier <niels@thykier.net> +Comment: It is 95% copy-paste of dh_builddeb +License: GPL-2+ + +Files: src/debputy/lsp/vendoring/_deb822_repro/* +Copyright: + 2021 Niels Thykier <niels@thykier.net> +License: GPL-2+ +Comment: Embedded copy of part of `python-debian` with patches. The patches are pending + review at https://salsa.debian.org/python-debian-team/python-debian/-/merge_requests/130 diff --git a/debian/debputy.manifest b/debian/debputy.manifest new file mode 100644 index 0000000..2f04a6f --- /dev/null +++ b/debian/debputy.manifest @@ -0,0 +1,7 @@ +manifest-version: '0.1' +installations: +- install-docs: + sources: + - GETTING-STARTED-WITH-dh-debputy.md + - MANIFEST-FORMAT.md + - MIGRATING-A-DH-PLUGIN.md diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 0000000..703e45f --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,6 @@ +[DEFAULT] +debian-branch = main + +[dch] +multimaint-merge = true +ignore-regex = (Signed-off|Acked|Tested|Reviewed)-by:|Fix-For:|Fixes: diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..1221eb2 --- /dev/null +++ b/debian/rules @@ -0,0 +1,11 @@ +#!/usr/bin/make -f + +export PERL5LIB=$(CURDIR)/lib +export PATH:=$(CURDIR):$(PATH) +export DEBPUTY_CMD=$(CURDIR)/debputy.sh + +%: + dh $@ --with debputy + +override_dh_debputy: + dh_debputy --plugin self-hosting-plugins/debputy-self-hosting.json diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..89ae9db --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/debian/tests/control b/debian/tests/control new file mode 100644 index 0000000..642bb5c --- /dev/null +++ b/debian/tests/control @@ -0,0 +1,19 @@ +Tests: debputy-py.test +Restrictions: allow-stderr +Depends: + @, + python3-pytest, + python3-lsprotocol, + python3-all, +# debputy loads the library directly for one of the tests. + libcap2, + +Tests: debputy-cli +Restrictions: allow-stderr, superficial +Depends: @ + +Tests: debputy-cli-lint-lsp +Restrictions: allow-stderr, superficial +Depends: + @, + python3-lsprotocol, diff --git a/debian/tests/debputy-cli b/debian/tests/debputy-cli new file mode 100755 index 0000000..cf52f7d --- /dev/null +++ b/debian/tests/debputy-cli @@ -0,0 +1,49 @@ +#!/bin/sh +set -e -u -x + +debputy --no-pager --help +debputy --no-pager check-manifest + +debputy --no-pager plugin --help +debputy --no-pager plugin list --help + +debputy --no-pager plugin list +debputy --no-pager plugin list plugins +debputy --no-pager plugin list ppf +debputy --no-pager plugin list uppf +debputy --no-pager plugin list manifest-variables +debputy --no-pager plugin list manifest-variables --show-all-variables +debputy --no-pager plugin list pmr +debputy --no-pager plugin list automatic-discard-rules +debputy --no-pager plugin list a-d-r + + +debputy --no-pager plugin show ppf changelog +debputy --no-pager plugin show ppf debian/changelog +debputy --no-pager plugin show ppf service + +debputy --no-pager plugin show pmr --help + +echo "Checking installations manifest rules" +for rule in install install-docs install-man discard ; do + debputy --no-pager plugin show pmr "${rule}" +done + +echo "Checking binary package transformations manifest rules" +for rule in TransformationRule::remove move create-symlink path-metadata create-directories \ + run-build-time-tests arch-matches not build-profiles-matches cross-compiling \ + binary-version definitions variables ::definitions definitions::variables ::; do + debputy --no-pager plugin show pmr "${rule}" +done + +for variable in DEB_SOURCE token:TAB DEB_HOST_ARCH DEB_BUILD_ARCH; do + debputy --no-pager plugin show manifest-variables "${variable}" +done + +for rule in python-cache-files la-files backup-files version-control-paths gnu-info-dir-file debian-dir doxygen-cruft-files; do + debputy --no-pager plugin show automatic-discard-rules "${rule}" +done + +debputy --no-pager tool-support annotate-debian-directory +debputy --no-pager tool-support export-reference-data --output-format=json +debputy --no-pager tool-support export-reference-data file-categories diff --git a/debian/tests/debputy-cli-lint-lsp b/debian/tests/debputy-cli-lint-lsp new file mode 100755 index 0000000..c808abe --- /dev/null +++ b/debian/tests/debputy-cli-lint-lsp @@ -0,0 +1,6 @@ +#!/bin/sh +set -e -u -x + +debputy lint --no-linter-exit-code +debputy lsp editor-config emacs +debputy lsp editor-config vim diff --git a/debian/tests/debputy-py.test b/debian/tests/debputy-py.test new file mode 100755 index 0000000..640e84b --- /dev/null +++ b/debian/tests/debputy-py.test @@ -0,0 +1,33 @@ +#!/bin/sh +set -e -u -x +mkdir "${AUTOPKGTEST_TMP}/debian" +cp -r pyproject.toml tests/ "${AUTOPKGTEST_TMP}" +cp -a debian/control "${AUTOPKGTEST_TMP}/debian" +export PYTHONWARNINGS=d +# This is a lie, but the debputy test framework will restrict certain +# plugin loading methods otherwise and that will neuter our ability to +# test the plugin test framework itself. To avoid issues, we do the +# dance below to ensure that py.test will not see the source version +# of debputy (and accordingly cannot use the uninstalled version by +# mistake). +export DEBPUTY_TEST_AGAINST_INSTALLED_PLUGINS=uninstalled +DEBPUTY_PYTHONPATH=/usr/share/dh-debputy +PYTHOHPATH=${PYTHOHPATH:-} +if [ "${PYTHOHPATH:-}" ]; then + PYTHOHPATH="${DEBPUTY_PYTHONPATH}:${PYTHOHPATH}" +else + PYTHOHPATH="${DEBPUTY_PYTHONPATH}" +fi + +export DEBPUTY_REQUIRE_LIBCAP=1 + +cd "${AUTOPKGTEST_TMP}/" + +for py in $(py3versions -s); do + echo "----------------------------------------------" + echo "Testing with $py" + echo "----------------------------------------------" + # text mode file opening is locale dependent so try both ASCII and UTF-8 + PYTHONPATH="${PYTHOHPATH}" LC_ALL=C $py -m pytest + PYTHONPATH="${PYTHOHPATH}" LC_ALL=C.UTF-8 $py -m pytest +done |