Patchwork buildhistory.bbclass: Improve robustness in image file listing

login
register
mail settings
Submitter Otavio Salvador
Date Jan. 23, 2014, 12:11 p.m.
Message ID <1390479065-24299-1-git-send-email-otavio@ossystems.com.br>
Download mbox | patch
Permalink /patch/65605/
State New
Headers show

Comments

Otavio Salvador - Jan. 23, 2014, 12:11 p.m.
The filenames sometimes may have strange names. With the 'awk' script
it handled a limited number of spaces in the filename and a package
installing a file named "test file with spaces" would have its name
truncated.

This patch uses the find's printf formating to simplify the code and
proper handle this case. From a testing image, the only diff produced
is:

,----[ files-in-image.txt diff ]
| --rwxr-xr-x root       root                0 ./usr/bin/test\ file\ with\
| +-rwxr-xr-x root       root                0 ./usr/bin/test file with spaces
`----

The options used are available since findutils 4.2.5, released in 19
Nov 2004, making it available in all supported host distributions.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---
 meta/classes/buildhistory.bbclass | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Otavio Salvador - Jan. 27, 2014, 6:15 p.m.
On Thu, Jan 23, 2014 at 10:11 AM, Otavio Salvador
<otavio@ossystems.com.br> wrote:
> The filenames sometimes may have strange names. With the 'awk' script
> it handled a limited number of spaces in the filename and a package
> installing a file named "test file with spaces" would have its name
> truncated.
>
> This patch uses the find's printf formating to simplify the code and
> proper handle this case. From a testing image, the only diff produced
> is:
>
> ,----[ files-in-image.txt diff ]
> | --rwxr-xr-x root       root                0 ./usr/bin/test\ file\ with\
> | +-rwxr-xr-x root       root                0 ./usr/bin/test file with spaces
> `----
>
> The options used are available since findutils 4.2.5, released in 19
> Nov 2004, making it available in all supported host distributions.
>
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>

ping?
Randy MacLeod - Jan. 27, 2014, 9:52 p.m.
On 14-01-23 07:11 AM, Otavio Salvador wrote:
> The filenames sometimes may have strange names. With the 'awk' script
> it handled a limited number of spaces in the filename and a package
> installing a file named "test file with spaces" would have its name
> truncated.
>
> This patch uses the find's printf formating to simplify the code and
> proper handle this case. From a testing image, the only diff produced
s/proper/properly/
   Yes, I'm with the grammar police; we're here to be helpful.
