summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2019-07-09 15:25:37 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2019-07-09 15:25:37 -0700
commit5cb7c73589059b557f0d690ed6bcfde46ef2d234 (patch)
tree1aa18e271907b69b4d49494231f8acc6f950ff4d
parentMerge branch 'ds/commit-graph-write-refactor' (diff)
parentpackfile: rename close_all_packs to close_object_store (diff)
downloadtgif-5cb7c73589059b557f0d690ed6bcfde46ef2d234.tar.xz
Merge branch 'ds/close-object-store'
The commit-graph file is now part of the "files that the runtime may keep open file descriptors on, all of which would need to be closed when done with the object store", and the file descriptor to an existing commit-graph file now is closed before "gc" finalizes a new instance to replace it. * ds/close-object-store: packfile: rename close_all_packs to close_object_store packfile: close commit-graph in close_all_packs commit-graph: use raw_object_store when closing
-rw-r--r--builtin/am.c2
-rw-r--r--builtin/clone.c2
-rw-r--r--builtin/fetch.c2
-rw-r--r--builtin/gc.c4
-rw-r--r--builtin/merge.c2
-rw-r--r--builtin/rebase.c2
-rw-r--r--builtin/receive-pack.c2
-rw-r--r--builtin/repack.c2
-rw-r--r--commit-graph.c8
-rw-r--r--commit-graph.h2
-rw-r--r--object.c2
-rw-r--r--packfile.c5
-rw-r--r--packfile.h2
-rw-r--r--upload-pack.c2
14 files changed, 21 insertions, 18 deletions
diff --git a/builtin/am.c b/builtin/am.c
index 78389d08b6..252e37ddf0 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -1801,7 +1801,7 @@ next:
*/
if (!state->rebasing) {
am_destroy(state);
- close_all_packs(the_repository->objects);
+ close_object_store(the_repository->objects);
run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
}
}
diff --git a/builtin/clone.c b/builtin/clone.c
index 5b9ebe9947..189ea1c2a0 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -1252,7 +1252,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
transport_disconnect(transport);
if (option_dissociate) {
- close_all_packs(the_repository->objects);
+ close_object_store(the_repository->objects);
dissociate_from_references();
}
diff --git a/builtin/fetch.c b/builtin/fetch.c
index f2be50a4a3..c9b92b1e52 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -1680,7 +1680,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
string_list_clear(&list, 0);
- close_all_packs(the_repository->objects);
+ close_object_store(the_repository->objects);
argv_array_pushl(&argv_gc_auto, "gc", "--auto", NULL);
if (verbosity < 0)
diff --git a/builtin/gc.c b/builtin/gc.c
index 8ba9bd2472..be8e0bfcbe 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -653,7 +653,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
gc_before_repack();
if (!repository_format_precious_objects) {
- close_all_packs(the_repository->objects);
+ close_object_store(the_repository->objects);
if (run_command_v_opt(repack.argv, RUN_GIT_CMD))
die(FAILED_RUN, repack.argv[0]);
@@ -681,7 +681,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
report_garbage = report_pack_garbage;
reprepare_packed_git(the_repository);
if (pack_garbage.nr > 0) {
- close_all_packs(the_repository->objects);
+ close_object_store(the_repository->objects);
clean_pack_garbage();
}
diff --git a/builtin/merge.c b/builtin/merge.c
index 6e99aead46..aad5a9504c 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -453,7 +453,7 @@ static void finish(struct commit *head_commit,
* We ignore errors in 'gc --auto', since the
* user should see them.
*/
- close_all_packs(the_repository->objects);
+ close_object_store(the_repository->objects);
run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
}
}
diff --git a/builtin/rebase.c b/builtin/rebase.c
index b8116db487..51438d08f2 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -741,7 +741,7 @@ static int finish_rebase(struct rebase_options *opts)
delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
apply_autostash(opts);
- close_all_packs(the_repository->objects);
+ close_object_store(the_repository->objects);
/*
* We ignore errors in 'gc --auto', since the
* user should see them.
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 77b7122456..610eadf5f0 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -2042,7 +2042,7 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
proc.git_cmd = 1;
proc.argv = argv_gc_auto;
- close_all_packs(the_repository->objects);
+ close_object_store(the_repository->objects);
if (!start_command(&proc)) {
if (use_sideband)
copy_to_sideband(proc.err, -1, NULL);
diff --git a/builtin/repack.c b/builtin/repack.c
index caca113927..f834b5551b 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -422,7 +422,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
if (!names.nr && !po_args.quiet)
printf_ln(_("Nothing new to pack."));
- close_all_packs(the_repository->objects);
+ close_object_store(the_repository->objects);
/*
* Ok we have prepared all new packfiles.
diff --git a/commit-graph.c b/commit-graph.c
index 89c4b982dd..1752341098 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -361,10 +361,10 @@ int generation_numbers_enabled(struct repository *r)
return !!first_generation;
}
-void close_commit_graph(struct repository *r)
+void close_commit_graph(struct raw_object_store *o)
{
- free_commit_graph(r->objects->commit_graph);
- r->objects->commit_graph = NULL;
+ free_commit_graph(o->commit_graph);
+ o->commit_graph = NULL;
}
static int bsearch_graph(struct commit_graph *g, struct object_id *oid, uint32_t *pos)
@@ -1093,7 +1093,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
stop_progress(&ctx->progress);
strbuf_release(&progress_title);
- close_commit_graph(ctx->r);
+ close_commit_graph(ctx->r->objects);
finalize_hashfile(f, NULL, CSUM_HASH_IN_STREAM | CSUM_FSYNC);
commit_lock_file(&lk);
diff --git a/commit-graph.h b/commit-graph.h
index 01538b5cf5..390c7f6961 100644
--- a/commit-graph.h
+++ b/commit-graph.h
@@ -82,7 +82,7 @@ int write_commit_graph(const char *obj_dir,
int verify_commit_graph(struct repository *r, struct commit_graph *g);
-void close_commit_graph(struct repository *);
+void close_commit_graph(struct raw_object_store *);
void free_commit_graph(struct commit_graph *);
#endif
diff --git a/object.c b/object.c
index e81d47a79c..cf1a2b7086 100644
--- a/object.c
+++ b/object.c
@@ -517,7 +517,7 @@ void raw_object_store_clear(struct raw_object_store *o)
o->loaded_alternates = 0;
INIT_LIST_HEAD(&o->packed_git_mru);
- close_all_packs(o);
+ close_object_store(o);
o->packed_git = NULL;
}
diff --git a/packfile.c b/packfile.c
index d786ec7312..ed61187504 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,
@@ -336,7 +337,7 @@ void close_pack(struct packed_git *p)
close_pack_index(p);
}
-void close_all_packs(struct raw_object_store *o)
+void close_object_store(struct raw_object_store *o)
{
struct packed_git *p;
@@ -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);
}
/*
diff --git a/packfile.h b/packfile.h
index b678d35c0b..81e868d55a 100644
--- a/packfile.h
+++ b/packfile.h
@@ -90,7 +90,7 @@ uint32_t get_pack_fanout(struct packed_git *p, uint32_t value);
unsigned char *use_pack(struct packed_git *, struct pack_window **, off_t, unsigned long *);
void close_pack_windows(struct packed_git *);
void close_pack(struct packed_git *);
-void close_all_packs(struct raw_object_store *o);
+void close_object_store(struct raw_object_store *o);
void unuse_pack(struct pack_window **);
void clear_delta_base_cache(void);
struct packed_git *add_packed_git(const char *path, size_t path_len, int local);
diff --git a/upload-pack.c b/upload-pack.c
index 4d2129e7fc..b2a9f368ec 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -722,7 +722,7 @@ static void deepen_by_rev_list(struct packet_writer *writer, int ac,
{
struct commit_list *result;
- close_commit_graph(the_repository);
+ close_commit_graph(the_repository->objects);
result = get_shallow_commits_by_rev_list(ac, av, SHALLOW, NOT_SHALLOW);
send_shallow(writer, result);
free_commit_list(result);