t: allow skipping expected object ID in `ref-store update-ref`

We require the caller to pass both the old and new expected object ID to our `test-tool ref-store update-ref` helper. When trying to update a symbolic reference though it's impossible to specify the expected object ID, which means that the test would instead have to force-update the reference. This is currently impossible though. Update the helper to optionally skip verification of the old object ID in case the test passes in an empty old object ID as input. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Nov 2, 2023 at 09:46 UTC 9ddd5b883b0221d80392a914eb621ea680476e75
1 file changed +7 -4
t/helper/test-ref-store.c
+7 -4
@@ -298,16 +298,19 @@ static int cmd_update_ref(struct ref_store *refs, const char **argv)
298 const char *new_sha1_buf = notnull(*argv++, "new-sha1");
299 const char *old_sha1_buf = notnull(*argv++, "old-sha1");
300 unsigned int flags = arg_flags(*argv++, "flags", transaction_flags);
301 - struct object_id old_oid;
301 + struct object_id old_oid, *old_oid_ptr = NULL;
302 struct object_id new_oid;
303
304 - if (get_oid_hex(old_sha1_buf, &old_oid))
305 - die("cannot parse %s as %s", old_sha1_buf, the_hash_algo->name);
304 + if (*old_sha1_buf) {
305 + if (get_oid_hex(old_sha1_buf, &old_oid))
306 + die("cannot parse %s as %s", old_sha1_buf, the_hash_algo->name);
307 + old_oid_ptr = &old_oid;
308 + }
309 if (get_oid_hex(new_sha1_buf, &new_oid))
310 die("cannot parse %s as %s", new_sha1_buf, the_hash_algo->name);
311
312 return refs_update_ref(refs, msg, refname,
310 - &new_oid, &old_oid,
313 + &new_oid, old_oid_ptr,
314 flags, UPDATE_REFS_DIE_ON_ERR);
315 }
316