@matheusbsbs / matheus-bagliano / commits / 1e57208ef0
Fork 0

diff: parse separate options --stat-width n, --stat-name-width n

Part of a campaign for unstuck forms of options. [jn: with some refactoring] Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Matthieu Moy committed Aug 5, 2010 at 10:22 UTC 1e57208ef0e48d1d852679a72d3128da333d028d
1 file changed +23 -5
diff.c
+23 -5
@@ -3035,16 +3035,34 @@ static int stat_opt(struct diff_options *options, const char **av)
3035 char *end;
3036 int width = options->stat_width;
3037 int name_width = options->stat_name_width;
3038 + int argcount = 1;
3039
3040 arg += strlen("--stat");
3041 end = (char *)arg;
3042
3043 switch (*arg) {
3044 case '-':
3044 - if (!prefixcmp(arg, "-width="))
3045 - width = strtoul(arg + 7, &end, 10);
3046 - else if (!prefixcmp(arg, "-name-width="))
3047 - name_width = strtoul(arg + 12, &end, 10);
3045 + if (!prefixcmp(arg, "-width")) {
3046 + arg += strlen("-width");
3047 + if (*arg == '=')
3048 + width = strtoul(arg + 1, &end, 10);
3049 + else if (!*arg && !av[1])
3050 + die("Option '--stat-width' requires a value");
3051 + else if (!*arg) {
3052 + width = strtoul(av[1], &end, 10);
3053 + argcount = 2;
3054 + }
3055 + } else if (!prefixcmp(arg, "-name-width")) {
3056 + arg += strlen("-name-width");
3057 + if (*arg == '=')
3058 + name_width = strtoul(arg + 1, &end, 10);
3059 + else if (!*arg && !av[1])
3060 + die("Option '--stat-name-width' requires a value");
3061 + else if (!*arg) {
3062 + name_width = strtoul(av[1], &end, 10);
3063 + argcount = 2;
3064 + }
3065 + }
3066 break;
3067 case '=':
3068 width = strtoul(arg+1, &end, 10);
@@ -3058,7 +3076,7 @@ static int stat_opt(struct diff_options *options, const char **av)
3076 options->output_format |= DIFF_FORMAT_DIFFSTAT;
3077 options->stat_name_width = name_width;
3078 options->stat_width = width;
3061 - return 1;
3079 + return argcount;
3080 }
3081
3082 int diff_opt_parse(struct diff_options *options, const char **av, int ac)