karthik nayak <karthik.188@xxxxxxxxx> writes: > Junio C Hamano <gitster@xxxxxxxxx> writes: > >> Karthik Nayak <karthik.188@xxxxxxxxx> writes: >> >>> The `git refs migrate` command was introduced in >>> 25a0023f28 (builtin/refs: new command to migrate ref storage formats, >>> 2024-06-06) to support migrating from one reference backend to another. >> >> This topic pass the tests standalone for me locally, but seems to >> fail 1460.17 and 1460.31 when merged to 'seen'. I'll push out the >> integration result tonight; it would be very much appreciated if you >> can help find if there are semantic (or otherwise) mismerges that >> are causing this breakage. >> > > I see. I can reproduce it on 'seen' as you mentioned. Will debug and get > back to you on this. Thanks for letting me know. Seems like this is due to 'kn/reftable-writer-log-write-verify', which I should have totally seen coming. A quick fix like the one below fixes the issue. I'll merge in 'kn/reftable-writer-log-write-verify' when I re-roll. diff --git a/refs/reftable-backend.c b/refs/reftable-backend.c index 1badf88df0..5c51a6a226 100644 --- a/refs/reftable-backend.c +++ b/refs/reftable-backend.c @@ -1428,6 +1428,7 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data struct reftable_log_record *logs = NULL; struct ident_split committer_ident = {0}; size_t logs_nr = 0, logs_alloc = 0, i; + uint64_t max_update_index = ts; const char *committer_info; struct strintmap logs_ts; int ret = 0; @@ -1541,6 +1542,13 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data log->update_index = update_index; strintmap_set(&logs_ts, u->refname, update_index+1); + /* + * Note the max_update_index, so we can reset the limit + * before actually writing the logs. + */ + if (update_index > max_update_index) + max_update_index = update_index; + log->refname = xstrdup(u->refname); memcpy(log->value.update.new_hash, u->new_oid.hash, GIT_MAX_RAWSZ); @@ -1604,6 +1612,8 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data * and log blocks. */ if (logs) { + reftable_writer_set_limits(writer, ts, max_update_index); + ret = reftable_writer_add_logs(writer, logs, logs_nr); if (ret < 0) goto done;
Attachment:
signature.asc
Description: PGP signature