[3/3] dpkg-gbp: default to "git" patching

Message ID 20210122084241.10573-4-henning.schild@siemens.com
State Accepted, archived
Headers show
Series allow do_patch to use the "git" tool | expand

Commit Message

Henning Schild Jan. 21, 2021, 10:42 p.m. UTC
From: Henning Schild <henning.schild@siemens.com>

That class is about packages coming from git, so that is the natural
choice for the patching tool.

Signed-off-by: Henning Schild <henning.schild@siemens.com>
---
 RECIPE-API-CHANGELOG.md                    | 5 +++++
 meta-isar/recipes-app/cowsay/cowsay_git.bb | 1 -
 meta/classes/dpkg-gbp.bbclass              | 2 ++
 3 files changed, 7 insertions(+), 1 deletion(-)

Comments

Jan Kiszka Jan. 22, 2021, 12:55 a.m. UTC | #1
On 22.01.21 09:42, [ext] Henning Schild wrote:
> From: Henning Schild <henning.schild@siemens.com>
> 
> That class is about packages coming from git, so that is the natural
> choice for the patching tool.
> 
> Signed-off-by: Henning Schild <henning.schild@siemens.com>
> ---
>  RECIPE-API-CHANGELOG.md                    | 5 +++++
>  meta-isar/recipes-app/cowsay/cowsay_git.bb | 1 -
>  meta/classes/dpkg-gbp.bbclass              | 2 ++
>  3 files changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> index cc45f3f66e..c4ec5894a8 100644
> --- a/RECIPE-API-CHANGELOG.md
> +++ b/RECIPE-API-CHANGELOG.md
> @@ -282,3 +282,8 @@ like /boot/efi to avoid such issues.
>  ### Deprecate BUILD_DEPENDS in u-boot-custom.inc
>  
>  Use DEBIAN_BUILD_DEPENDS instead, to align with deb_debianize.
> +
> +### Default to PATCHTOOL ?= "git" for dpkg-gbp
> +
> +Migrate your patches so they can be applied with "git am", or
> +"unset PATCHTOOL" to get old behaviour.
> diff --git a/meta-isar/recipes-app/cowsay/cowsay_git.bb b/meta-isar/recipes-app/cowsay/cowsay_git.bb
> index 2e885a8aa3..c3a1f4942a 100644
> --- a/meta-isar/recipes-app/cowsay/cowsay_git.bb
> +++ b/meta-isar/recipes-app/cowsay/cowsay_git.bb
> @@ -5,7 +5,6 @@
>  
>  inherit dpkg-gbp
>  
> -PATCHTOOL = "git"
>  SRC_URI = "git://salsa.debian.org/debian/cowsay.git;protocol=https"
>  SRC_URI += "file://isar.patch"
>  SRCREV = "756f0c41fbf582093c0c1dff9ff77734716cb26f"
> diff --git a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
> index ba5c3ebb89..d956e8c3bc 100644
> --- a/meta/classes/dpkg-gbp.bbclass
> +++ b/meta/classes/dpkg-gbp.bbclass
> @@ -7,6 +7,8 @@ inherit dpkg
>  
>  S = "${WORKDIR}/git"
>  
> +PATCHTOOL ?= "git"
> +
>  GBP_DEPENDS ?= "git-buildpackage pristine-tar"
>  GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
>  
> 

Sounds reasonable to me.

Jan
Jan Kiszka Aug. 11, 2021, 10:14 a.m. UTC | #2
On 22.01.21 11:55, [ext] Jan Kiszka wrote:
> On 22.01.21 09:42, [ext] Henning Schild wrote:
>> From: Henning Schild <henning.schild@siemens.com>
>>
>> That class is about packages coming from git, so that is the natural
>> choice for the patching tool.
>>
>> Signed-off-by: Henning Schild <henning.schild@siemens.com>
>> ---
>>  RECIPE-API-CHANGELOG.md                    | 5 +++++
>>  meta-isar/recipes-app/cowsay/cowsay_git.bb | 1 -
>>  meta/classes/dpkg-gbp.bbclass              | 2 ++
>>  3 files changed, 7 insertions(+), 1 deletion(-)
>>
>> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
>> index cc45f3f66e..c4ec5894a8 100644
>> --- a/RECIPE-API-CHANGELOG.md
>> +++ b/RECIPE-API-CHANGELOG.md
>> @@ -282,3 +282,8 @@ like /boot/efi to avoid such issues.
>>  ### Deprecate BUILD_DEPENDS in u-boot-custom.inc
>>  
>>  Use DEBIAN_BUILD_DEPENDS instead, to align with deb_debianize.
>> +
>> +### Default to PATCHTOOL ?= "git" for dpkg-gbp
>> +
>> +Migrate your patches so they can be applied with "git am", or
>> +"unset PATCHTOOL" to get old behaviour.
>> diff --git a/meta-isar/recipes-app/cowsay/cowsay_git.bb b/meta-isar/recipes-app/cowsay/cowsay_git.bb
>> index 2e885a8aa3..c3a1f4942a 100644
>> --- a/meta-isar/recipes-app/cowsay/cowsay_git.bb
>> +++ b/meta-isar/recipes-app/cowsay/cowsay_git.bb
>> @@ -5,7 +5,6 @@
>>  
>>  inherit dpkg-gbp
>>  
>> -PATCHTOOL = "git"
>>  SRC_URI = "git://salsa.debian.org/debian/cowsay.git;protocol=https"
>>  SRC_URI += "file://isar.patch"
>>  SRCREV = "756f0c41fbf582093c0c1dff9ff77734716cb26f"
>> diff --git a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
>> index ba5c3ebb89..d956e8c3bc 100644
>> --- a/meta/classes/dpkg-gbp.bbclass
>> +++ b/meta/classes/dpkg-gbp.bbclass
>> @@ -7,6 +7,8 @@ inherit dpkg
>>  
>>  S = "${WORKDIR}/git"
>>  
>> +PATCHTOOL ?= "git"
>> +
>>  GBP_DEPENDS ?= "git-buildpackage pristine-tar"
>>  GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
>>  
>>
> 
> Sounds reasonable to me.
> 

...but breaks rebuilding as long as we do not clone into the buildchroot 
and rather patch alternates:

