On Sat, May 18, 2013 at 11:23:10AM +1000, Allan McRae wrote:
> On 15/05/13 11:08, Phillip Smith wrote:
> > From 2730cfde03792ad847343d7339b7a8cacc6ff81e Mon Sep 17 00:00:00 2001
> > From: Phillip Smith <[email protected]>
> > Date: Wed, 15 May 2013 11:04:03 +1000
> > Subject: [PATCH] makepkg: list files containing $srcdir (FS#31558)
> > 
> > when checking for files in a built package that contain references to
> > $srcdir or $pkgdir_base, show the files that match to assist in
> > debugging.
> > ---
> 
> Much easier to review if the patch is sent inline....
> 
> >  scripts/makepkg.sh.in | 14 +++++++++-----
> >  1 file changed, 9 insertions(+), 5 deletions(-)
> > 
> > diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> > index 75ddfe5..70d39b7 100644
> > --- a/scripts/makepkg.sh.in
> > +++ b/scripts/makepkg.sh.in
> > @@ -1606,11 +1606,15 @@ tidy_install() {
> >     done
> >  
> >     # check for references to the build and package directory
> > -   if find "${pkgdir}" -type f -print0 | xargs -0  grep -q -I "${srcdir}" 
> > ; then
> > -           warning "$(gettext "Package contains reference to %s")" 
> > "\$srcdir"
> > -   fi
> > -   if find "${pkgdir}" -type f -print0 | xargs -0  grep -q -I 
> > "${pkgdirbase}" ; then
> > -           warning "$(gettext "Package contains reference to %s")" 
> > "\$pkgdir"
> > +   srcdir_refs=$(cd "${pkgdir}" && find -type f -print0 | xargs -0 grep -I 
> > -l "${srcdir}")
> > +   if [[ -n $srcdir_refs ]] ; then

While it's equivalent, we've generally checked for array length by using
something like:

  if (( ${#array[*]} )); then

> > +           warning "$(gettext "The following files within the package 
> > reference %s")" "\$srcdir"
> > +           echo $srcdir_refs       # quotes are important to maintain line 
> > breaks
> 
> The lack of quotes indicates that they are not that important!  Also,
> are there issues with files with spaces?

Allan is correct here -- there's problems with files containing spaces
because of how the array is created

> I think it should look like this  (falconindy will correct me if not...)
> 
> srcdir_refs=($(cd ...))
> if [[ -n $s...
>       warning...
>       printf "  %s\n" "${srcdir_refs[@]}"
> 

Close, but there's still word splitting issues here. I'd suggest something like:

  mapfile -t srcdir_refs < \
    <(cd "$pkgdir" && find -type f -exec grep -Il "$srcdir" {} +))

d

> 
> > +   fi
> > +   pkgdir_refs=$(cd "${pkgdir}" && find -type f -print0 | xargs -0 grep -I 
> > -l "${pkgdirbase}")
> > +   if [[ -n $pkgdir_refs ]] ; then
> > +           warning "$(gettext "The following files within the package 
> > reference %s")" "\$pkgdir"
> > +           echo "$pkgdir_refs"     # quotes are important to maintain line 
> > breaks
> >     fi
> >  
> >     if check_option "zipman" "y" && [[ -n ${MAN_DIRS[*]} ]]; then
> 
> 

Reply via email to