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:
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);
+}