reapack

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

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:
Msrc/package.cpp | 13++++++++++++-
Msrc/package.hpp | 6+++++-
Msrc/reapack.cpp | 2+-
Mtest/package.cpp | 17+++++++++++++++--
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")); +}