MCPcopy Create free account
hub / github.com/git/git / write_reflog_delete_table

Function write_reflog_delete_table

refs/reftable-backend.c:2372–2414  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2370};
2371
2372static int write_reflog_delete_table(struct reftable_writer *writer, void *cb_data)
2373{
2374 struct write_reflog_delete_arg *arg = cb_data;
2375 struct reftable_log_record log = {0}, tombstone = {0};
2376 struct reftable_iterator it = {0};
2377 uint64_t ts = reftable_stack_next_update_index(arg->stack);
2378 int ret;
2379
2380 ret = reftable_writer_set_limits(writer, ts, ts);
2381 if (ret < 0)
2382 goto out;
2383
2384 ret = reftable_stack_init_log_iterator(arg->stack, &it);
2385 if (ret < 0)
2386 goto out;
2387
2388 /*
2389 * In order to delete a table we need to delete all reflog entries one
2390 * by one. This is inefficient, but the reftable format does not have a
2391 * better marker right now.
2392 */
2393 ret = reftable_iterator_seek_log(&it, arg->refname);
2394 while (ret == 0) {
2395 ret = reftable_iterator_next_log(&it, &log);
2396 if (ret < 0)
2397 break;
2398 if (ret > 0 || strcmp(log.refname, arg->refname)) {
2399 ret = 0;
2400 break;
2401 }
2402
2403 tombstone.refname = (char *)arg->refname;
2404 tombstone.value_type = REFTABLE_LOG_DELETION;
2405 tombstone.update_index = log.update_index;
2406
2407 ret = reftable_writer_add_log(writer, &tombstone);
2408 }
2409
2410out:
2411 reftable_log_record_release(&log);
2412 reftable_iterator_destroy(&it);
2413 return ret;
2414}
2415
2416static int reftable_be_delete_reflog(struct ref_store *ref_store,
2417 const char *refname)

Callers

nothing calls this directly

Tested by

no test coverage detected