> is:
>
> ,----[ files-in-image.txt diff ]
> | --rwxr-xr-x root       root                0 ./usr/bin/test\ file\ with\
> | +-rwxr-xr-x root       root                0 ./usr/bin/test file with spaces
> `----
>
> The options used are available since findutils 4.2.5, released in 19
> Nov 2004, making it available in all supported host distributions.

Acked-by: Randy MacLeod <Randy.MacLeod@windriver.com>

Works for me, even on CentOS/RHEL-5.9/10 which does indeed have
findutils > 4.2.5:

$ rpm -qf `which find`
findutils-4.2.27-6.el5

and the find command seems to work as intended:

  $ find jj -printf "%M %-10u %-10g %10s %p -> %l\n"  | cut -c 44-
  jj ->
  jj/usr ->
  jj/usr/bin ->
  jj/usr/bin/test file with spaces ->

../Randy

>
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
> ---
>   meta/classes/buildhistory.bbclass | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
> index e9a9c3b..545a42f 100644
> --- a/meta/classes/buildhistory.bbclass
> +++ b/meta/classes/buildhistory.bbclass
> @@ -385,7 +385,7 @@ buildhistory_get_sdk_installed() {
>   buildhistory_list_files() {
>   	# List the files in the specified directory, but exclude date/time etc.
>   	# This awk script is somewhat messy, but handles where the size is not printed for device files under pseudo
> -	( cd $1 && find . -ls | awk '{ if ( $7 ~ /[0-9]/ ) printf "%s %10-s %10-s %10s %s %s %s\n", $3, $5, $6, $7, $11, $12, $13 ; else printf "%s %10-s %10-s %10s %s %s %s\n", $3, $5, $6, 0, $10, $11, $12 }' | sort -k5 | sed 's/ *$//' > $2 )
> +	( cd $1 && find . -printf "%M %-10u %-10g %10s %p -> %l\n" | sort -k5 | sed 's/ * -> $//' > $2 )
>   }
>
>
>
Otavio Salvador - Jan. 28, 2014, 1:52 a.m.
On Mon, Jan 27, 2014 at 7:52 PM, Randy MacLeod
<randy.macleod@windriver.com> wrote:
> On 14-01-23 07:11 AM, Otavio Salvador wrote:
>>
>> The filenames sometimes may have strange names. With the 'awk' script
>> it handled a limited number of spaces in the filename and a package
>> installing a file named "test file with spaces" would have its name
>> truncated.
>>
>> This patch uses the find's printf formating to simplify the code and
>> proper handle this case. From a testing image, the only diff produced
>
> s/proper/properly/
>   Yes, I'm with the grammar police; we're here to be helpful.
>
>> is:
>>
>> ,----[ files-in-image.txt diff ]
>> | --rwxr-xr-x root       root                0 ./usr/bin/test\ file\ with\
>> | +-rwxr-xr-x root       root                0 ./usr/bin/test file with
>> spaces
>> `----
>>
>> The options used are available since findutils 4.2.5, released in 19
>> Nov 2004, making it available in all supported host distributions.
>
>
> Acked-by: Randy MacLeod <Randy.MacLeod@windriver.com>
>
> Works for me, even on CentOS/RHEL-5.9/10 which does indeed have
> findutils > 4.2.5:
>
> $ rpm -qf `which find`
> findutils-4.2.27-6.el5
>
> and the find command seems to work as intended:
>
>  $ find jj -printf "%M %-10u %-10g %10s %p -> %l\n"  | cut -c 44-
>  jj ->
>  jj/usr ->
>  jj/usr/bin ->
>  jj/usr/bin/test file with spaces ->

