diff --git a/builtin-add.c b/builtin-add.c index 581a2a1748..c422a62f32 100644 --- a/builtin-add.c +++ b/builtin-add.c @@ -131,10 +131,37 @@ static const char **validate_pathspec(int argc, const char **argv, const char *p return pathspec; } +int run_add_interactive(const char *revision, const char *patch_mode, + const char **pathspec) +{ + int status, ac, pc = 0; + const char **args; + + if (pathspec) + while (pathspec[pc]) + pc++; + + args = xcalloc(sizeof(const char *), (pc + 5)); + ac = 0; + args[ac++] = "add--interactive"; + if (patch_mode) + args[ac++] = patch_mode; + if (revision) + args[ac++] = revision; + args[ac++] = "--"; + if (pc) { + memcpy(&(args[ac]), pathspec, sizeof(const char *) * pc); + ac += pc; + } + args[ac] = NULL; + + status = run_command_v_opt(args, RUN_GIT_CMD); + free(args); + return status; +} + int interactive_add(int argc, const char **argv, const char *prefix) { - int status, ac; - const char **args; const char **pathspec = NULL; if (argc) { @@ -143,21 +170,9 @@ int interactive_add(int argc, const char **argv, const char *prefix) return -1; } - args = xcalloc(sizeof(const char *), (argc + 4)); - ac = 0; - args[ac++] = "add--interactive"; - if (patch_interactive) - args[ac++] = "--patch"; - args[ac++] = "--"; - if (argc) { - memcpy(&(args[ac]), pathspec, sizeof(const char *) * argc); - ac += argc; - } - args[ac] = NULL; - - status = run_command_v_opt(args, RUN_GIT_CMD); - free(args); - return status; + return run_add_interactive(NULL, + patch_interactive ? "--patch" : NULL, + pathspec); } static int edit_patch(int argc, const char **argv, const char *prefix) diff --git a/commit.h b/commit.h index ba9f63813e..339f1f6f04 100644 --- a/commit.h +++ b/commit.h @@ -137,6 +137,8 @@ int is_descendant_of(struct commit *, struct commit_list *); int in_merge_bases(struct commit *, struct commit **, int); extern int interactive_add(int argc, const char **argv, const char *prefix); +extern int run_add_interactive(const char *revision, const char *patch_mode, + const char **pathspec); static inline int single_parent(struct commit *commit) {