157 lines
5.7 KiB
Diff
157 lines
5.7 KiB
Diff
From 9701b99ef3b3019dcef1bd929ffc758ceeb4aae3 Mon Sep 17 00:00:00 2001
|
|
From: Diego Herrera <dherrera@redhat.com>
|
|
Date: Thu, 16 Jan 2025 18:29:40 -0300
|
|
Subject: [PATCH 1/5] Split $releasever to $releasever_major and
|
|
$releasever_minor in c api
|
|
|
|
---
|
|
libdnf/dnf-repo.cpp | 6 ++++-
|
|
libdnf/dnf-utils.cpp | 44 ++++++++++++++++++++++++++++++++++++
|
|
libdnf/dnf-utils.h | 3 +++
|
|
tests/libdnf/dnf-self-test.c | 27 ++++++++++++++++++++++
|
|
4 files changed, 79 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp
|
|
index ca3d1920..49da175f 100644
|
|
--- a/libdnf/dnf-repo.cpp
|
|
+++ b/libdnf/dnf-repo.cpp
|
|
@@ -1194,6 +1194,8 @@ dnf_repo_setup(DnfRepo *repo, GError **error) try
|
|
DnfRepoEnabled enabled = DNF_REPO_ENABLED_NONE;
|
|
g_autofree gchar *basearch = NULL;
|
|
g_autofree gchar *release = NULL;
|
|
+ g_autofree gchar *major = NULL;
|
|
+ g_autofree gchar *minor = NULL;
|
|
|
|
basearch = g_key_file_get_string(priv->keyfile, "general", "arch", NULL);
|
|
if (basearch == NULL)
|
|
@@ -1221,9 +1223,11 @@ dnf_repo_setup(DnfRepo *repo, GError **error) try
|
|
return FALSE;
|
|
if (!lr_handle_setopt(priv->repo_handle, error, LRO_INTERRUPTIBLE, 0L))
|
|
return FALSE;
|
|
+ dnf_split_releasever(release, &major, &minor);
|
|
priv->urlvars = lr_urlvars_set(priv->urlvars, "releasever", release);
|
|
+ priv->urlvars = lr_urlvars_set(priv->urlvars, "releasever_major", major);
|
|
+ priv->urlvars = lr_urlvars_set(priv->urlvars, "releasever_minor", minor);
|
|
priv->urlvars = lr_urlvars_set(priv->urlvars, "basearch", basearch);
|
|
-
|
|
/* Call libdnf::dnf_context_load_vars(priv->context); only when values not in cache.
|
|
* But what about if variables on disk change during long running programs (PackageKit daemon)?
|
|
* if (!libdnf::dnf_context_get_vars_cached(priv->context))
|
|
diff --git a/libdnf/dnf-utils.cpp b/libdnf/dnf-utils.cpp
|
|
index 874282cf..43c84b82 100644
|
|
--- a/libdnf/dnf-utils.cpp
|
|
+++ b/libdnf/dnf-utils.cpp
|
|
@@ -84,6 +84,50 @@ dnf_realpath(const gchar *path)
|
|
return real;
|
|
}
|
|
|
|
+/**
|
|
+ * dnf_split_releasever:
|
|
+ * @releasever: A releasever string
|
|
+ * @releasever_major: Output string, or %NULL
|
|
+ * @releasever_minor: Output string, or %NULL
|
|
+ *
|
|
+ * Splits a releasever string into mayor and minor
|
|
+ * using the same logic as DNF 5 and as splitReleaseverTo in libzypp.
|
|
+ **/
|
|
+void
|
|
+dnf_split_releasever(const gchar *releasever,
|
|
+ gchar **releasever_major,
|
|
+ gchar **releasever_minor)
|
|
+{
|
|
+ g_autofree gchar** result = NULL;
|
|
+
|
|
+ // Uses the same logic as DNF 5 and as splitReleaseverTo in libzypp
|
|
+ result = g_strsplit(releasever, ".", 2);
|
|
+
|
|
+ if(result[0] == NULL) {
|
|
+ if(releasever_major != NULL)
|
|
+ *releasever_major = g_strdup("");
|
|
+ if(releasever_minor != NULL)
|
|
+ *releasever_minor = g_strdup("");
|
|
+ return;
|
|
+ }
|
|
+ else {
|
|
+ if(releasever_major != NULL)
|
|
+ *releasever_major = result[0];
|
|
+ else
|
|
+ g_free(result[0]);
|
|
+ }
|
|
+
|
|
+ if(result[1] == NULL) {
|
|
+ if(releasever_minor != NULL)
|
|
+ *releasever_minor = g_strdup("");
|
|
+ } else {
|
|
+ if(releasever_minor != NULL)
|
|
+ *releasever_minor = result[1];
|
|
+ else
|
|
+ g_free(result[1]);
|
|
+ }
|
|
+}
|
|
+
|
|
/**
|
|
* dnf_remove_recursive:
|
|
* @directory: A directory path
|
|
diff --git a/libdnf/dnf-utils.h b/libdnf/dnf-utils.h
|
|
index 6b711918..c10dd53f 100644
|
|
--- a/libdnf/dnf-utils.h
|
|
+++ b/libdnf/dnf-utils.h
|
|
@@ -53,6 +53,9 @@ extern "C" {
|
|
#endif
|
|
|
|
gchar *dnf_realpath (const gchar *path);
|
|
+void dnf_split_releasever (const gchar *releasever,
|
|
+ gchar **releasever_major,
|
|
+ gchar **releasever_minor);
|
|
gboolean dnf_remove_recursive (const gchar *directory,
|
|
GError **error);
|
|
gboolean dnf_ensure_file_unlinked (const gchar *src_path,
|
|
diff --git a/tests/libdnf/dnf-self-test.c b/tests/libdnf/dnf-self-test.c
|
|
index e0fbe657..2fe792e9 100644
|
|
--- a/tests/libdnf/dnf-self-test.c
|
|
+++ b/tests/libdnf/dnf-self-test.c
|
|
@@ -189,6 +189,32 @@ dnf_lock_threads_func(void)
|
|
g_object_unref(lock);
|
|
}
|
|
|
|
+static void
|
|
+dnf_split_releasever_func(void)
|
|
+{
|
|
+ gchar *major, *minor;
|
|
+ dnf_split_releasever("1.23.45", &major, &minor);
|
|
+ g_assert_cmpstr(major, ==, "1");
|
|
+ g_assert_cmpstr(minor, ==, "23.45");
|
|
+ g_free(major);
|
|
+ g_free(minor);
|
|
+ dnf_split_releasever("6.789", &major, &minor);
|
|
+ g_assert_cmpstr(major, ==, "6");
|
|
+ g_assert_cmpstr(minor, ==, "789");
|
|
+ g_free(major);
|
|
+ g_free(minor);
|
|
+ dnf_split_releasever("10", &major, &minor);
|
|
+ g_assert_cmpstr(major, ==, "10");
|
|
+ g_assert_cmpstr(minor, ==, "");
|
|
+ g_free(major);
|
|
+ g_free(minor);
|
|
+ dnf_split_releasever("", &major, &minor);
|
|
+ g_assert_cmpstr(major, ==, "");
|
|
+ g_assert_cmpstr(minor, ==, "");
|
|
+ g_free(major);
|
|
+ g_free(minor);
|
|
+}
|
|
+
|
|
static void
|
|
ch_test_repo_func(void)
|
|
{
|
|
@@ -1240,6 +1266,7 @@ main(int argc, char **argv)
|
|
g_test_add_func("/libdnf/context{cache-clean-check}", dnf_context_cache_clean_check_func);
|
|
g_test_add_func("/libdnf/lock", dnf_lock_func);
|
|
g_test_add_func("/libdnf/lock[threads]", dnf_lock_threads_func);
|
|
+ g_test_add_func("/libdnf/split_releasever", dnf_split_releasever_func);
|
|
g_test_add_func("/libdnf/repo", ch_test_repo_func);
|
|
g_test_add_func("/libdnf/repo_empty_keyfile", dnf_repo_setup_with_empty_keyfile);
|
|
g_test_add_func("/libdnf/state", dnf_state_func);
|
|
--
|
|
2.48.1
|
|
|