Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH] apply-patches.sh: detect missing patches
@ 2013-08-13 16:00 Ralph Siemsen
  2013-08-23 10:31 ` Thomas De Schampheleire
  0 siblings, 1 reply; 25+ messages in thread
From: Ralph Siemsen @ 2013-08-13 16:00 UTC (permalink / raw)
  To: buildroot

apply-patches.sh: detect missing patches

The current patch logic does not detect missing patch files,
particularly when using a series file. If the series file
refers to non-existent patches, a minor warning appears,
but the build continues.

The root cause is the "cat <patchfile> | patch ..." pipleline.
When patchfile does not exist, the "cat" command prints a
warning, however, the pipeline status is determined by the
final "patch" command. And since patch has not received any
input, it returns success.

There are two possible solutions that I can see:
  1. set -o pipefail, then pipeline will return error from 'cat'
  2. check for patch existence explicitly
I've opted for 2nd choice, it seems less risky.

The following patch adds the check. It also fixes the indentation
of an adjacent line (TAB versus spaces) making it consistent.

diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
index 7d5856c..a3f7153 100755
--- a/support/scripts/apply-patches.sh
+++ b/support/scripts/apply-patches.sh
@@ -76,7 +76,11 @@ function apply_patch {
     esac
     echo ""
     echo "Applying $patch using ${type}: "
-	echo $patch >> ${builddir}/.applied_patches_list
+    if ! test -e "${path}/$patch" ; then
+	echo "Error: missing patch file ${path}/$patch"
+	return 1
+    fi
+    echo $patch >> ${builddir}/.applied_patches_list
     ${uncomp} "${path}/$patch" | patch -g0 -p1 -E -d "${builddir}"
     if [ $? != 0 ] ; then
         echo "Patch failed!  Please fix ${patch}!"

^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH] apply-patches.sh: detect missing patches
  2013-08-13 16:00 [Buildroot] [PATCH] apply-patches.sh: detect missing patches Ralph Siemsen
@ 2013-08-23 10:31 ` Thomas De Schampheleire
  2013-09-05  7:03   ` Thomas De Schampheleire
  0 siblings, 1 reply; 25+ messages in thread
From: Thomas De Schampheleire @ 2013-08-23 10:31 UTC (permalink / raw)
  To: buildroot

Hi Ralph,

On Tue, Aug 13, 2013 at 6:00 PM, Ralph Siemsen <ralphs@netwinder.org> wrote:
> apply-patches.sh: detect missing patches
>
> The current patch logic does not detect missing patch files,
> particularly when using a series file. If the series file
> refers to non-existent patches, a minor warning appears,
> but the build continues.
>
> The root cause is the "cat <patchfile> | patch ..." pipleline.
> When patchfile does not exist, the "cat" command prints a
> warning, however, the pipeline status is determined by the
> final "patch" command. And since patch has not received any
> input, it returns success.
>
> There are two possible solutions that I can see:
>   1. set -o pipefail, then pipeline will return error from 'cat'
>   2. check for patch existence explicitly
> I've opted for 2nd choice, it seems less risky.
>
> The following patch adds the check. It also fixes the indentation
> of an adjacent line (TAB versus spaces) making it consistent.
>
> diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
> index 7d5856c..a3f7153 100755
> --- a/support/scripts/apply-patches.sh
> +++ b/support/scripts/apply-patches.sh
> @@ -76,7 +76,11 @@ function apply_patch {
>      esac
>      echo ""
>      echo "Applying $patch using ${type}: "
> -       echo $patch >> ${builddir}/.applied_patches_list
> +    if ! test -e "${path}/$patch" ; then

Any particular reason why your using the explicit 'test' and not [ -e ... ] ?

> +       echo "Error: missing patch file ${path}/$patch"
> +       return 1
> +    fi
> +    echo $patch >> ${builddir}/.applied_patches_list
>      ${uncomp} "${path}/$patch" | patch -g0 -p1 -E -d "${builddir}"
>      if [ $? != 0 ] ; then
>          echo "Patch failed!  Please fix ${patch}!"

Although I agree with the concept of checking for existence, I'm not
sure about the action to take.
Earlier in apply-patches.sh, if a patch is in an unsupported format,
it is simply skipped (and a message printed). I think the action in
that case should line up with the nonexisting patch case, so either
give a warning and continue, or an error and stop.

Best regards,
Thomas

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH] apply-patches.sh: detect missing patches
  2013-08-23 10:31 ` Thomas De Schampheleire
@ 2013-09-05  7:03   ` Thomas De Schampheleire
  2013-09-05  8:04     ` Thomas Petazzoni
  0 siblings, 1 reply; 25+ messages in thread
From: Thomas De Schampheleire @ 2013-09-05  7:03 UTC (permalink / raw)
  To: buildroot

