diff options
Diffstat (limited to 'builtin-add.c')
-rw-r--r-- | builtin-add.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/builtin-add.c b/builtin-add.c index f61681c3ae..45b14e8a61 100644 --- a/builtin-add.c +++ b/builtin-add.c @@ -111,7 +111,7 @@ static void update_callback(struct diff_queue_struct *q, } } -static void update(int verbose, const char *prefix, const char **files) +void add_files_to_cache(int verbose, const char *prefix, const char **files) { struct rev_info rev; init_revisions(&rev, prefix); @@ -120,8 +120,6 @@ static void update(int verbose, const char *prefix, const char **files) rev.diffopt.output_format = DIFF_FORMAT_CALLBACK; rev.diffopt.format_callback = update_callback; rev.diffopt.format_callback_data = &verbose; - if (read_cache() < 0) - die("index file corrupt"); run_diff_files(&rev, 0); } @@ -155,6 +153,13 @@ static int git_add_config(const char *var, const char *value) return git_default_config(var, value); } +int interactive_add(void) +{ + const char *argv[2] = { "add--interactive", NULL }; + + return run_command_v_opt(argv, RUN_GIT_CMD); +} + static struct lock_file lock_file; static const char ignore_error[] = @@ -183,12 +188,9 @@ int cmd_add(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, builtin_add_options, builtin_add_usage, 0); if (add_interactive) { - const char *args[] = { "add--interactive", NULL }; - if (add_interactive != 1 || orig_argc != 2) die("add --interactive does not take any parameters"); - execv_git_cmd(args); - exit(1); + exit(interactive_add()); } git_config(git_add_config); @@ -196,7 +198,9 @@ int cmd_add(int argc, const char **argv, const char *prefix) newfd = hold_locked_index(&lock_file, 1); if (take_worktree_changes) { - update(verbose, prefix, argv); + if (read_cache() < 0) + die("index file corrupt"); + add_files_to_cache(verbose, prefix, argv); goto finish; } |