ERROR: mc:qemuarm64-buster:cowsay-git-r0 do_patch: Command Error: 'sh -c 'git --work-tree=/build/tmp/work/debian-buster-arm64/cowsay/git-r0/git reset --hard HEAD'' exited with 0  Output:
error: object directory /downloads/git/salsa.debian.org.debian.cowsay.git/objects does not exist; check .git/objects/info/alternates
error: unable to read sha1 file of cows/elephant-in-snake.cow (1003cdf63bd9ae64e6674b47f8ed4799b5f809a6)
error: unable to read sha1 file of cows/elephant.cow (959cd3f6dd2b628b2471572a06e162b31dbcac96)
error: unable to read sha1 file of cows/head-in.cow (2e51774886392c2d295e5659b03dbfa04f14aeb4)
error: unable to read sha1 file of cows/luke-koala.cow (78acd6988fa397cc1dfcd98f04373af94288430e)
error: unable to read sha1 file of cows/moofasa.cow (15119d6782fec20424c648fcf0174f291dd22026)
error: unable to read sha1 file of cowsay (900ca46014cf0454075a6390830b399b2a4b2a34)
error: unable to read sha1 file of cowsay.1 (7133866af2f7ea7cccdfa79378a61b27c1573e6b)
fatal: Could not reset index file to revision 'HEAD'.
ERROR: Logfile of failure stored in: /build/tmp/work/debian-buster-arm64/cowsay/git-r0/temp/log.do_patch.71
ERROR: Task (mc:qemuarm64-buster:/repo/meta-isar/recipes-app/cowsay/cowsay_git.bb:do_patch) failed with exit code '1'

Did this change have a practical motivation or was just out of esthetic 
reasons? If it were only the latter, we should revert until our bitbake 
can resolve the underlying problem.

Jan
Henning Schild Aug. 11, 2021, 10:36 a.m. UTC | #3
Am Wed, 11 Aug 2021 20:14:56 +0200
schrieb Jan Kiszka <jan.kiszka@siemens.com>:

> On 22.01.21 11:55, [ext] Jan Kiszka wrote:
> > On 22.01.21 09:42, [ext] Henning Schild wrote:  
> >> From: Henning Schild <henning.schild@siemens.com>
> >>
> >> That class is about packages coming from git, so that is the
> >> natural choice for the patching tool.
> >>
> >> Signed-off-by: Henning Schild <henning.schild@siemens.com>
> >> ---
> >>  RECIPE-API-CHANGELOG.md                    | 5 +++++
> >>  meta-isar/recipes-app/cowsay/cowsay_git.bb | 1 -
> >>  meta/classes/dpkg-gbp.bbclass              | 2 ++
> >>  3 files changed, 7 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> >> index cc45f3f66e..c4ec5894a8 100644
> >> --- a/RECIPE-API-CHANGELOG.md
> >> +++ b/RECIPE-API-CHANGELOG.md
> >> @@ -282,3 +282,8 @@ like /boot/efi to avoid such issues.
> >>  ### Deprecate BUILD_DEPENDS in u-boot-custom.inc
> >>  
> >>  Use DEBIAN_BUILD_DEPENDS instead, to align with deb_debianize.
> >> +
> >> +### Default to PATCHTOOL ?= "git" for dpkg-gbp
> >> +
> >> +Migrate your patches so they can be applied with "git am", or
> >> +"unset PATCHTOOL" to get old behaviour.
> >> diff --git a/meta-isar/recipes-app/cowsay/cowsay_git.bb
> >> b/meta-isar/recipes-app/cowsay/cowsay_git.bb index
> >> 2e885a8aa3..c3a1f4942a 100644 ---
> >> a/meta-isar/recipes-app/cowsay/cowsay_git.bb +++
> >> b/meta-isar/recipes-app/cowsay/cowsay_git.bb @@ -5,7 +5,6 @@
> >>  
> >>  inherit dpkg-gbp
> >>  
> >> -PATCHTOOL = "git"
> >>  SRC_URI =
> >> "git://salsa.debian.org/debian/cowsay.git;protocol=https" SRC_URI
> >> += "file://isar.patch" SRCREV =
> >> "756f0c41fbf582093c0c1dff9ff77734716cb26f" diff --git
> >> a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
> >> index ba5c3ebb89..d956e8c3bc 100644 ---
> >> a/meta/classes/dpkg-gbp.bbclass +++ b/meta/classes/dpkg-gbp.bbclass
> >> @@ -7,6 +7,8 @@ inherit dpkg
> >>  
> >>  S = "${WORKDIR}/git"
> >>  
> >> +PATCHTOOL ?= "git"
> >> +
> >>  GBP_DEPENDS ?= "git-buildpackage pristine-tar"
> >>  GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
> >>  
> >>  
> > 
> > Sounds reasonable to me.
> >   
> 
> ...but breaks rebuilding as long as we do not clone into the
> buildchroot and rather patch alternates:
> 
> ERROR: mc:qemuarm64-buster:cowsay-git-r0 do_patch: Command Error: 'sh
> -c 'git
> --work-tree=/build/tmp/work/debian-buster-arm64/cowsay/git-r0/git
> reset --hard HEAD'' exited with 0  Output: error: object directory
> /downloads/git/salsa.debian.org.debian.cowsay.git/objects does not
> exist; check .git/objects/info/alternates error: unable to read sha1
> file of cows/elephant-in-snake.cow
> (1003cdf63bd9ae64e6674b47f8ed4799b5f809a6) error: unable to read sha1
> file of cows/elephant.cow (959cd3f6dd2b628b2471572a06e162b31dbcac96)
> error: unable to read sha1 file of cows/head-in.cow
> (2e51774886392c2d295e5659b03dbfa04f14aeb4) error: unable to read sha1
> file of cows/luke-koala.cow
> (78acd6988fa397cc1dfcd98f04373af94288430e) error: unable to read sha1
> file of cows/moofasa.cow (15119d6782fec20424c648fcf0174f291dd22026)
> error: unable to read sha1 file of cowsay
> (900ca46014cf0454075a6390830b399b2a4b2a34) error: unable to read sha1
> file of cowsay.1 (7133866af2f7ea7cccdfa79378a61b27c1573e6b) fatal:
> Could not reset index file to revision 'HEAD'. ERROR: Logfile of
> failure stored in:
> /build/tmp/work/debian-buster-arm64/cowsay/git-r0/temp/log.do_patch.71
> ERROR: Task
> (mc:qemuarm64-buster:/repo/meta-isar/recipes-app/cowsay/cowsay_git.bb:do_patch)
> failed with exit code '1'
> 
> Did this change have a practical motivation or was just out of
> esthetic reasons? If it were only the latter, we should revert until
> our bitbake can resolve the underlying problem.