On Fri, Aug 23, 2013 at 12:31 PM, Thomas De Schampheleire
<patrickdepinguin+buildroot@gmail.com> wrote:
> Hi Ralph,
>
> On Tue, Aug 13, 2013 at 6:00 PM, Ralph Siemsen <ralphs@netwinder.org> wrote:
>> apply-patches.sh: detect missing patches
>>
>> The current patch logic does not detect missing patch files,
>> particularly when using a series file. If the series file
>> refers to non-existent patches, a minor warning appears,
>> but the build continues.
>>
>> The root cause is the "cat <patchfile> | patch ..." pipleline.
>> When patchfile does not exist, the "cat" command prints a
>> warning, however, the pipeline status is determined by the
>> final "patch" command. And since patch has not received any
>> input, it returns success.
>>
>> There are two possible solutions that I can see:
>>   1. set -o pipefail, then pipeline will return error from 'cat'
>>   2. check for patch existence explicitly
>> I've opted for 2nd choice, it seems less risky.
>>
>> The following patch adds the check. It also fixes the indentation
>> of an adjacent line (TAB versus spaces) making it consistent.
>>
>> diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
>> index 7d5856c..a3f7153 100755
>> --- a/support/scripts/apply-patches.sh
>> +++ b/support/scripts/apply-patches.sh
>> @@ -76,7 +76,11 @@ function apply_patch {
>>      esac
>>      echo ""
>>      echo "Applying $patch using ${type}: "
>> -       echo $patch >> ${builddir}/.applied_patches_list
>> +    if ! test -e "${path}/$patch" ; then
>
> Any particular reason why your using the explicit 'test' and not [ -e ... ] ?
>
>> +       echo "Error: missing patch file ${path}/$patch"
>> +       return 1
>> +    fi
>> +    echo $patch >> ${builddir}/.applied_patches_list
>>      ${uncomp} "${path}/$patch" | patch -g0 -p1 -E -d "${builddir}"
>>      if [ $? != 0 ] ; then
>>          echo "Patch failed!  Please fix ${patch}!"
>
> Although I agree with the concept of checking for existence, I'm not
> sure about the action to take.
> Earlier in apply-patches.sh, if a patch is in an unsupported format,
> it is simply skipped (and a message printed). I think the action in
> that case should line up with the nonexisting patch case, so either
> give a warning and continue, or an error and stop.

Any input from others?

Thanks,
Thomas

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH] apply-patches.sh: detect missing patches
  2013-09-05  7:03   ` Thomas De Schampheleire
@ 2013-09-05  8:04     ` Thomas Petazzoni
  2013-09-05  8:35       ` Luca Ceresoli
  0 siblings, 1 reply; 25+ messages in thread
From: Thomas Petazzoni @ 2013-09-05  8:04 UTC (permalink / raw)
  To: buildroot

Dear Thomas De Schampheleire,

On Thu, 5 Sep 2013 09:03:33 +0200, Thomas De Schampheleire wrote:

> > Although I agree with the concept of checking for existence, I'm not
> > sure about the action to take.
> > Earlier in apply-patches.sh, if a patch is in an unsupported format,
> > it is simply skipped (and a message printed). I think the action in
> > that case should line up with the nonexisting patch case, so either
> > give a warning and continue, or an error and stop.
> 
> Any input from others?

My general feeling is that when something goes wrong or looks wrong, we
should abort with an error, and not try to continue with something
more-or-less broken/incorrect.

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH] apply-patches.sh: detect missing patches
  2013-09-05  8:04     ` Thomas Petazzoni
@ 2013-09-05  8:35       ` Luca Ceresoli
  2013-09-05 14:01         ` Yann E. MORIN
  0 siblings, 1 reply; 25+ messages in thread
From: Luca Ceresoli @ 2013-09-05  8:35 UTC (permalink / raw)
  To: buildroot

Thomas Petazzoni wrote:
> Dear Thomas De Schampheleire,
>
> On Thu, 5 Sep 2013 09:03:33 +0200, Thomas De Schampheleire wrote:
>
>>> Although I agree with the concept of checking for existence, I'm not
>>> sure about the action to take.
>>> Earlier in apply-patches.sh, if a patch is in an unsupported format,
>>> it is simply skipped (and a message printed). I think the action in
>>> that case should line up with the nonexisting patch case, so either
>>> give a warning and continue, or an error and stop.
>> Any input from others?
> My general feeling is that when something goes wrong or looks wrong, we
> should abort with an error, and not try to continue with something
> more-or-less broken/incorrect.

I agree. Who reads a million lines of build outputwhen make exits returning
zero? Definitely BR should stop and shout out loud about missing or
incorrect patches.

Luca

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH] apply-patches.sh: detect missing patches
  2013-09-05  8:35       ` Luca Ceresoli
@ 2013-09-05 14:01         ` Yann E. MORIN
  2013-09-05 19:20           ` Thomas De Schampheleire
  0 siblings, 1 reply; 25+ messages in thread
From: Yann E. MORIN @ 2013-09-05 14:01 UTC (permalink / raw)
  To: buildroot

All,

On 2013-09-05 10:35 +0200, Luca Ceresoli spake thusly:
> Thomas Petazzoni wrote:
> >Dear Thomas De Schampheleire,
> >
> >On Thu, 5 Sep 2013 09:03:33 +0200, Thomas De Schampheleire wrote:
> >
> >>>Although I agree with the concept of checking for existence, I'm not
> >>>sure about the action to take.
> >>>Earlier in apply-patches.sh, if a patch is in an unsupported format,
> >>>it is simply skipped (and a message printed). I think the action in
> >>>that case should line up with the nonexisting patch case, so either
> >>>give a warning and continue, or an error and stop.
> >>Any input from others?
> >My general feeling is that when something goes wrong or looks wrong, we
> >should abort with an error, and not try to continue with something
> >more-or-less broken/incorrect.
> 
> I agree. Who reads a million lines of build outputwhen make exits returning
> zero? Definitely BR should stop and shout out loud about missing or
> incorrect patches.

I concur: we should abort on incorrect/missing/malformed patch.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH] apply-patches.sh: detect missing patches
  2013-09-05 14:01         ` Yann E. MORIN
