]> git.ipfire.org Git - thirdparty/git.git/commitdiff
files-backend: implement 'optimize' action
authorMeet Soni <meetsoni3017@gmail.com>
Fri, 19 Sep 2025 08:26:40 +0000 (13:56 +0530)
committerJunio C Hamano <gitster@pobox.com>
Fri, 19 Sep 2025 17:02:55 +0000 (10:02 -0700)
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>
refs/files-backend.c

index dfc8e9bc5055ab33af0891b29a022c74b1ee3bbc..1428d3a6f1b5237bdf903bca54999f0cfca55434 100644 (file)
@@ -1473,6 +1473,15 @@ static int files_pack_refs(struct ref_store *ref_store,
        return 0;
 }
 
+static int files_optimize(struct ref_store *ref_store, struct pack_refs_opts *opts)
+{
+       /*
+        * For the "files" backend, "optimizing" is the same as "packing".
+        * So, we just call the existing worker function for packing.
+        */
+       return files_pack_refs(ref_store, opts);
+}
+
 /*
  * People using contrib's git-new-workdir have .git/logs/refs ->
  * /some/other/path/.git/logs/refs, and that may live on another device.
@@ -3909,6 +3918,7 @@ struct ref_storage_be refs_be_files = {
        .transaction_abort = files_transaction_abort,
 
        .pack_refs = files_pack_refs,
+       .optimize = files_optimize,
        .rename_ref = files_rename_ref,
        .copy_ref = files_copy_ref,