commit f2395a34d6258e594f75f34ca953aa570292c100
parent b2fe87815a72a78fd4b09089ab5173b6a92ed9c4
Author: cfillion <cfillion@users.noreply.github.com>
Date: Sat, 28 Nov 2015 16:30:57 -0500
fix the target location for orphaned script packages
Diffstat:
4 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/src/package.cpp b/src/package.cpp
@@ -49,8 +49,19 @@ InstallLocation Package::targetLocation() const
{
switch(m_type) {
case ScriptType:
- return {"/Scripts/ReaScripts/" + category()->name(), name()};
+ return scriptLocation();
default:
throw reapack_error("unsupported package type");
}
}
+
+InstallLocation Package::scriptLocation() const
+{
+ // TODO: use actual database name instead of hard-coded "ReaScripts"
+ InstallLocation loc("/Scripts/ReaScripts", name());
+
+ if(m_category)
+ loc.appendDir("/" + category()->name());
+
+ return loc;
+}
diff --git a/src/package.hpp b/src/package.hpp
@@ -14,7 +14,9 @@ public:
: m_directory(d), m_filename(f)
{}
- void setPrefix(const std::string &p) { m_directory.insert(0, p); }
+ void prependDir(const std::string &p) { m_directory.insert(0, p); }
+ void appendDir(const std::string &p) { m_directory.append(p); }
+
const std::string directory() const { return m_directory; }
const std::string filename() const { return m_filename; }
@@ -61,6 +63,8 @@ public:
InstallLocation targetLocation() const;
private:
+ InstallLocation scriptLocation() const;
+
Category *m_category;
Type m_type;
std::string m_name;
diff --git a/src/reapack.cpp b/src/reapack.cpp
@@ -73,7 +73,7 @@ void ReaPack::installPackage(PackagePtr pkg)
}
InstallLocation loc = pkg->targetLocation();
- loc.setPrefix(m_resourcePath);
+ loc.prependDir(m_resourcePath);
RecursiveCreateDirectory(loc.directory().c_str(), 0);
diff --git a/test/package.cpp b/test/package.cpp
@@ -74,11 +74,16 @@ TEST_CASE("set install location prefix", M) {
REQUIRE(loc.filename() == "world");
REQUIRE(loc.fullPath() == "/hello/world");
- loc.setPrefix("/root");
+ loc.prependDir("/root");
REQUIRE(loc.directory() == "/root/hello");
- REQUIRE(loc.filename() == "world");
REQUIRE(loc.fullPath() == "/root/hello/world");
+
+ loc.appendDir("/to");
+
+ REQUIRE(loc.directory() == "/root/hello/to");
+ REQUIRE(loc.filename() == "world");
+ REQUIRE(loc.fullPath() == "/root/hello/to/world");
}
TEST_CASE("unknown target location", M) {
@@ -103,3 +108,11 @@ TEST_CASE("script target location", M) {
REQUIRE(loc ==
InstallLocation("/Scripts/ReaScripts/Category Name", "file.name"));
}
+
+TEST_CASE("script target location without category", M) {
+ Package pack(Package::ScriptType, "file.name", "author");
+
+ const InstallLocation loc = pack.targetLocation();
+ REQUIRE(loc ==
+ InstallLocation("/Scripts/ReaScripts", "file.name"));
+}