@ 2013-09-05 19:20           ` Thomas De Schampheleire
  2013-09-11 12:06             ` Ralph Siemsen
  0 siblings, 1 reply; 25+ messages in thread
From: Thomas De Schampheleire @ 2013-09-05 19:20 UTC (permalink / raw)
  To: buildroot

Hi Ralph,

On Thu, Sep 5, 2013 at 4:01 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> All,
>
> On 2013-09-05 10:35 +0200, Luca Ceresoli spake thusly:
>> Thomas Petazzoni wrote:
>> >Dear Thomas De Schampheleire,
>> >
>> >On Thu, 5 Sep 2013 09:03:33 +0200, Thomas De Schampheleire wrote:
>> >
>> >>>Although I agree with the concept of checking for existence, I'm not
>> >>>sure about the action to take.
>> >>>Earlier in apply-patches.sh, if a patch is in an unsupported format,
>> >>>it is simply skipped (and a message printed). I think the action in
>> >>>that case should line up with the nonexisting patch case, so either
>> >>>give a warning and continue, or an error and stop.
>> >>Any input from others?
>> >My general feeling is that when something goes wrong or looks wrong, we
>> >should abort with an error, and not try to continue with something
>> >more-or-less broken/incorrect.
>>
>> I agree. Who reads a million lines of build outputwhen make exits returning
>> zero? Definitely BR should stop and shout out loud about missing or
>> incorrect patches.
>
> I concur: we should abort on incorrect/missing/malformed patch.
>

Would you mind sending a second patch that changes the 'unknown patch
format' case so that an error is thrown?

Additionally, in your current patch, I would suggest changing the 'if
test ...' into 'if [ ... ], for the sake of lining up with the style
in the rest of the script.

Note that if you don't have time to send a second patch, just let me
know, then I will.

Best regards,
Thomas

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH] apply-patches.sh: detect missing patches
  2013-09-05 19:20           ` Thomas De Schampheleire
@ 2013-09-11 12:06             ` Ralph Siemsen
  2013-09-12  8:08               ` Thomas De Schampheleire
  0 siblings, 1 reply; 25+ messages in thread
From: Ralph Siemsen @ 2013-09-11 12:06 UTC (permalink / raw)
  To: buildroot

Hi Thomas,

Sorry for delayed response.

On Thu, Sep 05, 2013 at 09:20:36PM +0200, Thomas De Schampheleire wrote:
> 
> Would you mind sending a second patch that changes the 'unknown patch
> format' case so that an error is thrown?

I've added it. Note that it is possible to fool this check, by using
for example a name like mydiff.patch.zzz. This matches "*.patch*" and
therefore is allowed, even though we don't know how to deal with ".zzz".

> Additionally, in your current patch, I would suggest changing the 'if
> test ...' into 'if [ ... ], for the sake of lining up with the style
> in the rest of the script.

Also done. Revised patch follows.

Cheers,
-Ralph

The return status of the "cat <patchfile> | patch ..." pipeline
is zero (success) even if the patchfile does not exist. This is
because patch receives no input, which is not an error condition.
Therefore, explicitly check that patch file exists.

Based on feedback on buildroot mailing list, also changed the
check for unsupported file format. The build will now error out,
rather than continuing on silently.
---
 support/scripts/apply-patches.sh |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
index 7d5856c..d6e8983 100755
--- a/support/scripts/apply-patches.sh
+++ b/support/scripts/apply-patches.sh
@@ -70,13 +70,17 @@ function apply_patch {
 	*.patch*)
 	type="patch"; uncomp="cat"; ;;
 	*)
-	echo "Unsupported format file for ${patch}, skip it";
-	return 0;
+	echo "Unsupported format file for ${path}/${patch}";
+	return 1;
 	;;
     esac
     echo ""
     echo "Applying $patch using ${type}: "
-	echo $patch >> ${builddir}/.applied_patches_list
+    if [ ! -e "${path}/$patch" ] ; then
+	echo "Error: missing patch file ${path}/$patch"
+	return 1
+    fi
+    echo $patch >> ${builddir}/.applied_patches_list
     ${uncomp} "${path}/$patch" | patch -g0 -p1 -E -d "${builddir}" -t
     if [ $? != 0 ] ; then
         echo "Patch failed!  Please fix ${patch}!"
-- 
1.7.7.6

^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH] apply-patches.sh: detect missing patches
  2013-09-11 12:06             ` Ralph Siemsen
@ 2013-09-12  8:08               ` Thomas De Schampheleire
  2013-09-13 18:15                 ` [Buildroot] [PATCH v2] " Ralph Siemsen
  0 siblings, 1 reply; 25+ messages in thread
From: Thomas De Schampheleire @ 2013-09-12  8:08 UTC (permalink / raw)
  To: buildroot

Hi Ralph,

On Wed, Sep 11, 2013 at 2:06 PM, Ralph Siemsen <ralphs@netwinder.org> wrote:
> Hi Thomas,
>
> Sorry for delayed response.
>
> On Thu, Sep 05, 2013 at 09:20:36PM +0200, Thomas De Schampheleire wrote:
>>
>> Would you mind sending a second patch that changes the 'unknown patch
>> format' case so that an error is thrown?
>
> I've added it. Note that it is possible to fool this check, by using
> for example a name like mydiff.patch.zzz. This matches "*.patch*" and
> therefore is allowed, even though we don't know how to deal with ".zzz".

