772
773
struct write_commit_graph_context {
774
struct repository *r;
775
- char *obj_dir;
775
+ struct object_directory *odb;
776
char *graph_name;
777
struct packed_oid_list oids;
778
struct packed_commit_list commits;
1149
return 0;
1150
}
1151
1152
-int write_commit_graph_reachable(const char *obj_dir,
1152
+int write_commit_graph_reachable(struct object_directory *odb,
1153
enum commit_graph_write_flags flags,
1154
const struct split_commit_graph_opts *split_opts)
1155
{
1157
int result;
1158
1159
for_each_ref(add_ref_to_list, &list);
1160
- result = write_commit_graph(obj_dir, NULL, &list,
1160
+ result = write_commit_graph(odb, NULL, &list,
1161
flags, split_opts);
1162
1163
string_list_clear(&list, 0);
1172
struct strbuf packname = STRBUF_INIT;
1173
int dirlen;
1174
1175
- strbuf_addf(&packname, "%s/pack/", ctx->obj_dir);
1175
+ strbuf_addf(&packname, "%s/pack/", ctx->odb->path);
1176
dirlen = packname.len;
1177
if (ctx->report_progress) {
1178
strbuf_addf(&progress_title,
1368
1369
strbuf_addf(&tmp_file,
1370
"%s/info/commit-graphs/tmp_graph_XXXXXX",
1371
- ctx->obj_dir);
1371
+ ctx->odb->path);
1372
ctx->graph_name = strbuf_detach(&tmp_file, NULL);
1373
} else {
1374
- ctx->graph_name = get_commit_graph_filename(ctx->obj_dir);
1374
+ ctx->graph_name = get_commit_graph_filename(ctx->odb->path);
1375
}
1376
1377
if (safe_create_leading_directories(ctx->graph_name)) {
1382
}
1383
1384
if (ctx->split) {
1385
- char *lock_name = get_chain_filename(ctx->obj_dir);
1385
+ char *lock_name = get_chain_filename(ctx->odb->path);
1386
1387
hold_lock_file_for_update(&lk, lock_name, LOCK_DIE_ON_ERROR);
1388
1506
}
1507
}
1508
} else {
1509
- char *graph_name = get_commit_graph_filename(ctx->obj_dir);
1509
+ char *graph_name = get_commit_graph_filename(ctx->odb->path);
1510
unlink(graph_name);
1511
}
1512
1513
ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 1] = xstrdup(oid_to_hex(&file_hash));
1514
- final_graph_name = get_split_graph_filename(ctx->obj_dir,
1514
+ final_graph_name = get_split_graph_filename(ctx->odb->path,
1515
ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 1]);
1516
ctx->commit_graph_filenames_after[ctx->num_commit_graphs_after - 1] = final_graph_name;
1517
1553
1554
while (g && (g->num_commits <= size_mult * num_commits ||
1555
(max_commits && num_commits > max_commits))) {
1556
- if (strcmp(g->obj_dir, ctx->obj_dir))
1556
+ if (strcmp(g->obj_dir, ctx->odb->path))
1557
break;
1558
1559
num_commits += g->num_commits;
1568
char *old_graph_name = get_commit_graph_filename(g->obj_dir);
1569
1570
if (!strcmp(g->filename, old_graph_name) &&
1571
- strcmp(g->obj_dir, ctx->obj_dir)) {
1571
+ strcmp(g->obj_dir, ctx->odb->path)) {
1572
ctx->num_commit_graphs_after = 1;
1573
ctx->new_base_graph = NULL;
1574
}
1719
if (ctx->split_opts && ctx->split_opts->expire_time)
1720
expire_time -= ctx->split_opts->expire_time;
1721
if (!ctx->split) {
1722
- char *chain_file_name = get_chain_filename(ctx->obj_dir);
1722
+ char *chain_file_name = get_chain_filename(ctx->odb->path);
1723
unlink(chain_file_name);
1724
free(chain_file_name);
1725
ctx->num_commit_graphs_after = 0;
1726
}
1727
1728
- strbuf_addstr(&path, ctx->obj_dir);
1728
+ strbuf_addstr(&path, ctx->odb->path);
1729
strbuf_addstr(&path, "/info/commit-graphs");
1730
dir = opendir(path.buf);
1731
1764
strbuf_release(&path);
1765
}
1766
1767
-int write_commit_graph(const char *obj_dir,
1767
+int write_commit_graph(struct object_directory *odb,
1768
struct string_list *pack_indexes,
1769
struct string_list *commit_hex,
1770
enum commit_graph_write_flags flags,
1772
{
1773
struct write_commit_graph_context *ctx;
1774
uint32_t i, count_distinct = 0;
1775
- size_t len;
1775
int res = 0;
1776
1777
if (!commit_graph_compatible(the_repository))
1779
1780
ctx = xcalloc(1, sizeof(struct write_commit_graph_context));
1781
ctx->r = the_repository;
1783
-
1784
- /* normalize object dir with no trailing slash */
1785
- ctx->obj_dir = xmallocz(strlen(obj_dir) + 1);
1786
- normalize_path_copy(ctx->obj_dir, obj_dir);
1787
- len = strlen(ctx->obj_dir);
1788
- if (len && ctx->obj_dir[len - 1] == '/')
1789
- ctx->obj_dir[len - 1] = 0;
1790
-
1782
+ ctx->odb = odb;
1783
ctx->append = flags & COMMIT_GRAPH_WRITE_APPEND ? 1 : 0;
1784
ctx->report_progress = flags & COMMIT_GRAPH_WRITE_PROGRESS ? 1 : 0;
1785
ctx->split = flags & COMMIT_GRAPH_WRITE_SPLIT ? 1 : 0;
1816
ctx->oids.alloc = split_opts->max_commits;
1817
1818
if (ctx->append) {
1827
- prepare_commit_graph_one(ctx->r, ctx->obj_dir);
1819
+ prepare_commit_graph_one(ctx->r, ctx->odb->path);
1820
if (ctx->r->objects->commit_graph)
1821
ctx->oids.alloc += ctx->r->objects->commit_graph->num_commits;
1822
}
1890
free(ctx->graph_name);
1891
free(ctx->commits.list);
1892
free(ctx->oids.list);
1901
- free(ctx->obj_dir);
1893
1894
if (ctx->commit_graph_filenames_after) {
1895
for (i = 0; i < ctx->num_commit_graphs_after; i++) {