]> git.ipfire.org Git - thirdparty/git.git/commit - unpack-trees.c
read-tree: add "--super-prefix" option, eliminate global
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Tue, 20 Dec 2022 12:39:56 +0000 (13:39 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 26 Dec 2022 01:21:44 +0000 (10:21 +0900)
commit4002ec3dcf0f89db46fbdf56549218c573a9c0f2
tree61d41eac1a106f961dcd96a9d4363946fe4de309
parentf5a6be9d547700b7bd3018f1c0daf3d257cb2762
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. 74866d75793 (git: make super-prefix option, 2016-10-07)
2. e77aa336f11 (ls-files: optionally recurse into submodules, 2016-10-07)
3. 89c86265576 (submodule helper: support super prefix, 2016-12-08)
4. 0281e487fd9 (grep: optionally recurse into submodules, 2016-12-16)
5. 3d415425c7b (unpack-trees: support super-prefix option, 2017-01-17)
6. 188dce131fa (ls-files: use repository object, 2017-06-22)
7. f9ee2fcdfa0 (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>
15 files changed:
Documentation/git.txt
builtin.h
builtin/checkout.c
builtin/read-tree.c
cache.h
entry.c
entry.h
environment.c
git.c
submodule.c
submodule.h
t/t1001-read-tree-m-2way.sh
t/t5616-partial-clone.sh
unpack-trees.c
unpack-trees.h