#1016627 git-buildpackage: confusing behavior with --release and --dist

#1016627#5
Date:
2022-08-04 06:36:49 UTC
From:
To:
Package: git-buildpackage
Version: 0.9.22
Severity: normal
X-Debbugs-Cc: rvandegrift@debian.org

Hello,

I had built a snapshot with `gbp dch -S`, and wanted to prepare an upload to
experimental.  I ran:
  $ gbp dch -R --dist experimental
But this gave me a changelog with unstable.  I wasn't careful enough and
uploaded the result :(.

The manpage documents that --release sets the distribution to unstable.  So
maybe this behavior is intentional?  If so, it'd be really nice to get an error
message if I also supply --dist.

But I think it may be a bug.  When run with --verbose, the log makes it look
like gbp is setting the dist to experimental.  Example from 0.9.28 is below,
0.9.22 behaves the same.

Starting situation:
$ head -n 1 debian/changelog
efl (1.26.2-3~exp1~1.gbp7d7265) UNRELEASED; urgency=medium

Update changelog for a release:
$ gbp dch -R --dist experimental --ignore-branch --verbose
gbp:debug: ['git', 'rev-parse', '--show-cdup']
gbp:debug: ['git', 'rev-parse', '--is-bare-repository']
gbp:debug: ['git', 'rev-parse', '--git-dir']
gbp:debug: ['git', 'symbolic-ref', 'HEAD']
gbp:debug: ['git', 'show-ref', 'refs/heads/gbp-bug']
gbp:info: Continuing from commit '7d72650852767b5308fe9f4c0ff1a8dbd7f504d1'
gbp:debug: ['git', 'log', '--pretty=format:%H', '--no-show-signature', '7d72650852767b5308fe9f4c0ff1a8dbd7f504d1..HEAD', '--no-merges', '--']
gbp:debug: ['git', 'rev-parse', '--quiet', '--verify', 'ef0ec43479de56c266f7a8680bffcc6712f3af93^0']
gbp:debug: ['git', 'show', '--pretty=format:%an%x00%ae%x00%ad%x00%cn%x00%ce%x00%cd%x00%s%x00%f%x00%b%x00', '-z', '--date=raw', '--no-renames', '--name-status', '--no-show-signature', 'ef0ec43479de56c266f7a8680bffcc6712f3af93']
gbp:debug: debchange ['--no-auto-nmu', '--nomultimaint-merge', '--multimaint', '--', '[[[insert-git-dch-commit-message-here]]]'] []
gbp:debug: ['git', 'rev-parse', '--quiet', '--verify', '3e3486545ceafae9fc2d8eff789addf0a6b95600^0']
gbp:debug: ['git', 'show', '--pretty=format:%an%x00%ae%x00%ad%x00%cn%x00%ce%x00%cd%x00%s%x00%f%x00%b%x00', '-z', '--date=raw', '--no-renames', '--name-status', '--no-show-signature', '3e3486545ceafae9fc2d8eff789addf0a6b95600']
gbp:debug: debchange ['--no-auto-nmu', '--nomultimaint-merge', '--multimaint', '--', '[[[insert-git-dch-commit-message-here]]]'] []
gbp:debug: ['git', 'rev-parse', '--quiet', '--verify', 'c8929207ddc7721c81d5d8b9776e595d7c525d2f^0']
gbp:debug: ['git', 'show', '--pretty=format:%an%x00%ae%x00%ad%x00%cn%x00%ce%x00%cd%x00%s%x00%f%x00%b%x00', '-z', '--date=raw', '--no-renames', '--name-status', '--no-show-signature', 'c8929207ddc7721c81d5d8b9776e595d7c525d2f']
gbp:debug: ['git', 'rev-parse', '--quiet', '--verify', '329535b39b82520c0d4e2823490cf3406f4567bf^0']
gbp:debug: ['git', 'show', '--pretty=format:%an%x00%ae%x00%ad%x00%cn%x00%ce%x00%cd%x00%s%x00%f%x00%b%x00', '-z', '--date=raw', '--no-renames', '--name-status', '--no-show-signature', '329535b39b82520c0d4e2823490cf3406f4567bf']
gbp:debug: Set header option 'distribution' to 'experimental'
gbp:debug: Set header option 'urgency' to 'medium'
gbp:debug: debchange ['--no-auto-nmu', '--nomultimaint-merge', '--multimaint', '--distribution=experimental', '--urgency=medium', '--nomainttrailer', '--', ''] []
libdistro-info-perl is not installed, Debian release names are not known.
libdistro-info-perl is not installed, Ubuntu release names are not known.
gbp:debug: debchange ['--no-auto-nmu', '--release', '--no-force-save-on-release', '--nomultimaint-merge', '--multimaint', '--', ''] []
gbp:debug: sensible-editor ['debian/changelog'] []

Oops:
$ head -n 1 debian/changelog
efl (1.26.2-3~exp1) unstable; urgency=medium

Thanks,
Ross

#1016627#10
Date:
2023-02-14 06:54:29 UTC
From:
To:
It is a bug; see below.

At this point, debchange has updated the UNRELEASED header in the
section to have the specified distribution and urgency.

Unfortunately, now the mangle_changelog function is called to fix up the
snapshot version, and it replaces the distribution and urgency with what
was in the section when gbp-dch was instantiated, rather than what is in
the section now.

Next, gbp-dch calls debchange again to update the changelog timestamp
for release, and debchange sees that the distribution is UNRELEASED and
sets it to unstable.

I'm running 0.9.19 from Ubuntu 22.04, but I assume this bug is still
around.  -Nathan