git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Test failures in t4034

From
Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Date
Sep 1, 2012, 17:43 UTC
Message-ID
<5042494D.9040401@ramsay1.demon.co.uk>
In-Reply-To
<7v1uizdhi7.fsf@alter.siamese.dyndns.org>
Junio C Hamano wrote:
> Ramsay Jones <ramsay@ramsay1.demon.co.uk> writes:
> 
[snip]
Show 25 quoted lines
>> diff --git a/test-regex.c b/test-regex.c
>> new file mode 100644
>> index 0000000..9259985
>> --- /dev/null
>> +++ b/test-regex.c
>> @@ -0,0 +1,35 @@
>> +#include <stdlib.h>
>> +#include <stdio.h>
>> +#include <stdarg.h>
>> +#include <sys/types.h>
>> +#include <regex.h>
>> +
>> +static void die(const char *fmt, ...)
>> +{
>> +	va_list p;
>> +
>> +	va_start(p, fmt);
>> +	vfprintf(stderr, fmt, p);
>> +	va_end(p);
>> +	fputc('\n', stderr);
>> +	exit(128);
>> +}
> 
> Looks like a bit of overkill for only two call sites, whose output
> we would never see because it is behind the test, but OK.

Yes, there was a net increase in the line count when I introduced die(), but the main program flow was less cluttered by error handling. The net result looked much better, so I thought it was worth it.

What may not be too obvious, however, is that test-regex.c was written to be independent of git. You should be able to compile the (single) file on any POSIX system to determine if the system regex routines suffer this problem. (It was also supposed to be quiet, unless it die()-ed, and provide the result via the exit code).

Given that I'm now building it as part of git, I should have simply #included <git-compat-util.h> and used the die() routine from libgit.a (since I'm now *relying* on test-regex being linked with libgit.a).

Show 19 quoted lines
>> +int main(int argc, char **argv)
>> +{
>> +	char *pat = "[^={} \t]+";
>> +	char *str = "={}\nfred";
>> +	regex_t r;
>> +	regmatch_t m[1];
>> +
>> +	if (regcomp(&r, pat, REG_EXTENDED | REG_NEWLINE))
>> +		die("failed regcomp() for pattern '%s'", pat);
>> +	if (regexec(&r, str, 1, m, 0))
>> +		die("no match of pattern '%s' to string '%s'", pat, str);
>> +
>> +	/* http://sourceware.org/bugzilla/show_bug.cgi?id=3957  */
>> +	if (m[0].rm_so == 3) /* matches '\n' when it should not */
>> +		exit(1);
> 
> This could be the third call site of die() that tells the user to
> build with NO_REGEX=1.  Then "cd t && sh t0070-fundamental.sh -i -v" would
> give that message directly to the user.

Hmm, even without "-i -v", it's *very* clear what is going on, but sure it wouldn't hurt either. (Also, I wanted to be able to distinguish an exit via die() from a "test failed" error return).

So, new (tested) version of the patch comming.

ATB, Ramsay Jones

Previous: Junio C HamanoNext: Junio C Hamano
Message 8 of 10 in “Test failures in t4034”
  1. Brian GernhardtAug 18, 2012
  2. Junio C HamanoAug 19, 2012
  3. Ramsay JonesAug 19, 2012
  4. Johannes SixtAug 19, 2012
  5. Junio C HamanoAug 20, 2012
  6. Ramsay JonesAug 21, 2012
  7. Junio C HamanoAug 21, 2012
  8. Ramsay JonesSep 1, 2012
  9. Junio C HamanoSep 3, 2012
  10. Junio C HamanoAug 19, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.