[PATCH 2/3] packfile: close commit-graph in close_all_packs
- From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
- Date
- May 17, 2019, 18:41 UTC
- Message-ID
- <e4811af2ecb72fbaf22e41c74d9fe0dc6fef246e.1558118506.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.208.git.gitgitgadget@gmail.com>
From: Derrick Stolee <dstolee@microsoft.com>
The close_all_packs() method is used to close all read handles to pack-files and the multi-pack-index before running 'git gc --auto'. This is particularly important on the Windows platform, where read handles block any writes to those files. Replacing one of these files with a rename() will fail in this situation.
The commit-graph also performs a rename, so is susceptable to this problem. We are careful to close the commit-graph before writing, but that doesn't work when a 'git fetch' (or similar) process runs 'git gc --auto' which may write a commit-graph.
Here, close the commit-graph as part of close_all_packs().
Reported-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Derrick Stolee <dstolee@microsoft.com> --- packfile.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/packfile.c b/packfile.c index 16bcb75262..ce12bffe3e 100644 --- a/packfile.c +++ b/packfile.c @@ -16,6 +16,7 @@ #include "tree.h" #include "object-store.h" #include "midx.h" +#include "commit-graph.h" char *odb_pack_name(struct strbuf *buf, const unsigned char *sha1, @@ -350,6 +351,8 @@ void close_all_packs(struct raw_object_store *o) close_midx(o->multi_pack_index); o->multi_pack_index = NULL; } + + close_commit_graph(o); } /*
-- gitgitgadget