reapack

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

commit 4c6d2b8f5d9a245cf1fef1100fc62d3090d5ad56
parent a84af7e3605a16afcf5b6b7e49cb0af8773f65da
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Wed,  2 Dec 2015 20:41:03 -0500

use the database name to generate the installation path

Diffstat:
Msrc/database.cpp | 2+-
Msrc/database.hpp | 4++++
Msrc/package.cpp | 8++++----
Msrc/path.cpp | 6++++--
Msrc/reapack.cpp | 5++++-
Mtest/package.cpp | 21++++++++++++---------
Mtest/path.cpp | 8++++++++
7 files changed, 37 insertions(+), 17 deletions(-)

diff --git a/src/database.cpp b/src/database.cpp @@ -50,7 +50,7 @@ void Database::addCategory(Category *cat) } Category::Category(const std::string &name) - : m_name(name) + : m_database(0), m_name(name) { if(m_name.empty()) throw reapack_error("empty category name"); diff --git a/src/database.hpp b/src/database.hpp @@ -17,6 +17,9 @@ public: ~Database(); + void setName(const std::string &name) { m_name = name; } + const std::string &name() const { return m_name; } + void addCategory(Category *cat); const std::vector<Category *> &categories() const { return m_categories; } Category *category(const int i) const { return m_categories[i]; } @@ -26,6 +29,7 @@ public: private: static Database *loadV1(TiXmlElement *); + std::string m_name; std::vector<Category *> m_categories; std::vector<Package *> m_packages; }; diff --git a/src/package.cpp b/src/package.cpp @@ -59,14 +59,14 @@ Path Package::targetLocation() const Path Package::scriptLocation() const { - // TODO: use actual database name instead of hard-coded "ReaScripts" Path path; path.append("Scripts"); - path.append("ReaScripts"); - if(m_category) - path.append(m_category->name()); + if(!m_category || !m_category->database()) + throw reapack_error("category or database is unset"); + path.append(m_category->database()->name()); + path.append(m_category->name()); path.append(m_name); return path; diff --git a/src/path.cpp b/src/path.cpp @@ -10,12 +10,14 @@ static const char SEPARATOR = '\\'; void Path::prepend(const string &part) { - m_parts.push_front(part); + if(!part.empty()) + m_parts.push_front(part); } void Path::append(const string &part) { - m_parts.push_back(part); + if(!part.empty()) + m_parts.push_back(part); } string Path::join(const bool skipLast) const diff --git a/src/reapack.cpp b/src/reapack.cpp @@ -87,7 +87,10 @@ void ReaPack::synchronize(const Repository &repo) file << dl->contents(); file.close(); - synchronize(Database::load(path.join().c_str())); + Database *db = Database::load(path.join().c_str()); + db->setName(repo.name()); + + synchronize(db); }); } diff --git a/test/package.cpp b/test/package.cpp @@ -66,7 +66,11 @@ TEST_CASE("unknown target location", M) { } TEST_CASE("script target location", M) { + Database db; + db.setName("Database Name"); + Category cat("Category Name"); + cat.setDatabase(&db); Package pack(Package::ScriptType, "file.name"); pack.setCategory(&cat); @@ -75,7 +79,7 @@ TEST_CASE("script target location", M) { Path expected; expected.append("Scripts"); - expected.append("ReaScripts"); + expected.append("Database Name"); expected.append("Category Name"); expected.append("file.name"); @@ -85,12 +89,11 @@ TEST_CASE("script target location", M) { TEST_CASE("script target location without category", M) { Package pack(Package::ScriptType, "file.name"); - const Path path = pack.targetLocation(); - - Path expected; - expected.append("Scripts"); - expected.append("ReaScripts"); - expected.append("file.name"); - - REQUIRE(path == expected); + try { + pack.targetLocation(); + FAIL(); + } + catch(const reapack_error &e) { + REQUIRE(string(e.what()) == "category or database is unset"); + } } diff --git a/test/path.cpp b/test/path.cpp @@ -70,3 +70,11 @@ TEST_CASE("concatenate paths", M) { REQUIRE(a + b == c); REQUIRE(a + "world" == c); } + +TEST_CASE("empty components", M) { + Path a; + a.append(string()); + a.prepend(string()); + + REQUIRE(a.size() == 0); +}