It does have a practical motivation. Patching with quilt in isar has
nasty side-effects when debian/ is using quilt as well.
Using git as patchtool when git is also doing fetch/unpack seems like
the best solution to that. The patching with quilt gets especially
nasty if you can not add a quilt patch-patch to just deal with the code
... when you find yourself also wanting to patch debian/.

I would say that "adjust_git" is to blame here and we need to live with
that until we version-bump bitbake. In recent bitbake we will have
https://github.com/openembedded/bitbake/commit/6ae6f1865d5e666ebc670f70b7401a7b41648102
and will be able to ditch "adjust_git" by simply setting a global
BB_GIT_NOSHARED for isar.
That will also result in much improved usability ... since git repos
will end up usable insisde/outside chroots.

Henning

> Jan
>
Henning Schild Aug. 11, 2021, 10:44 a.m. UTC | #4
Am Wed, 11 Aug 2021 20:36:49 +0200
schrieb Henning Schild <henning.schild@siemens.com>:

> Am Wed, 11 Aug 2021 20:14:56 +0200
> schrieb Jan Kiszka <jan.kiszka@siemens.com>:
> 
> > On 22.01.21 11:55, [ext] Jan Kiszka wrote:  
> > > On 22.01.21 09:42, [ext] Henning Schild wrote:    
> > >> From: Henning Schild <henning.schild@siemens.com>
> > >>
> > >> That class is about packages coming from git, so that is the
> > >> natural choice for the patching tool.
> > >>
> > >> Signed-off-by: Henning Schild <henning.schild@siemens.com>
> > >> ---
> > >>  RECIPE-API-CHANGELOG.md                    | 5 +++++
> > >>  meta-isar/recipes-app/cowsay/cowsay_git.bb | 1 -
> > >>  meta/classes/dpkg-gbp.bbclass              | 2 ++
> > >>  3 files changed, 7 insertions(+), 1 deletion(-)
> > >>
> > >> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> > >> index cc45f3f66e..c4ec5894a8 100644
> > >> --- a/RECIPE-API-CHANGELOG.md
> > >> +++ b/RECIPE-API-CHANGELOG.md
> > >> @@ -282,3 +282,8 @@ like /boot/efi to avoid such issues.
> > >>  ### Deprecate BUILD_DEPENDS in u-boot-custom.inc
> > >>  
> > >>  Use DEBIAN_BUILD_DEPENDS instead, to align with deb_debianize.
> > >> +
> > >> +### Default to PATCHTOOL ?= "git" for dpkg-gbp
> > >> +
> > >> +Migrate your patches so they can be applied with "git am", or
> > >> +"unset PATCHTOOL" to get old behaviour.
> > >> diff --git a/meta-isar/recipes-app/cowsay/cowsay_git.bb
> > >> b/meta-isar/recipes-app/cowsay/cowsay_git.bb index
> > >> 2e885a8aa3..c3a1f4942a 100644 ---
> > >> a/meta-isar/recipes-app/cowsay/cowsay_git.bb +++
> > >> b/meta-isar/recipes-app/cowsay/cowsay_git.bb @@ -5,7 +5,6 @@
> > >>  
> > >>  inherit dpkg-gbp
> > >>  
> > >> -PATCHTOOL = "git"
> > >>  SRC_URI =
> > >> "git://salsa.debian.org/debian/cowsay.git;protocol=https" SRC_URI
> > >> += "file://isar.patch" SRCREV =
> > >> "756f0c41fbf582093c0c1dff9ff77734716cb26f" diff --git
> > >> a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
> > >> index ba5c3ebb89..d956e8c3bc 100644 ---
> > >> a/meta/classes/dpkg-gbp.bbclass +++
> > >> b/meta/classes/dpkg-gbp.bbclass @@ -7,6 +7,8 @@ inherit dpkg
> > >>  
> > >>  S = "${WORKDIR}/git"
> > >>  
> > >> +PATCHTOOL ?= "git"
> > >> +
> > >>  GBP_DEPENDS ?= "git-buildpackage pristine-tar"
> > >>  GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
> > >>  
> > >>    
> > > 
> > > Sounds reasonable to me.
> > >     
> > 
> > ...but breaks rebuilding as long as we do not clone into the
> > buildchroot and rather patch alternates:
> > 
> > ERROR: mc:qemuarm64-buster:cowsay-git-r0 do_patch: Command Error:
> > 'sh -c 'git
> > --work-tree=/build/tmp/work/debian-buster-arm64/cowsay/git-r0/git
> > reset --hard HEAD'' exited with 0  Output: error: object directory
> > /downloads/git/salsa.debian.org.debian.cowsay.git/objects does not
> > exist; check .git/objects/info/alternates error: unable to read sha1
> > file of cows/elephant-in-snake.cow
> > (1003cdf63bd9ae64e6674b47f8ed4799b5f809a6) error: unable to read
> > sha1 file of cows/elephant.cow
> > (959cd3f6dd2b628b2471572a06e162b31dbcac96) error: unable to read
> > sha1 file of cows/head-in.cow
> > (2e51774886392c2d295e5659b03dbfa04f14aeb4) error: unable to read
> > sha1 file of cows/luke-koala.cow
> > (78acd6988fa397cc1dfcd98f04373af94288430e) error: unable to read
> > sha1 file of cows/moofasa.cow
> > (15119d6782fec20424c648fcf0174f291dd22026) error: unable to read
> > sha1 file of cowsay (900ca46014cf0454075a6390830b399b2a4b2a34)
> > error: unable to read sha1 file of cowsay.1
> > (7133866af2f7ea7cccdfa79378a61b27c1573e6b) fatal: Could not reset
> > index file to revision 'HEAD'. ERROR: Logfile of failure stored in:
> > /build/tmp/work/debian-buster-arm64/cowsay/git-r0/temp/log.do_patch.71
> > ERROR: Task
> > (mc:qemuarm64-buster:/repo/meta-isar/recipes-app/cowsay/cowsay_git.bb:do_patch)
> > failed with exit code '1'
> > 
> > Did this change have a practical motivation or was just out of
> > esthetic reasons? If it were only the latter, we should revert until
> > our bitbake can resolve the underlying problem.  
> 
> It does have a practical motivation. Patching with quilt in isar has
> nasty side-effects when debian/ is using quilt as well.
> Using git as patchtool when git is also doing fetch/unpack seems like
> the best solution to that. The patching with quilt gets especially
> nasty if you can not add a quilt patch-patch to just deal with the
> code ... when you find yourself also wanting to patch debian/.
> 
> I would say that "adjust_git" is to blame here and we need to live
> with that until we version-bump bitbake. In recent bitbake we will
> have
> https://github.com/openembedded/bitbake/commit/6ae6f1865d5e666ebc670f70b7401a7b41648102
> and will be able to ditch "adjust_git" by simply setting a global
> BB_GIT_NOSHARED for isar. That will also result in much improved
> usability ... since git repos will end up usable insisde/outside
> chroots.