True, I think this is something we cannot fix.
Some patches in the tree are named .patch.avr32, or
.patch.conditional, but they are in the regular patch format so should
be accepted by apply_patches.sh.

>
>> Additionally, in your current patch, I would suggest changing the 'if
>> test ...' into 'if [ ... ], for the sake of lining up with the style
>> in the rest of the script.
>
> Also done. Revised patch follows.

If you send a patch, the general format is:

commit message
--- (three dashes)
any other comments _not_ in the commit message

actual patch (diff --git ...)


The mail you sent is in the format:
other comments
commit message
actual patch

and this cannot be applied as such. Also, it makes the patch less
visible than in a separate mail.
So, please send it again, and put 'PATCH v2' in the subject line, so
it's easy to keep track of the different versions.

Thanks a lot,
Thomas

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v2] apply-patches.sh: detect missing patches
  2013-09-12  8:08               ` Thomas De Schampheleire
@ 2013-09-13 18:15                 ` Ralph Siemsen
  2013-09-13 18:27                   ` Yann E. MORIN
  0 siblings, 1 reply; 25+ messages in thread
From: Ralph Siemsen @ 2013-09-13 18:15 UTC (permalink / raw)
  To: buildroot

The return status of the "cat <patchfile> | patch ..." pipeline
is zero (success) even if the patchfile does not exist. This is
because patch receives no input, which is not an error condition.
Therefore, explicitly check that patch file exists.

Based on feedback on buildroot mailing list, also changed the
check for unsupported file format. The build will now error out,
rather than continuing on silently.
---

Hi Thomas,
Hopefully the formatting is now correct.
-Ralph

diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
index 7d5856c..d6e8983 100755
--- a/support/scripts/apply-patches.sh
+++ b/support/scripts/apply-patches.sh
@@ -70,13 +70,17 @@ function apply_patch {
 	*.patch*)
 	type="patch"; uncomp="cat"; ;;
 	*)
-	echo "Unsupported format file for ${patch}, skip it";
-	return 0;
+	echo "Unsupported format file for ${path}/${patch}";
+	return 1;
 	;;
     esac
     echo ""
     echo "Applying $patch using ${type}: "
-	echo $patch >> ${builddir}/.applied_patches_list
+    if [ ! -e "${path}/$patch" ] ; then
+	echo "Error: missing patch file ${path}/$patch"
+	return 1
+    fi
+    echo $patch >> ${builddir}/.applied_patches_list
     ${uncomp} "${path}/$patch" | patch -g0 -p1 -E -d "${builddir}"
     if [ $? != 0 ] ; then
         echo "Patch failed!  Please fix ${patch}!"
-- 
1.7.7.6

^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v2] apply-patches.sh: detect missing patches
  2013-09-13 18:15                 ` [Buildroot] [PATCH v2] " Ralph Siemsen
@ 2013-09-13 18:27                   ` Yann E. MORIN
  2013-09-15 13:37                     ` Ralph Siemsen
  0 siblings, 1 reply; 25+ messages in thread
From: Yann E. MORIN @ 2013-09-13 18:27 UTC (permalink / raw)
  To: buildroot

Ralph, All,

On 2013-09-13 14:15 -0400, Ralph Siemsen spake thusly:
> The return status of the "cat <patchfile> | patch ..." pipeline
> is zero (success) even if the patchfile does not exist. This is
> because patch receives no input, which is not an error condition.
> Therefore, explicitly check that patch file exists.
> 
> Based on feedback on buildroot mailing list, also changed the
> check for unsupported file format. The build will now error out,
> rather than continuing on silently.
> ---
> 
> Hi Thomas,
> Hopefully the formatting is now correct.
> -Ralph
> 
> diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
> index 7d5856c..d6e8983 100755
> --- a/support/scripts/apply-patches.sh
> +++ b/support/scripts/apply-patches.sh
> @@ -70,13 +70,17 @@ function apply_patch {
>  	*.patch*)
>  	type="patch"; uncomp="cat"; ;;
>  	*)
> -	echo "Unsupported format file for ${patch}, skip it";
> -	return 0;
> +	echo "Unsupported format file for ${path}/${patch}";
> +	return 1;

I was a bit surprised to read that you used "return 1" here, rather than
a more explicit "exit 1".

For example, if the patch failed to apply cleanly, the function does not
"return 1" but does "exit 1" (just the line after your patch ends). So I
would prefer this behaviour to be homogeneous across the different
code-paths.

For the records, "return 1" does work since we call apply_patch thus:
    apply_patch "${patchfile}" || exit 1

This is not really straightforward. Just remove the "|| exit 1" and
change all the "return 1" into "exit 1", so the script really errors out
right away.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v2] apply-patches.sh: detect missing patches
  2013-09-13 18:27                   ` Yann E. MORIN
@ 2013-09-15 13:37                     ` Ralph Siemsen
  2013-09-15 14:13                       ` [Buildroot] [PATCH v3] " Ralph Siemsen
  0 siblings, 1 reply; 25+ messages in thread
From: Ralph Siemsen @ 2013-09-15 13:37 UTC (permalink / raw)
  To: buildroot

On Fri, Sep 13, 2013 at 08:27:02PM +0200, Yann E. MORIN wrote:
> > 
> > diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
> > index 7d5856c..d6e8983 100755
> > --- a/support/scripts/apply-patches.sh
> > +++ b/support/scripts/apply-patches.sh
> > @@ -70,13 +70,17 @@ function apply_patch {
> >  	*.patch*)
> >  	type="patch"; uncomp="cat"; ;;
> >  	*)
> > -	echo "Unsupported format file for ${patch}, skip it";
> > -	return 0;
> > +	echo "Unsupported format file for ${path}/${patch}";
> > +	return 1;
> 
> I was a bit surprised to read that you used "return 1" here, rather than
> a more explicit "exit 1".

As you mentioned, both "return" and "exit" work here, so I opted for the
lesser change, figuring it would be less controversial ;)

> This is not really straightforward. Just remove the "|| exit 1" and
> change all the "return 1" into "exit 1", so the script really errors out
> right away.

I'll submit v3 with that fixed.

-R

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-15 13:37                     ` Ralph Siemsen
@ 2013-09-15 14:13                       ` Ralph Siemsen
  2013-09-15 20:09                         ` Peter Korsgaard
  0 siblings, 1 reply; 25+ messages in thread
