Option parsing now uses the parser API instead of a local parser. Code is now more compact. Signed-off-by: Antoine Queru <antoine.queru@xxxxxxxxxxxxxxx> Signed-off-by: Matthieu Moy <matthieu.moy@xxxxxxxxxxxxxxx> --- This is our first project as a warm up. It was taken from the GSoC microproject list. upload-pack.c | 51 ++++++++++++++++----------------------------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/upload-pack.c b/upload-pack.c index dc802a0..80f65eb 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -14,8 +14,12 @@ #include "sigchain.h" #include "version.h" #include "string-list.h" +#include "parse-options.h" -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 +}; /* Remember to update object flag allocation in object.h */ #define THEY_HAVE (1u << 11) @@ -820,49 +824,26 @@ static int upload_pack_config(const char *var, const char *value, void *unused) int main(int argc, char **argv) { char *dir; - int i; int strict = 0; + 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() + }; git_setup_gettext(); packet_trace_identity("upload-pack"); git_extract_argv0_path(argv[0]); check_replace_refs = 0; - - for (i = 1; i < argc; i++) { - char *arg = argv[i]; - - if (arg[0] != '-') - break; - if (!strcmp(arg, "--advertise-refs")) { - advertise_refs = 1; - continue; - } - if (!strcmp(arg, "--stateless-rpc")) { - stateless_rpc = 1; - continue; - } - if (!strcmp(arg, "--strict")) { - strict = 1; - continue; - } - if (starts_with(arg, "--timeout=")) { - timeout = atoi(arg+10); - daemon_mode = 1; - continue; - } - if (!strcmp(arg, "--")) { - i++; - break; - } - } - - if (i != argc-1) - usage(upload_pack_usage); - + argc = parse_options(argc, (const char **)argv, NULL, options, upload_pack_usage, 0); + if (timeout != 0) + daemon_mode = 1; setup_path(); - dir = argv[i]; + dir = argv[0]; if (!enter_repo(dir, strict)) die("'%s' does not appear to be a git repository", dir); -- 2.8.2.403.gaa9c3f6 -- 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