Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: git/git
base: 0649303820cf88fb5a6ab440af15c8d6b8799d3f
Choose a base ref
...
head repository: git/git
compare: 18a2f66d8a5514fec214613a75e6a238532d2664
Choose a head ref
  • 8 commits
  • 11 files changed
  • 1 contributor

Commits on Sep 8, 2021

  1. submodule: lazily add submodule ODBs as alternates

    Teach Git to add submodule ODBs as alternates to the object store of
    the_repository only upon the first access of an object not in
    the_repository, and not when add_submodule_odb() is called.
    
    This provides a means of gradually migrating from accessing a
    submodule's object through alternates to accessing a submodule's object
    by explicitly passing its repository object. Any Git command can declare
    that it might access submodule objects by calling add_submodule_odb()
    (as they do now), but the submodule ODBs themselves will not be added
    until needed, so individual commands and/or combinations of arguments
    can be migrated one by one.
    
    [The advantage of explicit repository-object passing is code clarity (it
    is clear which repository an object read is from), performance (there is
    no need to linearly search through all submodule ODBs whenever an object
    is accessed from any repository, whether superproject or submodule), and
    the possibility of future features like partial clone submodules (which
    right now is not possible because if an object is missing, we do not
    know which repository to lazy-fetch into).]
    
    This commit also introduces an environment variable that a test may set
    to make the actual registration of alternates fatal, in order to
    demonstrate that its codepaths do not need this registration.
    
    Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
    Reviewed-by: Emily Shaffer <emilyshaffer@google.com>
    Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    jonathantanmy authored and gitster committed Sep 8, 2021
    Copy the full SHA
    a35e03d View commit details
    Browse the repository at this point in the history
  2. grep: use submodule-ODB-as-alternate lazy-addition

    In the parent commit, Git was taught to add submodule ODBs as alternates
    lazily, but grep does not use this because it computes the path to add
    directly, not going through add_submodule_odb(). Add an equivalent to
    add_submodule_odb() that takes the exact ODB path and teach grep to use
    it.
    
    Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
    Reviewed-by: Emily Shaffer <emilyshaffer@google.com>
    Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    jonathantanmy authored and gitster committed Sep 8, 2021
    Copy the full SHA
    8d33c3a View commit details
    Browse the repository at this point in the history
  3. grep: typesafe versions of grep_source_init

    grep_source_init() can create "struct grep_source" objects and,
    depending on the value of the type passed, some void-pointer parameters have
    different meanings. Because one of these types (GREP_SOURCE_OID) will
    require an additional parameter in a subsequent patch, take the
    opportunity to increase clarity and type safety by replacing this
    function with individual functions for each type.
    
    Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
    Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    jonathantanmy authored and gitster committed Sep 8, 2021
    Copy the full SHA
    50d92b5 View commit details
    Browse the repository at this point in the history
  4. grep: read submodule entry with explicit repo

    Replace an existing parse_object_or_die() call (which implicitly works
    on the_repository) with a function call that allows a repository to be
    passed in. There is no such direct equivalent to parse_object_or_die(),
    but we only need the type of the object, so replace with
    oid_object_info().
    
    Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
    Reviewed-by: Emily Shaffer <emilyshaffer@google.com>
    Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    jonathantanmy authored and gitster committed Sep 8, 2021
    Copy the full SHA
    78ca584 View commit details
    Browse the repository at this point in the history
  5. grep: allocate subrepos on heap

    Currently, struct repository objects corresponding to submodules are
    allocated on the stack in grep_submodule(). This currently works because
    they will not be used once grep_submodule() exits, but a subsequent
    patch will require these structs to be accessible for longer (perhaps
    even in another thread). Allocate them on the heap and clear them only
    at the very end.
    
    Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
    Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    jonathantanmy authored and gitster committed Sep 8, 2021
    Copy the full SHA
    dd45471 View commit details
    Browse the repository at this point in the history
  6. grep: add repository to OID grep sources

    Record the repository whenever an OID grep source is created, and teach
    the worker threads to explicitly provide the repository when accessing
    objects.
    
    Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
    Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    jonathantanmy authored and gitster committed Sep 8, 2021
    Copy the full SHA
    0693806 View commit details
    Browse the repository at this point in the history
  7. submodule-config: pass repo upon blob config read

    When reading the config of a submodule, if reading from a blob, read
    using an explicitly specified repository instead of by adding the
    submodule's ODB as an alternate and then reading an object from
    the_repository.
    
    This makes the "grep --recurse-submodules with submodules without
    .gitmodules in the working tree" test in t7814 work when
    GIT_TEST_FATAL_REGISTER_SUBMODULE_ODB is true.
    
    Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
    Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    jonathantanmy authored and gitster committed Sep 8, 2021
    Copy the full SHA
    e3e8bf0 View commit details
    Browse the repository at this point in the history
  8. t7814: show lack of alternate ODB-adding

    The previous patches have made "git grep" no longer need to add
    submodule ODBs as alternates, at least for the code paths tested in
    t7814. Demonstrate this by making adding a submodule ODB as an alternate
    fatal in this test.
    
    Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
    Reviewed-by: Emily Shaffer <emilyshaffer@google.com>
    Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    jonathantanmy authored and gitster committed Sep 8, 2021
    Copy the full SHA
    18a2f66 View commit details
    Browse the repository at this point in the history