commit 1a6bd243014495a97acb2d282c785b3b21391c39
parent 4efc0ba13cd7adec08ef3ab3f317e87980d57a16
Author: cfillion <cfillion@users.noreply.github.com>
Date: Thu, 24 Mar 2016 21:23:08 -0400
(!!) keep a copy in the registry of the package author
to display in the browser for obsolete packages
Diffstat:
4 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/src/browser.cpp b/src/browser.cpp
@@ -443,7 +443,7 @@ string Browser::getValue(const Column col, const Entry &entry) const
return display;
case AuthorColumn:
- return ver ? ver->displayAuthor() : "";
+ return ver ? ver->displayAuthor() : regEntry.author;
case TypeColumn:
return pkg ? pkg->displayType() : Package::displayType(regEntry.type);
case RemoteColumn:
diff --git a/src/registry.cpp b/src/registry.cpp
@@ -34,21 +34,22 @@ Registry::Registry(const Path &path)
// entry queries
m_insertEntry = m_db.prepare(
- "INSERT INTO entries VALUES(NULL, ?, ?, ?, ?, ?);"
+ "INSERT INTO entries(remote, category, package, type, version, author)"
+ "VALUES(?, ?, ?, ?, ?, ?);"
);
m_updateEntry = m_db.prepare(
- "UPDATE entries SET type = ?, version = ? WHERE id = ?"
+ "UPDATE entries SET type = ?, version = ?, author = ? WHERE id = ?"
);
m_findEntry = m_db.prepare(
- "SELECT id, remote, category, package, type, version FROM entries "
+ "SELECT id, remote, category, package, type, version, author FROM entries "
"WHERE remote = ? AND category = ? AND package = ? "
"LIMIT 1"
);
m_allEntries = m_db.prepare(
- "SELECT id, category, package, type, version "
+ "SELECT id, category, package, type, version, author "
"FROM entries WHERE remote = ?"
);
m_forgetEntry = m_db.prepare("DELETE FROM entries WHERE id = ?");
@@ -90,6 +91,7 @@ void Registry::migrate()
" package TEXT NOT NULL,"
" type INTEGER NOT NULL,"
" version TEXT NOT NULL,"
+ " author TEXT NOT NULL,"
" UNIQUE(remote, category, package)"
");"
@@ -134,7 +136,8 @@ auto Registry::push(const Version *ver, vector<Path> *conflicts) -> Entry
if(entryId) {
m_updateEntry->bind(1, pkg->type());
m_updateEntry->bind(2, ver->name());
- m_updateEntry->bind(3, entryId);
+ m_updateEntry->bind(3, ver->displayAuthor());
+ m_updateEntry->bind(4, entryId);
m_updateEntry->exec();
}
else {
@@ -143,6 +146,7 @@ auto Registry::push(const Version *ver, vector<Path> *conflicts) -> Entry
m_insertEntry->bind(3, pkg->name());
m_insertEntry->bind(4, pkg->type());
m_insertEntry->bind(5, ver->name());
+ m_insertEntry->bind(6, ver->displayAuthor());
m_insertEntry->exec();
entryId = m_db.lastInsertId();
@@ -181,7 +185,7 @@ auto Registry::push(const Version *ver, vector<Path> *conflicts) -> Entry
else {
release();
return {entryId, ri->name(), cat->name(),
- pkg->name(), pkg->type(), ver->name(), ver->code()};
+ pkg->name(), pkg->type(), ver->name(), ver->code(), ver->displayAuthor()};
}
}
@@ -206,6 +210,7 @@ auto Registry::getEntry(const Package *pkg) const -> Entry
entry.type = static_cast<Package::Type>(m_findEntry->intColumn(col++));
entry.versionName = m_findEntry->stringColumn(col++);
Version::parse(entry.versionName, &entry.versionCode);
+ entry.author = m_findEntry->stringColumn(col++);
return false;
});
@@ -229,6 +234,7 @@ auto Registry::getEntries(const string &remoteName) const -> vector<Entry>
entry.type = static_cast<Package::Type>(m_allEntries->intColumn(col++));
entry.versionName = m_allEntries->stringColumn(col++);
Version::parse(entry.versionName, &entry.versionCode);
+ entry.author = m_allEntries->stringColumn(col++);
list.push_back(entry);
diff --git a/src/registry.hpp b/src/registry.hpp
@@ -40,6 +40,7 @@ public:
Package::Type type;
std::string versionName;
Version::Code versionCode;
+ std::string author;
};
Registry(const Path &path = Path());
diff --git a/test/registry.cpp b/test/registry.cpp
@@ -18,6 +18,7 @@ static const char *M = "[registry]";
Category cat("Category Name", &ri); \
Package pkg(Package::ScriptType, "Hello", &cat); \
Version *ver = new Version("1.0", &pkg); \
+ ver->setAuthor("John Doe"); \
Source *src = new Source(Source::GenericPlatform, "file", "url", ver); \
ver->addSource(src); \
pkg.addVersion(ver);
@@ -32,7 +33,7 @@ TEST_CASE("query uninstalled package", M) {
REQUIRE(res.versionCode == 0);
}
-TEST_CASE("query installed pacakge", M) {
+TEST_CASE("query installed package", M) {
MAKE_PACKAGE
Registry reg;
@@ -45,6 +46,7 @@ TEST_CASE("query installed pacakge", M) {
REQUIRE(entry.type == Package::ScriptType);
REQUIRE(entry.versionName == "1.0");
REQUIRE(entry.versionCode == Version("1.0").code());
+ REQUIRE(entry.author == "John Doe");
const Registry::Entry &selectEntry = reg.getEntry(&pkg);
REQUIRE(selectEntry.id == entry.id);
@@ -54,6 +56,7 @@ TEST_CASE("query installed pacakge", M) {
REQUIRE(selectEntry.type == entry.type);
REQUIRE(selectEntry.versionName == entry.versionName);
REQUIRE(selectEntry.versionCode == entry.versionCode);
+ REQUIRE(selectEntry.author == entry.author);
}
TEST_CASE("bump version", M) {
@@ -68,10 +71,12 @@ TEST_CASE("bump version", M) {
const Registry::Entry &entry1 = reg.getEntry(&pkg);
REQUIRE(entry1.versionName == "1.0");
+ CHECK(entry1.author == "John Doe");
reg.push(ver2);
const Registry::Entry &entry2 = reg.getEntry(&pkg);
REQUIRE(entry2.versionName == "2.0");
+ CHECK(entry2.author == "Unknown");
REQUIRE(entry2.id == entry1.id);
}
@@ -108,6 +113,7 @@ TEST_CASE("query all packages", M) {
REQUIRE(entries[0].type == Package::ScriptType);
REQUIRE(entries[0].versionName == "1.0");
REQUIRE(entries[0].versionCode == Version("1.0").code());
+ REQUIRE(entries[0].author == "John Doe");
}
TEST_CASE("forget registry entry", M) {