Doing BB_GIT_NOSHARED=1 in general and dropping "adjust_git" is not
something i have tested. But i am almost sure it will work.
It will have an impact on performance and disk-usage.

If a layer wanted to early-adopt ... it would be cherry-picking that
bitbake commit into isar, setting that variable global and dropping
"adjust_git".

Henning

> Henning
> 
> > Jan
> >   
>
Jan Kiszka Aug. 11, 2021, 11:12 a.m. UTC | #5
On 11.08.21 20:36, Henning Schild wrote:
> Am Wed, 11 Aug 2021 20:14:56 +0200
> schrieb Jan Kiszka <jan.kiszka@siemens.com>:
> 
>> On 22.01.21 11:55, [ext] Jan Kiszka wrote:
>>> On 22.01.21 09:42, [ext] Henning Schild wrote:  
>>>> From: Henning Schild <henning.schild@siemens.com>
>>>>
>>>> That class is about packages coming from git, so that is the
>>>> natural choice for the patching tool.
>>>>
>>>> Signed-off-by: Henning Schild <henning.schild@siemens.com>
>>>> ---
>>>>  RECIPE-API-CHANGELOG.md                    | 5 +++++
>>>>  meta-isar/recipes-app/cowsay/cowsay_git.bb | 1 -
>>>>  meta/classes/dpkg-gbp.bbclass              | 2 ++
>>>>  3 files changed, 7 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
>>>> index cc45f3f66e..c4ec5894a8 100644
>>>> --- a/RECIPE-API-CHANGELOG.md
>>>> +++ b/RECIPE-API-CHANGELOG.md
>>>> @@ -282,3 +282,8 @@ like /boot/efi to avoid such issues.
>>>>  ### Deprecate BUILD_DEPENDS in u-boot-custom.inc
>>>>  
>>>>  Use DEBIAN_BUILD_DEPENDS instead, to align with deb_debianize.
>>>> +
>>>> +### Default to PATCHTOOL ?= "git" for dpkg-gbp
>>>> +
>>>> +Migrate your patches so they can be applied with "git am", or
>>>> +"unset PATCHTOOL" to get old behaviour.
>>>> diff --git a/meta-isar/recipes-app/cowsay/cowsay_git.bb
>>>> b/meta-isar/recipes-app/cowsay/cowsay_git.bb index
>>>> 2e885a8aa3..c3a1f4942a 100644 ---
>>>> a/meta-isar/recipes-app/cowsay/cowsay_git.bb +++
>>>> b/meta-isar/recipes-app/cowsay/cowsay_git.bb @@ -5,7 +5,6 @@
>>>>  
>>>>  inherit dpkg-gbp
>>>>  
>>>> -PATCHTOOL = "git"
>>>>  SRC_URI =
>>>> "git://salsa.debian.org/debian/cowsay.git;protocol=https" SRC_URI
>>>> += "file://isar.patch" SRCREV =
>>>> "756f0c41fbf582093c0c1dff9ff77734716cb26f" diff --git
>>>> a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
>>>> index ba5c3ebb89..d956e8c3bc 100644 ---
>>>> a/meta/classes/dpkg-gbp.bbclass +++ b/meta/classes/dpkg-gbp.bbclass
>>>> @@ -7,6 +7,8 @@ inherit dpkg
>>>>  
>>>>  S = "${WORKDIR}/git"
>>>>  
>>>> +PATCHTOOL ?= "git"
>>>> +
>>>>  GBP_DEPENDS ?= "git-buildpackage pristine-tar"
>>>>  GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
>>>>  
>>>>  
>>>
>>> Sounds reasonable to me.
>>>   
>>
>> ...but breaks rebuilding as long as we do not clone into the
>> buildchroot and rather patch alternates:
>>
>> ERROR: mc:qemuarm64-buster:cowsay-git-r0 do_patch: Command Error: 'sh
>> -c 'git
>> --work-tree=/build/tmp/work/debian-buster-arm64/cowsay/git-r0/git
>> reset --hard HEAD'' exited with 0  Output: error: object directory
>> /downloads/git/salsa.debian.org.debian.cowsay.git/objects does not
>> exist; check .git/objects/info/alternates error: unable to read sha1
>> file of cows/elephant-in-snake.cow
>> (1003cdf63bd9ae64e6674b47f8ed4799b5f809a6) error: unable to read sha1
>> file of cows/elephant.cow (959cd3f6dd2b628b2471572a06e162b31dbcac96)
>> error: unable to read sha1 file of cows/head-in.cow
>> (2e51774886392c2d295e5659b03dbfa04f14aeb4) error: unable to read sha1
>> file of cows/luke-koala.cow
>> (78acd6988fa397cc1dfcd98f04373af94288430e) error: unable to read sha1
>> file of cows/moofasa.cow (15119d6782fec20424c648fcf0174f291dd22026)
>> error: unable to read sha1 file of cowsay
>> (900ca46014cf0454075a6390830b399b2a4b2a34) error: unable to read sha1
>> file of cowsay.1 (7133866af2f7ea7cccdfa79378a61b27c1573e6b) fatal:
>> Could not reset index file to revision 'HEAD'. ERROR: Logfile of
>> failure stored in:
>> /build/tmp/work/debian-buster-arm64/cowsay/git-r0/temp/log.do_patch.71
>> ERROR: Task
>> (mc:qemuarm64-buster:/repo/meta-isar/recipes-app/cowsay/cowsay_git.bb:do_patch)
>> failed with exit code '1'
>>
>> Did this change have a practical motivation or was just out of
>> esthetic reasons? If it were only the latter, we should revert until
>> our bitbake can resolve the underlying problem.
> 
> It does have a practical motivation. Patching with quilt in isar has
> nasty side-effects when debian/ is using quilt as well.
> Using git as patchtool when git is also doing fetch/unpack seems like
> the best solution to that. The patching with quilt gets especially
> nasty if you can not add a quilt patch-patch to just deal with the code
> ... when you find yourself also wanting to patch debian/.
> 
> I would say that "adjust_git" is to blame here and we need to live with
> that until we version-bump bitbake. In recent bitbake we will have
> https://github.com/openembedded/bitbake/commit/6ae6f1865d5e666ebc670f70b7401a7b41648102
> and will be able to ditch "adjust_git" by simply setting a global
> BB_GIT_NOSHARED for isar.
> That will also result in much improved usability ... since git repos
> will end up usable insisde/outside chroots.

