diff options
Diffstat (limited to 'src/actions.c')
-rw-r--r-- | src/actions.c | 416 |
1 files changed, 0 insertions, 416 deletions
diff --git a/src/actions.c b/src/actions.c deleted file mode 100644 index 3293e53..0000000 --- a/src/actions.c +++ /dev/null @@ -1,416 +0,0 @@ -/* actions.c - ck actions ----------------------------------------------*- C -*- - * - * This file is part of ck, the config keeper - * - * ----------------------------------------------------------------------------- - * - * Copyright (C) 2018 Anastasis Grammenos - * GPLv3 (see LICENCE for the full notice) - * - * -------------------------------------------------------------------------- */ -#include "dblayer.h" -#include "cklist.h" -#include "ckerrlog.h" - -ERRLOG(action); - -int run_INIT(UserOpt * opt, Conf *conf) { - UNUSED(conf); - if (db_exists(opt)) { - ERR("ck is already initialized in %s", opt->confDir); - return -1; - } - if (init_create_config_file(opt)) { - sERR("Cound not create config file."); - return -1; - } - DB db; - if (open_DB(&db, opt)) { - return -1; - } - init_make_tables(&db); - sqlite3_close(db.ptr); - hLOG("Initialized empty ckdb."); - return 0; -} - -int run_ADD(UserOpt * opt, Conf *conf) { - DB db; - if (open_DB(&db, opt)) { - return -1; - } - AddOpt addOpt = add_make_options(opt->args); - switch (addOpt.err) { - case ADD_NO_ERR: - break; - case ADD_ERR_WRONG_CONFIG: - ERR("The config file specified doesn't exist or is a link."); - goto error; - case ADD_ERR_WRONG_FLAGS: - ERR("Flags are: -s for secret and -p for primary."); - goto error; - } - add_print_opts(&addOpt); - /* Try adding the new config to the DB */ - if (add_transaction_try(&db, &addOpt, conf->home_dir)) { - goto error; - } - if (add_make_link(&addOpt, conf)) { - error: - close_DB(&db); - sERR("Could not complete add transaction."); - return -1; - } - close_DB(&db); - hLOG("ckdb updated succesfully."); - return 0; -} - -int run_DEL(UserOpt * opt, Conf *conf) { - UNUSED(conf); - DB db; - if (open_DB(&db, opt)) { - return -1; - } - - int rc = -1; - /* Since we are here, args have to be 1 or 2 */ - char *pName = list_get(opt->args); - if (!program_exists(&db, pName)) { - ERR("Program %s doesn't exist in the database.", pName); - goto error; - } - - /* If there is no next argument */ - if (!list_next(opt->args)) { - rc = del_transaction_try(&db, pName, NULL); - } - /* If there are more arguments */ - else { - char *cName = list_get(opt->args); - rc = del_transaction_try(&db, pName, cName); - if (rc) { - HELP("Program %s doesn't have a config named %s", pName, cName); - print_suggested_configs(&db, pName); - } - } - error: - close_DB(&db); - if (!rc) { - hLOG("ckdb updated succesfully."); - } else { - sERR("Could not complete delete transaction."); - } - return rc; -} - -int run_EDIT(UserOpt *opt, Conf *conf) { - DB db; - if (open_DB(&db, opt)) { - return -1; - } - - list_rewind(opt->args); - char confPath[STR_L] = ""; - char confName[STR_M] = ""; - int secret = 0; - /* Since we are here, args have to be 1 or 2 */ - char *pName = list_get(opt->args); - if (!program_exists(&db, pName)) { - ERR("Program %s doesn't exist in the database.", pName); - goto error; - } - /* If there is no next argument */ - if (!list_next(opt->args)) { - /* If there is no primary config*/ - if (edit_get_prime_config_from_program(&db, pName, confName, &secret) == -1) { - /* If the program has only one config */ - if (get_config_number(&db, pName) == 1) { - if (edit_get_config(&db, pName, confName, NULL, &secret)) { - ERR("Coudln't find config file for %s", pName); - goto error; - } - } - /* If the program has many configs */ - else { - HELP("Ambiguous config. Please type the config name after the program."); - print_suggested_configs(&db, pName); - goto error; - } - } - } - /* If there are more arguments */ - else { - char *cName = list_get(opt->args); - if (edit_get_config(&db, pName, confName, cName, &secret)) { - ERR("Program %s doesn't have a config named %s", pName, cName); - print_suggested_configs(&db, pName); - goto error; - } - } - close_DB(&db); - str_join_dirname_with_basename(confPath, secret ? conf->scrt_dir : conf->vc_dir, confName); - - char *editor = getenv("EDITOR"); - char command[STR_L] = ""; - if (str_is_empty(editor)) { - if (system("which nano > /dev/null 2>&1") != 0) { - ERR("Nano not found. Please set $EDITOR to your desired editor."); - return -1; - } - strcpy(command, "nano"); - } else { - strcpy(command, editor); - } - - - strcat(command, " "); - strcat(command, confPath); - - HELP("editing...\n%s", command); - system(command); - return 0; - error: - close_DB(&db); - return -1; -} - -int run_LIST(UserOpt *opt, Conf *conf) { - DB db; - if (open_DB(&db, opt)) { - return -1; - } - - cklist *the_list = list_make_new(); - ListOpt listOpt = list_make_options(opt->args); - - if (listOpt.err) { - ERR("Wrong list options."); - goto error; - } - char tmp[STR_L] = ""; - switch(listOpt._lt) { - case LT_PATH: - list_get_paths(&db, the_list, listOpt.bName, listOpt.attr, conf->home_dir); - break; - case LT_PROGRAM: - list_get_programs(&db, the_list); - break; - case LT_TREE: - list_get_path_program_tree(&db, the_list, listOpt.bName, listOpt.attr, conf->home_dir); - list_print(the_list); - goto close; - case LT_CKCONF: - strcat(tmp, "ck configuration directory path: "); - strcat(tmp, opt->confDir); - list_add(the_list, tmp); -#define X(var, str, name) \ - strcpy(tmp, ""); \ - strcat(tmp, name); \ - strcat(tmp, ": "); \ - strcat(tmp, conf->var); \ - list_add(the_list, tmp); - CONFIG_VARIABLES_TABLE; -#undef X - list_print(the_list); - goto close; - case LT_PROG_CONFS: - if (!program_exists(&db, listOpt.pName)) { - ERR("Program %s doesn't exist in the database.", listOpt.pName); - goto error; - } - get_program_paths(&db, the_list, listOpt.pName, listOpt.bName, listOpt.attr, conf->home_dir); - break; - } - switch(listOpt._lst) { - case LST_PLAIN: - list_print(the_list); - break; - case LST_LISP: - list_print_lisp(the_list); - break; - case LST_PYTHON: - list_print_python(the_list); - } - close: - close_DB(&db); - list_free(the_list); - return 0; - error: - close_DB(&db); - list_free(the_list); - return -1; -} - -int run_SEARCH(UserOpt *opt, Conf *conf) { - if (system("which grep > /dev/null 2>&1") != 0) { - ERR("No grep avaliable. Please make sure you have grep installed."); - return -1; - } - DB db; - if (open_DB(&db, opt)) { - return -1; - } - - cklist *paths = list_make_new(); - list_get_paths(&db, paths, 0 /*basename*/, 0/*attributes*/, conf->home_dir); - close_DB(&db); - if (list_size(paths) && list_size(opt->args)) { - do { - FILE *cmd; - char result[STR_L] = ""; - char command[STR_L] = "grep -H -n \""; - strcat(command, list_get(opt->args)); - strcat(command, "\" "); - strcat(command, list_get(paths)); - cmd = popen(command, "r"); - if (cmd == NULL) { - list_free(paths); - return -1; - } - while (fgets(result, sizeof(result), cmd)) { - printf("%s", result); - } - pclose(cmd); - } while(list_next(paths)); - } - list_free(paths); - return 0; -} - -int run_HELP(UserOpt *opt, Conf *conf) { - UNUSED(conf); - char tmp[STR_M] = ""; - if (strcmp(list_get(opt->args), "config") == 0) { - print_conf_help(); - return 0; - } - - if (strcmp(list_get(opt->args), "verbose") == 0) { - print_verbose_help(); - return 0; - } - - switch(parser_get_action(list_get(opt->args), NULL)) { -#define X(ACTION, MIN, MAX) \ - case CKA_##ACTION: \ - HELP("%s", get_possible_action_strings(tmp, CKA_##ACTION)); \ - print_##ACTION##_help(); \ - return 0; - CK_ACTIONS -#undef X - default: - ERR("Unknown action: %s", list_get(opt->args)); - } - return -1; -} - -int run_RESTORE(UserOpt *opt, Conf *conf) { - DB db; - if (open_DB(&db, opt)) { - return -1; - } - cklist *from = list_make_new(); - cklist *to = list_make_new(); - int err_flag = 0; - if (strcmp(list_get(opt->args), "-p") == 0) { - if (list_next(opt->args)) { - if (program_exists(&db, list_get(opt->args))) { - if (restore_configs_exists(&db, conf, list_get(opt->args), from, to)) { - hLOG("Restoring links for %s...", list_get(opt->args)); - } - else { - err_flag = 1; - } - } - else { - ERR("Program %s does not exist", list_get(opt->args)); - err_flag = 1; - } - } - else { - sERR("-p needs a program name"); - err_flag = 1; - } - } - else if (strcmp(list_get(opt->args), "all") == 0) { - if (!list_next(opt->args)) { - if (restore_all_exist(&db, conf, from, to)) { - hLOG("Restoring all links..."); - } - else { - err_flag = 1; - } - } - else { - sERR("Wrong argument"); - err_flag = 1; - } - } - else { - sERR("Wrong argument"); - err_flag = 1; - } - close_DB(&db); - int rc = -1; - if (!err_flag) { - rc = restore_make_links(from, to); - if (rc) { - sERR("Restore failed."); - } - } - list_free(from); - list_free(to); - return rc; -} - -/**************/ -/* PRINT HELP */ -/**************/ - -void print_INIT_help() { - HELP("ck init VERSION_CONTROL_DIR SECRET_DIR"); -} - -void print_ADD_help() { - HELP("ck add PROGRAM_NAME CONFIG_PATH [-p] [-s]"); -} - -void print_DEL_help() { - HELP("ck delete PROGRAM_NAME [CONFIG_BASENAME]"); -} - -void print_EDIT_help() { - HELP("ck edit PROGRAM_NAME [CONFIG_BASENAME]"); -} - -void print_LIST_help() { - ckhelp("ck list tree [-a] [-b]"); - ckhelp("ck list -p PROGRAM_NAME [-t list-type] [-a] [-b]"); - ckhelp("ck list programs [-t list-type] [-a] [-b]"); - ckhelp("ck list paths [-t list-type] [-a] [-b]"); - ckhelp("ck list ckconf"); - report_help(); -} - -void print_SEARCH_help() { - HELP("ck search SEARCH_TERM"); -} - -void print_HELP_help() { - HELP("ck help action"); -} - -void print_RESTORE_help() { - ckhelp("ck restore -p PROGRAM_NAME"); - ckhelp("ck restore all"); - report_help(); -} - -void print_conf_help(void) { - HELP("ck [-v|--verbose] [-c|--config DIR] action [...]"); -} - -void print_verbose_help(void) { - HELP("ck [-v|--verbose] [-c|--config DIR] action [...]"); -} |