commit e333e5d4f3d24264dfc109d4018ccd5744176f06
parent bc06027eb2eaa819152f63b1173dfe9d4e992ac2
Author: cfillion <cfillion@users.noreply.github.com>
Date: Wed, 20 Jan 2016 00:54:10 -0500
prevent conflicts between already installed packages
Diffstat:
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/src/registry.cpp b/src/registry.cpp
@@ -83,7 +83,7 @@ void Registry::migrate()
"CREATE TABLE files ("
" id INTEGER PRIMARY KEY,"
" entry INTEGER NOT NULL,"
- " path TEXT NOT NULL,"
+ " path TEXT UNIQUE NOT NULL,"
" FOREIGN KEY(entry) REFERENCES entries(id)"
");"
);
diff --git a/test/registry.cpp b/test/registry.cpp
@@ -4,6 +4,7 @@
#include <registry.hpp>
+#include <errors.hpp>
#include <index.hpp>
#include <package.hpp>
#include <remote.hpp>
@@ -106,3 +107,26 @@ TEST_CASE("forget registry entry", M) {
REQUIRE(afterForget.status == Registry::Uninstalled);
REQUIRE(afterForget.version == 0);
}
+
+TEST_CASE("enforce unique files", M) {
+ Registry reg;
+
+ {
+ MAKE_PACKAGE
+ reg.push(ver);
+ }
+
+ RemoteIndex ri("Remote Name");
+ Category cat("Hello", &ri);
+ Package pkg(Package::ScriptType, "Duplicate Package", &cat);
+ Version *ver = new Version("1.0", &pkg);
+ Source *src = new Source(Source::GenericPlatform, "file", "url", ver);
+ ver->addSource(src);
+ pkg.addVersion(ver);
+
+ try {
+ reg.push(ver);
+ FAIL("duplicate was accepted");
+ }
+ catch(const reapack_error &) {}
+}