diff options
Diffstat (limited to 'submodule.c')
-rw-r--r-- | submodule.c | 66 |
1 files changed, 36 insertions, 30 deletions
diff --git a/submodule.c b/submodule.c index fa25888783..12a2503fda 100644 --- a/submodule.c +++ b/submodule.c @@ -1,3 +1,5 @@ +#define NO_THE_INDEX_COMPATIBILITY_MACROS + #include "cache.h" #include "repository.h" #include "config.h" @@ -55,14 +57,15 @@ int is_gitmodules_unmerged(const struct index_state *istate) * future version when we learn to stage the changes we do ourselves without * staging any previous modifications. */ -int is_staging_gitmodules_ok(const struct index_state *istate) +int is_staging_gitmodules_ok(struct index_state *istate) { int pos = index_name_pos(istate, GITMODULES_FILE, strlen(GITMODULES_FILE)); if ((pos >= 0) && (pos < istate->cache_nr)) { struct stat st; if (lstat(GITMODULES_FILE, &st) == 0 && - ce_match_stat(istate->cache[pos], &st, CE_MATCH_IGNORE_FSMONITOR) & DATA_CHANGED) + ie_match_stat(istate, istate->cache[pos], &st, + CE_MATCH_IGNORE_FSMONITOR) & DATA_CHANGED) return 0; } @@ -143,9 +146,9 @@ int remove_path_from_gitmodules(const char *path) return 0; } -void stage_updated_gitmodules(void) +void stage_updated_gitmodules(struct index_state *istate) { - if (add_file_to_cache(GITMODULES_FILE, 0)) + if (add_file_to_index(istate, GITMODULES_FILE, 0)) die(_("staging updated .gitmodules failed")); } @@ -587,7 +590,7 @@ void show_submodule_inline_diff(struct diff_options *o, const char *path, struct object_id *one, struct object_id *two, unsigned dirty_submodule) { - const struct object_id *old = the_hash_algo->empty_tree, *new = the_hash_algo->empty_tree; + const struct object_id *old_oid = the_hash_algo->empty_tree, *new_oid = the_hash_algo->empty_tree; struct commit *left = NULL, *right = NULL; struct commit_list *merge_bases = NULL; struct child_process cp = CHILD_PROCESS_INIT; @@ -602,9 +605,9 @@ void show_submodule_inline_diff(struct diff_options *o, const char *path, goto done; if (left) - old = one; + old_oid = one; if (right) - new = two; + new_oid = two; cp.git_cmd = 1; cp.dir = path; @@ -627,7 +630,7 @@ void show_submodule_inline_diff(struct diff_options *o, const char *path, argv_array_pushf(&cp.args, "--dst-prefix=%s%s/", o->b_prefix, path); } - argv_array_push(&cp.args, oid_to_hex(old)); + argv_array_push(&cp.args, oid_to_hex(old_oid)); /* * If the submodule has modified content, we will diff against the * work tree, under the assumption that the user has asked for the @@ -635,7 +638,7 @@ void show_submodule_inline_diff(struct diff_options *o, const char *path, * haven't yet been committed to the submodule yet. */ if (!(dirty_submodule & DIRTY_SUBMODULE_MODIFIED)) - argv_array_push(&cp.args, oid_to_hex(new)); + argv_array_push(&cp.args, oid_to_hex(new_oid)); prepare_submodule_repo_env(&cp.env_array); if (start_command(&cp)) @@ -828,7 +831,7 @@ static int check_has_commit(const struct object_id *oid, void *data) return 0; default: die(_("submodule entry '%s' (%s) is a %s, not a commit"), - cb->path, oid_to_hex(oid), typename(type)); + cb->path, oid_to_hex(oid), type_name(type)); } } @@ -1178,7 +1181,7 @@ int submodule_touches_in_range(struct object_id *excl_oid, struct submodule_parallel_fetch { int count; struct argv_array args; - const char *work_tree; + struct repository *r; const char *prefix; int command_line_option; int default_option; @@ -1199,7 +1202,7 @@ static int get_fetch_recurse_config(const struct submodule *submodule, int fetch_recurse = submodule->fetch_recurse; key = xstrfmt("submodule.%s.fetchRecurseSubmodules", submodule->name); - if (!repo_config_get_string_const(the_repository, key, &value)) { + if (!repo_config_get_string_const(spf->r, key, &value)) { fetch_recurse = parse_fetch_recurse_submodules_arg(key, value); } free(key); @@ -1218,11 +1221,11 @@ static int get_next_submodule(struct child_process *cp, int ret = 0; struct submodule_parallel_fetch *spf = data; - for (; spf->count < active_nr; spf->count++) { + for (; spf->count < spf->r->index->cache_nr; spf->count++) { struct strbuf submodule_path = STRBUF_INIT; struct strbuf submodule_git_dir = STRBUF_INIT; struct strbuf submodule_prefix = STRBUF_INIT; - const struct cache_entry *ce = active_cache[spf->count]; + const struct cache_entry *ce = spf->r->index->cache[spf->count]; const char *git_dir, *default_argv; const struct submodule *submodule; struct submodule default_submodule = SUBMODULE_INIT; @@ -1230,7 +1233,7 @@ static int get_next_submodule(struct child_process *cp, if (!S_ISGITLINK(ce->ce_mode)) continue; - submodule = submodule_from_path(&null_oid, ce->name); + submodule = submodule_from_cache(spf->r, &null_oid, ce->name); if (!submodule) { const char *name = default_name_or_path(ce->name); if (name) { @@ -1256,7 +1259,7 @@ static int get_next_submodule(struct child_process *cp, continue; } - strbuf_addf(&submodule_path, "%s/%s", spf->work_tree, ce->name); + strbuf_repo_worktree_path(&submodule_path, spf->r, "%s", ce->name); strbuf_addf(&submodule_git_dir, "%s/.git", submodule_path.buf); strbuf_addf(&submodule_prefix, "%s%s/", spf->prefix, ce->name); git_dir = read_gitfile(submodule_git_dir.buf); @@ -1309,7 +1312,8 @@ static int fetch_finish(int retvalue, struct strbuf *err, return 0; } -int fetch_populated_submodules(const struct argv_array *options, +int fetch_populated_submodules(struct repository *r, + const struct argv_array *options, const char *prefix, int command_line_option, int default_option, int quiet, int max_parallel_jobs) @@ -1317,16 +1321,16 @@ int fetch_populated_submodules(const struct argv_array *options, int i; struct submodule_parallel_fetch spf = SPF_INIT; - spf.work_tree = get_git_work_tree(); + spf.r = r; spf.command_line_option = command_line_option; spf.default_option = default_option; spf.quiet = quiet; spf.prefix = prefix; - if (!spf.work_tree) + if (!r->worktree) goto out; - if (read_cache() < 0) + if (repo_read_index(r) < 0) die("index file corrupt"); argv_array_push(&spf.args, "fetch"); @@ -1574,8 +1578,8 @@ static void submodule_reset_index(const char *path) * pass NULL for old or new respectively. */ int submodule_move_head(const char *path, - const char *old, - const char *new, + const char *old_head, + const char *new_head, unsigned flags) { int ret = 0; @@ -1596,7 +1600,7 @@ int submodule_move_head(const char *path, else error_code_ptr = NULL; - if (old && !is_submodule_populated_gently(path, error_code_ptr)) + if (old_head && !is_submodule_populated_gently(path, error_code_ptr)) return 0; sub = submodule_from_path(&null_oid, path); @@ -1604,14 +1608,14 @@ int submodule_move_head(const char *path, if (!sub) die("BUG: could not get submodule information for '%s'", path); - if (old && !(flags & SUBMODULE_MOVE_HEAD_FORCE)) { + if (old_head && !(flags & SUBMODULE_MOVE_HEAD_FORCE)) { /* Check if the submodule has a dirty index. */ if (submodule_has_dirty_index(sub)) return error(_("submodule '%s' has dirty index"), path); } if (!(flags & SUBMODULE_MOVE_HEAD_DRY_RUN)) { - if (old) { + if (old_head) { if (!submodule_uses_gitfile(path)) absorb_git_dir_into_superproject("", path, ABSORB_GITDIR_RECURSE_SUBMODULES); @@ -1625,7 +1629,7 @@ int submodule_move_head(const char *path, submodule_reset_index(path); } - if (old && (flags & SUBMODULE_MOVE_HEAD_FORCE)) { + if (old_head && (flags & SUBMODULE_MOVE_HEAD_FORCE)) { char *gitdir = xstrfmt("%s/modules/%s", get_git_common_dir(), sub->name); connect_work_tree_and_git_dir(path, gitdir); @@ -1653,8 +1657,10 @@ int submodule_move_head(const char *path, else argv_array_push(&cp.args, "-m"); - argv_array_push(&cp.args, old ? old : EMPTY_TREE_SHA1_HEX); - argv_array_push(&cp.args, new ? new : EMPTY_TREE_SHA1_HEX); + if (!(flags & SUBMODULE_MOVE_HEAD_FORCE)) + argv_array_push(&cp.args, old_head ? old_head : EMPTY_TREE_SHA1_HEX); + + argv_array_push(&cp.args, new_head ? new_head : EMPTY_TREE_SHA1_HEX); if (run_command(&cp)) { ret = -1; @@ -1662,7 +1668,7 @@ int submodule_move_head(const char *path, } if (!(flags & SUBMODULE_MOVE_HEAD_DRY_RUN)) { - if (new) { + if (new_head) { child_process_init(&cp); /* also set the HEAD accordingly */ cp.git_cmd = 1; @@ -1671,7 +1677,7 @@ int submodule_move_head(const char *path, prepare_submodule_repo_env(&cp.env_array); argv_array_pushl(&cp.args, "update-ref", "HEAD", - "--no-deref", new, NULL); + "--no-deref", new_head, NULL); if (run_command(&cp)) { ret = -1; |