Richard, do you want me to send a v2 or can you fix the typo when applying it?
Paul Eggleton - Jan. 28, 2014, 8:59 a.m.
On Monday 27 January 2014 16:52:45 Randy MacLeod wrote:
> On 14-01-23 07:11 AM, Otavio Salvador wrote:
> > The filenames sometimes may have strange names. With the 'awk' script
> > it handled a limited number of spaces in the filename and a package
> > installing a file named "test file with spaces" would have its name
> > truncated.
> > 
> > This patch uses the find's printf formating to simplify the code and
> > proper handle this case. From a testing image, the only diff produced
> 
> s/proper/properly/
>    Yes, I'm with the grammar police; we're here to be helpful.
> 
> > is:
> > 
> > ,----[ files-in-image.txt diff ]
> > 
> > | --rwxr-xr-x root       root                0 ./usr/bin/test\ file\ with\
> > | +-rwxr-xr-x root       root                0 ./usr/bin/test file with
> > | spaces> 
> > `----
> > 
> > The options used are available since findutils 4.2.5, released in 19
> > Nov 2004, making it available in all supported host distributions.
> 
> Acked-by: Randy MacLeod <Randy.MacLeod@windriver.com>
> 
> Works for me, even on CentOS/RHEL-5.9/10 which does indeed have
> findutils > 4.2.5:
> 
> $ rpm -qf `which find`
> findutils-4.2.27-6.el5
> 
> and the find command seems to work as intended:
> 
>   $ find jj -printf "%M %-10u %-10g %10s %p -> %l\n"  | cut -c 44-
>   jj ->
>   jj/usr ->
>   jj/usr/bin ->
>   jj/usr/bin/test file with spaces ->

So I think this is mostly a good change, however, we don't want those -> if 
the file isn't a symlink. Otavio, can you fix that?

Thanks,
Paul
Phil Blundell - Jan. 28, 2014, 9:19 a.m.
On Tue, 2014-01-28 at 08:59 +0000, Paul Eggleton wrote:
> So I think this is mostly a good change, however, we don't want those -> if 
> the file isn't a symlink. Otavio, can you fix that?

Isn't that what the sed 's/ -> $//' in the original patch is dealing
with?

p.
Paul Eggleton - Jan. 28, 2014, 9:34 a.m.
On Tuesday 28 January 2014 09:19:59 Phil Blundell wrote:
> On Tue, 2014-01-28 at 08:59 +0000, Paul Eggleton wrote:
> > So I think this is mostly a good change, however, we don't want those ->
> > if the file isn't a symlink. Otavio, can you fix that?
> 
> Isn't that what the sed 's/ -> $//' in the original patch is dealing
> with?

Oops, you're right. Ignore this :)

Cheers,
Paul
Richard Purdie - Jan. 28, 2014, 11:33 a.m.
On Mon, 2014-01-27 at 23:52 -0200, Otavio Salvador wrote:
> On Mon, Jan 27, 2014 at 7:52 PM, Randy MacLeod
> <randy.macleod@windriver.com> wrote:
> > On 14-01-23 07:11 AM, Otavio Salvador wrote:
> >>
> >> The filenames sometimes may have strange names. With the 'awk' script
> >> it handled a limited number of spaces in the filename and a package
> >> installing a file named "test file with spaces" would have its name
> >> truncated.
> >>
> >> This patch uses the find's printf formating to simplify the code and
> >> proper handle this case. From a testing image, the only diff produced
> >
> > s/proper/properly/
> >   Yes, I'm with the grammar police; we're here to be helpful.
> >
> >> is:
> >>
> >> ,----[ files-in-image.txt diff ]
> >> | --rwxr-xr-x root       root                0 ./usr/bin/test\ file\ with\
> >> | +-rwxr-xr-x root       root                0 ./usr/bin/test file with
> >> spaces
> >> `----
> >>
> >> The options used are available since findutils 4.2.5, released in 19
> >> Nov 2004, making it available in all supported host distributions.
> >
> >
> > Acked-by: Randy MacLeod <Randy.MacLeod@windriver.com>
> >
> > Works for me, even on CentOS/RHEL-5.9/10 which does indeed have
> > findutils > 4.2.5:
> >
> > $ rpm -qf `which find`
> > findutils-4.2.27-6.el5
> >
> > and the find command seems to work as intended:
> >
> >  $ find jj -printf "%M %-10u %-10g %10s %p -> %l\n"  | cut -c 44-
> >  jj ->
> >  jj/usr ->
> >  jj/usr/bin ->
> >  jj/usr/bin/test file with spaces ->
> 
> Richard, do you want me to send a v2 or can you fix the typo when applying it?

I fixed this one up and merged it.

Cheers,

Richard

Patch

diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
index e9a9c3b..545a42f 100644
--- a/meta/classes/buildhistory.bbclass
+++ b/meta/classes/buildhistory.bbclass
@@ -385,7 +385,7 @@  buildhistory_get_sdk_installed() {
 buildhistory_list_files() {
 	# List the files in the specified directory, but exclude date/time etc.
 	# This awk script is somewhat messy, but handles where the size is not printed for device files under pseudo
-	( cd $1 && find . -ls | awk '{ if ( $7 ~ /[0-9]/ ) printf "%s %10-s %10-s %10s %s %s %s\n", $3, $5, $6, $7, $11, $12, $13 ; else printf "%s %10-s %10-s %10s %s %s %s\n", $3, $5, $6, 0, $10, $11, $12 }' | sort -k5 | sed 's/ *$//' > $2 )
+	( cd $1 && find . -printf "%M %-10u %-10g %10s %p -> %l\n" | sort -k5 | sed 's/ * -> $//' > $2 )
 }