Thanks for your input. > > -static const char upload_pack_usage[] = "git upload-pack [--strict] > > [--timeout=<n>] <dir>"; > > +static const char * const upload_pack_usage[] = { > > + N_("git upload-pack [--strict] [--timeout=<n>] <dir>"), > > + NULL > > +}; > > Do we need to enumerate the options here now? The usage message should > list the options from "struct options", which make these redundant. > > Something like: > > git -upload-pack [options] <dir> > > probably makes more sense. > Yes, you are right. > Of course, it's hard to read the usage message because... > > > + struct option options[] = { > > + OPT_HIDDEN_BOOL(0, "stateless-rpc", &stateless_rpc, NULL), > > + OPT_HIDDEN_BOOL(0, "advertise-refs", &advertise_refs, NULL), > > + OPT_BOOL(0, "strict", &strict, NULL), > > + OPT_INTEGER(0, "timeout", &timeout, NULL), > > + OPT_END() > > + }; > > You've left the description text for each of these options as NULL, so > running "git-upload-pack -h" segfaults. > > I'm not sure whether it is worth hiding the first two options. We > typically hide "internal" options like this for user-facing programs, so > as not to clutter the "-h" output. But upload-pack isn't a user-facing > program. Anybody who is calling it directly with "-h" may be interested > in even its more esoteric options. > In fact, to do this, I looked at builtin/receive-pack.c, where the parser API was already implemented, and these first two options were hidden. There were also no description for any options, so I thought it was not needed. Maybe we could update this file too ? > As a style nit, we usually spell comparison-with-zero as just: > > if (timeout) > daemon_mode = 1; Because timeout is an int, I personnally think it is more understable to treat it as it. But I'll update itfor consistency. > > + argc = parse_options(argc, (const char **)argv, NULL, options, > > upload_pack_usage, 0); > > Perhaps this is a good opportunity to use "const" in the declaration of > main(), as most other git programs do. Then you can drop this cast. > Ok. > > setup_path(); > > > > - dir = argv[i]; > > + dir = argv[0]; > > > > if (!enter_repo(dir, strict)) > > die("'%s' does not appear to be a git repository", dir); > > Prior to your patch, we used to check: > > - if (i != argc-1) > - usage(upload_pack_usage); > > which ensured that "dir" was non-NULL. But with your patch, we may pass > NULL to enter_repo. It fortunately catches this, but then we pass the > NULL to die, which can segfault (though on glibc systems, stdio is kind > enough to replace it with the "(null)"). > > Related, we silently accept extra arguments after your patch (whereas > before we showed the usage message). You probably want to check "argc == > 1", and otherwise show the usage message. Ok. -Antoine -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html