From: Ralph Siemsen @ 2013-09-15 14:13 UTC (permalink / raw)
  To: buildroot

The "patch" command returns an error code only if patches fail
to apply. Therefore the pipleline "cat <patchfile> | patch ..."
does not fail, even if <patchfile> is missing. Fix this by
adding an explicit check for patch file existence.

Based on feedback from buildroot mailing list, also change the
existing check for unsupported patch format into a fatal error.
---

v1. original
v2. error on unsupported patch formats
v3. explicit exit calls

diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh
index e9c6869..656aa71 100755
--- a/support/scripts/apply-patches.sh
+++ b/support/scripts/apply-patches.sh
@@ -73,13 +73,17 @@ function apply_patch {
 	*.patch*)
 	type="patch"; uncomp="cat"; ;;
 	*)
-	echo "Unsupported format file for ${patch}, skip it";
-	return 0;
+	echo "Unsupported format file for ${path}/${patch}";
+	exit 1;
 	;;
     esac
     echo ""
     echo "Applying $patch using ${type}: "
-	echo $patch >> ${builddir}/.applied_patches_list
+    if [ ! -e "${path}/$patch" ] ; then
+	echo "Error: missing patch file ${path}/$patch"
+	exit 1
+    fi
+    echo $patch >> ${builddir}/.applied_patches_list
     ${uncomp} "${path}/$patch" | patch -g0 -p1 -E -d "${builddir}" -t
     if [ $? != 0 ] ; then
         echo "Patch failed!  Please fix ${patch}!"
