Branch data Line data Source code
1 : : /*-
2 : : * Copyright(c) 2024 Baptiste Daroussin <bapt@FreeBSD.org>
3 : : *
4 : : * SPDX-License-Identifier: BSD-2-Clause
5 : : */
6 : :
7 : : #include <getopt.h>
8 : : #include <stdio.h>
9 : : #include <stdbool.h>
10 : : #include <unistd.h>
11 : :
12 : : #include <pkg.h>
13 : :
14 : : #include "pkgcli.h"
15 : :
16 : : void
17 : 0 : usage_repositories(void)
18 : : {
19 : 0 : fprintf(stderr, "Usage: pkg repositories [-edl] [repository]\n\n");
20 : 0 : }
21 : :
22 : :
23 : : typedef enum {
24 : : REPO_SHOW_ALL = 0,
25 : : REPO_SHOW_ENABLED = 1U << 0,
26 : : REPO_SHOW_DISABLED = 1U << 1,
27 : : } repo_show_t;
28 : :
29 : : int
30 : 0 : exec_repositories(int argc, char **argv)
31 : : {
32 : 0 : const char *r = NULL;
33 : 0 : struct pkg_repo *repo = NULL;
34 : 0 : bool list_only = false;
35 : 0 : repo_show_t rs = REPO_SHOW_ALL;
36 : : int ch;
37 : :
38 : 0 : struct option longopts[] = {
39 : : { "list", no_argument, NULL, 'l' },
40 : : { "enabled", no_argument, NULL, 'e' },
41 : : { "disabled", no_argument, NULL, 'd' },
42 : : { NULL, 0, NULL, 0 },
43 : : };
44 : :
45 [ # # ]: 0 : while ((ch = getopt_long(argc, argv, "+led", longopts, NULL)) != -1) {
46 [ # # # # ]: 0 : switch (ch) {
47 : : case 'l':
48 : 0 : list_only = true;
49 : 0 : break;
50 : : case 'e':
51 : 0 : rs |= REPO_SHOW_ENABLED;
52 : 0 : break;
53 : : case 'd':
54 : 0 : rs |= REPO_SHOW_DISABLED;
55 : 0 : break;
56 : : default:
57 : 0 : usage_repositories();
58 : 0 : return (EXIT_FAILURE);
59 : : }
60 : : }
61 : :
62 [ # # ]: 0 : if (rs == REPO_SHOW_ALL)
63 : 0 : rs |= REPO_SHOW_DISABLED|REPO_SHOW_ENABLED;
64 : :
65 : 0 : argc -= optind;
66 : 0 : argv += optind;
67 : :
68 [ # # ]: 0 : if (argc == 1)
69 : 0 : r = argv[0];
70 : :
71 [ # # ]: 0 : while (pkg_repos(&repo) == EPKG_OK) {
72 [ # # # # ]: 0 : if (r && !STREQ(r, pkg_repo_name(repo)))
73 : 0 : continue;
74 [ # # ]: 0 : if (pkg_repo_enabled(repo)) {
75 [ # # ]: 0 : if ((rs & REPO_SHOW_ENABLED) == 0)
76 : 0 : continue;
77 : 0 : } else {
78 [ # # ]: 0 : if ((rs & REPO_SHOW_DISABLED) == 0)
79 : 0 : continue;
80 : : }
81 [ # # ]: 0 : if (list_only) {
82 : 0 : printf("%s\n", pkg_repo_name(repo));
83 : 0 : continue;
84 : : }
85 : 0 : print_repository(repo, false);
86 : : }
87 : :
88 : :
89 : 0 : return (EXIT_SUCCESS);
90 : 0 : }
|