[PATCH] Share add_files_to_cache() with builtin-add.c
From: Kristian Høgsberg <hidden>
Date: 2016-06-15 22:43:36
Subsystem:
the rest · Maintainer:
Linus Torvalds
This removes the extra copy in builtin-commit.c and uses the update() function from builtin-add.c. Signed-off-by: Kristian Høgsberg <redacted> --- builtin-add.c | 8 +++--- builtin-commit.c | 65 +++++++++++------------------------------------------ commit.h | 2 + 3 files changed, 20 insertions(+), 55 deletions(-)
diff --git a/builtin-add.c b/builtin-add.c
index 5e30380..966e145 100644
--- a/builtin-add.c
+++ b/builtin-add.c@@ -107,7 +107,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);
@@ -116,8 +116,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); }
@@ -218,7 +216,9 @@ int cmd_add(int argc, const char **argv, const char *prefix) } if (take_worktree_changes) { - update(verbose, prefix, argv + i); + if (read_cache() < 0) + die("index file corrupt"); + add_files_to_cache(verbose, prefix, argv + i); goto finish; }
diff --git a/builtin-commit.c b/builtin-commit.c
index 90f23de..3768b53 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c@@ -56,53 +56,6 @@ static struct option commit_options[] = { { OPTION_STRING, "template", 't', &template_file }, }; -/* FIXME: Taken from builtin-add, should be shared. */ - -static void update_callback(struct diff_queue_struct *q, - struct diff_options *opt, void *cbdata) -{ - int i, verbose; - - verbose = *((int *)cbdata); - for (i = 0; i < q->nr; i++) { - struct diff_filepair *p = q->queue[i]; - const char *path = p->one->path; - switch (p->status) { - default: - die("unexpacted diff status %c", p->status); - case DIFF_STATUS_UNMERGED: - case DIFF_STATUS_MODIFIED: - case DIFF_STATUS_TYPE_CHANGED: - add_file_to_cache(path, verbose); - break; - case DIFF_STATUS_DELETED: - remove_file_from_cache(path); - if (verbose) - printf("remove '%s'\n", path); - break; - } - } -} - -static void -add_files_to_cache(int fd, const char **files, const char *prefix) -{ - struct rev_info rev; - - init_revisions(&rev, ""); - setup_revisions(0, NULL, &rev, NULL); - rev.prune_data = get_pathspec(prefix, files); - rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK; - rev.diffopt.format_callback = update_callback; - rev.diffopt.format_callback_data = &verbose; - - run_diff_files(&rev, 0); - refresh_cache(REFRESH_QUIET); - - if (write_cache(fd, active_cache, active_nr) || close(fd)) - die("unable to write new index file"); -} - static char * prepare_index(const char **files, const char *prefix) {
@@ -115,10 +68,16 @@ prepare_index(const char **files, const char *prefix) die("index file corrupt"); if (all) { - add_files_to_cache(fd, files, NULL); + add_files_to_cache(0, prefix, files); + if (write_cache(fd, active_cache, active_nr) || close(fd)) + die("unable to write new index file"); + return lock_file.filename; } else if (also) { - add_files_to_cache(fd, files, prefix); + add_files_to_cache(0, prefix, files); + if (write_cache(fd, active_cache, active_nr) || close(fd)) + die("unable to write new index file"); + return lock_file.filename; }
@@ -146,7 +105,9 @@ prepare_index(const char **files, const char *prefix) */ /* update the user index file */ - add_files_to_cache(fd, files, prefix); + add_files_to_cache(0, prefix, files); + if (write_cache(fd, active_cache, active_nr) || close(fd)) + die("unable to write new index file"); if (!initial_commit) { tree = parse_tree_indirect(head_sha1);
@@ -160,7 +121,9 @@ prepare_index(const char **files, const char *prefix) next_index_lock = xmalloc(sizeof(*next_index_lock)); fd = hold_lock_file_for_update(next_index_lock, git_path("next-index-%d", getpid()), 1); - add_files_to_cache(fd, files, prefix); + add_files_to_cache(0, prefix, files); + if (write_cache(fd, active_cache, active_nr) || close(fd)) + die("unable to write new index file"); return next_index_lock->filename; }
diff --git a/commit.h b/commit.h
index cc8d890..89caa12 100644
--- a/commit.h
+++ b/commit.h@@ -130,6 +130,8 @@ extern struct commit_list *get_shallow_commits(struct object_array *heads, int in_merge_bases(struct commit *, struct commit **, int); extern int interactive_add(void); +extern void add_files_to_cache(int verbose, + const char *prefix, const char **files); extern int rerere(void); #endif /* COMMIT_H */
--
1.5.2.5