]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable: pick either 'oid' or 'target' for new updates
authorKarthik Nayak <karthik.188@gmail.com>
Fri, 7 Jun 2024 13:33:03 +0000 (15:33 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 7 Jun 2024 17:25:45 +0000 (10:25 -0700)
When creating a reference transaction update, we can provide the old/new
oid/target for the update. We have checks in place to ensure that for
each old/new, either oid or target is set and not both.

In the reftable backend, when dealing with updates without the
`REF_NO_DEREF` flag, we don't selectively propagate data as needed.
Since there are no active users of the path, this is not caught. As we
want to introduce the 'symref-update' command in the upcoming commit,
which would use this flow, correct it.

Helped-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs/reftable-backend.c

index 16f4ced7b65f612f50f02a38d441729ae9941be8..06dd5c8f31c446e560471eba0a2dd0e0ef0a3514 100644 (file)
@@ -898,8 +898,9 @@ static int reftable_be_transaction_prepare(struct ref_store *ref_store,
                                 */
                                new_update = ref_transaction_add_update(
                                        transaction, referent.buf, new_flags,
-                                       &u->new_oid, &u->old_oid, u->new_target,
-                                       u->old_target, u->msg);
+                                       u->new_target ? NULL : &u->new_oid,
+                                       u->old_target ? NULL : &u->old_oid,
+                                       u->new_target, u->old_target, u->msg);
 
                                new_update->parent_update = u;