Merge branch 'ps/reftable-write-optim'
Code to write out reftable has seen some optimization and simplification. * ps/reftable-write-optim: reftable/block: reuse compressed array reftable/block: reuse zstream when writing log blocks reftable/writer: reset `last_key` instead of releasing it reftable/writer: unify releasing memory reftable/writer: refactorings for `writer_flush_nonempty_block()` reftable/writer: refactorings for `writer_add_record()` refs/reftable: don't recompute committer ident reftable: remove name checks refs/reftable: skip duplicate name checks refs/reftable: perform explicit D/F check when writing symrefs refs/reftable: fix D/F conflict error message on ref copy
This commit is contained in:
@ -12,8 +12,8 @@ https://developers.google.com/open-source/licenses/bsd
|
||||
#include "system.h"
|
||||
#include "merged.h"
|
||||
#include "reader.h"
|
||||
#include "refname.h"
|
||||
#include "reftable-error.h"
|
||||
#include "reftable-generic.h"
|
||||
#include "reftable-record.h"
|
||||
#include "reftable-merged.h"
|
||||
#include "writer.h"
|
||||
@ -27,8 +27,6 @@ static int stack_write_compact(struct reftable_stack *st,
|
||||
struct reftable_writer *wr,
|
||||
size_t first, size_t last,
|
||||
struct reftable_log_expiry_config *config);
|
||||
static int stack_check_addition(struct reftable_stack *st,
|
||||
const char *new_tab_name);
|
||||
static void reftable_addition_close(struct reftable_addition *add);
|
||||
static int reftable_stack_reload_maybe_reuse(struct reftable_stack *st,
|
||||
int reuse_open);
|
||||
@ -787,10 +785,6 @@ int reftable_addition_add(struct reftable_addition *add,
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = stack_check_addition(add->stack, get_tempfile_path(tab_file));
|
||||
if (err < 0)
|
||||
goto done;
|
||||
|
||||
if (wr->min_update_index < add->next_update_index) {
|
||||
err = REFTABLE_API_ERROR;
|
||||
goto done;
|
||||
@ -1355,65 +1349,6 @@ done:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int stack_check_addition(struct reftable_stack *st,
|
||||
const char *new_tab_name)
|
||||
{
|
||||
int err = 0;
|
||||
struct reftable_block_source src = { NULL };
|
||||
struct reftable_reader *rd = NULL;
|
||||
struct reftable_table tab = { NULL };
|
||||
struct reftable_ref_record *refs = NULL;
|
||||
struct reftable_iterator it = { NULL };
|
||||
int cap = 0;
|
||||
int len = 0;
|
||||
int i = 0;
|
||||
|
||||
if (st->config.skip_name_check)
|
||||
return 0;
|
||||
|
||||
err = reftable_block_source_from_file(&src, new_tab_name);
|
||||
if (err < 0)
|
||||
goto done;
|
||||
|
||||
err = reftable_new_reader(&rd, &src, new_tab_name);
|
||||
if (err < 0)
|
||||
goto done;
|
||||
|
||||
err = reftable_reader_seek_ref(rd, &it, "");
|
||||
if (err > 0) {
|
||||
err = 0;
|
||||
goto done;
|
||||
}
|
||||
if (err < 0)
|
||||
goto done;
|
||||
|
||||
while (1) {
|
||||
struct reftable_ref_record ref = { NULL };
|
||||
err = reftable_iterator_next_ref(&it, &ref);
|
||||
if (err > 0)
|
||||
break;
|
||||
if (err < 0)
|
||||
goto done;
|
||||
|
||||
REFTABLE_ALLOC_GROW(refs, len + 1, cap);
|
||||
refs[len++] = ref;
|
||||
}
|
||||
|
||||
reftable_table_from_merged_table(&tab, reftable_stack_merged_table(st));
|
||||
|
||||
err = validate_ref_record_addition(tab, refs, len);
|
||||
|
||||
done:
|
||||
for (i = 0; i < len; i++) {
|
||||
reftable_ref_record_release(&refs[i]);
|
||||
}
|
||||
|
||||
free(refs);
|
||||
reftable_iterator_destroy(&it);
|
||||
reftable_reader_free(rd);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int is_table_name(const char *s)
|
||||
{
|
||||
const char *dot = strrchr(s, '.');
|
||||
|
||||
Reference in New Issue
Block a user