Controlling patch generation
When syncing the content of a source-git repo to dist-git, distribution
commits from source-git are converted to patch files in dist-git using git
format-patch
, and the patch files are added to the spec-file with indexing
starting from 1.
This process can be customized with the help of Git-trailers added to the end of commit messages. The value of these Git-trailers is expected to be a valid YAML value.
When a source-git repo is initialized with packit source-git init
, the
Git-trailers bellow are used to capture the name, ID and patch-status from
dist-git. This way existing distribution patches don't produce any change in
dist-git when they are transformed and synced back.
Controlling patch generation with Git-trailers deprecates the source-git patch metadata mechanism in flavor of a Git-native format. This old patch metadata format is still supported if none of the Git-trailers bellow are found in any of the distribution commits.
Patch-name
This can be used to change the name of a patch-file from the one generated by
git format-patch
. To merge multiple adjacent commits in a single patch file,
specify an identical Patch-name
for each of them.
When merging multiple adjacent commits to a single patch file, Git-trailers
which control the way in which patches are added to the spec-file (Patch-id
,
Patch-status
, Patch-present-in-specfile
) are ignored for all commits
except the first (oldest) one.
If no Patch-name
is present, the one generated by git format-patch
is left
unchanged.
Example:
Patch-name: downstream.patch
Patch-id
This is to control the numerical ID used in the patch-tag when adding the
patch to the spec-file. If none is specified, the previous ID is incremented.
The ID of the first distribution patch is 1
, unless otherwise specified.
The number of digits used for the IDs can be controlled with the
patch_generation_patch_id_digits
configuration option.
The following Git-trailer
Patch-id: 100
results in a following patch-tag in the spec-file:
Patch100: distribution.patch
Patch-status
This is to specify the comment lines to be included before the patch-line in the spec-file, to serve as patch status (clarifying the purpose of the patch downstream).
If none is specified, the commit message of the distribution commit is going to be used, after all Git-trailers are stripped.
To specify a pre-wrapped multiline string, use a YAML block scalar. To include
empty lines, prepend each line with #
.
For example, the following Git-trailer:
Patch-status: |
# This is a patch status.
# Having multiple lines.
#
# With some empty lines, even.
Will be rendered as bellow in the spec-file:
# This is a patch status.
# Having multiple lines.
#
# With some empty lines, even.
Patch2: downstream.patch
Patch-present-in-specfile
This tells whether the patch generated from the commit is already in the
spec-file. The value is a YAML Boolean. If True
, the spec-file is not
updated with this patch. Defaults to False
.
Ignore-patch
If True
, no patch-file is generated from this commit. False
if not
specified.
No-prefix
Strip source and destination prefixes from diffs. This is the same as running
git format-patch --no-prefix
.