That reasoning was missing from the commit log, and also the cover
letter declared this patch optional.

But you can patch debian packages via quilt, though not by do_patch
directly, see various examples in our layers. So the reasoning needs to
be a bit more precises in pointing out that also this approach did not
work (and ideally why).

Jan
Jan Kiszka Aug. 11, 2021, 11:15 a.m. UTC | #6
On 11.08.21 20:44, Henning Schild wrote:
> Am Wed, 11 Aug 2021 20:36:49 +0200
> schrieb Henning Schild <henning.schild@siemens.com>:
> 
>> Am Wed, 11 Aug 2021 20:14:56 +0200
>> schrieb Jan Kiszka <jan.kiszka@siemens.com>:
>>
>>> On 22.01.21 11:55, [ext] Jan Kiszka wrote:  
>>>> On 22.01.21 09:42, [ext] Henning Schild wrote:    
>>>>> From: Henning Schild <henning.schild@siemens.com>
>>>>>
>>>>> That class is about packages coming from git, so that is the
>>>>> natural choice for the patching tool.
>>>>>
>>>>> Signed-off-by: Henning Schild <henning.schild@siemens.com>
>>>>> ---
>>>>>  RECIPE-API-CHANGELOG.md                    | 5 +++++
>>>>>  meta-isar/recipes-app/cowsay/cowsay_git.bb | 1 -
>>>>>  meta/classes/dpkg-gbp.bbclass              | 2 ++
>>>>>  3 files changed, 7 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
>>>>> index cc45f3f66e..c4ec5894a8 100644
>>>>> --- a/RECIPE-API-CHANGELOG.md
>>>>> +++ b/RECIPE-API-CHANGELOG.md
>>>>> @@ -282,3 +282,8 @@ like /boot/efi to avoid such issues.
>>>>>  ### Deprecate BUILD_DEPENDS in u-boot-custom.inc
>>>>>  
>>>>>  Use DEBIAN_BUILD_DEPENDS instead, to align with deb_debianize.
>>>>> +
>>>>> +### Default to PATCHTOOL ?= "git" for dpkg-gbp
>>>>> +
>>>>> +Migrate your patches so they can be applied with "git am", or
>>>>> +"unset PATCHTOOL" to get old behaviour.
>>>>> diff --git a/meta-isar/recipes-app/cowsay/cowsay_git.bb
>>>>> b/meta-isar/recipes-app/cowsay/cowsay_git.bb index
>>>>> 2e885a8aa3..c3a1f4942a 100644 ---
>>>>> a/meta-isar/recipes-app/cowsay/cowsay_git.bb +++
>>>>> b/meta-isar/recipes-app/cowsay/cowsay_git.bb @@ -5,7 +5,6 @@
>>>>>  
>>>>>  inherit dpkg-gbp
>>>>>  
>>>>> -PATCHTOOL = "git"
>>>>>  SRC_URI =
>>>>> "git://salsa.debian.org/debian/cowsay.git;protocol=https" SRC_URI
>>>>> += "file://isar.patch" SRCREV =
>>>>> "756f0c41fbf582093c0c1dff9ff77734716cb26f" diff --git
>>>>> a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
>>>>> index ba5c3ebb89..d956e8c3bc 100644 ---
>>>>> a/meta/classes/dpkg-gbp.bbclass +++
>>>>> b/meta/classes/dpkg-gbp.bbclass @@ -7,6 +7,8 @@ inherit dpkg
>>>>>  
>>>>>  S = "${WORKDIR}/git"
>>>>>  
>>>>> +PATCHTOOL ?= "git"
>>>>> +
>>>>>  GBP_DEPENDS ?= "git-buildpackage pristine-tar"
>>>>>  GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
>>>>>  
>>>>>    
>>>>
>>>> Sounds reasonable to me.
>>>>     
>>>
>>> ...but breaks rebuilding as long as we do not clone into the
>>> buildchroot and rather patch alternates:
>>>
>>> ERROR: mc:qemuarm64-buster:cowsay-git-r0 do_patch: Command Error:
>>> 'sh -c 'git
>>> --work-tree=/build/tmp/work/debian-buster-arm64/cowsay/git-r0/git
>>> reset --hard HEAD'' exited with 0  Output: error: object directory
>>> /downloads/git/salsa.debian.org.debian.cowsay.git/objects does not
>>> exist; check .git/objects/info/alternates error: unable to read sha1
>>> file of cows/elephant-in-snake.cow
>>> (1003cdf63bd9ae64e6674b47f8ed4799b5f809a6) error: unable to read
>>> sha1 file of cows/elephant.cow
>>> (959cd3f6dd2b628b2471572a06e162b31dbcac96) error: unable to read
>>> sha1 file of cows/head-in.cow
>>> (2e51774886392c2d295e5659b03dbfa04f14aeb4) error: unable to read
>>> sha1 file of cows/luke-koala.cow
>>> (78acd6988fa397cc1dfcd98f04373af94288430e) error: unable to read
>>> sha1 file of cows/moofasa.cow
>>> (15119d6782fec20424c648fcf0174f291dd22026) error: unable to read
>>> sha1 file of cowsay (900ca46014cf0454075a6390830b399b2a4b2a34)
>>> error: unable to read sha1 file of cowsay.1
>>> (7133866af2f7ea7cccdfa79378a61b27c1573e6b) fatal: Could not reset
>>> index file to revision 'HEAD'. ERROR: Logfile of failure stored in:
>>> /build/tmp/work/debian-buster-arm64/cowsay/git-r0/temp/log.do_patch.71
>>> ERROR: Task
>>> (mc:qemuarm64-buster:/repo/meta-isar/recipes-app/cowsay/cowsay_git.bb:do_patch)
>>> failed with exit code '1'
>>>
>>> Did this change have a practical motivation or was just out of
>>> esthetic reasons? If it were only the latter, we should revert until
>>> our bitbake can resolve the underlying problem.  
>>
>> It does have a practical motivation. Patching with quilt in isar has
>> nasty side-effects when debian/ is using quilt as well.
>> Using git as patchtool when git is also doing fetch/unpack seems like
>> the best solution to that. The patching with quilt gets especially
>> nasty if you can not add a quilt patch-patch to just deal with the
>> code ... when you find yourself also wanting to patch debian/.
>>
>> I would say that "adjust_git" is to blame here and we need to live
>> with that until we version-bump bitbake. In recent bitbake we will
>> have
>> https://github.com/openembedded/bitbake/commit/6ae6f1865d5e666ebc670f70b7401a7b41648102
>> and will be able to ditch "adjust_git" by simply setting a global
>> BB_GIT_NOSHARED for isar. That will also result in much improved
>> usability ... since git repos will end up usable insisde/outside
>> chroots.
> 
> Doing BB_GIT_NOSHARED=1 in general and dropping "adjust_git" is not
> something i have tested. But i am almost sure it will work.
> It will have an impact on performance and disk-usage.
> 
> If a layer wanted to early-adopt ... it would be cherry-picking that
> bitbake commit into isar, setting that variable global and dropping
> "adjust_git".
> 

