Hi. Consider the changelog below. This is an "unfinalised changelog". We use this in dgit.git. It has the benefit of retaining the release name in the intro line, so that it is not possible to accidentally retarget to the wrong release. It also avoids having a (wrong) date which needs to be updated. dpkg-source now rejects this: $ dpkg-buildpackage -uc -us . dpkg-buildpackage: warning: debian/changelog(l5): badly formatted trailer line LINE: -- dpkg-buildpackage: warning: debian/changelog(l7): found start of entry where expected more change data or trailer LINE: dgit (14.11) unstable; urgency=medium dpkg-buildpackage: warning: debian/changelog(l7): found end of file where expected more change data or trailer dpkg-buildpackage: info: source package dgit dpkg-buildpackage: info: source version 14.12~ dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by dpkg-buildpackage: error: cannot parse maintainer email address "" from changelog entry $ echo $? 255 $ It works in trixie with 1.22.21. Ian. dgit (14.12~) unstable; urgency=medium *
Ian Jackson writes ("dpkg-source newly rejects unfinalised changelogs"):
See previous bugs
#843248 dpkg-parsechangelog intolerant of unfinalised changelogs
#849081 dpkg-deb rejects building with unfinalised changeslog
Perhaps there could be a test case ?
(We would have spotted this in our Salsa CI of dgit.git but our CI
uses testing so it has only broken just now.)
Thanks,
Ian.
Sorry about the severity. I had hoped to stop the regression reaching testing but it turns out it's too late for that, so it probably doesn't make sense to set the severity so high. Ian.
Hi! Because this was unintentional, I've prepared a minimal change to solve this for now, which I'll include in 1.23.8. Change attached. But… …while I understand the supposed benefits, this comes with negative drawbacks. One is that the generated .changes does not contain the Changed-By field anymore (a field which is currently not marked as required, but I think that's wrong). It means we cannot enforce failures for invalid syntax for the changelog (as specified both by deb-changelog(5) and Debian Policy, "must" clauses), which means any code that has to deal with changelog files needs to be lenient and accept invalid stuff, complicating the overall ecosystem. Because the final distribution is specified (instead of the convention of using UNRELEASED), such builds could end up being uploaded into a queue or a repo. I think ideally we'd have a key/value designating the final target distribution in cases it's not obvious from the previous entry, something like this made up example (but with a better key name probably): source (10.0-1) UNRELEASED; urgency=medium, targets-dist=unstable For the argument that the date (or even maintainer) information is wrong, I'd say that easily applies as well to the version, and if the changelog is being used to build actual packages in the interim, then there should be something in place. Even though the date could be synthetized at build time (from the current time) and the maintainer could be tried to be extracted from DEBFULLNAME/DEBEMAIL or the current user (or required to be specified with -e), that would still not remove the problem of letting through invalid syntax that everything else then needs to cope with. (Also the maintainer could be set to something that denotes this is a CI build.) I think that looking at the trailer as containing wrong information is the wrong way to look into it (given the above), because if one in addition for example fills in the actual change contents out of git at release/finalization time, then the entire entry is also wrong or incomplete until fully finalized, and any such entry is just an interim placeholder, in which case I'm not seeing what's wrong with having the person (or some placeholder name) and initial date this was initialized as such placeholder information. So I would like to consider how to move into eventually deprecating this (I'd say unusual and problematic) workflow by adding support to the common workflow by improving its metadata tracking (such as the intended dist, or perhaps reverse that and use the actual target dist but mark it as finalized=no, or whatever). Thanks, Guillem
Guillem Jover writes ("Re: Bug#1130119: dpkg-source newly rejects unfinalised changelogs"):
Thanks.
about the design questions properly.
I hope you will forgive a long and rather discursive reply.
I'm going to use the term "unfinalised" for the abstract concept of
changelog, or changelog-derived information, relating to a version
which is stitll in preparation. Ie what in dgit.git is represented by
a changelog entry without a trailer line, and what dch likes to
represent by replacing the target with UNRELEASED.
Unfinalised changelogs have a variety of useful properties: they can
allow builds of pre-release packages to be distinguished (ideally, in
their version number); they can prevent accidental confusion between
unreleased and released software; indeed they can prevent
unintentional release. I think this is common ground.
(In principle some of these purposes might be solved by use of git tag
information, without changing the tree. Some other ecosystems and
upstreams work this way. But git is not available everywhere in
Debian, git tags aren't reliably conveyed by git, and we generally
think that the output of a package build should depend only on the
tree and not on git objects/refs. So I'm going to assume that we are
going to keep representing this information in-tree, in
debian/changelog.)
The unfinalisedness of the changelog starts out as text in the
changelog file. It is then converted by various machinery (mostly in
dpkg-dev) to deb822 metadata in .changes etc.
We have two nearly separate questions to answer.
1. What syntax/format should we use in debian/changelog; and therefore
what information should be present about the unreleased code.
2. What metadata values should be eppear at various stages.
In d/changelog, we *do* want the target suite, because that's a
property of the branch so ought to be changed explicitly.
We want *some* version number information; either "based on <previous
version>" or "prospective <new version>" would do. Otherwise we can't
build sensible binaries from the in-development codebase.
Do we want any changed-by name/address? We *could* name the person
doing the administrative work on the changelog. Often, this is the
person who did the previous release - the new changelog entry is part
of routine post-release work. Sometimes this is done by the first
person to make a post-release change. But in neither case is this
really truthful. Subsequent substantive changes will typically be
done by someone else. ("Personal data shall be accurate".)
Taking a step back: what does changed-by really mean? In a release,
it is always the person deciding upon and preparing the release.
(That might be different to a sponsor who signs it.) Ie, the person
primarily responsible for the technical judgement that this code
should be released now. That's how we use the changelog trailer in a
released version and it's how all the downstream tooling interprets
it. It's *the human who made the release*.
An unreleased version *doesn't have a releaser*! No human has made
the release because it's not a release. Putting someone's name in
there to satisfy some tooling that demands that all code it works with
must have "someone who released it" is simply wrong. The code *isn't
released* and programs that expects to be able to work with unreleased
software should not be demanding that some dummy human name is
inserted as the notional releaser.
Likewise, any date we put in the changelog is largely meaningless.
It certainly quickly gets out of date, in most workflows. At least
there aren't data protection problems with including a wrong date, so
we could do that if we felt it convenient.
So I think an unfinalised debian/changelog file:
- should *not* contain the information that is normally in tthe trailer;
- *should* contain the target suite.
That is precisely what the traditional (Emacs mode, pre-dch)
unfinalised changelog format contains.
Now on to metadata (typically, in deb822 form). I think we actually
have two kinds of systems that need to deal with changelog metadata.
1. Things that build source and binary packages, including local test
builds, Salsa CI, and so on; 2. software maintaining a repository of
releases (ftp.debian.org, dgit-repos, tag2upload).
For (1) we need to be able to deal with unreleased source code. We
need to be able to build it, and lint it, and basically do everything
short of actually publishing it as part of a release. (More
sophisticated CI systems might want to "fake up" a private release,
but that's ratther a different questiton and isn't the usual case.)
For (2), archive software we must reject them. Existing software does
this by rejecting UNRELEASED but also by rejecting changelogs that
lack either a releaser (changed-by) or release date.
I think we can square this circle if we make dpkg-parsechangelog more
explicitly aware of the concept of an unfinalised changelog.
Let me a sketch a possibility. I haven't thought through all the
details, and this is just some spitballing. Anyway, my suggestion:
For a changelog with an empty trailer line, dpkg-parsechangelog would:
* Use the current date as the release date.
* Use the current version but add `~0unreleased~`
unless the version already ends in `~`.
* Use the specified target suite but add `-UNRELEASED`.
All existing downstream tooling would handle this very similarly to
the current UNRELEASED approach. Most downstream tooling would not
need any special knowledge. Even archive tooling would DTRT because
there is no such target suite as foo-UNRELEASED.
Local test binaries would end up with ~unreleased~ in their versions,
distinguishing them nicely from official binaries being uploaded (or rebuilds
of released source code).
Build reproducibility tests on unreleased code would need to set
SOURCE_DATE_EPOCH because the tree would no longer contain a dummy
date. If it has a git tree, it could be set to the git committer
date. (dpkg-parsechangelog could perhaps honour an environment
variable to do this or something).
We could eventually maybe change dch.
I think this kind of approach is consistent wih dpkg-parsechangelog's
notion that the changelog format is for humans and can be interpreted
by software to do the Right Thing. (And even, that some humans might
have a different format, although I'm not sure that support still
works.)
I also don't think this is distro-specific. The changes I propose to
the version and upload target will be widely applicable.
If you don't like the idea of dpkg-parsechangelog modifying its output
so much, an approach which would allow people to have correct data in
their d/changelog, but without making visible changes to downstream
tooling would be: if there is no trailer, use the current date; change
the target to UNRELEASED; and use fixed dummy values for the
changed-by. This would amount ot emulating the UNRELEASED convention
in dpkg-parsechangelog.
I think this is worse because it *widens* the spread of wrong, dummy,
data.
I think I should write some specific responses.
As I note above, the changed-by information in an unreleased package
is meaningless (and therefore wrong). We should not use real personal
data for such a thing.
Indeed the UNRELEASED convention, which is the currently popular
approach to unfinalised changelogs, requires feeding *known invalid*
data to downstream tooling. This is a hazaard, obviously. Software
that doesn't know that UNRELEASED means "the other data in this
changelog entry may be a lie" can do the wrong thing.
I think this analysis demonstrates that it's bad to have picky tooling
that demands complete release information even for possibly unreleased
packages. A the root is: tools that might need to handle unreleased
packages shouldn't demand a declaration that the package is relesed.
I don't think this is invalid syntax. It is meaningful and has been
valid (and generated by the Emacs mode for Debian changelogs)
literally forever. If some of the documentation doesn't mention this
syntax, we can update the docs.
(As an aside, we do probably want changelog parsing to be lenient at
least for historical data including both historical entries and old
source packages.)
In fact, existing upload tools do reject this situation already even
without my proposal for adjusting the target suite, because they
insist on a changed-by and a date.
Versions are often prospective IME.
In our case, we adjust the version too. Notice the ~ in the version
number. Ideally tooling would add some ~ automatically. See above.
Well, if we're into redesigning this, I would like to suggest that the
best syntax for an unfinalised changelog is in fact the existing empty
trailer syntax as generated by Emacs debian-changelog-mode, for the
reasons I've explained.
Thanks for your attenttion.
Ian.
Hi! Bug #1130119 in package dpkg reported by you has been fixed in the dpkg/dpkg.git Git repository. You can see the changelog below, and you can check the diff of the fix at: https://git.dpkg.org/cgit/dpkg/dpkg.git/diff/?id=839df8f92 --- scripts: Do not fail on empty Maintainer field from parsed changelog While this is invalid syntax (according to the documentation), we have accepted these kinds of entries up to now, and this was an unintentional change. Modify the code to handle them for now, while there's discussion on how to improve the notion of unfinalized changelog entries. Fixes: commit 37cf54ce95bf274278b2eeb47a49a4b3b3840612 Closes: #1130119
Ian Jackson writes ("dpkg-source newly rejects unfinalised changelogs"):
This bug was apparently fixed in git, but could you please make an
upload?
Ever since this regression in dpkg-source we have been using a
degraded workflow in src:dgit. That degraded workflow just resulted
in an unintended upload, which would have been prevented if it had
been possible for us to run CI on branches with unfinalised
changelogs.
Ian.
I've pending an upload for a bit, but it's been currently blocked by a tedious ongoing rework of error strings and --help output messages, which invalidate many translations, so I'd rather not make translators start on strings that would then immediately change again. I'll try to push through and upload very soon. Otherwise I'd mail all current translators to let them know to hold off and upload as-is, because this is holding off other important changes that are in git or to be pushed. Regards, Guillem
We believe that the bug you reported is fixed in the latest version of
dpkg, which is due to be installed in the Debian FTP archive.
A summary of the changes between this version and the previous one is
attached.
Thank you for reporting the bug, which will now be closed. If you
have further comments please address them to 1130119@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
pp.
Guillem Jover <guillem@debian.org> (supplier of updated dpkg package)
(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
Format: 1.8
Date: Mon, 07 Sep 2026 23:55:19 +0200
Source: dpkg
Architecture: source
Version: 1.23.8
Distribution: unstable
Urgency: medium
Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
Changed-By: Guillem Jover <guillem@debian.org>
Closes: 931094 1054552 1088758 1099097 1126502 1127394 1130119 1130536 1130980 1131211 1131556 1132051 1132541 1132542 1133272 1137545 1139332 1139334 1140613 1140788 1142100 1144781 1145181 1147121
Changes:
dpkg (1.23.8) unstable; urgency=medium
.
[ Guillem Jover ]
* dpkg-maintscript-helper: Move version comparison after its argument check.
* dpkg: Translate --assert feature description on failure message.
* dpkg-gencontrol: Remove and warn about Multi-Arch field on udeb packages.
See #1136160.
* dpkg-buildpackage: Check that the OpenPGP key ID has a known length.
* dpkg-buildpackage: Deprecate --sign-key as an alias for --sign-keyid.
* dpkg-deb: Do not fail on non-seekable archives. Closes: #1132051
* dpkg: Do not filter not-installed packages from --get-selections.
* dpkg-buildpackage: Fix syserr() function name in call site.
* dpkg-buildpackage: Remove temporary *.dsc.asc file before and after
signing. Closes: #1140788
* start-stop-daemon: Add new --pidof command to print the PIDs found.
See #810018.
* start-stop-daemon: Force line buffering for stdout in --start.
Closes: #1099097
* dpkg-buildpackage: Parametrize default and supported source compressors.
Prompted by John Scott <jscott@posteo.net>.
* dpkg-source: Mark --help dynamic section strings for translation.
* dpkg-name: Fix --subdir with a non-existent directory argument.
* dpkg-query: Determine the minimum --list column width from the titles.
* dpkg-query: Make --list title separator fill up to the terminal width.
* dpkg-query: Improve --list column padding.
* dpkg-name: Add support for non-free-firmware package section.
* Fix memory leaks on file_slurp() failures for ENOENT.
* dpkg: Fix memory leaks for varbufs during conffile upgrade handling.
* dpkg: Deprecate --yet-to-unpack.
* dpkg: Simplify --yet-to-unpack after deprecation.
* dpkg-scanpackages: Parametrize command names for system errors messages.
* dpkg-buildpackage: Remove obsolete no-op -s(gpg|pgp) option.
* Output messages:
- Remove anachronistic two space sentence separation in output messages.
- Avoid "please" and "thanks" in output messages.
- Avoid "you" or "your" on output messages unless prompting for something.
- dpkg: Switch --assert output message into a notice() and hint().
- dpkg: Say "package distributor" instead of "package maintainer" for
conffiles.
- dpkg: Clarify that the modified conffile has been done locally.
- dselect: Decapitalize warning and error messages.
- dselect: Remove trailing newline from error message.
- Standardize error/warning messages on "cannot ...".
- Improve "unexpected end of file" error messages.
- Avoid "the" when unnecessary in error output messages.
- start-stop-daemon: Reword pselect() error message.
- Use "reap" instead of "wait" in subprocess error messages.
- Improve subprocess error messages.
- Use "refresh window" instead of "doupdate" in output message.
- Use "set/unset buffering for" for setvbuf error messages.
- Use "execute" instead of "exec" in output messages.
- Use "invalid syntax ..." instead of "syntax error" in error messages.
- Use "symbolic link" instead of "symlink"/"link" in output messages.
- Use "create directory" instead of "mkdir" in output messages.
- Use "change directory" instead of "chdir" in output messages.
- Use "change root directory" instead of "chroot" in output messages.
- Use "set ownership" instead of "chown" in output messages.
- Use "set environment" instead of "setenv" in output messages.
- Use "open directory" instead of "opendir"/"read" in output messages.
- Use "scan directory" for scandir() error messages.
- Use "get current time" instead of the function name in output messages.
- Use "create child process" instead of "fork" in output messages.
- Use "sync" instead of "fsync" in output messages.
- Use "initialize user groups" instead of "initgroups()" in output message.
- Use "get input character" for prompt errors in output messages.
- Use "libraries" instead of "libs" in output messages.
- Use "parse file" instead of "eval" in output messages.
- Improve file descriptor related output messages.
- Use "press" instead of "hit"/"use" for keyboard keys in output messages.
- dpkg-gencontrol: Clarify package type in warning message.
- Use "substvars file" instead of "varlist file" in error message.
- Say "<standard input|output|error>" instead of "stdin|stdout|stderr".
- dpkg-source: Separate supported compressors in --help with a comma and
space.
- dpkg-deb: Print directory pathname instead of nothing or "directory".
- Avoid using "my" in output messages.
- Use present form for "contains" in error messages.
- Clarify status-fd error message.
- Clarify very confusing "un-catch signal" error message.
- Clarify error message about removing directory with 'rm -rf'.
- Clarify error message about checking a file within a writable directory.
- Clarify error message about not being able to remove a directory.
- Do not print filename as error condition in error message.
- dpkg-genchanges: Add --build aliases for short options to --help output.
- Remove spaces before some repetition markers ("...") in --help output.
- dpkg: Refactor archive-spec and package-spec for --help commands.
- start-stop-daemon: Reword match options to say "match" instead of
"check".
- start-stop-daemon: Use "change root" instead of "chroot" in --help
output.
- dpkg-shlibdeps: Make -e description in --help output stand on its own.
- dpkg-gencontrol: Remove deprecated -is/-ip/-isp/-ips from --help output.
- Capitalize all option descriptions in --help output. Closes: #1088758
- dpkg: Split --no-act aliases into their own lines in --help output.
Closes: #1137545
- Standardize command line option help messages.
- Surround replaceable arguments with angle brackets in --help output.
- Split description for --no-<opt> from --<opt> in --help output.
- Use print_option() to print each individual option in --help output.
- dpkg-scansources: Remove reference to man page from --help output.
- Remove spurious blank lines from program's --help output.
- Do not mark «|» in bold in the option specification on --help output.
- Add missing full stop to all option descriptions in --help output.
- Improve clarity for argument specifiers in --help output.
- Do not mark «()» in bold in option specification on --help output.
- dpkg-shlibdeps: Merge <executable> specifications in --help usage output.
- Use «Alias for <option>.» instead of «Ditto.» in --help output.
- Use "Enter" or "<Enter>" to refer to the keyboard key name.
- Use "<Space>" to refer to the keyboard key name.
- dselect: Remove superfluous "remember: " in help screen.
- dselect: Replace a stray printf() into debug() when initializing color
pairs.
- dselect: Say "color initialization" instead of "color allocation".
- dselect: Use Ctrl+key instead of ^key for keyboard shortcuts.
- Improve memory allocation error messages (round two).
- dpkg-source: Change "represent change" error to plural.
- dpkg-buildpackage: Fix --help output default value for --sign-command.
- dpkg-buildpackage: Use "<rules>" instead of "debian/rules" in --help
output.
- dpkg-buildpackage: Use long option names in --help output references.
- Improve options sorting in --help output.
- Use "<package-build-dir>/DEBIAN/" instead o ".../DEBIAN/" in --help
output.
- Use "<override-file>.src" instead of describing the value in --help
output.
- Add support for defaults and environment variable printing in --help
output.
- Remove mentions of options with no default value from --help output.
- Move default value from option descriptions to its own --help output
lines.
- Print missing default values and environment variables in --help output.
- Improve and unify option descriptions in --help output.
- dpkg-query: Clarify Status header line in --list output message.
Prompted by Adeodato Simó <dato@net.com.org.es>.
* Portability:
- dpkg: Use utimensat() if available and in preference of lutimes/utimes.
* Perl modules:
- Dpkg::Version: Add prototypes for sort functions.
Analysis by Oron Peled <Oron.Peled@harmonicinc.com>. Closes: #1131556
- Dpkg::Deps: Add a prototype to deps_compare().
- Dpkg::Source::Patch: Remove check for patching via a symlink.
Reported by Jonathan Dowland <jmtd@debian.org>.
See https://lists.debian.org/debian-devel/2026/03/msg00250.html.
- Dpkg::Source::Patch: Improve unrepresentable change error to hint git
usage.
- Dpkg::Compression: Move gzip --rsyncable handling to the get cmdline
function.
- Dpkg::Vendor::PureOS: Use .pgp keyrings instead of .gpg ones.
See
https://source.puri.sm/pureos/core/pureos-archive-keyring/-/merge_requests/1.
- Dpkg::Changelog: Rename variables from $c to $chlog or $ctrl.
- Dpkg::Source::Package: Switch CURRENT_MINOR_VERSION from scalar to sub.
- Dpkg::Source::Patch: Refactor _gen_hires_diff_label() function.
- Dpkg::Checksums: Use -s _ instead of the direct result from stat.
- Dpkg::Source::Patch: Use Time::HiRes::stat only when needed.
- Dpkg::IPC: Add missing verbs to error messages.
- Dselect::Method::Ftp: Load Time::Local with «use» instead of
«require».
- Dselect::Method::Ftp: Switch from deprecated timegm() to timegm_posix().
- Dpkg::Compression::FileHandle: Switch set_filename() warning into croak.
- Dpkg::Arch: Use subprocerr() instead of syserr() for subprocess error
handling.
- Dpkg::Vendor::Debian: Add space after = operator.
- Dpkg::Email::Address: Reject all control characters in email addresses.
- Dpkg::Email::Address: Reject commas in the email local and domain parts.
- Dpkg::BuildInfo: Allow dpkg-deb compressor variables.
Thanks to Serge Schneider <serge@raspberrypi.com>. Closes: #1140613
- Dpkg::BuildProfiles: Move exclamation mark into restriction list regex.
- Dpkg::BuildProfiles: Move regex variables at the top of the file.
- Dpkg::BuildProfiles: Validate profile names on get and set.
- Dpkg::IPC: Fix error message to refer to "stderr" instead of "stdout".
- Dselect::Method::Ftp: Clarify that LIST is an FTP command in error
message.
- Dpkg::Shlibs::Symbol: Use "match" instead of "catch" in error message.
- Dpkg::Color: Refactor color handling into this new module.
- Dpkg::Getopt: Refactor format_option_parts() from dpkg-source
print_option().
- Dpkg::Getopt: Add option formatting and printing functions.
- Dpkg::Getopt: Add new print_version() function.
- Dpkg::Getopt: Add new parse_option_dir().
- Dpkg::OpenPGP::Backend::SOP: Add hop as an alternative SOP
implementation.
- Dpkg::Source::Package::V3::Git: Use git --end-of-options before URLs.
Prompted by Adeodato Simó <dato@net.com.org.es>.
See https://nesbitt.io/2026/07/21/end-of-options.html.
- Dpkg::Source::Package: Move full stop from option formatter to strings.
- Dselect::Method::Config: Do not use Perl 5.38 //= in sub signature.
- Dpkg::File: Change file_touch() to open for appending.
- Dpkg::File: Fix file_touch() to update existing file timestamps.
- Dpkg::Version: Fix and improve is_native() deprecation warning.
Closes: #1145181
- Dpkg::Gettext: Fix C_() context string handling on missing translations.
- Dpkg::Gettext: Export C_() by default.
* Make fragments:
- Add supported since versions to variables.
* Shell library:
- Add an ANSI reset escape comment after the color constants.
- Add constants for all common ANSI character color attributes.
* Shell completion:
- Import completion files from bash-completion.
See https://github.com/scop/bash-completion/pull/1639.
- Split completions for dpkg-deb and dpkg-query.
- Sort and group dpkg completion options.
- Switch word lists into bash arrays.
- Fix dpkg-source -F argument completion.
- Fix completion for dselect --debug.
- Use update-alternatives --get-selections instead of accessing the
admindir.
- Rely only on _comp_compgen_help for update-alternatives --help parsing.
- Improve dpkg status parsing to be more robust.
- Remove unsupported -W and -E completion for dpkg-source.
- Add missing fields to dpkg-source completion.
- Add handling for missing options.
- Add new start-stop-daemon bash completion.
* Documentation:
- man: Clarify that git-style patches can represent changes that GNU diff
cannot.
- man: Itemize attribute keywords in deb-src-files(5).
- man: Document that getconf(1) must not be used for LFS support.
Closes: #1133272
- doc: Refer to deb822 instead of RFC822.
- man: Remove trailing full stops from diagnostic items.
- man: Fix markup for C<> and B<> to include the relevant text.
- man: Document the full ar archive magic value.
- man: Use semantic line breaks (must requirements, round two).
- doc: Remove anachronistic two space sentence separation.
- doc: Avoid "please" and "thanks" in man pages and code comments.
- doc: Fix formatting for version introducing features.
- man: Add supported since version information for Rules-Requires-Root
field.
- man: Split dpkg-deb --[no-]uniform-compression description into two
items.
- man: Remove "or" from end of =item in FILES section.
- man: Move build flags enabled/disabled state on its own paragraph.
- man: Improve supported since version information.
- man: Add new deb-email(7) man page. Closes: #1126502
- man: Move the #CURVER# metavariable from =head2 to =head3.
- man: Document where to ship shlibs and symbols files.
See #1009300.
- man: Document that DPKG_PAGER only overrides PAGER when non-empty.
Closes: #931094
- man: Document that using "cat" in DPKG_PAGER or PAGER disables it.
See #931094.
- man: Clarify guarantees for non-seekable inputs to dpkg-deb.
- man: Clarify that build profile names do not include exclamation marks.
- man: Add supported since version for some dpkg-buildpackage long options.
- man: Mark in bold dpkg-shlibdeps --warning values.
- man: Mark in bold the literal commas needed by option arguments.
- man: Split multiple long option aliases into their own items.
- man: Remove no longer relevant SEE ALSO references for dpkg-name(1).
- doc: Update list of optional SOP build dependencies.
- doc: Remove usage of condescending wording "obviously".
- doc: Remove usage of condescending wording "of course".
- doc: Remove usage of condescending wording "clearly".
- doc: Remove usage of weasel wording "simply".
- doc: Remove usage of weasel wording "in fact".
- doc: Remove usage of weasel wording "the fact that".
- doc: Remove usage of weasel wording "basically".
- doc: Remove usage of weasel wording "in order".
- doc: Improve feature-removal-schedule machine readable annotation format.
* Code internals:
- scripts: Do not fail on empty Maintainer field from parsed changelog.
Closes: #1130119
- src, lib: Reduce variables scope.
- libdpkg: Update suppressions for cppcheck 2.20.0.
- shell: Add missing ;; for switch cases.
- shell: Remove unneeded trailing «;» and «\».
- shell: Reformat shell scripts.
- perl: Improve POD for functions.
- libdpkg: Rename dpkg_ar_member_get_size() to dpkg_ar_member_parse_size().
- update-alternatives: Add an assert on value returned by
alternative_map_find().
- libcompat: Remove spurious space in #if conditional.
- libcompat: Add countof() support.
- Use countof() instead of array_count().
- Rename scandir() filter functions.
- libdpkg: Make the pre-allocated update file size be a power of two.
- perl: Switch to use File::stat when we need to access its members.
- scripts: Use S_IMODE to get the mode bits from st_mode.
- libdpkg: Spell out standard descriptor names in error message.
- libdpkg: On memory allocation failures print the requested size.
- libdpkg: Unify abort error format string with fatal error format string.
- libdpkg: Clarify and switch "outside error context" error into
internerr().
- libdpkg: Fix tar long name/link entry parsing to avoid truncation.
Reported by Tristan <TristanInSec@gmail.com>.
- libdpkg: Do not allow tar long name/link entries longer than SSIZE_MAX.
Reported by Tristan <TristanInSec@gmail.com>.
- scripts: Make license grant text internally consistent.
- Collapse consecutive spaces into a single space in code.
- libdpkg: Add missing blank after comma.
- dselect: Move newline at end of string literal paragraph on its own line.
- dselect: Use subprocerr() in methods instead of open-coding it.
- dselect: Rework methods to use Dpkg::ErrorHandling for reporting.
- dselect: Refactor screen pad and window names into an untranslated
argument.
- libdpkg: Rework compression error messages.
- scripts: Mark strings for translation.
- dpkg-buildpackage: Refactor signer key ID length computation.
- dselect: Add a space after operator keyword.
- start-stop-daemon: Refactor exit_status() function.
- start-stop-daemon: Switch action handling in main() from cascading
if/else to switch.
- start-stop-daemon: Flush stdout before fork() to avoid any potential
output duplication.
- update-alternatives, libdpkg: Force line instead of no buffering for
stdout even on a tty.
- dselect: Add TRANSLATORS comment to help describe what the string is
about.
- libdpkg: Add macros for all common ANSI character color attributes.
- libdpkg: Add new str_vfmt() function.
- libdpkg, utils: Add new print_option_sep() function.
- dpkg-source: Call print_option() once instead of once per option section.
- scripts: Switch to use print_version() from Dpkg::Getopt.
- Switch to use an explicit print_option_sep() instead of "\n".
- scripts: Represent --help output strings as line literals.
- libdpkg, utils: Add new print_option() function.
- libdpkg: Mark «=» in bold in the option specification on --help output.
- scripts: Parse directory options with parse_option_dir().
See #1143871.
- libdpkg: Add new term_get_width() function.
- dpkg-name: Refactor supported package sections into an array.
- Fix warnings due to new libc const-preserving string functions.
- libdpkg: Nest file_slurp() ENOENT check inside if conditional.
- libdpkg: Reset the ar size to 0 on non-seekable file descriptors.
- libdpkg: Change must_alloc() to must_alloc_string().
- dpkg: Change --command-fd file descriptor to an int.
- libdpkg: Add log_set_file() function instead of exposing log_file
variable.
- libdpkg: Add push/pop_fatal_errors_section() instead of onerr_abort
variable.
- dpkg: Add new clear_cleanup_state() instead of exposing cleanup
variables.
- libdpkg: Do not skip varbuf allocations on additions with zero sizes.
Reported by Elias Hasas (zer0d4y5) <eliash977@gmail.com> (empty first
field). Closes: #1147121
* Build system:
- Update .editorconfig shell directives for shfmt.
- Remove -Wpre-c2x-compat flag.
- Rename c2x warning options to use c23 instead.
- Add new gcc-15 warnings.
- Add --tags to «git describe».
- Add generated configure file artifacts to .gitignore.
- Add max_line_length to .editorconfig.
- Set TAR_OPTIONS to avoid leaking maintainer information on dist.
- Move max_line_length from the catch-all glob to each section.
- Add AC_SYS_YEAR2038 support to configure. Closes: #1054552
- Add support for bash scripts in the source tree.
- Quote shell variables that might contain spaces in TAP test runner.
- Improve gen-changelog section filtering and grouping.
* Packaging:
- Bump Standards-Version to 4.7.4 (no changes needed).
- Remove build dependency on debhelper (>= 13.10).
- Remove obsolete Breaks satisfied since Debian oldstable or stable.
- Remove obsolete versioned dependencies on essential packages.
- Remove trailing spaces from conffiles.
- Do not use unbalanced quotes in dpkg/dselect conffiles.
- Improve description for dpkg and dselect config files.
- Ship an /etc/dpkg/buildpackage.conf file in dpkg-dev.
- Remove package prefix from lintian-overrides.
* Test suite:
- Improve unit test description message to include directory.
- Remove TAR_OPTIONS from environment before calling $Dpkg::PROGTAR.
- Update cppcheck suppressions for 2.21.0.
- Make mknod(1) tests conditional and disabled by default.
Analysis by Arnaud Rebillout <arnaudr@debian.org>. Closes: #1142100,
#1144781
* Localization:
- Add Ukrainian translations.
Thanks to Andriy Pysyk <ep.nestor@gmail.com>. Closes: #1130980
- Update .gitignore files for new gettext.
- Update Dutch translations.
Thanks to Frans Spiesschaert <Frans.Spiesschaert@yucom.be>.
Closes: #1131211, #1132541, #1132542
- Update Portuguese translations.
Thanks to Américo Monteiro <a_monteiro@gmx.com>. Closes: #1127394
- Update Romanian dselect translation.
Thanks to Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>.
Closes: #1139332
- Update Romanian programs translation.
Thanks to Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>.
Closes: #1139334
- Update Swedish translations.
Thanks to Peter Krefting <peter@softwolves.pp.se>. Closes: #1130536
Checksums-Sha1:
d612b9acfdf6b0b752f63c31a696027d25c998bd 3506 dpkg_1.23.8.dsc
8e91f49d46142c1e21fc73b745b27823d782bdd9 5767188 dpkg_1.23.8.tar.xz
5e6ef6e9e6c79a32788a0b3c486f5528f9fdd232 7911 dpkg_1.23.8_amd64.buildinfo
Checksums-Sha256:
a31ec22dec05ca4934e0373b34abf5b80723169c127b3207d0bd8e08e6f42e92 3506 dpkg_1.23.8.dsc
cc65ca0928a841001feab4ffe24a2a80b250d28e86490d794e5d1ba8346131a5 5767188 dpkg_1.23.8.tar.xz
5623be26d3c2ca54d1b6aea91e405e2c2323456dd04cbd35ff44f1f6c0f42322 7911 dpkg_1.23.8_amd64.buildinfo
Files:
6dedd3740a33a40db14cc8d8121e9574 3506 admin required dpkg_1.23.8.dsc
b613cb8a36de75c4e37ba639ce68fa62 5767188 admin required dpkg_1.23.8.tar.xz
032b7ccec2a3ba94d543da37e3929284 7911 admin required dpkg_1.23.8_amd64.buildinfo
-----BEGIN PGP SIGNATURE-----
wsG7BAEBCgBvBYJqnzbKCRC5cr8+pK5Xo0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u
cy5zZXF1b2lhLXBncC5vcmelFahEDg2dzse3+TY4V5ZnhkLhiDAlAPFFeQ8fhJqJ
rxYhBE8+dPQ2BQwQ9WlldLlyvz6krlejAADYuw//QkEE8jfK6x9AVIAFoDgpRFOs
cJCa0oypL3Rkz1qv2/ws2TBO0Y562r3O5vORB5BCZHzNNIh5ElZkHLwxL11+eO82
pMS4KGls4I9lC73/s9tyWNGLaISZru8z+Cqm7oahgTHTuiywgU2D+fuC4YfLxqdO
VkO7sz6zyflUJwnAzNHnCwq+SVvMcrjbX5/JOt9NjzmjNVAuczq7EMmScDe2uEoc
JbPPu01fWOlkLJvqkVnLg0RcPnYSWhEUpfiyAQYPO8s44zSjopIyypEPgpbFFH5v
189ffIKiLyKlYWNNaEdYDhp2iGF/V/PDEAv65Nf6pOHy4ioYtYtWxgIyeTPspg5C
jlUjGGq8zW3s39uEfHHhYYpBbQjSeWcpN0+0K7ZoDGGahA+oai44PHLlRiwwAwoj
qmsUl6zQHY5x/R0ETI1tQOeFg33N9sImBCL/izyrWkjFPk8QnXYJvTF6w7UCBurM
umre2cC7zNtFyVlZGvlPUflxiFOwMislVXHchf8+5ZKpXJehvOeNIKNSkJX4JtvB
8onyPw6ihrcje0jAeWBg5CBtd/PWnPX8ierHeUkdtFT2em348lKBs/9nbB81RJ/5
4ax0WGAWLVNzIlTQSUVxlvYNtN/K5EQvxP14Yh6+U83m9AYX0oU5ilSckBNYV20a
HPbsciQFNtM2Cv8RVt8=
=Hi23
-----END PGP SIGNATURE-----