The %autochangelog
Macro¶
rpmautospec combines two sources of information to generate a changelog
which is inserted in the spec file where the %autochangelog
macro is set.
These two sources of information are:
An optional
changelog
file in the dist-git repository of the package. If this file is present, it is included as is in the spec file. It should be formatted according to the rules required for the changelog text, but without the escaping of rpm macros that would be needed if it was part of the spec file.The git history of the package between the most recent commit touching
changelog
and the latest commit made to the package.
Changelog entries generated from commit messages¶
In the simplest case, the commit summary (the first line) becomes the changelog entry. rpmautospec will automatically add the line with information about authorship and date based on the commit authorship and timestamp. It will also add appropriate indentation and the dash (“-“), so those should not be included in the commit summary.
Commit message:
Update to version 2.3.4 (rhbz#666)
This also fixes build issues on arm64.
… results in the following changelog entry:
* Mon Nov 25 2019 Foo Bar <foo@bar.com> 2.3.4-1
- Update to version 2.3.4 (rhbz#666)
It is possible to generate a longer changelog entry. If the first line of the commit message body starts with an ellipsis (three dots “…” or the equivalent Unicode character “…”), the subsequent text will be appended to the first item of a changelog entry. Dashed list items following the first item (without blank lines in between) will be added as separate (dashed) changelog entries:
Update to version 2.3.5
... (rhbz#667, rhbz#123, and a few other nasty bugs)
- Fixes build issues on s390 (rhbz#668)
(Text without a dash is ignored.)
… results in the following changelog entry:
* Mon Nov 26 2019 Foo Bar <foo@bar.com> 2.3.5-1
- Update to version 2.3.5 (rhbz#667, rhbz#123, and a few other nasty bugs)
- Fixes build issues on s390 (rhbz#668)
Note
These examples use “rhbz#nnn” to refer to RedHat Bugzilla bug number nnn. This convention is understood by bodhi, which may automatically associate an update with this build with that bug and e.g. close the bug when the update goes to stable.
If you don’t want bodhi to add the bug to the update, a different syntax must be used, e.g. “rhbz #nnn” (note the space between “rhbz” and “#”).
Skipping changelog entries¶
A commit will result in no changelog entry if it contains:
[skip changelog]
as a separate line. This is useful in those cases where the commit is not interesting for the user, for example because it does cleanup or fixes an error in a previous commit or a build failure, and when reverting commits.
Note that release suffix produced by the %autorelease
macro is
still bumped for such commits.
Example: Only Commits¶
If a package has no changelog
file, rpmautospec will only use the git
history to generate the changelog.
Thus if the history looks like:
F: Update to 2.3.4
|
E: Fix build on arm64
|
| Fixes bug introduced in previous commit.
| [skip changelog]
|
D: Fix building on armv7 with gcc10
|
| ... (required for the mass rebuild).
|
C: Update to 1.5
|
B: Update to 1.0
|
A: Initial import
The automatically generated changelog will look like:
* Wed Jul 25 2018 Foo Bar <foo@bar.com> - 2.3.4-1
- Update to 2.3.4
* Thu Feb 06 2020 John Doe <john@doe.com> - 1.5-2
- Fix building for armv7 with gcc10 (required for the mass rebuild)
* Thu Feb 06 2020 Foo Bar <foo@bar.com> - 1.5-1
- Update to 1.5
* Sat Jul 14 2018 Jane Smith <jane@smith.com> - 1.0-1
- Update to 1.0
* Mon Jun 18 2018 Jane Smith <jane@smith.com> - 0.9-1
- Initial import
Example: Commits and Changelog¶
If a package has a changelog
file, rpmautospec will only generate entries
from the commits after its last change and then append its contents verbatim.
So if the changelog file looks like:
* Mon Nov 25 2019 Foo Bar <foo@bar.com> 2.3.5-1
- Update to 2.3.5
* Wed Jul 25 2018 Foo Bar <foo@bar.com> 2.3.4-1
- Fix building for armv7 with gcc10 (required for the mass rebuild)
* Thu Feb 06 2020 John Doe <john@doe.com> - 1.5-2
- Fix building for armv7 with gcc10
* Thu Feb 06 2020 Foo Bar <foo@bar.com> - 1.5-1
- Update to 1.5
* Sat Jul 14 2018 Jane Smith <jane@smith.com> - 1.0-1
- Update to 1.0
* Mon Jun 18 2018 Jane Smith <jane@smith.com> - 0.9-1
- Initial import
(Note the lack -
between the email and version-release in the entries from
“Foo Bar”.)
And the history looks like:
K: Fix build on s390x
|
| [skip changelog]
|
J: Update to 2.4
|
I: Fix typo in the changelog file
|
H: Fix typo in patch001
|
G: Move changelog to ``changelog`` and fix typo
|
F: Update to 2.3.5
|
E: Update to 2.3.4
|
D: Fix building on armv7 with gcc10
|
C: Update to 1.5
|
B: Update to 1.0
|
A: Initial import
The automatically generated changelog will look like:
* Mon Mar 02 2020 Jane Smith <jane@smith.com> - 2.4-1
- Update to 2.4
* Mon Nov 25 2019 Foo Bar <foo@bar.com> 2.3.5-1
- Update to 2.3.5
* Wed Jul 25 2018 Foo Bar <foo@bar.com> 2.3.4-1
- Update to 2.3.4
* Thu Feb 06 2020 John Doe <john@doe.com> - 1.5-2
- Fix building for armv7 with gcc10 (required for the mass rebuild)
* Thu Feb 06 2020 Foo Bar <foo@bar.com> - 1.5-1
- Update to 1.5
* Sat Jul 14 2018 Jane Smith <jane@smith.com> - 1.0-1
- Update to 1.0
* Mon Jun 18 2018 Jane Smith <jane@smith.com> - 0.9-1
- Initial import
As you can see, the two entries from Foo Bar are still missing their -
between the email and the version-release which is expected since the
content of the changelog
file is included as is.
In addition, we can see that the commits G
, H
and I
are not
shown in the generated changelog since they were made before the most
recent commit changing the changelog
file, and K
is skipped
because of the [skip changelog]
annotation.
Note
At any time, rpmautospec generate-changelog can be used to preview how the generated changelog will look.