[Libvir] make syntax-check fails with bzr checkouts

Jim Meyering jim at meyering.net
Wed Apr 30 10:19:51 UTC 2008


Soren Hansen <soren at ubuntu.com> wrote:
> The bzr problem was obviously that vc-list-files didn't support bzr.
>
> Failing with CVS was caused by a bashism in vc-list-files. In Ubuntu,
> /bin/sh points to dash instead of bash, but vc-list-files had
> "#!/bin/sh".
>
> This patch fixes both issues:

Hi Soren,

Thanks for the patch.

> === modified file 'build-aux/vc-list-files'
> --- build-aux/vc-list-files	2008-02-01 19:47:07 +0000
> +++ build-aux/vc-list-files	2008-04-30 07:43:06 +0000
> @@ -39,6 +39,8 @@
>    exec git ls-files "$dir"
>  elif test -d .hg; then
>    exec hg locate "$dir/*"
> +elif test -d .bzr; then
> +  exec bzr ls --versioned --kind=file ${*:---from-root}

Unfortunately, the above no longer applies, due to upstream (gnulib)
changes to deal with non-srcdir (aka VPATH) builds.  I updated
libvirt from gnulib just yesterday, and will again, later today.

Can you adapt your patch to make bzr work with the newer version?

>  	}}'				\
> -      $(find ${*-*} -name Entries -print) /dev/null;
> +      $(find ${*:-*} -name Entries -print) /dev/null;

Thanks for reporting that.
Note though that POSIX appears to require the behavior that bash exhibits,
so calling this a bashism doesn't seem right.  However, in the spec,
just beneath the part that talks about ${parameter-word} there are escape
clauses for e.g., ${#parameter} and ${parameter%word} etc.:

  If parameter is '*' or '@', the result of the expansion is unspecified.

but there is no such exemption for the ${parameter-word} syntax.
All that to say that this looks more like an infelicity in dash,
and since Ubuntu relies on it, you may want to investigate further.

However, back to vc-list-files, that awk-based code is so hard
to reach for me -- I avoid CVS, and when I do use it, I have cvsu
in my path -- that it is rarely tested.

Anyhow the use of "*" there is unnecessary, and in addition,
there was a subtle (but probably never problematic) quoting bug.
Here's the patch I've pushed to gnulib:

  http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=commitdiff;h=173a9f0c48a16c3507f8

If you care about the CVS-oriented cases, there are two more patches.

Note that the awk+find-based code *still* fails in some pathological
cases, e.g., with a file named 'a b/CVS/Entries' in your hierarchy,
but the response there is "just don't do that".
Or depend on find -print0+xargs -0, but that would be counter-productive
just to avoid a warning in such an unlikely scenario.

Jim




More information about the libvir-list mailing list