aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--cli/main.cpp14
-rw-r--r--include/katja/database.hpp28
-rw-r--r--katja/database.cpp67
4 files changed, 112 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 27c0c2b..a8d7602 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,6 @@
/config/tea-cleaner.toml
/log/
/tmp/
+CMakeLists.txt
+/.cache/
+/build/
diff --git a/cli/main.cpp b/cli/main.cpp
new file mode 100644
index 0000000..2c6ab3b
--- /dev/null
+++ b/cli/main.cpp
@@ -0,0 +1,14 @@
+#include <filesystem>
+#include <iostream>
+#include "katja/database.hpp"
+
+int main()
+{
+ for (const auto& entry : std::filesystem::directory_iterator(katja::database))
+ {
+ katja::database_package database_entry{ entry.path().filename() };
+
+ std::cout << database_entry.to_string() << std::endl;
+ }
+ return 0;
+}
diff --git a/include/katja/database.hpp b/include/katja/database.hpp
new file mode 100644
index 0000000..d4d99e6
--- /dev/null
+++ b/include/katja/database.hpp
@@ -0,0 +1,28 @@
+#pragma once
+
+#include <string>
+
+namespace katja
+{
+ constexpr const char *database = "/var/lib/pkgtools/packages";
+
+ class database_package
+ {
+ database_package(std::string&& name, std::string&& version,
+ std::string&& architecture, std::string&& build_tag);
+
+ static database_package create_database_package(const std::string& fullname);
+
+ public:
+ const std::string build_tag;
+ const std::string architecture;
+ const std::string version;
+ const std::string name;
+
+ database_package(const std::string& fullname);
+
+ std::string to_string() const;
+ };
+
+
+}
diff --git a/katja/database.cpp b/katja/database.cpp
new file mode 100644
index 0000000..555e679
--- /dev/null
+++ b/katja/database.cpp
@@ -0,0 +1,67 @@
+#include "katja/database.hpp"
+
+namespace katja
+{
+ database_package database_package::create_database_package(const std::string& fullname)
+ {
+ std::string::const_reverse_iterator begin_iterator = std::crbegin(fullname);
+ std::string::const_reverse_iterator end_iterator = begin_iterator;
+ int minus_counter = 0;
+
+ std::string build_tag;
+ std::string architecture;
+ std::string version;
+
+ for (; begin_iterator != std::crend(fullname) && minus_counter < 3; ++begin_iterator)
+ {
+ if (*begin_iterator == '-')
+ {
+ if (minus_counter == 0)
+ {
+ build_tag = std::string(begin_iterator.base(), end_iterator.base());
+ }
+ else if (minus_counter == 1)
+ {
+ architecture = std::string(begin_iterator.base(), end_iterator.base());
+ }
+ else if (minus_counter == 2)
+ {
+ version = std::string(begin_iterator.base(), end_iterator.base());
+ }
+ end_iterator = begin_iterator + 1;
+ ++minus_counter;
+ }
+ }
+ return database_package(std::string(fullname.cbegin(), end_iterator.base()),
+ std::move(version), std::move(architecture), std::move(build_tag));
+ }
+
+ database_package::database_package(std::string&& name, std::string&& version,
+ std::string&& architecture, std::string&& build_tag)
+ : name(name), version(version), architecture(version), build_tag(build_tag)
+ {
+ }
+
+ database_package::database_package(const std::string& fullname)
+ : database_package(create_database_package(fullname))
+ {
+ }
+
+ std::string database_package::to_string() const
+ {
+ std::string package_string;
+ const std::size_t total_size = this->name.size() + this->version.size()
+ + this->architecture.size() + this->build_tag.size() + 3;
+
+ package_string.reserve(total_size);
+ package_string.append(this->name);
+ package_string.push_back('-');
+ package_string.append(this->version);
+ package_string.push_back('-');
+ package_string.append(this->architecture);
+ package_string.push_back('-');
+ package_string.append(this->build_tag);
+
+ return package_string;
+ }
+}