@@ -96,7 +100,7 @@ function scan_patchdir {
     # to apply patches. Skip line starting with a dash.
     if [ -e "${path}/series" ] ; then
         for i in `grep -Ev "^#" ${path}/series 2> /dev/null` ; do
-            apply_patch "$path" "$i" || exit 1
+            apply_patch "$path" "$i"
         done
     else
         for i in `cd $path; ls -d $patches 2> /dev/null` ; do
@@ -109,7 +113,7 @@ function scan_patchdir {
                 tar -C "$unpackedarchivedir" -xaf "${path}/$i"
                 scan_patchdir "$unpackedarchivedir"
             else
-                apply_patch "$path" "$i" || exit 1
+                apply_patch "$path" "$i"
             fi
         done
     fi
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-15 14:13                       ` [Buildroot] [PATCH v3] " Ralph Siemsen
@ 2013-09-15 20:09                         ` Peter Korsgaard
  2013-09-16  7:11                           ` Peter Korsgaard
  2013-09-16 12:36                           ` Ralph Siemsen
  0 siblings, 2 replies; 25+ messages in thread
From: Peter Korsgaard @ 2013-09-15 20:09 UTC (permalink / raw)
  To: buildroot

>>>>> "Ralph" == Ralph Siemsen <ralphs@netwinder.org> writes:

 Ralph> The "patch" command returns an error code only if patches fail
 Ralph> to apply. Therefore the pipleline "cat <patchfile> | patch ..."
 Ralph> does not fail, even if <patchfile> is missing. Fix this by
 Ralph> adding an explicit check for patch file existence.

 Ralph> Based on feedback from buildroot mailing list, also change the
 Ralph> existing check for unsupported patch format into a fatal error.
 Ralph> ---

 Ralph> v1. original
 Ralph> v2. error on unsupported patch formats
 Ralph> v3. explicit exit calls

Committed, thanks.

You forgot to add your 'Signed-off-by' on the patch. I've added it for
you, hopefully that is OK?

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-15 20:09                         ` Peter Korsgaard
@ 2013-09-16  7:11                           ` Peter Korsgaard
  2013-09-16 12:46                             ` Ralph Siemsen
  2013-09-16 15:24                             ` Thomas Petazzoni
  2013-09-16 12:36                           ` Ralph Siemsen
  1 sibling, 2 replies; 25+ messages in thread
From: Peter Korsgaard @ 2013-09-16  7:11 UTC (permalink / raw)
  To: buildroot

>>>>> "Peter" == Peter Korsgaard <jacmet@uclibc.org> writes:

>>>>> "Ralph" == Ralph Siemsen <ralphs@netwinder.org> writes:
 Ralph> The "patch" command returns an error code only if patches fail
 Ralph> to apply. Therefore the pipleline "cat <patchfile> | patch ..."
 Ralph> does not fail, even if <patchfile> is missing. Fix this by
 Ralph> adding an explicit check for patch file existence.

 Ralph> Based on feedback from buildroot mailing list, also change the
 Ralph> existing check for unsupported patch format into a fatal error.
 Ralph> ---

 Ralph> v1. original
 Ralph> v2. error on unsupported patch formats
 Ralph> v3. explicit exit calls

 Peter> Committed, thanks.

 Peter> You forgot to add your 'Signed-off-by' on the patch. I've added it for
 Peter> you, hopefully that is OK?

It unfortunately for the projects using tarballs containing patches,
E.G:

http://autobuild.buildroot.net/results/3d5/3d5f2c960ff2cc2003c9cc68d3a5a48009f5602f/build-end.log

The tarball contains:

debian/
debian/control
debian/postinst
debian/postinst.nfs
debian/source/
debian/source/options
debian/source/format
debian/shlibs
debian/prerm.nfs
debian/rules
debian/postrm
debian/shlibs.nfslock
debian/patches/
debian/patches/07-493462-dotlockfile.c.patch
debian/patches/series
debian/patches/04-505851-remove-debug-code.patch
debian/patches/02-COPYRIGHT.patch
debian/patches/06-493462-dotlockfile.1.patch
debian/patches/09-562937-make-ar-overwrittable.patch
debian/changelog

So a bunch of non-patch files. I guess our best option is to degrade the
"Unsupported format" check to a warning again?

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-15 20:09                         ` Peter Korsgaard
  2013-09-16  7:11                           ` Peter Korsgaard
@ 2013-09-16 12:36                           ` Ralph Siemsen
  2013-09-16 13:42                             ` Peter Korsgaard
  1 sibling, 1 reply; 25+ messages in thread
From: Ralph Siemsen @ 2013-09-16 12:36 UTC (permalink / raw)
  To: buildroot

On Sun, Sep 15, 2013 at 10:09:45PM +0200, Peter Korsgaard wrote:
> 
> Committed, thanks.
> 
> You forgot to add your 'Signed-off-by' on the patch. I've added it for
> you, hopefully that is OK?

Yes, that is fine. What is the exact syntax/capitalization for this? The
current buildroot manual lists a couple of slight variations.

-Ralph

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-16  7:11                           ` Peter Korsgaard
@ 2013-09-16 12:46                             ` Ralph Siemsen
  2013-09-16 20:50                               ` Peter Korsgaard
  2013-09-16 15:24                             ` Thomas Petazzoni
  1 sibling, 1 reply; 25+ messages in thread
From: Ralph Siemsen @ 2013-09-16 12:46 UTC (permalink / raw)
  To: buildroot

On Mon, Sep 16, 2013 at 09:11:49AM +0200, Peter Korsgaard wrote:
> 
> The tarball contains:
> 
> debian/
> debian/control
> debian/postinst
> debian/postinst.nfs
> debian/source/
> debian/source/options
> debian/source/format
> debian/shlibs
> debian/prerm.nfs
> debian/rules
> debian/postrm
> debian/shlibs.nfslock
> debian/patches/
> debian/patches/07-493462-dotlockfile.c.patch
> debian/patches/series
> debian/patches/04-505851-remove-debug-code.patch
> debian/patches/02-COPYRIGHT.patch
> debian/patches/06-493462-dotlockfile.1.patch
> debian/patches/09-562937-make-ar-overwrittable.patch
> debian/changelog
> 
> So a bunch of non-patch files. I guess our best option is to degrade the
> "Unsupported format" check to a warning again?

Hmm, none of the packages I regularly build have used this feature.

Going back to a warning would be a simple fix. The other option would
be to expand the tarballs and extract only the patches directory.
I'm not sure which option is better...

-Ralph

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-16 12:36                           ` Ralph Siemsen
@ 2013-09-16 13:42                             ` Peter Korsgaard
  0 siblings, 0 replies; 25+ messages in thread
From: Peter Korsgaard @ 2013-09-16 13:42 UTC (permalink / raw)
  To: buildroot

>>>>> "Ralph" == Ralph Siemsen <ralphs@netwinder.org> writes:

 Ralph> On Sun, Sep 15, 2013 at 10:09:45PM +0200, Peter Korsgaard wrote:
 >> 
 >> Committed, thanks.
 >> 
 >> You forgot to add your 'Signed-off-by' on the patch. I've added it for
 >> you, hopefully that is OK?

 Ralph> Yes, that is fine. What is the exact syntax/capitalization for this? The
 Ralph> current buildroot manual lists a couple of slight variations.

The format used by git format-patch -s / the Linux kernel - E.G:

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>

I'll fix the manual to use this everywhere, thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-16  7:11                           ` Peter Korsgaard
  2013-09-16 12:46                             ` Ralph Siemsen
@ 2013-09-16 15:24                             ` Thomas Petazzoni
  2013-09-16 19:45                               ` Ralph Siemsen
  2013-09-16 20:49                               ` Peter Korsgaard
  1 sibling, 2 replies; 25+ messages in thread
From: Thomas Petazzoni @ 2013-09-16 15:24 UTC (permalink / raw)
  To: buildroot

Dear Peter Korsgaard,

On Mon, 16 Sep 2013 09:11:49 +0200, Peter Korsgaard wrote:

> So a bunch of non-patch files. I guess our best option is to degrade the
> "Unsupported format" check to a warning again?

Another way of seeing that is that using:

<pkg>_PATCH = some-debian-tarball

is not a good idea, and we should have a better way of handling this,
no?

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-16 15:24                             ` Thomas Petazzoni
@ 2013-09-16 19:45                               ` Ralph Siemsen
  2013-09-16 20:07                                 ` Arnout Vandecappelle
  2013-09-16 20:49                               ` Peter Korsgaard
  1 sibling, 1 reply; 25+ messages in thread
From: Ralph Siemsen @ 2013-09-16 19:45 UTC (permalink / raw)
  To: buildroot

On Mon, Sep 16, 2013 at 05:24:44PM +0200, Thomas Petazzoni wrote:
> Dear Peter Korsgaard,
> 
> On Mon, 16 Sep 2013 09:11:49 +0200, Peter Korsgaard wrote:
> 
> > So a bunch of non-patch files. I guess our best option is to degrade the
> > "Unsupported format" check to a warning again?
> 
> Another way of seeing that is that using:
> 
> <pkg>_PATCH = some-debian-tarball
> 
> is not a good idea, and we should have a better way of handling this,
> no?

It looks like only a small number of packages might be affected:

$ grep -ri _PATCH.*DEBIAN .
./package/cvs/cvs.mk:CVS_POST_PATCH_HOOKS += CVS_DEBIAN_PATCHES
./package/thttpd/thttpd.mk:THTTPD_POST_PATCH_HOOKS = THTTPD_DEBIAN_PATCHES
./package/input-tools/input-tools.mk:INPUT_TOOLS_POST_PATCH_HOOKS = INPUT_TOOLS_DEBIAN_PATCHES
./package/sysvinit/sysvinit.mk:SYSVINIT_POST_PATCH_HOOKS = SYSVINIT_DEBIAN_PATCHES
./package/sysklogd/sysklogd.mk:SYSKLOGD_POST_PATCH_HOOKS = SYSKLOGD_DEBIAN_PATCHES
./package/mii-diag/mii-diag.mk:MII_DIAG_POST_PATCH_HOOKS = MII_DIAG_DEBIAN_PATCHES
./package/argus/argus.mk:ARGUS_POST_PATCH_HOOKS += ARGUS_DEBIAN_PATCH_APPLY
./package/liblockfile/liblockfile.mk:LIBLOCKFILE_PATCH = liblockfile_$(LIBLOCKFILE_VERSION)-4.debian.tar.bz2
./package/setserial/setserial.mk:SETSERIAL_POST_PATCH_HOOKS += SETSERIAL_APPLY_DEBIAN_PATCHES
./boot/grub/grub.mk:GRUB_POST_PATCH_HOOKS += GRUB_DEBIAN_PATCHES
$

Many of those packages actually build fine, because they explicitly apply only
the contents of the debian/patches directory. For example from thttpd.mk:

define THTTPD_DEBIAN_PATCHES
        if [ -d $(@D)/debian/patches ]; then \
                support/scripts/apply-patches.sh $(@D) $(@D)/debian/patches \*.patch; \
        fi
endef

The only broken packages are: cvs sysvinit liblockfile setserial

So we have a couple of options:
 1) revert the original change back to a warning, or
 2) fixup the four broken packges using the same method.
 3) something else.

