diff --git a/VERSION.cmake b/VERSION.cmake index b8317694bd..56d55327e3 100644 --- a/VERSION.cmake +++ b/VERSION.cmake @@ -1,5 +1,5 @@ set (DEFAULT_LIBDNF_MAJOR_VERSION 0) -set (DEFAULT_LIBDNF_MINOR_VERSION 74) +set (DEFAULT_LIBDNF_MINOR_VERSION 75) set (DEFAULT_LIBDNF_MICRO_VERSION 0) if(DEFINED LIBDNF_MAJOR_VERSION) diff --git a/libdnf.spec b/libdnf.spec index 4f38122998..f69be04828 100644 --- a/libdnf.spec +++ b/libdnf.spec @@ -4,7 +4,7 @@ %global dnf_conflict 4.11.0 %global swig_version 3.0.12 %global libdnf_major_version 0 -%global libdnf_minor_version 74 +%global libdnf_minor_version 75 %global libdnf_micro_version 0 %define __cmake_in_source_build 1 diff --git a/libdnf/transaction/MergedTransaction.cpp b/libdnf/transaction/MergedTransaction.cpp index 75d2c1e78c..8f556c02a9 100644 --- a/libdnf/transaction/MergedTransaction.cpp +++ b/libdnf/transaction/MergedTransaction.cpp @@ -97,6 +97,16 @@ MergedTransaction::listCmdlines() const return cmdLines; } +std::vector< TransactionPersistence > +MergedTransaction::listPersistences() const +{ + std::vector< TransactionPersistence > persistences; + for (auto t : transactions) { + persistences.push_back(t->getPersistence()); + } + return persistences; +} + std::vector< TransactionState > MergedTransaction::listStates() const { diff --git a/libdnf/transaction/MergedTransaction.hpp b/libdnf/transaction/MergedTransaction.hpp index 50212159b7..5ef9fb30a4 100644 --- a/libdnf/transaction/MergedTransaction.hpp +++ b/libdnf/transaction/MergedTransaction.hpp @@ -47,6 +47,7 @@ class MergedTransaction { std::vector< int64_t > listIds() const; std::vector< uint32_t > listUserIds() const; std::vector< std::string > listCmdlines() const; + std::vector< TransactionPersistence > listPersistences() const; std::vector< TransactionState > listStates() const; std::vector< std::string > listReleasevers() const; std::vector< std::string > listComments() const; diff --git a/libdnf/transaction/Swdb.cpp b/libdnf/transaction/Swdb.cpp index 9626f73290..3c7f84cec6 100644 --- a/libdnf/transaction/Swdb.cpp +++ b/libdnf/transaction/Swdb.cpp @@ -385,6 +385,14 @@ Swdb::setReleasever(std::string value) transactionInProgress->setReleasever(value); } +void +Swdb::setPersistence(TransactionPersistence persistence) +{ + if (!transactionInProgress) { + throw std::logic_error(_("Not in progress")); + } + transactionInProgress->setPersistence(persistence); +} void Swdb::addConsoleOutputLine(int fileDescriptor, std::string line) diff --git a/libdnf/transaction/Swdb.hpp b/libdnf/transaction/Swdb.hpp index 5b2342c88c..9ae6b52d0c 100644 --- a/libdnf/transaction/Swdb.hpp +++ b/libdnf/transaction/Swdb.hpp @@ -114,6 +114,7 @@ struct Swdb { // misc void setReleasever(std::string value); + void setPersistence(TransactionPersistence value); void addConsoleOutputLine(int fileDescriptor, std::string line); /** diff --git a/libdnf/transaction/Transaction.cpp b/libdnf/transaction/Transaction.cpp index 208f67638f..3aac1cb9e8 100644 --- a/libdnf/transaction/Transaction.cpp +++ b/libdnf/transaction/Transaction.cpp @@ -82,6 +82,7 @@ Transaction::dbSelect(int64_t pk) " releasever, " " user_id, " " cmdline, " + " persistence, " " state, " " comment " "FROM " @@ -100,6 +101,7 @@ Transaction::dbSelect(int64_t pk) releasever = query.get< std::string >("releasever"); userId = query.get< uint32_t >("user_id"); cmdline = query.get< std::string >("cmdline"); + persistence = static_cast(query.get("persistence")); state = static_cast< TransactionState >(query.get< int >("state")); comment = query.get< std::string >("comment"); } diff --git a/libdnf/transaction/Transaction.hpp b/libdnf/transaction/Transaction.hpp index a4aba8f3c6..58f4e4cda0 100644 --- a/libdnf/transaction/Transaction.hpp +++ b/libdnf/transaction/Transaction.hpp @@ -55,6 +55,8 @@ class Transaction { const std::string &getReleasever() const noexcept { return releasever; } uint32_t getUserId() const noexcept { return userId; } const std::string &getCmdline() const noexcept { return cmdline; } + TransactionPersistence getPersistence() const noexcept { return persistence; } + TransactionState getState() const noexcept { return state; } const std::string &getComment() const noexcept { return comment; } @@ -79,6 +81,7 @@ class Transaction { std::string releasever; uint32_t userId = 0; std::string cmdline; + TransactionPersistence persistence = TransactionPersistence::UNKNOWN; TransactionState state = TransactionState::UNKNOWN; std::string comment; }; diff --git a/libdnf/transaction/Transformer.cpp b/libdnf/transaction/Transformer.cpp index ef4c0669bd..ba1b882d0f 100644 --- a/libdnf/transaction/Transformer.cpp +++ b/libdnf/transaction/Transformer.cpp @@ -53,6 +53,10 @@ static const char * const sql_migrate_tables_1_2 = #include "sql/migrate_tables_1_2.sql" ; +static const char * const sql_migrate_tables_1_3 = +#include "sql/migrate_tables_1_3.sql" + ; + void Transformer::createDatabase(SQLite3Ptr conn) { @@ -70,6 +74,9 @@ Transformer::migrateSchema(SQLite3Ptr conn) if (schemaVersion == "1.1") { conn->exec(sql_migrate_tables_1_2); + conn->exec(sql_migrate_tables_1_3); + } else if (schemaVersion == "1.2") { + conn->exec(sql_migrate_tables_1_3); } } else { diff --git a/libdnf/transaction/Transformer.hpp b/libdnf/transaction/Transformer.hpp index 87c0e1f44b..a99ea066c1 100644 --- a/libdnf/transaction/Transformer.hpp +++ b/libdnf/transaction/Transformer.hpp @@ -60,7 +60,7 @@ class Transformer { static void migrateSchema(SQLite3Ptr conn); static TransactionItemReason getReason(const std::string &reason); - static const char *getVersion() noexcept { return "1.2"; } + static const char *getVersion() noexcept { return "1.3"; } protected: void transformTrans(SQLite3Ptr swdb, SQLite3Ptr history); diff --git a/libdnf/transaction/Types.hpp b/libdnf/transaction/Types.hpp index 0003bbb723..574ed085fe 100644 --- a/libdnf/transaction/Types.hpp +++ b/libdnf/transaction/Types.hpp @@ -56,6 +56,12 @@ enum class TransactionItemAction : int { REASON_CHANGE = 11 // a package was kept on the system but it's reason has changed }; +enum class TransactionPersistence : int { + UNKNOWN = 0, + PERSIST = 1, + TRANSIENT = 2, +}; + } // namespace libdnf /* Install diff --git a/libdnf/transaction/private/Transaction.cpp b/libdnf/transaction/private/Transaction.cpp index 088d6ba955..0131cbb8b8 100644 --- a/libdnf/transaction/private/Transaction.cpp +++ b/libdnf/transaction/private/Transaction.cpp @@ -76,12 +76,13 @@ swdb_private::Transaction::dbInsert() " releasever, " " user_id, " " cmdline, " + " persistence, " " state, " " comment, " " id " " ) " "VALUES " - " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; SQLite3::Statement query(*conn.get(), sql); query.bindv(getDtBegin(), getDtEnd(), @@ -90,10 +91,11 @@ swdb_private::Transaction::dbInsert() getReleasever(), getUserId(), getCmdline(), + static_cast(getPersistence()), static_cast< int >(getState()), getComment()); if (getId() > 0) { - query.bind(9, getId()); + query.bind(10, getId()); } query.step(); setId(conn->lastInsertRowID()); @@ -138,6 +140,7 @@ swdb_private::Transaction::dbUpdate() " releasever=?, " " user_id=?, " " cmdline=?, " + " persistence=?, " " state=?, " " comment=? " "WHERE " @@ -150,6 +153,7 @@ swdb_private::Transaction::dbUpdate() getReleasever(), getUserId(), getCmdline(), + static_cast(getPersistence()), static_cast< int >(getState()), getComment(), getId()); diff --git a/libdnf/transaction/private/Transaction.hpp b/libdnf/transaction/private/Transaction.hpp index 9e0d68486d..dd5ba0a0d1 100644 --- a/libdnf/transaction/private/Transaction.hpp +++ b/libdnf/transaction/private/Transaction.hpp @@ -42,6 +42,7 @@ class Transaction : public libdnf::Transaction { void setReleasever(const std::string &value) { releasever = value; } void setUserId(uint32_t value) { userId = value; } void setCmdline(const std::string &value) { cmdline = value; } + void setPersistence(TransactionPersistence value) { persistence = value; } void setState(TransactionState value) { state = value; } void setComment(const std::string &value) { comment = value; } diff --git a/libdnf/transaction/sql/migrate_tables_1_3.sql b/libdnf/transaction/sql/migrate_tables_1_3.sql new file mode 100644 index 0000000000..6901874edf --- /dev/null +++ b/libdnf/transaction/sql/migrate_tables_1_3.sql @@ -0,0 +1,9 @@ +R"**( +BEGIN TRANSACTION; + ALTER TABLE trans + ADD persistence INTEGER DEFAULT 0; + UPDATE config + SET value = '1.3' + WHERE key = 'version'; +COMMIT; +)**"