read-tree: add "--super-prefix" option, eliminate global
The "--super-prefix" option to "git" was initially added in [1] for use with "ls-files"[2], and shortly thereafter "submodule--helper"[3] and "grep"[4]. It wasn't until [5] that "read-tree" made use of it. At the time [5] made sense, but since then we've made "ls-files" recurse in-process in [6], "grep" in [7], and finally "submodule--helper" in the preceding commits. Let's also remove it from "read-tree", which allows us to remove the option to "git" itself. We can do this because the only remaining user of it is the submodule API, which will now invoke "read-tree" with its new "--super-prefix" option. It will only do so when the "submodule_move_head()" function is called. That "submodule_move_head()" function was then only invoked by "read-tree" itself, but now rather than setting an environment variable to pass "--super-prefix" between cmd_read_tree() we: - Set a new "super_prefix" in "struct unpack_trees_options". The "super_prefixed()" function in "unpack-trees.c" added in [5] will now use this, rather than get_super_prefix() looking up the environment variable we set earlier in the same process. - Add the same field to the "struct checkout", which is only needed to ferry the "super_prefix" in the "struct unpack_trees_options" all the way down to the "entry.c" callers of "submodule_move_head()". Those calls which used the super prefix all originated in "cmd_read_tree()". The only other caller is the "unlink_entry()" caller in "builtin/checkout.c", which now passes a "NULL". 1.74866d7579
(git: make super-prefix option, 2016-10-07) 2.e77aa336f1
(ls-files: optionally recurse into submodules, 2016-10-07) 3.89c8626557
(submodule helper: support super prefix, 2016-12-08) 4.0281e487fd
(grep: optionally recurse into submodules, 2016-12-16) 5.3d415425c7
(unpack-trees: support super-prefix option, 2017-01-17) 6.188dce131f
(ls-files: use repository object, 2017-06-22) 7.f9ee2fcdfa
(grep: recurse in-process using 'struct repository', 2017-08-02) Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
f5a6be9d54
commit
4002ec3dcf
12
entry.c
12
entry.c
@ -383,7 +383,7 @@ static int write_entry(struct cache_entry *ce, char *path, struct conv_attrs *ca
|
||||
return error("cannot create submodule directory %s", path);
|
||||
sub = submodule_from_ce(ce);
|
||||
if (sub)
|
||||
return submodule_move_head(ce->name,
|
||||
return submodule_move_head(ce->name, state->super_prefix,
|
||||
NULL, oid_to_hex(&ce->oid),
|
||||
state->force ? SUBMODULE_MOVE_HEAD_FORCE : 0);
|
||||
break;
|
||||
@ -476,7 +476,7 @@ int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca,
|
||||
* no pathname to return.
|
||||
*/
|
||||
BUG("Can't remove entry to a path");
|
||||
unlink_entry(ce);
|
||||
unlink_entry(ce, state->super_prefix);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -510,10 +510,10 @@ int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca,
|
||||
if (!(st.st_mode & S_IFDIR))
|
||||
unlink_or_warn(ce->name);
|
||||
|
||||
return submodule_move_head(ce->name,
|
||||
return submodule_move_head(ce->name, state->super_prefix,
|
||||
NULL, oid_to_hex(&ce->oid), 0);
|
||||
} else
|
||||
return submodule_move_head(ce->name,
|
||||
return submodule_move_head(ce->name, state->super_prefix,
|
||||
"HEAD", oid_to_hex(&ce->oid),
|
||||
state->force ? SUBMODULE_MOVE_HEAD_FORCE : 0);
|
||||
}
|
||||
@ -560,12 +560,12 @@ int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca,
|
||||
return write_entry(ce, path.buf, ca, state, 0, nr_checkouts);
|
||||
}
|
||||
|
||||
void unlink_entry(const struct cache_entry *ce)
|
||||
void unlink_entry(const struct cache_entry *ce, const char *super_prefix)
|
||||
{
|
||||
const struct submodule *sub = submodule_from_ce(ce);
|
||||
if (sub) {
|
||||
/* state.force is set at the caller. */
|
||||
submodule_move_head(ce->name, "HEAD", NULL,
|
||||
submodule_move_head(ce->name, super_prefix, "HEAD", NULL,
|
||||
SUBMODULE_MOVE_HEAD_FORCE);
|
||||
}
|
||||
if (check_leading_path(ce->name, ce_namelen(ce), 1) >= 0)
|
||||
|
Reference in New Issue
Block a user