Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
commit-graph: close_commit_graph before shallow walk
Make close_commit_graph() work for arbitrary repositories.

Call close_commit_graph() when about to start a rev-list walk that
includes shallow commits. This is necessary in code paths that "fake"
shallow commits for the sake of fetch. Specifically, test 351 in
t5500-fetch-pack.sh runs

	git fetch --shallow-exclude one origin

with a file-based transfer. When the "remote" has a commit-graph, we do
not prevent the commit-graph from being loaded, but then the commits are
intended to be dynamically transferred into shallow commits during
get_shallow_commits_by_rev_list(). By closing the commit-graph before
this call, we prevent this interaction.

Signed-off-by: Derrick Stolee <[email protected]>
  • Loading branch information
derrickstolee committed Jul 20, 2018
commit 0b3b63bfa4eafe9911e3b2a6d903e2f2b1fdb983
8 changes: 4 additions & 4 deletions commit-graph.c
Original file line number Diff line number Diff line change
Expand Up @@ -257,10 +257,10 @@ static int prepare_commit_graph(struct repository *r)
return !!r->objects->commit_graph;
}

static void close_commit_graph(void)
void close_commit_graph(struct repository *r)
{
free_commit_graph(the_repository->objects->commit_graph);
the_repository->objects->commit_graph = NULL;
free_commit_graph(r->objects->commit_graph);
r->objects->commit_graph = NULL;
}

static int bsearch_graph(struct commit_graph *g, struct object_id *oid, uint32_t *pos)
Expand Down Expand Up @@ -872,7 +872,7 @@ void write_commit_graph(const char *obj_dir,
write_graph_chunk_data(f, GRAPH_OID_LEN, commits.list, commits.nr);
write_graph_chunk_large_edges(f, commits.list, commits.nr);

close_commit_graph();
close_commit_graph(the_repository);
finalize_hashfile(f, NULL, CSUM_HASH_IN_STREAM | CSUM_FSYNC);
commit_lock_file(&lk);

Expand Down
1 change: 1 addition & 0 deletions commit-graph.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ void 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 free_commit_graph(struct commit_graph *);

#endif
2 changes: 2 additions & 0 deletions upload-pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "quote.h"
#include "upload-pack.h"
#include "serve.h"
#include "commit-graph.h"

/* Remember to update object flag allocation in object.h */
#define THEY_HAVE (1u << 11)
Expand Down Expand Up @@ -739,6 +740,7 @@ static void deepen_by_rev_list(int ac, const char **av,
{
struct commit_list *result;

close_commit_graph(the_repository);
result = get_shallow_commits_by_rev_list(ac, av, SHALLOW, NOT_SHALLOW);
send_shallow(result);
free_commit_list(result);
Expand Down