I'm not sure which way to go, please give me your thoughts.

-Ralph

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-16 19:45                               ` Ralph Siemsen
@ 2013-09-16 20:07                                 ` Arnout Vandecappelle
  0 siblings, 0 replies; 25+ messages in thread
From: Arnout Vandecappelle @ 2013-09-16 20:07 UTC (permalink / raw)
  To: buildroot

On 16/09/13 21:45, Ralph Siemsen wrote:
> Many of those packages actually build fine, because they explicitly apply only
> the contents of the debian/patches directory. For example from thttpd.mk:
>
> define THTTPD_DEBIAN_PATCHES
>          if [ -d $(@D)/debian/patches ]; then \
>                  support/scripts/apply-patches.sh $(@D) $(@D)/debian/patches \*.patch; \
>          fi
> endef
>
> The only broken packages are: cvs sysvinit liblockfile setserial
>
> So we have a couple of options:
>   1) revert the original change back to a warning, or
>   2) fixup the four broken packges using the same method.
>   3) something else.
>
> I'm not sure which way to go, please give me your thoughts.

  The issue with e.g. cvs is not that the patch format is wrong, but 
rather that the patch files don't have the .patch extension:

$ ls build/cvs-1.12.13/debian/patches/
10_rsc2log_fix                  67_date_format_option 

11_check_method_crash           68_DSA_external_passwd_file
12_rcs2log_POSIX_sort           69_ext_allowroot
14_ext_expansion                71_cvsbug_tmpfix
15_PATH_MAX_check               80_cvs-repouid-0.1
20_readdir_errno                81_fix_-l
21_getcwd_chroot                85_normalize_correct_roots
25_import-n-X                   86_server_wrapper
30_quieten_syslog_errors        89_history_val-tag_world_writeable
31_ipv6                         90zlib-read-compressed.diff
51_newlines_in_commit_template  93_homedir
55_keyword_alphanumerics        94_parseopts
56_extra_tags                   95_flag_conflicted_copies
60_PAM_support                  96_manpage_fixes
61_remove_-R_warning            97_cvs.info.typo
62_cvsrc_whitespace             98_fix_sparc_sigbus.diff
65_login_cvspass_message        99_copyright
66_64bit_crashfix

  Of course, before your commit, all these patches (except the few ending 
with .diff) were silently ignored, so we can wonder if these debian 
patches are actually even necessary...


  Regards,
  Arnout
-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-16 15:24                             ` Thomas Petazzoni
  2013-09-16 19:45                               ` Ralph Siemsen
@ 2013-09-16 20:49                               ` Peter Korsgaard
  2013-09-16 20:51                                 ` Yann E. MORIN
  1 sibling, 1 reply; 25+ messages in thread
