diff options
author | John Cai <johncai86@gmail.com> | 2023-05-12 21:34:42 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-05-12 21:54:14 (GMT) |
commit | 4fe42f326e10a547dc65dfe9e5ceaeeee02b98db (patch) | |
tree | 47c2e26fc240e0bf6d8dad6a6d8c2f3f6ab0bcce /refs/files-backend.c | |
parent | 826ae79fca263bc2b70c54fddacb1603c5ebb9c6 (diff) | |
download | git-4fe42f326e10a547dc65dfe9e5ceaeeee02b98db.zip git-4fe42f326e10a547dc65dfe9e5ceaeeee02b98db.tar.gz git-4fe42f326e10a547dc65dfe9e5ceaeeee02b98db.tar.bz2 |
pack-refs: teach pack-refs --include option
Allow users to be more selective over which refs to pack by adding an
--include option to git-pack-refs.
The existing options allow some measure of selectivity. By default
git-pack-refs packs all tags. --all can be used to include all refs,
and the previous commit added the ability to exclude certain refs with
--exclude.
While these knobs give the user some selection over which refs to pack,
it could be useful to give more control. For instance, a repository may
have a set of branches that are rarely updated and would benefit from
being packed. --include would allow the user to easily include a set of
branches to be packed while leaving everything else unpacked.
Signed-off-by: John Cai <johncai86@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs/files-backend.c')
-rw-r--r-- | refs/files-backend.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c index 8620e01..fcaf842 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -1176,18 +1176,13 @@ static int should_pack_ref(const char *refname, const struct object_id *oid, unsigned int ref_flags, struct pack_refs_opts *opts) { + struct string_list_item *item; + /* Do not pack per-worktree refs: */ if (parse_worktree_ref(refname, NULL, NULL, NULL) != REF_WORKTREE_SHARED) return 0; - if (ref_excluded(opts->exclusions, refname)) - return 0; - - /* Do not pack non-tags unless PACK_REFS_ALL is set: */ - if (!(opts->flags & PACK_REFS_ALL) && !starts_with(refname, "refs/tags/")) - return 0; - /* Do not pack symbolic refs: */ if (ref_flags & REF_ISSYMREF) return 0; @@ -1196,7 +1191,14 @@ static int should_pack_ref(const char *refname, if (!ref_resolves_to_object(refname, the_repository, oid, ref_flags)) return 0; - return 1; + if (ref_excluded(opts->exclusions, refname)) + return 0; + + for_each_string_list_item(item, opts->includes) + if (!wildmatch(item->string, refname, 0)) + return 1; + + return 0; } static int files_pack_refs(struct ref_store *ref_store, |