MCPcopy Index your code
hub / github.com/git/git / stack_write_compact

Function stack_write_compact

reftable/stack.c:967–1064  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

965}
966
967static int stack_write_compact(struct reftable_stack *st,
968 struct reftable_writer *wr,
969 size_t first, size_t last,
970 struct reftable_log_expiry_config *config)
971{
972 struct reftable_merged_table *mt = NULL;
973 struct reftable_iterator it = { NULL };
974 struct reftable_ref_record ref = { NULL };
975 struct reftable_log_record log = { NULL };
976 size_t subtabs_len = last - first + 1;
977 uint64_t entries = 0;
978 int err = 0;
979
980 for (size_t i = first; i <= last; i++)
981 st->stats.bytes += st->tables[i]->size;
982 err = reftable_writer_set_limits(wr, st->tables[first]->min_update_index,
983 st->tables[last]->max_update_index);
984 if (err < 0)
985 goto done;
986
987 err = reftable_merged_table_new(&mt, st->tables + first, subtabs_len,
988 st->opts.hash_id);
989 if (err < 0)
990 goto done;
991
992 err = merged_table_init_iter(mt, &it, REFTABLE_BLOCK_TYPE_REF);
993 if (err < 0)
994 goto done;
995
996 err = reftable_iterator_seek_ref(&it, "");
997 if (err < 0)
998 goto done;
999
1000 while (1) {
1001 err = reftable_iterator_next_ref(&it, &ref);
1002 if (err > 0) {
1003 err = 0;
1004 break;
1005 }
1006 if (err < 0)
1007 goto done;
1008
1009 if (first == 0 && reftable_ref_record_is_deletion(&ref)) {
1010 continue;
1011 }
1012
1013 err = reftable_writer_add_ref(wr, &ref);
1014 if (err < 0)
1015 goto done;
1016 entries++;
1017 }
1018 reftable_iterator_destroy(&it);
1019
1020 err = merged_table_init_iter(mt, &it, REFTABLE_BLOCK_TYPE_LOG);
1021 if (err < 0)
1022 goto done;
1023
1024 err = reftable_iterator_seek_log(&it, "");

Callers 1

stack_compact_lockedFunction · 0.85

Tested by

no test coverage detected