Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/refs
diff options
context:
space:
mode:
authorJohn Cai <johncai86@gmail.com>2023-05-13 00:34:42 +0300
committerJunio C Hamano <gitster@pobox.com>2023-05-13 00:54:14 +0300
commit4fe42f326e10a547dc65dfe9e5ceaeeee02b98db (patch)
tree47c2e26fc240e0bf6d8dad6a6d8c2f3f6ab0bcce /refs
parent826ae79fca263bc2b70c54fddacb1603c5ebb9c6 (diff)
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')
-rw-r--r--refs/files-backend.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 8620e01362..fcaf842ed4 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,