From: Peter Korsgaard @ 2013-09-16 20:49 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> Dear Peter Korsgaard,
 Thomas> On Mon, 16 Sep 2013 09:11:49 +0200, Peter Korsgaard wrote:

 >> So a bunch of non-patch files. I guess our best option is to degrade the
 >> "Unsupported format" check to a warning again?

 Thomas> Another way of seeing that is that using:

 Thomas> <pkg>_PATCH = some-debian-tarball

 Thomas> is not a good idea, and we should have a better way of handling this,
 Thomas> no?

Arguably yes, but this used to work so some people might be relying on
it - So I change it back to only warn about these files.

Nevertheless, it would be good if we could come up with a better way of
handling these Debian patches.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-16 12:46                             ` Ralph Siemsen
@ 2013-09-16 20:50                               ` Peter Korsgaard
  0 siblings, 0 replies; 25+ messages in thread
From: Peter Korsgaard @ 2013-09-16 20:50 UTC (permalink / raw)
  To: buildroot

>>>>> "Ralph" == Ralph Siemsen <ralphs@netwinder.org> writes:

 >> So a bunch of non-patch files. I guess our best option is to degrade the
 >> "Unsupported format" check to a warning again?

 Ralph> Hmm, none of the packages I regularly build have used this feature.

 Ralph> Going back to a warning would be a simple fix. The other option would
 Ralph> be to expand the tarballs and extract only the patches directory.
 Ralph> I'm not sure which option is better...

I've changed it back to just warn as that was the simplest to
do - Thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-16 20:49                               ` Peter Korsgaard
@ 2013-09-16 20:51                                 ` Yann E. MORIN
  2013-09-16 20:57                                   ` Peter Korsgaard
  0 siblings, 1 reply; 25+ messages in thread
From: Yann E. MORIN @ 2013-09-16 20:51 UTC (permalink / raw)
  To: buildroot

Peter, All,

On 2013-09-16 22:49 +0200, Peter Korsgaard spake thusly:
> >>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:
> 
>  Thomas> Dear Peter Korsgaard,
>  Thomas> On Mon, 16 Sep 2013 09:11:49 +0200, Peter Korsgaard wrote:
> 
>  >> So a bunch of non-patch files. I guess our best option is to degrade the
>  >> "Unsupported format" check to a warning again?
> 
>  Thomas> Another way of seeing that is that using:
> 
>  Thomas> <pkg>_PATCH = some-debian-tarball
> 
>  Thomas> is not a good idea, and we should have a better way of handling this,
>  Thomas> no?
> 
> Arguably yes, but this used to work so some people might be relying on
> it - So I change it back to only warn about these files.
> 
> Nevertheless, it would be good if we could come up with a better way of
> handling these Debian patches.

What about extracting the tarballs and only applying patches if the
filename contains (or end up with) '.patch' ?

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [Buildroot] [PATCH v3] apply-patches.sh: detect missing patches
  2013-09-16 20:51                                 ` Yann E. MORIN
@ 2013-09-16 20:57                                   ` Peter Korsgaard
  0 siblings, 0 replies; 25+ messages in thread
From: Peter Korsgaard @ 2013-09-16 20:57 UTC (permalink / raw)
  To: buildroot

>>>>> "Yann" == Yann E MORIN <yann.morin.1998@free.fr> writes:

Hi,

 >> Arguably yes, but this used to work so some people might be relying on
 >> it - So I change it back to only warn about these files.
 >> 
 >> Nevertheless, it would be good if we could come up with a better way of
 >> handling these Debian patches.

 Yann> What about extracting the tarballs and only applying patches if the
 Yann> filename contains (or end up with) '.patch' ?

I'm fairly sure that atleast some Debian packages use .diff. We could
presumably get it to work, but it feels a bit fragile / complicated to me.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2013-09-16 20:57 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-13 16:00 [Buildroot] [PATCH] apply-patches.sh: detect missing patches Ralph Siemsen
2013-08-23 10:31 ` Thomas De Schampheleire
2013-09-05  7:03   ` Thomas De Schampheleire
2013-09-05  8:04     ` Thomas Petazzoni
2013-09-05  8:35       ` Luca Ceresoli
2013-09-05 14:01         ` Yann E. MORIN
2013-09-05 19:20           ` Thomas De Schampheleire
2013-09-11 12:06             ` Ralph Siemsen
2013-09-12  8:08               ` Thomas De Schampheleire
2013-09-13 18:15                 ` [Buildroot] [PATCH v2] " Ralph Siemsen
2013-09-13 18:27                   ` Yann E. MORIN
2013-09-15 13:37                     ` Ralph Siemsen
2013-09-15 14:13                       ` [Buildroot] [PATCH v3] " Ralph Siemsen
2013-09-15 20:09                         ` Peter Korsgaard
2013-09-16  7:11                           ` Peter Korsgaard
2013-09-16 12:46                             ` Ralph Siemsen
2013-09-16 20:50                               ` Peter Korsgaard
2013-09-16 15:24                             ` Thomas Petazzoni
2013-09-16 19:45                               ` Ralph Siemsen
2013-09-16 20:07                                 ` Arnout Vandecappelle
2013-09-16 20:49                               ` Peter Korsgaard
2013-09-16 20:51                                 ` Yann E. MORIN
2013-09-16 20:57                                   ` Peter Korsgaard
2013-09-16 12:36                           ` Ralph Siemsen
2013-09-16 13:42                             ` Peter Korsgaard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox