[libvirt] [PATCH] spec: Automatically apply all patches with git

Laine Stump laine at laine.org
Fri Nov 21 20:41:17 UTC 2014


On 11/21/2014 12:20 PM, Jiri Denemark wrote:
> With this change, any patch declared in libvirt.spec with Patch[0-9]* is
> automatically applied in %prep. Unlike with the standard %patch[0-9]*,
> patches are applied with "git am" to avoid some unexpected results.
> However, as a result of this, all patches must be in the right format
> for "git am" to be able to apply them; they should ideally be generated
> from git using "git format-patch".

I've tried this out in the netcf specfile and it works well there too.
So a functional ACK from me. Someone else may have comments on the finer
details.

(The one thing I wonder about is this - once this patch is in, git will
be required for a build even if there are no patches beyond the original
tarball. I don't know if this concerns anyone or not...)

>
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
>  libvirt.spec.in | 36 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 36 insertions(+)
>
> diff --git a/libvirt.spec.in b/libvirt.spec.in
> index 6fcaa3e..0959483 100644
> --- a/libvirt.spec.in
> +++ b/libvirt.spec.in
> @@ -425,6 +425,7 @@ BuildRequires: gettext-devel
>  BuildRequires: libtool
>  BuildRequires: /usr/bin/pod2man
>  %endif
> +BuildRequires: git
>  BuildRequires: perl
>  BuildRequires: python
>  %if %{with_systemd}
> @@ -1198,6 +1199,41 @@ driver
>  %prep
>  %setup -q
>  
> +# Patches have to be stored in a temporary file because RPM has
> +# a limit on the length of the result of any macro expansion;
> +# if the string is longer, it's silently cropped
> +%{lua:
> +    tmp = os.tmpname();
> +    f = io.open(tmp, "w+");
> +    count = 0;
> +    for i, p in ipairs(patches) do
> +        f:write(p.."\n");
> +        count = count + 1;
> +    end;
> +    f:close();
> +    print("PATCHCOUNT="..count.."\n")
> +    print("PATCHLIST="..tmp.."\n")
> +}
> +
> +git init -q
> +git config user.name rpm-build
> +git config user.email rpm-build
> +git config gc.auto 0
> +git add .
> +git commit -q -a --author 'rpm-build <rpm-build>' \
> +           -m '%{name}-%{version} base'
> +
> +COUNT=$(grep '\.patch$' $PATCHLIST | wc -l)
> +if [ $COUNT -ne $PATCHCOUNT ]; then
> +    echo "Found $COUNT patches in $PATCHLIST, expected $PATCHCOUNT"
> +    exit 1
> +fi
> +if [ $COUNT -gt 0 ]; then
> +    xargs git am <$PATCHLIST || exit 1

This is the first I noticed it doesn't use git am -3 (which I always
use), but since that option would require the upstream git history to be
available, I guess that is pointless here anyway :-)




More information about the libvir-list mailing list