debchange
DEBCHANGE(1) General Commands Manual DEBCHANGE(1)
NAME
debchange - Tool for maintenance of the debian/changelog file in a
source package
SYNOPSIS
debchange [options] [text ...]
dch [options] [text ...]
DESCRIPTION
debchange or its alias dch will add a new comment line to the Debian
changelog in the current source tree. This command must be run from
within that tree. If the text of the change is given on the command
line, debchange will run in batch mode and simply add the text, with
line breaks as necessary, at the appropriate place in debian/changelog
(or the changelog specified by options, as described below). If the
text given on the command line is a null string, debchange will run in
batch mode without adding any text. If the text given on the command
line is a space string, debchange will run in batch mode and add a
blank changelog entry. If no text is specified then debchange will run
the editor as determined by sensible-editor for you to edit the file.
(The environment variables VISUAL and EDITOR are used in this order to
determine which editor to use.) Editors which understand the +n option
for starting the editing on a specified line will use this to move to
the correct line of the file for editing. If the editor is quit with-
out modifying the temporary file, debchange will exit without touching
the existing changelog. Note that the changelog is assumed to be en-
coded with the UTF-8 encoding. If it is not, problems may occur.
Please see the iconv(1) manpage to find out how to convert changelogs
from legacy encodings. Finally, a changelog or NEWS file can be cre-
ated from scratch using the --create option described below.
debchange also supports automatically producing bug-closing changelog
entries, using the --closes option. This will usually query the BTS,
the Debian Bug Tracking System (see https://bugs.debian.org/) to deter-
mine the title of the bug and the package in which it occurs. This be-
haviour can be stopped by giving a --noquery option or by setting the
configuration variable DEBCHANGE_QUERY_BTS to no, as described below.
In either case, the editor (as described above) will always be invoked
to give an opportunity to modify the entries, and the changelog will be
accepted whether or not modifications are made. An extra changelog en-
try can be given on the command line in addition to the closes entries.
At most one of --append, --increment, --edit, --release, and --newver-
sion may be specified as listed below. If no options are specified, de-
bchange will use heuristics to guess whether or not the package has
been successfully released, and behave as if --increment had been spec-
ified if the package has been released, or otherwise as if --append has
been specified.
Two different sets of heuristics can be used, as controlled by the
--release-heuristic option or the DEBCHANGE_RELEASE_HEURISTIC configu-
ration variable. The default changelog heuristic assumes the package
has been released unless its changelog contains UNRELEASED in the dis-
tribution field. If this heuristic is enabled then the distribution
will default to UNRELEASED in new changelog entries, and the --maint-
trailer option described below will be automatically enabled. This can
be useful if a package can be released by different maintainers, or if
you do not keep the upload logs. The alternate log heuristic determines
if a package has been released by looking for an appropriate dupload(1)
or dput(1) log file in the parent directory. A warning will be issued
if the log file is found but a successful upload is not recorded. This
may be because the previous upload was performed with a version of du-
pload prior to 2.1 or because the upload failed.
If either --increment or --newversion is used, the name and email for
the new version will be determined as follows. If the environment
variable DEBFULLNAME is set, this will be used for the maintainer full
name; if not, then NAME will be checked. If the environment variable
DEBEMAIL is set, this will be used for the email address. If this
variable has the form "name <email>", then the maintainer name will
also be taken from here if neither DEBFULLNAME nor NAME is set. If
this variable is not set, the same test is performed on the environment
variable EMAIL. Next, if the full name has still not been determined,
then use getpwuid(3) to determine the name from the password file. If
this fails, use the previous changelog entry. For the email address,
if it has not been set from DEBEMAIL or EMAIL, then look in /etc/mail-
name, then attempt to build it from the username and FQDN, otherwise
use the email address in the previous changelog entry. In other words,
it's a good idea to set DEBEMAIL and DEBFULLNAME when using this
script.
Support is included for changelogs that record changes by multiple co-
maintainers of a package. If an entry is appended to the current ver-
sion's entries, and the maintainer is different from the maintainer who
is listed as having done the previous entries, then lines will be added
to the changelog to tell which maintainers made which changes. Cur-
rently only one of the several such styles of recording this informa-
tion is supported, in which the name of the maintainer who made a set
of changes appears on a line before the changes, inside square brack-
ets. This can be switched on and off using the --[no]multimaint option
or the DEBCHANGE_MULTIMAINT configuration file option; the default is
to enable it. Note that if an entry has already been marked in this
way, then this option will be silently ignored.
If the directory name of the source tree has the form package-version,
then debchange will also attempt to rename it if the (upstream) version
number changes. This can be prevented by using the --preserve command
line or configuration file option as described below.
If --force-bad-version or --allow-lower-version is used, debchange will
not stop if the new version is less than the current one. This is es-
pecially useful while doing backports.
Directory name checking
In common with several other scripts in the devscripts package, de-
bchange will climb the directory tree until it finds a debian/changelog
file. As a safeguard against stray files causing potential problems,
it will examine the name of the parent directory once it finds the de-
bian/changelog file, and check that the directory name corresponds to
the package name. Precisely how it does this is controlled by two con-
figuration file variables DEVSCRIPTS_CHECK_DIRNAME_LEVEL and DE-
VSCRIPTS_CHECK_DIRNAME_REGEX, and their corresponding command-line op-
tions --check-dirname-level and --check-dirname-regex.
DEVSCRIPTS_CHECK_DIRNAME_LEVEL can take the following values:
0 Never check the directory name.
1 Only check the directory name if we have had to change directory
in our search for debian/changelog. This is the default behav-
iour.
2 Always check the directory name.
The directory name is checked by testing whether the current directory
name (as determined by pwd(1)) matches the regex given by the configu-
ration file option DEVSCRIPTS_CHECK_DIRNAME_REGEX or by the command
line option --check-dirname-regex regex. Here regex is a Perl regex
(see perlre(3perl)), which will be anchored at the beginning and the
end. If regex contains a '/', then it must match the full directory
path. If not, then it must match the full directory name. If regex
contains the string 'PACKAGE', this will be replaced by the source
package name, as determined from the changelog. The default value for
the regex is: 'PACKAGE(-.+)?', thus matching directory names such as
PACKAGE and PACKAGE-version.
The default changelog to be edited is debian/changelog; however, this
can be changed using the --changelog or --news options or the CHANGELOG
environment variable, as described below.
OPTIONS
--append, -a
Add a new changelog entry at the end of the current version's
entries.
--increment, -i
Increment either the final component of the Debian release num-
ber or, if this is a native Debian package, the version number.
On Ubuntu or Tanglu, this will also change the suffix from
buildX to ubuntu1/tanglu1. Use -R, --rebuild for a no change
rebuild increment. This creates a new section at the beginning
of the changelog with appropriate headers and footers. Also, if
this is a new version of a native Debian package, the directory
name is changed to reflect this. If DEBCHANGE_RELEASE_HEURISTIC
is changelog (default) and the current release is UNRELEASED,
this will only change the version of the current changelog
stanza. Otherwise, this will create a new changelog stanza with
the new version.
--newversion version, -v version
This specifies the version number (including the Debian release
part) explicitly and behaves as the --increment option in other
respects. It will also change the directory name if the up-
stream version number has changed. If DEBCHANGE_RELEASE_HEURIS-
TIC is changelog (default) and the current release is UNRE-
LEASED, this will only change the version of the current
changelog stanza. Otherwise, this will create a new changelog
stanza with the new version.
--edit, -e
Edit the changelog in an editor.
--release, -r
Finalize the changelog for a release. Update the changelog
timestamp. If the distribution is set to UNRELEASED, change it
to the distribution from the previous changelog entry (or an-
other distribution as specified by --distribution). If there
are no previous changelog entries and an explicit distribution
has not been specified, unstable will be used (or the name of
the current development release when run under Ubuntu).
--force-save-on-release
When --release is used, an editor is opened to allow inspection
of the changelog. The user is required to save the file to ac-
cept the modified changelog, otherwise the original will be kept
(default).
--no-force-save-on-release
Do not do so. Note that a dummy changelog entry may be supplied
in order to achieve the same effect - e.g. debchange --release
"". The entry will not be added to the changelog but its pres-
ence will suppress the editor.
--create
This will create a new debian/changelog file (or NEWS if the
--news option is used). You must be in the top-level directory
to use this; no directory name checking will be performed. The
package name and version can either be specified using the
--package and --newversion options, determined from the direc-
tory name using the --fromdirname option or entered manually
into the generated changelog file. The maintainer name is de-
termined from the environment if this is possible, and the dis-
tribution is specified either using the --distribution option or
in the generated changelog file.
--empty
When used in combination with --create, suppress the automatic
addition of an "initial release" changelog entry (so that the
next invocation of debchange adds the first entry). Note that
this will cause a dpkg-parsechangelog warning on the next invo-
cation due to the lack of changes.
--package package
This specifies the package name to be used in the new changelog;
this may only be used in conjunction with the --create, --incre-
ment and --newversion options.
--nmu, -n
Increment the Debian release number for a non-maintainer upload
by either appending a ".1" to a non-NMU version number (unless
the package is Debian native, in which case "+nmu1" is appended)
or by incrementing an NMU version number, and add an NMU
changelog comment. This happens automatically if the packager
is neither in the Maintainer nor the Uploaders field in de-
bian/control, unless DEBCHANGE_AUTO_NMU is set to no or the
--no-auto-nmu option is used.
--bin-nmu
Increment the Debian release number for a binary non-maintainer
upload by either appending a "+b1" to a non-binNMU version num-
ber or by incrementing a binNMU version number, and add a binNMU
changelog comment.
--qa, -q
Increment the Debian release number for a Debian QA Team upload,
and add a QA upload changelog comment.
--rebuild, -R
Increment the Debian release number for a no-change rebuild by
appending a "build1" or by incrementing a rebuild version num-
ber.
--security, -s
Increment the Debian release number for a Debian Security Team
non-maintainer upload, and add a Security Team upload changelog
comment.
--lts Increment the Debian release number for a LTS Security Team non-
maintainer upload, and add a LTS Security Team upload changelog
comment.
--team Increment the Debian release number for a team upload, and add a
Team upload changelog comment.
--upstream, -U
Don't append distro-name1 to the version on a derived distribu-
tion. Increment the Debian version.
--bpo Increment the Debian release number for an upload to buster-
backports, and add a backport upload changelog comment.
--stable
Increment the Debian release number for an upload to the current
stable release.
--local, -lsuffix
Add a suffix to the Debian version number for a local build.
--force-bad-version, -b
Force a version number to be less than the current one (e.g.,
when backporting).
--allow-lower-version pattern
Allow a version number to be less than the current one if the
new version matches the specified pattern.
--force-distribution
Force the provided distribution to be used, even if it doesn't
match the list of known distributions (e.g. for unofficial dis-
tributions).
--auto-nmu
Attempt to automatically determine whether a change to the
changelog represents a Non Maintainer Upload. This is the de-
fault.
--no-auto-nmu
Disable automatic NMU detection. Equivalent to setting DE-
BCHANGE_AUTO_NMU to no.
--fromdirname, -d
This will take the upstream version number from the directory
name, which should be of the form package-version. If the up-
stream version number has increased from the most recent
changelog entry, then a new entry will be made with version num-
ber version-1 (or version if the package is Debian native), with
the same epoch as the previous package version. If the upstream
version number is the same, this option will behave in the same
way as -i.
--closes nnnnn[,nnnnn ...]
Add changelog entries to close the specified bug numbers. Also
invoke the editor after adding these entries. Will generate
warnings if the BTS cannot be contacted (and --noquery has not
been specified), or if there are problems with the bug report
located.
--[no]query
Should we attempt to query the BTS when generating closes en-
tries?
--preserve, -p
Preserve the source tree directory name if the upstream version
number (or the version number of a Debian native package)
changes. See also the configuration variables section below.
--no-preserve, --nopreserve
Do not preserve the source tree directory name (default).
--vendor vendor
Override the distributor ID over the default returned by dpkg-
vendor. This name is used for heuristics applied to new package
versions and for sanity checking of the target distribution.
--distribution dist, -D dist
Use the specified distribution in the changelog entry being
edited, instead of using the previous changelog entry's distri-
bution for new entries or the existing value for existing en-
tries.
--urgency urgency, -u urgency
Use the specified urgency in the changelog entry being edited,
instead of using the default "medium" for new entries or the ex-
isting value for existing entries.
--changelog file, -c file
This will edit the changelog file instead of the standard de-
bian/changelog. This option overrides any CHANGELOG environment
variable setting. Also, no directory traversing or checking
will be performed when this option is used.
--news [newsfile]
This will edit newsfile (by default, debian/NEWS) instead of the
regular changelog. Directory searching will be performed. The
changelog will be examined in order to determine the current
package version.
--[no]multimaint
Should we indicate that parts of a changelog entry have been
made by different maintainers? Default is yes; see the discus-
sion above and also the DEBCHANGE_MULTIMAINT configuration file
option below.
--[no]multimaint-merge
Should all changes made by the same author be merged into the
same changelog section? Default is no; see the discussion above
and also the DEBCHANGE_MULTIMAINT_MERGE configuration file op-
tion below.
--maintmaint, -m
Do not modify the maintainer details previously listed in the
changelog. This is useful particularly for sponsors wanting to
automatically add a sponsorship message without disrupting the
other changelog details. Note that there may be some interest-
ing interactions if multi-maintainer mode is in use; you will
probably wish to check the changelog manually before uploading
it in such cases.
--controlmaint, -M
Use maintainer details from the debian/control Maintainer field
rather than relevant environment variables (DEBFULLNAME, DEBE-
MAIL, etc.). This option might be useful to restore details of
the main maintainer in the changelog trailer after a bogus edit
(e.g. when -m was intended but forgot) or when releasing a pack-
age in the name of the main maintainer (e.g. the team).
--[no]mainttrailer, -t
If mainttrailer is set, it will avoid modifying the existing
changelog trailer line (i.e. the maintainer and date-stamp de-
tails), unless used with options that require the trailer to be
modified (e.g. --create, --release, -i, --qa, etc.) This option
differs from --maintmaint in that it will use multi-maintainer
mode if appropriate, with the exception of editing the trailer.
See also the DEBCHANGE_MAINTTRAILER configuration file option
below.
--check-dirname-level N
See the above section "Directory name checking" for an explana-
tion of this option.
--check-dirname-regex regex
See the above section "Directory name checking" for an explana-
tion of this option.
--no-conf, --noconf
Do not read any configuration files. This can only be used as
the first option given on the command-line.
--release-heuristic log|changelog
Controls how debchange determines if a package has been re-
leased, when deciding whether to create a new changelog entry or
append to an existing changelog entry.
--help, -h
Display a help message and exit successfully.
--version
Display version and copyright information and exit successfully.
CONFIGURATION VARIABLES
The two configuration files /etc/devscripts.conf and ~/.devscripts are
sourced in that order to set configuration variables. Command line op-
tions can be used to override configuration file settings. Environment
variable settings are ignored for this purpose. The currently recog-
nised variables are:
DEBCHANGE_PRESERVE
If this is set to yes, then it is the same as the --preserve
command line parameter being used.
DEBCHANGE_QUERY_BTS
If this is set to no, then it is the same as the --noquery com-
mand line parameter being used.
DEVSCRIPTS_CHECK_DIRNAME_LEVEL, DEVSCRIPTS_CHECK_DIRNAME_REGEX
See the above section "Directory name checking" for an explana-
tion of these variables. Note that these are package-wide con-
figuration variables, and will therefore affect all devscripts
scripts which check their value, as described in their respec-
tive manpages and in devscripts.conf(5).
DEBCHANGE_RELEASE_HEURISTIC
Controls how debchange determines if a package has been re-
leased, when deciding whether to create a new changelog entry or
append to an existing changelog entry. Can be either log or
changelog.
DEBCHANGE_MULTIMAINT
If set to no, debchange will not introduce multiple-maintainer
distinctions when a different maintainer appends an entry to an
existing changelog. See the discussion above. Default is yes.
DEBCHANGE_MULTIMAINT_MERGE
If set to yes, when adding changes in multiple-maintainer mode
debchange will check whether previous changes by the current
maintainer exist and add the new changes to the existing block
rather than creating a new block. Default is no.
DEBCHANGE_MAINTTRAILER
If this is set to no, then it is the same as the --nomaint-
trailer command line parameter being used.
DEBCHANGE_TZ
Use this timezone for changelog entries. Default is the
user/system timezone as shown by `date -R` and affected by the
environment variable TZ.
DEBCHANGE_LOWER_VERSION_PATTERN
If this is set, then it is the same as the --allow-lower-version
command line parameter being used.
DEBCHANGE_AUTO_NMU
If this is set to no then debchange will not attempt to automat-
ically determine whether the current changelog stanza represents
an NMU. The default is yes. See the discussion of the --nmu
option above.
DEBCHANGE_FORCE_SAVE_ON_RELEASE
If this is set to no, then it is the same as the
--no-force-save-on-release command line parameter being used.
DEBCHANGE_VENDOR
Use this vendor instead of the default (dpkg-vendor output).
See --vendor for details.
ENVIRONMENT
DEBEMAIL, EMAIL, DEBFULLNAME, NAME
See the above description of the use of these environment vari-
ables.
CHANGELOG
This variable specifies the changelog to edit in place of de-
bian/changelog. No directory traversal or checking is performed
when this variable is set. This variable is overridden by the
--changelog command-line setting.
VISUAL, EDITOR
These environment variables (in this order) determine the editor
used by sensible-editor.
SEE ALSO
debc(1), debclean(1), dput(1), dupload(1), devscripts.conf(5)
AUTHOR
The original author was Christoph Lameter <clameter@debian.org>. Many
substantial changes and improvements were made by Julian Gilbey
<jdg@debian.org>.
DEBIAN Debian Utilities DEBCHANGE(1)
Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2024
Hurricane Electric.
All Rights Reserved.