[PATCH v2 0/2] commit-graph.c: no lazy fetch in lookup_commit_in_graph()
- From
Han Xin <hanxin.hx@bytedance.com>
- Date
- Jun 24, 2022, 05:27 UTC
- Message-ID
- <cover.1656044659.git.hanxin.hx@bytedance.com>
- In-Reply-To
- <20220618030130.36419-1-hanxin.hx@bytedance.com>
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