On Fri, May 5, 2017 at 8:43 PM, Daniel Ferreira <[email protected]> wrote:
> Create a builtin helper for git-add--interactive, which right now is
> only able to reproduce git-add--interactive.perl's status_cmd()
> function, providing a summarized diff numstat to the user.
I'm not a user of add -i and didn't review the main logic in detail,
but I ran this, and aside from two issues this LGTM:
* You missed a trailing \n in the output, so your formatting is
different from the current behavior.
* You should be using the getopt API instead of rolling your own.
Fixes for both below, thanks a lot for hacking on this. As you pointed
out this doesn't help with removing any of the perl code for now, but
after replacing a few more command modes we can start chopping away at
the perl code.
diff --git a/builtin/add-interactive--helper.c
b/builtin/add-interactive--helper.c
index 97ca1b38dc..ea0f790bd3 100644
--- a/builtin/add-interactive--helper.c
+++ b/builtin/add-interactive--helper.c
@@ -226,6 +226,7 @@ static void print_modified(void)
printf(modified_fmt, index_changes, worktree_changes, f.path);
printf("\n");
}
+ printf("\n");
}
static void status_cmd(void)
@@ -233,26 +234,31 @@ static void status_cmd(void)
print_modified();
}
-static const char add_interactive_helper_usage[] =
-"git add-interactive--helper <command>";
+static const char * const builtin_add_interactive_helper_usage[] = {
+ N_("git add-interactive--helper <command>"),
+ NULL
+};
int cmd_add_interactive__helper(int argc, const char **argv, const char
*prefix)
{
- int i, found_opt = 0;
-
- git_config(git_add_interactive_config, NULL);
+ int opt_status = 0;
- for (i = 1; i < argc; i++) {
- const char *arg = argv[i];
+ struct option options[] = {
+ OPT_BOOL(0, "status", &opt_status,
+ N_("print status information with diffstat")),
+ OPT_END()
+ };
- if (!strcmp(arg, "--status")) {
- status_cmd();
- found_opt = 1;
- }
- }
-
- if (!found_opt)
- usage(add_interactive_helper_usage);
+ git_config(git_add_interactive_config, NULL);
+ argc = parse_options(argc, argv, NULL, options,
+ builtin_add_interactive_helper_usage,
+ PARSE_OPT_KEEP_ARGV0);
+
+ if (opt_status)
+ status_cmd();
+ else
+ usage_with_options(builtin_add_interactive_helper_usage,
+ options);
return 0;
}
--
2.11.0