Re: Problem with "dashless options"
- From
Jeff King <peff@peff.net>
- Date
- Sep 9, 2009, 14:34 UTC
- Message-ID
- <20090909143455.GA10092@sigill.intra.peff.net>
- In-Reply-To
- <D69FA890-4249-4DC9-B8AE-C9F105F1AD3B@isy.liu.se>
On Wed, Sep 09, 2009 at 03:21:30PM +0200, Henrik Tidefelt wrote:
Show 6 quoted lines
> Yesterday I installed a fresh git (1.6.4.2) on my system using > MacPorts. Some of the git sub-commands work fine (for instance, > checkout, status, remote), while push gives an error as follows: > > $ git push isy next > fatal: BUG: dashless options don't support arguments
Hmm. Very strange. The only code path that triggers this is an option declared with PARSE_OPT_NODASH but not PARSE_OPT_NOARG. But there are only two options in all of git that use PARSE_OPT_NODASH, and:
1. They are in git grep, not git push.
2. They correctly have PARSE_OPT_NOARG set.
Which leads me to believe that something is writing random cruft on top of the options struct. Either a stack overflow, or some issue related to your compiler (either a bug in the compiler, or something non-portable we are doing).
Can you try applying the patch below which will at least give us a bit more information about the offending option?
Also, does 1.6.4.1 work OK? Or any other earlier version? If so, can you try bisecting?
diff --git a/parse-options.c b/parse-options.c index f7ce523..e93eb67 100644 --- a/parse-options.c +++ b/parse-options.c @@ -275,7 +275,15 @@ static int parse_nodash_opt(struct parse_opt_ctx_t *p, const char *arg, continue; if ((options->flags & PARSE_OPT_OPTARG) || !(options->flags & PARSE_OPT_NOARG)) - die("BUG: dashless options don't support arguments"); + die("BUG: dashless options don't support arguments\n" + "buggy option is:\n" + " type: %d\n" + " short_name: %c\n" + " long_name: %s\n" + " flags: %d\n", + options->type, options->short_name, + options->long_name, options->flags + ); if (!(options->flags & PARSE_OPT_NONEG)) die("BUG: dashless options don't support negation"); if (options->long_name)