I realized next has not been rewound, so I can resend sb/more-repo-in-api, which I hereby do. The changes are minimal and address the only comment by Jonathan so far. Thanks, Stefan Stefan Beller (23): sha1_file: allow read_object to read objects in arbitrary repositories packfile: allow has_packed_and_bad to handle arbitrary repositories object-store: allow read_object_file_extended to read from any repo object-store: prepare read_object_file to deal with any repo object-store: prepare has_{sha1, object}_file to handle any repo object: parse_object to honor its repository argument commit: allow parse_commit* to handle any repo commit-reach.c: allow paint_down_to_common to handle any repo commit-reach.c: allow merge_bases_many to handle any repo commit-reach.c: allow remove_redundant to handle any repo commit-reach.c: allow get_merge_bases_many_0 to handle any repo commit-reach: prepare get_merge_bases to handle any repo commit-reach: prepare in_merge_bases[_many] to handle any repo commit: prepare get_commit_buffer to handle any repo commit: prepare repo_unuse_commit_buffer to handle any repo commit: prepare logmsg_reencode to handle arbitrary repositories pretty: prepare format_commit_message to handle arbitrary repositories submodule: use submodule repos for object lookup submodule: don't add submodule as odb for push commit-graph: convert remaining functions to handle any repo commit: prepare free_commit_buffer and release_commit_memory for any repo path.h: make REPO_GIT_PATH_FUNC repository agnostic t/helper/test-repository: celebrate independence from the_repository builtin/fsck.c | 3 +- builtin/log.c | 6 +- builtin/rev-list.c | 3 +- cache.h | 2 + commit-graph.c | 40 +++-- commit-reach.c | 73 +++++---- commit-reach.h | 38 +++-- commit.c | 41 ++--- commit.h | 43 +++++- .../coccinelle/the_repository.pending.cocci | 144 ++++++++++++++++++ object-store.h | 35 ++++- object.c | 8 +- packfile.c | 5 +- packfile.h | 2 +- path.h | 2 +- pretty.c | 28 ++-- pretty.h | 7 +- sha1-file.c | 34 +++-- streaming.c | 2 +- submodule.c | 78 +++++++--- t/helper/test-repository.c | 10 ++ 21 files changed, 454 insertions(+), 150 deletions(-) create mode 100644 contrib/coccinelle/the_repository.pending.cocci git range-diff origin/sb/more-repo-in-api... >>0000-cover-letter.patch 1: 99017ffac8 ! 1: f24b120287 submodule: use submodule repos for object lookup @@ -40,12 +40,13 @@ - * attempt to lookup both the left and right commits and put them into the - * left and right pointers. +/* -+ * Initialize 'out' based on the provided submodule path. ++ * Initialize a repository struct for a submodule based on the provided 'path'. + * + * Unlike repo_submodule_init, this tolerates submodules not present + * in .gitmodules. This function exists only to preserve historical behavior, + * -+ * Returns 0 on success, -1 when the submodule is not present. ++ * Returns the repository struct on success, ++ * NULL when the submodule is not present. */ -static void show_submodule_header(struct diff_options *o, const char *path, +static struct repository *open_submodule(const char *path) @@ -59,6 +60,7 @@ + return NULL; + } + ++ /* Mark it as a submodule */ + out->submodule_prefix = xstrdup(path); + + strbuf_release(&sb); 2: 809765861c = 2: 25190d6174 submodule: don't add submodule as odb for push 3: 4a7735da72 = 3: 965421aab2 commit-graph: convert remaining functions to handle any repo 4: aeeb1ba49e = 4: bf31f32723 commit: prepare free_commit_buffer and release_commit_memory for any repo 5: 5ffebe9463 = 5: c4e54e6b0d path.h: make REPO_GIT_PATH_FUNC repository agnostic 6: 9c89920c46 = 6: a7ed0c57ba t/helper/test-repository: celebrate independence from the_repository