/
uis
/
git
/
x
/
uis
/
git
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
commit-graph: not compatible with replace objects
[git/git.git]
/
commit-graph.c
diff --git
a/commit-graph.c
b/commit-graph.c
index
b0a55ad
..
2c01fa4
100644
(file)
--- a/
commit-graph.c
+++ b/
commit-graph.c
@@
-13,6
+13,8
@@
#include "commit-graph.h"
#include "object-store.h"
#include "alloc.h"
#include "commit-graph.h"
#include "object-store.h"
#include "alloc.h"
+#include "hashmap.h"
+#include "replace-object.h"
#define GRAPH_SIGNATURE 0x43475048 /* "CGPH" */
#define GRAPH_CHUNKID_OIDFANOUT 0x4f494446 /* "OIDF" */
#define GRAPH_SIGNATURE 0x43475048 /* "CGPH" */
#define GRAPH_CHUNKID_OIDFANOUT 0x4f494446 /* "OIDF" */
@@
-56,6
+58,19
@@
static struct commit_graph *alloc_commit_graph(void)
return g;
}
return g;
}
+extern int read_replace_refs;
+
+static int commit_graph_compatible(struct repository *r)
+{
+ if (read_replace_refs) {
+ prepare_replace_object(r);
+ if (hashmap_get_size(&r->objects->replace_map->map))
+ return 0;
+ }
+
+ return 1;
+}
+
struct commit_graph *load_commit_graph_one(const char *graph_file)
{
void *graph_map;
struct commit_graph *load_commit_graph_one(const char *graph_file)
{
void *graph_map;
@@
-223,6
+238,9
@@
static int prepare_commit_graph(struct repository *r)
*/
return 0;
*/
return 0;
+ if (!commit_graph_compatible(r))
+ return 0;
+
obj_dir = r->objects->objectdir;
prepare_commit_graph_one(r, obj_dir);
prepare_alt_odb(r);
obj_dir = r->objects->objectdir;
prepare_commit_graph_one(r, obj_dir);
prepare_alt_odb(r);
@@
-693,6
+711,9
@@
void write_commit_graph(const char *obj_dir,
int num_extra_edges;
struct commit_list *parent;
int num_extra_edges;
struct commit_list *parent;
+ if (!commit_graph_compatible(the_repository))
+ return;
+
oids.nr = 0;
oids.alloc = approximate_object_count() / 4;
oids.nr = 0;
oids.alloc = approximate_object_count() / 4;