That's not a layer topic, that's an Isar topic if that feature is so
important. If the patch is upstream in master, pick it on top of our
release and do the refactorings. That's better then fighting adjust_git
by randomly breaking it.

Jan
Henning Schild Aug. 13, 2021, 12:22 p.m. UTC | #7
Am Wed, 11 Aug 2021 21:15:49 +0200
schrieb Jan Kiszka <jan.kiszka@siemens.com>:

> On 11.08.21 20:44, Henning Schild wrote:
> > Am Wed, 11 Aug 2021 20:36:49 +0200
> > schrieb Henning Schild <henning.schild@siemens.com>:
> >   
> >> Am Wed, 11 Aug 2021 20:14:56 +0200
> >> schrieb Jan Kiszka <jan.kiszka@siemens.com>:
> >>  
> >>> On 22.01.21 11:55, [ext] Jan Kiszka wrote:    
> >>>> On 22.01.21 09:42, [ext] Henning Schild wrote:      
> >>>>> From: Henning Schild <henning.schild@siemens.com>
> >>>>>
> >>>>> That class is about packages coming from git, so that is the
> >>>>> natural choice for the patching tool.
> >>>>>
> >>>>> Signed-off-by: Henning Schild <henning.schild@siemens.com>
> >>>>> ---
> >>>>>  RECIPE-API-CHANGELOG.md                    | 5 +++++
> >>>>>  meta-isar/recipes-app/cowsay/cowsay_git.bb | 1 -
> >>>>>  meta/classes/dpkg-gbp.bbclass              | 2 ++
> >>>>>  3 files changed, 7 insertions(+), 1 deletion(-)
> >>>>>
> >>>>> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> >>>>> index cc45f3f66e..c4ec5894a8 100644
> >>>>> --- a/RECIPE-API-CHANGELOG.md
> >>>>> +++ b/RECIPE-API-CHANGELOG.md
> >>>>> @@ -282,3 +282,8 @@ like /boot/efi to avoid such issues.
> >>>>>  ### Deprecate BUILD_DEPENDS in u-boot-custom.inc
> >>>>>  
> >>>>>  Use DEBIAN_BUILD_DEPENDS instead, to align with deb_debianize.
> >>>>> +
> >>>>> +### Default to PATCHTOOL ?= "git" for dpkg-gbp
> >>>>> +
> >>>>> +Migrate your patches so they can be applied with "git am", or
> >>>>> +"unset PATCHTOOL" to get old behaviour.
> >>>>> diff --git a/meta-isar/recipes-app/cowsay/cowsay_git.bb
> >>>>> b/meta-isar/recipes-app/cowsay/cowsay_git.bb index
> >>>>> 2e885a8aa3..c3a1f4942a 100644 ---
> >>>>> a/meta-isar/recipes-app/cowsay/cowsay_git.bb +++
> >>>>> b/meta-isar/recipes-app/cowsay/cowsay_git.bb @@ -5,7 +5,6 @@
> >>>>>  
> >>>>>  inherit dpkg-gbp
> >>>>>  
> >>>>> -PATCHTOOL = "git"
> >>>>>  SRC_URI =
> >>>>> "git://salsa.debian.org/debian/cowsay.git;protocol=https"
> >>>>> SRC_URI += "file://isar.patch" SRCREV =
> >>>>> "756f0c41fbf582093c0c1dff9ff77734716cb26f" diff --git
> >>>>> a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
> >>>>> index ba5c3ebb89..d956e8c3bc 100644 ---
> >>>>> a/meta/classes/dpkg-gbp.bbclass +++
> >>>>> b/meta/classes/dpkg-gbp.bbclass @@ -7,6 +7,8 @@ inherit dpkg
> >>>>>  
> >>>>>  S = "${WORKDIR}/git"
> >>>>>  
> >>>>> +PATCHTOOL ?= "git"
> >>>>> +
> >>>>>  GBP_DEPENDS ?= "git-buildpackage pristine-tar"
> >>>>>  GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
> >>>>>  
> >>>>>      
> >>>>
> >>>> Sounds reasonable to me.
> >>>>       
> >>>
> >>> ...but breaks rebuilding as long as we do not clone into the
> >>> buildchroot and rather patch alternates:
> >>>
> >>> ERROR: mc:qemuarm64-buster:cowsay-git-r0 do_patch: Command Error:
> >>> 'sh -c 'git
> >>> --work-tree=/build/tmp/work/debian-buster-arm64/cowsay/git-r0/git
> >>> reset --hard HEAD'' exited with 0  Output: error: object directory
> >>> /downloads/git/salsa.debian.org.debian.cowsay.git/objects does not
> >>> exist; check .git/objects/info/alternates error: unable to read
> >>> sha1 file of cows/elephant-in-snake.cow
> >>> (1003cdf63bd9ae64e6674b47f8ed4799b5f809a6) error: unable to read
> >>> sha1 file of cows/elephant.cow
> >>> (959cd3f6dd2b628b2471572a06e162b31dbcac96) error: unable to read
> >>> sha1 file of cows/head-in.cow
> >>> (2e51774886392c2d295e5659b03dbfa04f14aeb4) error: unable to read
> >>> sha1 file of cows/luke-koala.cow
> >>> (78acd6988fa397cc1dfcd98f04373af94288430e) error: unable to read
> >>> sha1 file of cows/moofasa.cow
> >>> (15119d6782fec20424c648fcf0174f291dd22026) error: unable to read
> >>> sha1 file of cowsay (900ca46014cf0454075a6390830b399b2a4b2a34)
> >>> error: unable to read sha1 file of cowsay.1
> >>> (7133866af2f7ea7cccdfa79378a61b27c1573e6b) fatal: Could not reset
> >>> index file to revision 'HEAD'. ERROR: Logfile of failure stored
> >>> in:
> >>> /build/tmp/work/debian-buster-arm64/cowsay/git-r0/temp/log.do_patch.71
> >>> ERROR: Task
> >>> (mc:qemuarm64-buster:/repo/meta-isar/recipes-app/cowsay/cowsay_git.bb:do_patch)
> >>> failed with exit code '1'
> >>>
> >>> Did this change have a practical motivation or was just out of
> >>> esthetic reasons? If it were only the latter, we should revert
> >>> until our bitbake can resolve the underlying problem.    
> >>
> >> It does have a practical motivation. Patching with quilt in isar
> >> has nasty side-effects when debian/ is using quilt as well.
> >> Using git as patchtool when git is also doing fetch/unpack seems
> >> like the best solution to that. The patching with quilt gets
> >> especially nasty if you can not add a quilt patch-patch to just
> >> deal with the code ... when you find yourself also wanting to
> >> patch debian/.
> >>
> >> I would say that "adjust_git" is to blame here and we need to live
> >> with that until we version-bump bitbake. In recent bitbake we will
> >> have
> >> https://github.com/openembedded/bitbake/commit/6ae6f1865d5e666ebc670f70b7401a7b41648102
> >> and will be able to ditch "adjust_git" by simply setting a global
> >> BB_GIT_NOSHARED for isar. That will also result in much improved
> >> usability ... since git repos will end up usable insisde/outside
> >> chroots.  
> > 
> > Doing BB_GIT_NOSHARED=1 in general and dropping "adjust_git" is not
> > something i have tested. But i am almost sure it will work.
> > It will have an impact on performance and disk-usage.
> > 
> > If a layer wanted to early-adopt ... it would be cherry-picking that
> > bitbake commit into isar, setting that variable global and dropping
> > "adjust_git".
> >   
> 
> That's not a layer topic, that's an Isar topic if that feature is so
> important. If the patch is upstream in master, pick it on top of our
> release and do the refactorings. That's better then fighting
> adjust_git by randomly breaking it.

