git-remote-testpy: hash bytes explicitly
[gitweb.git] / parse-options.c
index 890684166520659106703420fe80be147c7ad75d..67e98a6323e2dd4e3b4b8003806f7dffaff29a64 100644 (file)
@@ -18,15 +18,6 @@ int optbug(const struct option *opt, const char *reason)
        return error("BUG: switch '%c' %s", opt->short_name, reason);
 }
 
-int opterror(const struct option *opt, const char *reason, int flags)
-{
-       if (flags & OPT_SHORT)
-               return error("switch `%c' %s", opt->short_name, reason);
-       if (flags & OPT_UNSET)
-               return error("option `no-%s' %s", opt->long_name, reason);
-       return error("option `%s' %s", opt->long_name, reason);
-}
-
 static int get_arg(struct parse_opt_ctx_t *p, const struct option *opt,
                   int flags, const char **arg)
 {
@@ -393,6 +384,8 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
                        case -1:
                                return parse_options_usage(ctx, usagestr, options, 1);
                        case -2:
+                               if (ctx->opt)
+                                       check_typos(arg + 1, options);
                                goto unknown;
                        }
                        if (ctx->opt)
@@ -474,6 +467,7 @@ int parse_options(int argc, const char **argv, const char *prefix,
                usage_with_options(usagestr, options);
        }
 
+       precompose_argv(argc, argv);
        return parse_options_end(&ctx);
 }
 
@@ -488,7 +482,7 @@ static int usage_argh(const struct option *opts, FILE *outfile)
                        s = literal ? "[%s]" : "[<%s>]";
        else
                s = literal ? " %s" : " <%s>";
-       return fprintf(outfile, s, opts->argh ? opts->argh : "...");
+       return fprintf(outfile, s, opts->argh ? _(opts->argh) : _("..."));
 }
 
 #define USAGE_OPTS_WIDTH 24
@@ -506,13 +500,16 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx,
        if (!err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL)
                fprintf(outfile, "cat <<\\EOF\n");
 
-       fprintf(outfile, "usage: %s\n", *usagestr++);
+       fprintf_ln(outfile, _("usage: %s"), _(*usagestr++));
        while (*usagestr && **usagestr)
-               fprintf(outfile, "   or: %s\n", *usagestr++);
+               /* TRANSLATORS: the colon here should align with the
+                  one in "usage: %s" translation */
+               fprintf_ln(outfile, _("   or: %s"), _(*usagestr++));
        while (*usagestr) {
-               fprintf(outfile, "%s%s\n",
-                               **usagestr ? "    " : "",
-                               *usagestr);
+               if (**usagestr)
+                       fprintf_ln(outfile, _("    %s"), _(*usagestr));
+               else
+                       putchar('\n');
                usagestr++;
        }
 
@@ -526,14 +523,14 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx,
                if (opts->type == OPTION_GROUP) {
                        fputc('\n', outfile);
                        if (*opts->help)
-                               fprintf(outfile, "%s\n", opts->help);
+                               fprintf(outfile, "%s\n", _(opts->help));
                        continue;
                }
                if (!full && (opts->flags & PARSE_OPT_HIDDEN))
                        continue;
 
                pos = fprintf(outfile, "    ");
-               if (opts->short_name && !(opts->flags & PARSE_OPT_NEGHELP)) {
+               if (opts->short_name) {
                        if (opts->flags & PARSE_OPT_NODASH)
                                pos += fprintf(outfile, "%c", opts->short_name);
                        else
@@ -542,9 +539,7 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx,
                if (opts->long_name && opts->short_name)
                        pos += fprintf(outfile, ", ");
                if (opts->long_name)
-                       pos += fprintf(outfile, "--%s%s",
-                               (opts->flags & PARSE_OPT_NEGHELP) ?  "no-" : "",
-                               opts->long_name);
+                       pos += fprintf(outfile, "--%s", opts->long_name);
                if (opts->type == OPTION_NUMBER)
                        pos += fprintf(outfile, "-NUM");
 
@@ -558,7 +553,7 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx,
                        fputc('\n', outfile);
                        pad = USAGE_OPTS_WIDTH;
                }
-               fprintf(outfile, "%*s%s\n", pad + USAGE_GAP, "", opts->help);
+               fprintf(outfile, "%*s%s\n", pad + USAGE_GAP, "", _(opts->help));
        }
        fputc('\n', outfile);
 
@@ -590,3 +585,12 @@ static int parse_options_usage(struct parse_opt_ctx_t *ctx,
        return usage_with_options_internal(ctx, usagestr, opts, 0, err);
 }
 
+#undef opterror
+int opterror(const struct option *opt, const char *reason, int flags)
+{
+       if (flags & OPT_SHORT)
+               return error("switch `%c' %s", opt->short_name, reason);
+       if (flags & OPT_UNSET)
+               return error("option `no-%s' %s", opt->long_name, reason);
+       return error("option `%s' %s", opt->long_name, reason);
+}