1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#include "libargs/args.h"
#include "util.h"
#include "cfg.h"
#include "package_db.h"
#include "build_db.h"
#include "source_db.h"
int cmd_install(char* cmd_name, ArgParser* parser);
int main(int argc, char* argv[]) {
// initialize config
cfg_init();
// create argument parser
ArgParser* parser = ap_new_parser();
if (parser == NULL) die("failed to initialize cli parsing");
ap_set_helptext(parser, "Usage: snag <command>");
ap_set_version(parser, "0.0");
// add install subcommand
ArgParser* install = ap_new_cmd(parser, "install inst i");
if (install == NULL) die("failed to initialize install cli subcommand");
ap_set_helptext(install, "Usage: snag install [packages]");
ap_set_cmd_callback(install, cmd_install);
// parse the arguments (automatically executes subcommands)
if (!ap_parse(parser, argc, argv)) die("failed to parse arguments");
// if no subcommand was specified, parse and execute install as the root command
if (!ap_found_cmd(parser)) {
if (!ap_parse(install, argc, argv)) die("failed to parse arguments");
cmd_install("install", install);
}
ap_free(parser);
return 0;
}
int cmd_install(char* cmd_name, ArgParser* parser) {
// install each package specified
for (int i = 0; i < ap_count_args(parser); i++) {
if (i != 0) print("\n");
// load package description
char* pkgid = ap_get_arg_at_index(parser, i);
package_info_t info;
if (load_package_info(pkgid, &info)) {
print("Installing %s - %s\n", info.attrs.name, info.attrs.desc);
// confirm that package source exists or is downloaded
if (!verify_source(&info.attrs.source) && !download_source(&info.attrs.source)) {
continue;
}
// run the package install
package_build_t build;
package_setup_build(&info, &build);
build_run(&build);
}
}
return 0;
}
|