builtin/pack-refs: factor out core logic into a shared library

The implementation of `git pack-refs` is monolithic within
`cmd_pack_refs()`, making it impossible to share its logic with other
commands. To enable code reuse for the upcoming `git refs optimize`
subcommand, refactor the core logic into a shared helper function.

Split the original `builtin/pack-refs.c` file into two parts:

- A new shared library file, `pack-refs.c`, which contains the
  core option parsing and packing logic in a new `pack_refs_core()`
  helper function.

- The original `builtin/pack-refs.c`, which is now a thin wrapper
  responsible only for defining the `git pack-refs` command and
  calling the shared helper.

A new `pack-refs.h` header is also introduced to define the public
interface for this shared logic.

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>
This commit is contained in:
Meet Soni
2025-09-19 13:56:43 +05:30
committed by Junio C Hamano
parent 0bef41319c
commit 0d4ec33922
5 changed files with 86 additions and 49 deletions

23
pack-refs.h Normal file
View File

@@ -0,0 +1,23 @@
#ifndef PACK_REFS_H
#define PACK_REFS_H
struct repository;
/*
* Shared usage string for options common to git-pack-refs(1)
* and git-refs-optimize(1). The command-specific part (e.g., "git refs optimize ")
* must be prepended by the caller.
*/
#define PACK_REFS_OPTS \
"[--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]"
/*
* The core logic for pack-refs and its clones.
*/
int pack_refs_core(int argc,
const char **argv,
const char *prefix,
struct repository *repo,
const char * const *usage_opts);
#endif /* PACK_REFS_H */