files-backend: implement 'optimize' action

With the generic `refs_optimize()` API now in place, provide the first implementation for the 'files' reference backend. This makes the new API functional for existing repositories and serves as the foundation for migrating user-facing commands to the new architecture. The implementation simply calls the existing `files_pack_refs()` function, as 'packing' is the method used to optimize the files-based reference store. Wire up the new `files_optimize()` function to the `optimize` slot in the files backend's virtual table. Mentored-by: Patrick Steinhardt <ps@pks.im> Mentored-by: shejialuo <shejialuo@gmail.com> Signed-off-by: Meet Soni <meetsoni3017@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Meet Soni committed Sep 19, 2025 at 13:56 UTC 1fd6067181703e9e65f602e6da27b9b1d8b783a2
1 file changed +10
refs/files-backend.c
+10
@@ -1473,6 +1473,15 @@ static int files_pack_refs(struct ref_store *ref_store,
1473 return 0;
1474 }
1475
1476 +static int files_optimize(struct ref_store *ref_store, struct pack_refs_opts *opts)
1477 +{
1478 + /*
1479 + * For the "files" backend, "optimizing" is the same as "packing".
1480 + * So, we just call the existing worker function for packing.
1481 + */
1482 + return files_pack_refs(ref_store, opts);
1483 +}
1484 +
1485 /*
1486 * People using contrib's git-new-workdir have .git/logs/refs ->
1487 * /some/other/path/.git/logs/refs, and that may live on another device.
@@ -3909,6 +3918,7 @@ struct ref_storage_be refs_be_files = {
3918 .transaction_abort = files_transaction_abort,
3919
3920 .pack_refs = files_pack_refs,
3921 + .optimize = files_optimize,
3922 .rename_ref = files_rename_ref,
3923 .copy_ref = files_copy_ref,
3924