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.<PKGNAME>.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-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-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 subst vars.
      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-debuty` (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.
  * migraition: 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.

  * debuty plugin API: Important changes:
    - Detached paths are now less violatile. 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 dch
  * 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
    accidentially merged into the condition line, which could
    cause syntax errors if the fixed line did not have
    indentation.
  * Detect and register python byte compiliation for public
    dist-packages dirs and default "package private" dirs
    similar to `dh_python3`.  This is done because `debptuy`
    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
