This patch fixes the following issue: When we found the commit in the graph in lookup_commit_in_graph(), but the commit is missing from the repository, we will try promisor_remote_get_direct() and then enter another loop. Then we will go into an endless loop: git fetch -> deref_without_lazy_fetch() -> lookup_commit_in_graph() -> repo_has_object_file() -> promisor_remote_get_direct() -> fetch_objects() -> git fetch (a new loop round) Changes since v1: * add run_with_limited_processses() to test-lib so that we can use it to limit forking subprocesses. As we didn't check the return value of promise_remote_get_direct(), "git fetch" would finally succeed due to: error: cannot fork() for -c: Resource temporarily unavailable fatal: promisor-remote: unable to fork off fetch subprocess * Rename test repositories, reference name and use GIT_TRACE to observe the fetch process. Han Xin (2): test-lib.sh: add limited processes to test-lib commit-graph.c: no lazy fetch in lookup_commit_in_graph() commit-graph.c | 2 +- t/t5329-no-lazy-fetch-with-commit-graph.sh | 47 ++++++++++++++++++++++ t/test-lib.sh | 9 +++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100755 t/t5329-no-lazy-fetch-with-commit-graph.sh Range-diff against v1: 1: ebc14bfd5e < -: ---------- commit-graph.c: no lazy fetch in lookup_commit_in_graph() -: ---------- > 1: 442a4c351d test-lib.sh: add limited processes to test-lib -: ---------- > 2: d3a99a5c5a commit-graph.c: no lazy fetch in lookup_commit_in_graph() -- 2.36.1