reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

commit 996e6dd72ede4a25c723c38a1849e5ef5f566176
parent 65f18732effc3eef62c8d1014d9a6d6febd839f9
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Sat, 26 Feb 2022 22:07:14 -0500

fix unsetting pin/bleeding edge mode when also installing or updating

Diffstat:
Msrc/browser.cpp | 2+-
Msrc/install.cpp | 8++------
Msrc/registry.cpp | 52++++++++++++++++++++++++++++++----------------------
Msrc/registry.hpp | 2+-
Mtest/registry.cpp | 12++++++++----
5 files changed, 42 insertions(+), 34 deletions(-)

diff --git a/src/browser.cpp b/src/browser.cpp @@ -868,7 +868,7 @@ bool Browser::apply() const Version *target = *entry->target; if(target) - tx->install(target, entry->flags.value_or(0)); + tx->install(target, entry->flags.value_or(entry->regEntry.flags)); else tx->uninstall(entry->regEntry); diff --git a/src/install.cpp b/src/install.cpp @@ -40,7 +40,7 @@ bool InstallTask::start() // prevent file conflicts (don't worry, the registry push is reverted) try { std::vector<Path> conflicts; - tx()->registry()->push(m_version, &conflicts); + tx()->registry()->push(m_version, m_flags, &conflicts); if(!conflicts.empty()) { for(const Path &path : conflicts) { @@ -121,11 +121,7 @@ void InstallTask::commit() tx()->receipt()->addInstall(m_version, m_oldEntry); - const Registry::Entry newEntry = tx()->registry()->push(m_version); - - if(m_flags) - tx()->registry()->setFlags(newEntry, m_flags); - + const Registry::Entry &newEntry = tx()->registry()->push(m_version, m_flags); tx()->registerAll(true, newEntry); } diff --git a/src/registry.cpp b/src/registry.cpp @@ -34,13 +34,13 @@ Registry::Registry(const Path &path) // entry queries m_insertEntry = m_db.prepare( - "INSERT INTO entries(remote, category, package, desc, type, version, author)" - "VALUES(?, ?, ?, ?, ?, ?, ?);" + "INSERT INTO entries(remote, category, package, desc, type, version, author, flags)" + "VALUES(?, ?, ?, ?, ?, ?, ?, ?);" ); m_updateEntry = m_db.prepare( "UPDATE entries " - "SET desc = ?, type = ?, version = ?, author = ? WHERE id = ?" + "SET desc = ?, type = ?, version = ?, author = ?, flags = ? WHERE id = ?" ); m_setFlags = m_db.prepare("UPDATE entries SET flags = ? WHERE id = ?"); @@ -146,7 +146,8 @@ void Registry::migrate() } } -auto Registry::push(const Version *ver, std::vector<Path> *conflicts) -> Entry +auto Registry::push(const Version *ver, const int flags, + std::vector<Path> *conflicts) -> Entry { m_db.savepoint(); @@ -165,21 +166,25 @@ auto Registry::push(const Version *ver, std::vector<Path> *conflicts) -> Entry // register or update package and version if(entryId) { - m_updateEntry->bind(1, pkg->description()); - m_updateEntry->bind(2, pkg->type()); - m_updateEntry->bind(3, ver->name().toString()); - m_updateEntry->bind(4, ver->author()); - m_updateEntry->bind(5, entryId); + int col = 1; + m_updateEntry->bind(col++, pkg->description()); + m_updateEntry->bind(col++, pkg->type()); + m_updateEntry->bind(col++, ver->name().toString()); + m_updateEntry->bind(col++, ver->author()); + m_updateEntry->bind(col++, flags); + m_updateEntry->bind(col++, entryId); m_updateEntry->exec(); } else { - m_insertEntry->bind(1, ri->name()); - m_insertEntry->bind(2, cat->name()); - m_insertEntry->bind(3, pkg->name()); - m_insertEntry->bind(4, pkg->description()); - m_insertEntry->bind(5, pkg->type()); - m_insertEntry->bind(6, ver->name().toString()); - m_insertEntry->bind(7, ver->author()); + int col = 1; + m_insertEntry->bind(col++, ri->name()); + m_insertEntry->bind(col++, cat->name()); + m_insertEntry->bind(col++, pkg->name()); + m_insertEntry->bind(col++, pkg->description()); + m_insertEntry->bind(col++, pkg->type()); + m_insertEntry->bind(col++, ver->name().toString()); + m_insertEntry->bind(col++, ver->author()); + m_insertEntry->bind(col++, flags); m_insertEntry->exec(); entryId = m_db.lastInsertId(); @@ -189,10 +194,11 @@ auto Registry::push(const Version *ver, std::vector<Path> *conflicts) -> Entry for(const Source *src : ver->sources()) { const Path &path = src->targetPath(); - m_insertFile->bind(1, entryId); - m_insertFile->bind(2, path.join(false)); - m_insertFile->bind(3, src->sections()); - m_insertFile->bind(4, src->typeOverride()); + int col = 1; + m_insertFile->bind(col++, entryId); + m_insertFile->bind(col++, path.join(false)); + m_insertFile->bind(col++, src->sections()); + m_insertFile->bind(col++, src->typeOverride()); try { m_insertFile->exec(); @@ -215,8 +221,10 @@ auto Registry::push(const Version *ver, std::vector<Path> *conflicts) -> Entry } else { m_db.release(); - return {entryId, ri->name(), cat->name(), - pkg->name(), pkg->description(), pkg->type(), ver->name(), ver->author()}; + return { + entryId, ri->name(), cat->name(), pkg->name(), pkg->description(), + pkg->type(), ver->name(), ver->author(), flags + }; } } diff --git a/src/registry.hpp b/src/registry.hpp @@ -66,7 +66,7 @@ public: std::vector<Entry> getEntries(const std::string &) const; std::vector<File> getFiles(const Entry &) const; std::vector<File> getMainFiles(const Entry &) const; - Entry push(const Version *, std::vector<Path> *conflicts = nullptr); + Entry push(const Version *, int flags = 0, std::vector<Path> *conflicts = nullptr); void setFlags(const Entry &, int flags); void forget(const Entry &); diff --git a/test/registry.cpp b/test/registry.cpp @@ -35,7 +35,7 @@ TEST_CASE("query installed package", M) { Registry reg; - const Registry::Entry &entry = reg.push(&ver); + const Registry::Entry &entry = reg.push(&ver, 2); REQUIRE(entry); REQUIRE(entry.id == 1); REQUIRE(entry.remote == "Remote Name"); @@ -44,6 +44,7 @@ TEST_CASE("query installed package", M) { REQUIRE(entry.type == Package::ScriptType); REQUIRE(entry.version.toString() == "1.0"); REQUIRE(entry.author == "John Doe"); + REQUIRE(entry.flags == 2); const Registry::Entry &selectEntry = reg.getEntry(&pkg); REQUIRE(selectEntry.id == entry.id); @@ -54,6 +55,7 @@ TEST_CASE("query installed package", M) { REQUIRE(selectEntry.type == entry.type); REQUIRE(selectEntry.version == entry.version); REQUIRE(selectEntry.author == entry.author); + REQUIRE(selectEntry.flags == entry.flags); } TEST_CASE("bump version", M) { @@ -63,16 +65,18 @@ TEST_CASE("bump version", M) { ver2.addSource(new Source("file", "url", &ver2)); Registry reg; - reg.push(&ver); + reg.push(&ver, 1); const Registry::Entry &entry1 = reg.getEntry(&pkg); REQUIRE(entry1.version.toString() == "1.0"); CHECK(entry1.author == "John Doe"); + CHECK(entry1.flags == 1); - reg.push(&ver2); + reg.push(&ver2, 2); const Registry::Entry &entry2 = reg.getEntry(&pkg); REQUIRE(entry2.version.toString() == "2.0"); CHECK(entry2.author == ""); + REQUIRE(entry2.flags == 2); REQUIRE(entry2.id == entry1.id); } @@ -151,7 +155,7 @@ TEST_CASE("file conflicts", M) { CHECK(reg.getEntry(&pkg).id == 0); // still uninstalled std::vector<Path> conflicts; - const auto &pushResult = reg.push(&ver, &conflicts); + const auto &pushResult = reg.push(&ver, 0, &conflicts); CHECK(pushResult.id == 0); REQUIRE(conflicts.size() == 1);