#include "libargs/args.h" #include "util.h" #include "package_db.h" #include "build_db.h" #include "download_db.h" int cmd_install(char* cmd_name, ArgParser* parser); int main(int argc, char* argv[]) { // create argument parser ArgParser* parser = ap_new_parser(); if (parser == NULL) die("failed to initialize cli parsing"); ap_set_helptext(parser, "Usage: snag "); 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); // download or retrieve package download package_download_t download; package_get_download(&info, &download); // run the package install package_run_install(&info); } } return 0; }