I did send a patch that will "unshare" in isar without having to wait
for a bitbake version bump or doing cherry-pick forking. Let us hope
that patch is accepted and we will simply carry adjust_git until that
bitbake bump.

Henning

> Jan
>
Henning Schild Aug. 13, 2021, 12:32 p.m. UTC | #8
Am Wed, 11 Aug 2021 21:12:35 +0200
schrieb Jan Kiszka <jan.kiszka@siemens.com>:

> On 11.08.21 20:36, Henning Schild wrote:
> > Am Wed, 11 Aug 2021 20:14:56 +0200
> > schrieb Jan Kiszka <jan.kiszka@siemens.com>:
> >   
> >> On 22.01.21 11:55, [ext] Jan Kiszka wrote:  
> >>> On 22.01.21 09:42, [ext] Henning Schild wrote:    
> >>>> From: Henning Schild <henning.schild@siemens.com>
> >>>>
> >>>> That class is about packages coming from git, so that is the
> >>>> natural choice for the patching tool.
> >>>>
> >>>> Signed-off-by: Henning Schild <henning.schild@siemens.com>
> >>>> ---
> >>>>  RECIPE-API-CHANGELOG.md                    | 5 +++++
> >>>>  meta-isar/recipes-app/cowsay/cowsay_git.bb | 1 -
> >>>>  meta/classes/dpkg-gbp.bbclass              | 2 ++
> >>>>  3 files changed, 7 insertions(+), 1 deletion(-)
> >>>>
> >>>> diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
> >>>> index cc45f3f66e..c4ec5894a8 100644
> >>>> --- a/RECIPE-API-CHANGELOG.md
> >>>> +++ b/RECIPE-API-CHANGELOG.md
> >>>> @@ -282,3 +282,8 @@ like /boot/efi to avoid such issues.
> >>>>  ### Deprecate BUILD_DEPENDS in u-boot-custom.inc
> >>>>  
> >>>>  Use DEBIAN_BUILD_DEPENDS instead, to align with deb_debianize.
> >>>> +
> >>>> +### Default to PATCHTOOL ?= "git" for dpkg-gbp
> >>>> +
> >>>> +Migrate your patches so they can be applied with "git am", or
> >>>> +"unset PATCHTOOL" to get old behaviour.
> >>>> diff --git a/meta-isar/recipes-app/cowsay/cowsay_git.bb
> >>>> b/meta-isar/recipes-app/cowsay/cowsay_git.bb index
> >>>> 2e885a8aa3..c3a1f4942a 100644 ---
> >>>> a/meta-isar/recipes-app/cowsay/cowsay_git.bb +++
> >>>> b/meta-isar/recipes-app/cowsay/cowsay_git.bb @@ -5,7 +5,6 @@
> >>>>  
> >>>>  inherit dpkg-gbp
> >>>>  
> >>>> -PATCHTOOL = "git"
> >>>>  SRC_URI =
> >>>> "git://salsa.debian.org/debian/cowsay.git;protocol=https" SRC_URI
> >>>> += "file://isar.patch" SRCREV =
> >>>> "756f0c41fbf582093c0c1dff9ff77734716cb26f" diff --git
> >>>> a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
> >>>> index ba5c3ebb89..d956e8c3bc 100644 ---
> >>>> a/meta/classes/dpkg-gbp.bbclass +++
> >>>> b/meta/classes/dpkg-gbp.bbclass @@ -7,6 +7,8 @@ inherit dpkg
> >>>>  
> >>>>  S = "${WORKDIR}/git"
> >>>>  
> >>>> +PATCHTOOL ?= "git"
> >>>> +
> >>>>  GBP_DEPENDS ?= "git-buildpackage pristine-tar"
> >>>>  GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
> >>>>  
> >>>>    
> >>>
> >>> Sounds reasonable to me.
> >>>     
> >>
> >> ...but breaks rebuilding as long as we do not clone into the
> >> buildchroot and rather patch alternates:
> >>
> >> ERROR: mc:qemuarm64-buster:cowsay-git-r0 do_patch: Command Error:
> >> 'sh -c 'git
> >> --work-tree=/build/tmp/work/debian-buster-arm64/cowsay/git-r0/git
> >> reset --hard HEAD'' exited with 0  Output: error: object directory
> >> /downloads/git/salsa.debian.org.debian.cowsay.git/objects does not
> >> exist; check .git/objects/info/alternates error: unable to read
> >> sha1 file of cows/elephant-in-snake.cow
> >> (1003cdf63bd9ae64e6674b47f8ed4799b5f809a6) error: unable to read
> >> sha1 file of cows/elephant.cow
> >> (959cd3f6dd2b628b2471572a06e162b31dbcac96) error: unable to read
> >> sha1 file of cows/head-in.cow
> >> (2e51774886392c2d295e5659b03dbfa04f14aeb4) error: unable to read
> >> sha1 file of cows/luke-koala.cow
> >> (78acd6988fa397cc1dfcd98f04373af94288430e) error: unable to read
> >> sha1 file of cows/moofasa.cow
> >> (15119d6782fec20424c648fcf0174f291dd22026) error: unable to read
> >> sha1 file of cowsay (900ca46014cf0454075a6390830b399b2a4b2a34)
> >> error: unable to read sha1 file of cowsay.1
> >> (7133866af2f7ea7cccdfa79378a61b27c1573e6b) fatal: Could not reset
> >> index file to revision 'HEAD'. ERROR: Logfile of failure stored
> >> in:
> >> /build/tmp/work/debian-buster-arm64/cowsay/git-r0/temp/log.do_patch.71
> >> ERROR: Task
> >> (mc:qemuarm64-buster:/repo/meta-isar/recipes-app/cowsay/cowsay_git.bb:do_patch)
> >> failed with exit code '1'
> >>
> >> Did this change have a practical motivation or was just out of
> >> esthetic reasons? If it were only the latter, we should revert
> >> until our bitbake can resolve the underlying problem.  
> > 
> > It does have a practical motivation. Patching with quilt in isar has
> > nasty side-effects when debian/ is using quilt as well.
> > Using git as patchtool when git is also doing fetch/unpack seems
> > like the best solution to that. The patching with quilt gets
> > especially nasty if you can not add a quilt patch-patch to just
> > deal with the code ... when you find yourself also wanting to patch
> > debian/.
> > 
> > I would say that "adjust_git" is to blame here and we need to live
> > with that until we version-bump bitbake. In recent bitbake we will
> > have
> > https://github.com/openembedded/bitbake/commit/6ae6f1865d5e666ebc670f70b7401a7b41648102
> > and will be able to ditch "adjust_git" by simply setting a global
> > BB_GIT_NOSHARED for isar. That will also result in much improved
> > usability ... since git repos will end up usable insisde/outside
> > chroots.  
> 
> That reasoning was missing from the commit log, and also the cover
> letter declared this patch optional.
> 
> But you can patch debian packages via quilt, though not by do_patch
> directly, see various examples in our layers. So the reasoning needs
> to be a bit more precises in pointing out that also this approach did
> not work (and ideally why).

