/src/git/builtin/pack-refs.c
Line | Count | Source (jump to first uncovered line) |
1 | | #include "builtin.h" |
2 | | #include "config.h" |
3 | | #include "gettext.h" |
4 | | #include "parse-options.h" |
5 | | #include "refs.h" |
6 | | #include "repository.h" |
7 | | #include "revision.h" |
8 | | |
9 | | static char const * const pack_refs_usage[] = { |
10 | | N_("git pack-refs [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]"), |
11 | | NULL |
12 | | }; |
13 | | |
14 | | int cmd_pack_refs(int argc, const char **argv, const char *prefix) |
15 | 0 | { |
16 | 0 | struct ref_exclusions excludes = REF_EXCLUSIONS_INIT; |
17 | 0 | struct string_list included_refs = STRING_LIST_INIT_NODUP; |
18 | 0 | struct pack_refs_opts pack_refs_opts = { |
19 | 0 | .exclusions = &excludes, |
20 | 0 | .includes = &included_refs, |
21 | 0 | .flags = PACK_REFS_PRUNE, |
22 | 0 | }; |
23 | 0 | struct string_list option_excluded_refs = STRING_LIST_INIT_NODUP; |
24 | 0 | struct string_list_item *item; |
25 | 0 | int pack_all = 0; |
26 | 0 | int ret; |
27 | |
|
28 | 0 | struct option opts[] = { |
29 | 0 | OPT_BOOL(0, "all", &pack_all, N_("pack everything")), |
30 | 0 | OPT_BIT(0, "prune", &pack_refs_opts.flags, N_("prune loose refs (default)"), PACK_REFS_PRUNE), |
31 | 0 | OPT_BIT(0, "auto", &pack_refs_opts.flags, N_("auto-pack refs as needed"), PACK_REFS_AUTO), |
32 | 0 | OPT_STRING_LIST(0, "include", pack_refs_opts.includes, N_("pattern"), |
33 | 0 | N_("references to include")), |
34 | 0 | OPT_STRING_LIST(0, "exclude", &option_excluded_refs, N_("pattern"), |
35 | 0 | N_("references to exclude")), |
36 | 0 | OPT_END(), |
37 | 0 | }; |
38 | 0 | git_config(git_default_config, NULL); |
39 | 0 | if (parse_options(argc, argv, prefix, opts, pack_refs_usage, 0)) |
40 | 0 | usage_with_options(pack_refs_usage, opts); |
41 | | |
42 | 0 | for_each_string_list_item(item, &option_excluded_refs) |
43 | 0 | add_ref_exclusion(pack_refs_opts.exclusions, item->string); |
44 | |
|
45 | 0 | if (pack_all) |
46 | 0 | string_list_append(pack_refs_opts.includes, "*"); |
47 | |
|
48 | 0 | if (!pack_refs_opts.includes->nr) |
49 | 0 | string_list_append(pack_refs_opts.includes, "refs/tags/*"); |
50 | |
|
51 | 0 | ret = refs_pack_refs(get_main_ref_store(the_repository), &pack_refs_opts); |
52 | |
|
53 | 0 | clear_ref_exclusions(&excludes); |
54 | 0 | string_list_clear(&included_refs, 0); |
55 | 0 | string_list_clear(&option_excluded_refs, 0); |
56 | 0 | return ret; |
57 | 0 | } |