Soren Hansen <soren(a)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=173a9f0c48a16c3...
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