From 049642d06b3c0d639d83759f4e18d89c5ee52888 Mon Sep 17 00:00:00 2001 From: ngn Date: Sun, 4 Aug 2024 15:55:02 +0300 Subject: [PATCH] update: make things work with libmp update --- locale/tr/LC_MESSAGES/matt.po | 193 ++++++++++++++++++---------------- src/cmd/info.c | 1 + src/cmd/install.c | 1 + src/cmd/list.c | 1 + src/cmd/remove.c | 1 + src/cmd/sync.c | 1 + src/cmd/update.c | 1 + src/config.c | 5 +- src/lock.c | 7 +- src/main.c | 58 ++++++---- src/util.c | 41 +++++++- src/util.h | 3 + 12 files changed, 198 insertions(+), 115 deletions(-) diff --git a/locale/tr/LC_MESSAGES/matt.po b/locale/tr/LC_MESSAGES/matt.po index de66785..c4f12ef 100644 --- a/locale/tr/LC_MESSAGES/matt.po +++ b/locale/tr/LC_MESSAGES/matt.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-01 01:59+0300\n" +"POT-Creation-Date: 2024-08-04 15:54+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,29 +17,29 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/config.c:70 +#: src/config.c:71 #, c-format msgid "Unknown configuration option: %s/%s" msgstr "Unknown configuration option: %s/%s" -#: src/config.c:78 -#, c-format -msgid "Failed to access the configuration file: %s" +#: src/config.c:79 +#, fuzzy +msgid "Failed to access the configuration file: " msgstr "Failed to access the configuration file: %s" -#: src/config.c:83 +#: src/config.c:84 msgid "Failed to parse the configuration" msgstr "Failed to parse the configuration" -#: src/config.c:88 +#: src/config.c:89 msgid "Please specify \"tmpdir\" in the configuration" msgstr "Please specify \"tmpdir\" in the configuration" -#: src/config.c:93 +#: src/config.c:94 msgid "Please specify \"datadir\" in the configuration" msgstr "Please specify \"datadir\" in the configuration" -#: src/config.c:100 +#: src/config.c:101 #, c-format msgid "URL not specified for the pool: %s" msgstr "URL not specified for the pool: %s" @@ -73,288 +73,305 @@ msgstr "Please answer with y/n" msgid "Received a segfault" msgstr "Received a segfault" -#: src/main.c:93 +#: src/main.c:97 msgid "Failed to access the root directory, are you running as root?" msgstr "Failed to access the root directory, are you running as root?" -#: src/main.c:95 -#, c-format -msgid "Bad root directory (%s): %s" -msgstr "Bad root directory (%s): %s" +#: src/main.c:101 +#, fuzzy +msgid "Failed to access the data directory (" +msgstr "Failed to access the configuration file: %s" -#: src/main.c:103 -#, c-format -msgid "Bad datadir (%s): %s" -msgstr "Bad datadir (%s): %s" +#: src/main.c:105 +#, fuzzy +msgid "Failed to access the temp directory (" +msgstr "Failed to open the editor: %s" -#: src/main.c:108 -#, c-format -msgid "Bad tmpdir (%s): %s" -msgstr "Bad tmpdir (%s): %s" +#: src/main.c:109 +#, fuzzy, c-format +msgid "Failed to initialize libmp context: %s" +msgstr "Failed to install " -#: src/main.c:115 +#: src/main.c:120 +#, fuzzy +msgid "Failed to create the pools directory (" +msgstr "Failed to open the editor: %s" + +#: src/main.c:130 msgid "Failed to add pool " msgstr "Failed to add pool " -#: src/main.c:127 +#: src/main.c:144 msgid "Failed to lock, matt is already running" msgstr "Failed to lock, matt is already running" -#: src/main.c:131 +#: src/main.c:148 msgid "Failed to lock, are you root?" msgstr "Failed to lock, are you root?" -#: src/main.c:142 +#: src/main.c:159 msgid "Command not found: " msgstr "Command not found: " -#: src/main.c:144 +#: src/main.c:161 #, c-format msgid "MatterLinux package manager (version %s)" msgstr "MatterLinux package manager (version %s)" -#: src/main.c:145 +#: src/main.c:162 msgid "Usage: " msgstr "Usage: " -#: src/main.c:147 +#: src/main.c:164 msgid "Here is a list of available commands:" msgstr "Here is a list of available commands:" -#: src/main.c:153 +#: src/main.c:170 msgid "To list different options, use commands with " msgstr "To list different options, use commands with " -#: src/main.c:154 +#: src/main.c:171 msgid "Here is a list of available global options:" msgstr "Here is a list of available global options:" -#: src/main.c:157 src/main.c:158 src/cmd/info.c:42 src/cmd/info.c:43 -#: src/cmd/info.c:44 src/cmd/install.c:25 src/cmd/install.c:26 -#: src/cmd/list.c:13 src/cmd/list.c:14 src/cmd/remove.c:20 src/cmd/remove.c:21 -#: src/cmd/update.c:29 +#: src/main.c:174 src/main.c:175 src/cmd/info.c:43 src/cmd/info.c:44 +#: src/cmd/info.c:45 src/cmd/install.c:26 src/cmd/install.c:27 +#: src/cmd/list.c:14 src/cmd/list.c:15 src/cmd/remove.c:21 src/cmd/remove.c:22 +#: src/cmd/update.c:30 #, c-format msgid " " msgstr " " -#: src/main.c:160 +#: src/main.c:177 msgid "" "Licensed under GPLv3, see https://www.gnu.org/licenses/ for more information" msgstr "" "Licensed under GPLv3, see https://www.gnu.org/licenses/ for more information" -#: src/util.c:83 +#: src/util.c:120 msgid "No available editor to open " msgstr "No available editor to open " -#: src/util.c:90 +#: src/util.c:127 #, c-format msgid "Failed to run the editor: %s" msgstr "Failed to run the editor: %s" -#: src/util.c:95 +#: src/util.c:132 #, c-format msgid "Failed to open the editor: %s" msgstr "Failed to open the editor: %s" -#: src/cmd/info.c:18 src/cmd/info.c:28 src/cmd/install.c:59 src/cmd/remove.c:45 +#: src/cmd/info.c:19 src/cmd/info.c:29 src/cmd/install.c:60 src/cmd/remove.c:46 msgid "Package " msgstr "Package " -#: src/cmd/info.c:41 src/cmd/list.c:12 +#: src/cmd/info.c:42 src/cmd/list.c:13 msgid "Listing options for the list command:" msgstr "Listing options for the list command:" -#: src/cmd/info.c:65 +#: src/cmd/info.c:66 msgid "Please specify only a single package name" msgstr "Please specify only a single package name" -#: src/cmd/info.c:71 +#: src/cmd/info.c:72 msgid "Please specify a single package" msgstr "Please specify a single package" -#: src/cmd/info.c:86 +#: src/cmd/info.c:87 msgid "Failed to get the changes file for " msgstr "Failed to get the changes file for " -#: src/cmd/info.c:92 +#: src/cmd/info.c:93 msgid "Failed to access the changes file, is the package installed?" msgstr "Failed to access the changes file, is the package installed?" -#: src/cmd/info.c:99 +#: src/cmd/info.c:100 msgid "Failed to get the depends list for " msgstr "Failed to get the depends list for " -#: src/cmd/info.c:126 +#: src/cmd/info.c:127 #, c-format msgid "Name " msgstr "Name " -#: src/cmd/info.c:127 +#: src/cmd/info.c:128 #, c-format msgid "Version " msgstr "Version " -#: src/cmd/info.c:128 +#: src/cmd/info.c:129 #, c-format msgid "Desc " msgstr "Desc " -#: src/cmd/info.c:129 +#: src/cmd/info.c:130 #, c-format msgid "Size " msgstr "Size " -#: src/cmd/info.c:132 +#: src/cmd/info.c:133 #, c-format msgid "Depends " msgstr "Depends " -#: src/cmd/info.c:135 +#: src/cmd/info.c:136 #, c-format msgid "Changes " msgstr "Changes " -#: src/cmd/info.c:139 src/cmd/info.c:140 +#: src/cmd/info.c:140 src/cmd/info.c:141 #, c-format msgid "Installed " msgstr "Installed " -#: src/cmd/info.c:142 src/cmd/info.c:143 +#: src/cmd/info.c:143 src/cmd/info.c:144 #, c-format msgid "Up-to-date " msgstr "Up-to-date " -#: src/cmd/install.c:24 +#: src/cmd/install.c:25 msgid "Listing options for the install command:" msgstr "Listing options for the install command:" -#: src/cmd/install.c:31 src/cmd/update.c:34 +#: src/cmd/install.c:32 src/cmd/update.c:35 msgid "There are no avaliable pools, have you synced yet?" msgstr "There are no avaliable pools, have you synced yet?" -#: src/cmd/install.c:51 src/cmd/remove.c:47 +#: src/cmd/install.c:52 src/cmd/remove.c:48 msgid "Failed to find " msgstr "Failed to find " -#: src/cmd/install.c:65 +#: src/cmd/install.c:66 msgid "Failed to resolve " msgstr "Failed to resolve " -#: src/cmd/install.c:71 +#: src/cmd/install.c:72 msgid "Nothing to do (no packages to install)" msgstr "Nothing to do (no packages to install)" -#: src/cmd/install.c:80 src/cmd/install.c:82 src/cmd/remove.c:67 -#: src/cmd/remove.c:69 src/cmd/update.c:55 src/cmd/update.c:57 +#: src/cmd/install.c:81 src/cmd/install.c:83 src/cmd/remove.c:68 +#: src/cmd/remove.c:70 src/cmd/update.c:56 src/cmd/update.c:58 msgid "Following " msgstr "Following " -#: src/cmd/install.c:88 src/cmd/remove.c:76 +#: src/cmd/install.c:89 src/cmd/remove.c:77 msgid "Total of " msgstr "Total of " -#: src/cmd/install.c:91 src/cmd/update.c:64 +#: src/cmd/install.c:92 src/cmd/update.c:65 #, c-format msgid "Root directory is modified, install scripts will be saved in %s" msgstr "Root directory is modified, install scripts will be saved in %s" -#: src/cmd/install.c:93 src/cmd/remove.c:77 src/cmd/update.c:66 +#: src/cmd/install.c:94 src/cmd/remove.c:78 src/cmd/update.c:67 msgid "Continue?" msgstr "Continue?" -#: src/cmd/install.c:94 src/cmd/remove.c:78 src/cmd/update.c:67 +#: src/cmd/install.c:95 src/cmd/remove.c:79 src/cmd/update.c:68 msgid "Operation cancelled" msgstr "Operation cancelled" -#: src/cmd/install.c:100 src/cmd/install.c:115 src/cmd/remove.c:85 -#: src/cmd/update.c:77 src/cmd/update.c:86 src/cmd/update.c:95 +#: src/cmd/install.c:101 src/cmd/install.c:116 src/cmd/remove.c:86 +#: src/cmd/update.c:78 src/cmd/update.c:87 src/cmd/update.c:96 msgid "(" msgstr "(" -#: src/cmd/install.c:106 src/cmd/update.c:82 +#: src/cmd/install.c:107 src/cmd/update.c:83 msgid "Failed to download " msgstr "Failed to download " -#: src/cmd/install.c:121 src/cmd/update.c:100 +#: src/cmd/install.c:122 src/cmd/update.c:101 msgid "Failed to install " msgstr "Failed to install " -#: src/cmd/install.c:127 +#: src/cmd/install.c:128 msgid "Installed " msgstr "Installed " -#: src/cmd/install.c:127 +#: src/cmd/install.c:128 msgid "Installed all of the " msgstr "Installed all of the " -#: src/cmd/list.c:27 +#: src/cmd/list.c:28 msgid "There no installed packages" msgstr "There no installed packages" -#: src/cmd/list.c:32 +#: src/cmd/list.c:33 msgid "Listing " msgstr "Listing " -#: src/cmd/remove.c:19 +#: src/cmd/remove.c:20 msgid "Listing options for the remove command:" msgstr "Listing options for the remove command:" -#: src/cmd/remove.c:52 +#: src/cmd/remove.c:53 msgid "Cannot remove " msgstr "Cannot remove " -#: src/cmd/remove.c:60 +#: src/cmd/remove.c:61 msgid "Nothing to do (no packages to remove)" msgstr "Nothing to do (no packages to remove)" -#: src/cmd/remove.c:91 src/cmd/update.c:91 +#: src/cmd/remove.c:92 src/cmd/update.c:92 msgid "Failed to remove " msgstr "Failed to remove " -#: src/cmd/remove.c:97 +#: src/cmd/remove.c:98 msgid "Removed " msgstr "Removed " -#: src/cmd/remove.c:97 +#: src/cmd/remove.c:98 msgid "Removed all of the " msgstr "Removed all of the " -#: src/cmd/sync.c:19 +#: src/cmd/sync.c:20 msgid "Failed to sync " msgstr "Failed to sync " -#: src/cmd/sync.c:28 src/cmd/sync.c:58 +#: src/cmd/sync.c:29 src/cmd/sync.c:59 msgid "Synced " msgstr "Synced " -#: src/cmd/sync.c:34 +#: src/cmd/sync.c:35 #, c-format msgid "Failed to sync %s: %s" msgstr "Failed to sync %s: %s" -#: src/cmd/sync.c:46 +#: src/cmd/sync.c:47 msgid "There are no pools specified in the configuration" msgstr "There are no pools specified in the configuration" -#: src/cmd/sync.c:54 +#: src/cmd/sync.c:55 #, c-format msgid "Failed to sync pools: %s" msgstr "Failed to sync pools: %s" -#: src/cmd/update.c:28 +#: src/cmd/update.c:29 msgid "Listing options for the update command:" msgstr "Listing options for the update command:" -#: src/cmd/update.c:45 +#: src/cmd/update.c:46 #, c-format msgid "Failed to get the package update list: %s" msgstr "Failed to get the package update list: %s" -#: src/cmd/update.c:50 +#: src/cmd/update.c:51 msgid "All packages are up-to-date" msgstr "All packages are up-to-date" -#: src/cmd/update.c:73 +#: src/cmd/update.c:74 msgid "Failed to update " msgstr "Failed to update " + +#, c-format +#~ msgid "Bad root directory (%s): %s" +#~ msgstr "Bad root directory (%s): %s" + +#, c-format +#~ msgid "Bad datadir (%s): %s" +#~ msgstr "Bad datadir (%s): %s" + +#, c-format +#~ msgid "Bad tmpdir (%s): %s" +#~ msgstr "Bad tmpdir (%s): %s" diff --git a/src/cmd/info.c b/src/cmd/info.c index 6890cff..a186035 100644 --- a/src/cmd/info.c +++ b/src/cmd/info.c @@ -7,6 +7,7 @@ #include #include "../util.h" +#include "../intl.h" #include "../cmd.h" #include "../log.h" diff --git a/src/cmd/install.c b/src/cmd/install.c index 6257242..7e3c2c9 100644 --- a/src/cmd/install.c +++ b/src/cmd/install.c @@ -2,6 +2,7 @@ #include #include "../util.h" +#include "../intl.h" #include "../cmd.h" #include "../log.h" diff --git a/src/cmd/list.c b/src/cmd/list.c index 3c129d7..cccc4d3 100644 --- a/src/cmd/list.c +++ b/src/cmd/list.c @@ -1,6 +1,7 @@ #include #include +#include "../intl.h" #include "../cmd.h" #include "../log.h" diff --git a/src/cmd/remove.c b/src/cmd/remove.c index 5381aa0..4218686 100644 --- a/src/cmd/remove.c +++ b/src/cmd/remove.c @@ -3,6 +3,7 @@ #include #include "../util.h" +#include "../intl.h" #include "../cmd.h" #include "../log.h" diff --git a/src/cmd/sync.c b/src/cmd/sync.c index 9f6f0b0..53c1669 100644 --- a/src/cmd/sync.c +++ b/src/cmd/sync.c @@ -1,6 +1,7 @@ #include #include +#include "../intl.h" #include "../cmd.h" #include "../log.h" diff --git a/src/cmd/update.c b/src/cmd/update.c index 76b598f..cdabecc 100644 --- a/src/cmd/update.c +++ b/src/cmd/update.c @@ -2,6 +2,7 @@ #include #include "../util.h" +#include "../intl.h" #include "../cmd.h" #include "../log.h" diff --git a/src/config.c b/src/config.c index e622f54..bca1537 100644 --- a/src/config.c +++ b/src/config.c @@ -8,6 +8,7 @@ #include "config.h" #include "intl.h" #include "log.h" +#include "util.h" bool config_set(config_t *config, char *key, char *value) { if (eq(key, "tmpdir")) @@ -74,8 +75,8 @@ unknown: bool config_load(lm_ctx_t *ctx, config_t *config, char *file) { bzero(config, sizeof(config_t)); - if (!exists(file) || !can_read(file)) { - error(_("Failed to access the configuration file: %s"), file); + if (access(file, R_OK) != 0) { + error(_("Failed to access the configuration file: " FG_BOLD "%s"), file); return false; } diff --git a/src/lock.c b/src/lock.c index 12167c7..d55907f 100644 --- a/src/lock.c +++ b/src/lock.c @@ -1,9 +1,10 @@ -#include "lock.h" #include -#include #include #include +#include "lock.h" +#include "util.h" + lock_st lock(lm_ctx_t *ctx) { if (NULL == ctx->data) return LOCK_ERROR; @@ -11,7 +12,7 @@ lock_st lock(lm_ctx_t *ctx) { char lock_file[strlen(ctx->data) + 10]; join(lock_file, ctx->data, "lock"); - if (exists(lock_file)) + if (access(lock_file, F_OK) == 0) return ALREADY_LOCKED; if (creat(lock_file, 0600) == -1) return LOCK_ERROR; diff --git a/src/main.c b/src/main.c index 631405d..3ad62f0 100644 --- a/src/main.c +++ b/src/main.c @@ -22,14 +22,14 @@ // clang-format on +#include #include -#include -#include -#include #include #include #include #include +#include +#include #include "args.h" #include "cmd.h" @@ -66,10 +66,10 @@ int main(int argc, char *argv[], char *envp[]) { {.name = "update", .desc = "update installed package(s)", .func = cmd_update }, }; + char *full_datadir = NULL, *full_tmpdir = NULL, *full_pooldir = NULL; char *config_file = NULL, *root_dir = NULL; - char *full_datadir = NULL, *full_tmpdir = NULL; + bool ret = false, r = false; args_t *args = NULL; - bool ret = false; config_t config; set_env(envp); @@ -88,33 +88,50 @@ int main(int argc, char *argv[], char *envp[]) { if ((root_dir = args_get_string(args, "root")) == NULL) root_dir = "/"; - if (!lm_ctx_set_root(&ctx, root_dir)) { - if (LM_ERR_CtxRootNoWrite == lm_error()) - error(_("Failed to access the root directory, are you running as root?")); - else - error(_("Bad root directory (%s): %s"), root_dir, lm_strerror()); - goto end; - } - full_datadir = join_alloc(root_dir, config.datadir); full_tmpdir = join_alloc(root_dir, config.tmpdir); - if (!lm_ctx_set_data(&ctx, full_datadir)) { - error(_("Bad datadir (%s): %s"), full_datadir, lm_strerror()); - goto end; - } + if (!lm_ctx_new(&ctx, root_dir, full_tmpdir, full_datadir)) { + switch (lm_error()) { + case LM_ERR_CtxRootFail: + error(_("Failed to access the root directory, are you running as root?")); + break; + + case LM_ERR_CtxDataFail: + error(_("Failed to access the data directory (" FG_BOLD "%s" FG_RESET ")"), full_datadir); + break; + + case LM_ERR_CtxTempFail: + error(_("Failed to access the temp directory (" FG_BOLD "%s" FG_RESET ")"), full_tmpdir); + break; + + default: + error(_("Failed to initialize libmp context: %s"), lm_strerror()); + break; + } - if (!lm_ctx_set_temp(&ctx, full_tmpdir)) { - error(_("Bad tmpdir (%s): %s"), full_tmpdir, lm_strerror()); goto end; } pool_config_t *pool = config.pools; + full_pooldir = join_alloc(full_datadir, "pools"); + + if (mkdir(full_pooldir, 0755) < 0 && errno != EEXIST) { + error(_("Failed to create the pools directory (" FG_BOLD "%s" FG_RESET "): %s"), pool->name, strerror(errno)); + goto end; + } + while (NULL != pool) { - if (!lm_ctx_pool_add(&ctx, pool->name, pool->url)) { + char *pd = join_alloc(full_pooldir, pool->name); + + r = lm_ctx_pool_add(&ctx, pool->name, pool->url, pd); + + if (!r) { error(_("Failed to add pool " FG_BOLD "%s" FG_RESET " to the list: %s"), pool->name, lm_strerror()); goto end; } + + free(pd); pool = pool->next; } @@ -165,6 +182,7 @@ help: end: unlock(&ctx); + free(full_pooldir); free(full_datadir); free(full_tmpdir); diff --git a/src/util.c b/src/util.c index b281598..577d902 100644 --- a/src/util.c +++ b/src/util.c @@ -1,12 +1,13 @@ #include -#include #include #include #include #include #include +#include #include +#include "intl.h" #include "log.h" #include "util.h" @@ -16,6 +17,16 @@ void set_env(char **envp) { env = envp; } +bool eq(char *s1, char *s2) { + if (NULL == s1 || NULL == s2) + return false; + + if (strlen(s1) != strlen(s2)) + return false; + + return strcmp(s1, s2) == 0; +} + bool startswith(char *str, char *sub) { size_t strl = strlen(str); size_t subl = strlen(sub); @@ -26,6 +37,32 @@ bool startswith(char *str, char *sub) { return strncmp(sub, str, subl) == 0; } +int join(char *res, const char *base, const char *pth) { + int blen = strlen(base); + + if ((base[blen - 1] == '/' && pth[0] != '/') || (base[blen - 1] != '/' && pth[0] == '/')) { + return sprintf(res, "%s%s", base, pth); + } else if (base[blen - 1] != '/' && pth[0] != '/') { + return sprintf(res, "%s/%s", base, pth); + } else if (base[blen - 1] == '/' && pth[0] == '/') { + char *basedup = strdup(base); + basedup[blen - 1] = '\0'; + + return sprintf(res, "%s%s", basedup, pth); + } + + return -1; +} + +char *join_alloc(char *p1, char *p2) { + char *fp = malloc(strlen(p1) + strlen(p2) + 5); + if (!join(fp, p1, p2)) { + free(fp); + fp = NULL; + } + return fp; +} + void size_to_human(char *buf, long size) { char *suffix[] = {"B", "KB", "MB", "GB", "TB"}; char length = sizeof(suffix) / sizeof(suffix[0]); @@ -58,7 +95,7 @@ char *exists_in_path(char *file) { char fp[strlen(part) + filesz + 1]; join(fp, part, file); - if (exists(fp)) + if (access(fp, X_OK) == 0) return strdup(fp); } while ((part = strtok_r(NULL, ":", &save)) != NULL); diff --git a/src/util.h b/src/util.h index 145fc74..522fe1e 100644 --- a/src/util.h +++ b/src/util.h @@ -5,6 +5,9 @@ #define LONGSTR_MAX 30 void set_env(char **envp); +bool eq(char *s1, char *s2); +int join(char *res, const char *base, const char *pth); +char *join_alloc(char *p1, char *p2); bool startswith(char *str, char *sub); void size_to_human(char *buf, long size); char *exists_in_path(char *file);