There is long standing RFC mail from me that goes into detail on
patching. Long story short ... using quilt when debian uses quilt as
well is "problematic". And patching debian/ can not be done with
debian-quilt. This is where you end up with "git" as the best patchtool
in isar when doing dpkg-gbp.

And with salsa dpkg-gbp becomes increasingly interesting as
"new-normal".

Henning

> Jan
>

Patch

diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
index cc45f3f66e..c4ec5894a8 100644
--- a/RECIPE-API-CHANGELOG.md
+++ b/RECIPE-API-CHANGELOG.md
@@ -282,3 +282,8 @@  like /boot/efi to avoid such issues.
 ### Deprecate BUILD_DEPENDS in u-boot-custom.inc
 
 Use DEBIAN_BUILD_DEPENDS instead, to align with deb_debianize.
+
+### Default to PATCHTOOL ?= "git" for dpkg-gbp
+
+Migrate your patches so they can be applied with "git am", or
+"unset PATCHTOOL" to get old behaviour.
diff --git a/meta-isar/recipes-app/cowsay/cowsay_git.bb b/meta-isar/recipes-app/cowsay/cowsay_git.bb
index 2e885a8aa3..c3a1f4942a 100644
--- a/meta-isar/recipes-app/cowsay/cowsay_git.bb
+++ b/meta-isar/recipes-app/cowsay/cowsay_git.bb
@@ -5,7 +5,6 @@ 
 
 inherit dpkg-gbp
 
-PATCHTOOL = "git"
 SRC_URI = "git://salsa.debian.org/debian/cowsay.git;protocol=https"
 SRC_URI += "file://isar.patch"
 SRCREV = "756f0c41fbf582093c0c1dff9ff77734716cb26f"
diff --git a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
index ba5c3ebb89..d956e8c3bc 100644
--- a/meta/classes/dpkg-gbp.bbclass
+++ b/meta/classes/dpkg-gbp.bbclass
@@ -7,6 +7,8 @@  inherit dpkg
 
 S = "${WORKDIR}/git"
 
+PATCHTOOL ?= "git"
+
 GBP_DEPENDS ?= "git-buildpackage pristine-tar"
 GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"