diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs
index d1c33d1151..97cfdcf31b 100644
--- a/osu.Game/Beatmaps/BeatmapStore.cs
+++ b/osu.Game/Beatmaps/BeatmapStore.cs
@@ -21,7 +21,7 @@ namespace osu.Game.Beatmaps
/// The current version of this store. Used for migrations (see ).
/// The initial version is 1.
///
- protected override int StoreVersion => 1;
+ protected override int StoreVersion => 2;
public BeatmapStore(SQLiteConnection connection)
: base(connection)
@@ -74,14 +74,9 @@ namespace osu.Game.Beatmaps
switch (currentVersion)
{
case 1:
- // initialising from a version before we had versioning (or a fresh install).
-
- // force adding of Protected column (not automatically migrated).
- Connection.MigrateTable();
-
- // remove all existing beatmaps.
- foreach (var b in Connection.GetAllWithChildren(null, true))
- Connection.Delete(b, true);
+ case 2:
+ // cannot migrate; breaking underlying changes.
+ Reset();
break;
}
}
diff --git a/osu.Game/IO/FileStore.cs b/osu.Game/IO/FileStore.cs
index e35382ea8c..94c9697922 100644
--- a/osu.Game/IO/FileStore.cs
+++ b/osu.Game/IO/FileStore.cs
@@ -23,6 +23,8 @@ namespace osu.Game.IO
public readonly ResourceStore Store;
+ protected override int StoreVersion => 2;
+
public FileStore(SQLiteConnection connection, Storage storage) : base(connection, storage)
{
Store = new NamespacedResourceStore(new StorageBackedResourceStore(storage), prefix);
@@ -35,7 +37,19 @@ namespace osu.Game.IO
protected override void Prepare(bool reset = false)
{
if (reset)
+ {
+ try
+ {
+ foreach (var f in Query())
+ Storage.Delete(Path.Combine(prefix, f.Hash));
+ }
+ catch
+ {
+ // we don't want to ever crash as a result of a reset operation.
+ }
+
Connection.DropTable();
+ }
Connection.CreateTable();
}
@@ -46,6 +60,28 @@ namespace osu.Game.IO
deletePending();
}
+ ///
+ /// Perform migrations between two store versions.
+ ///
+ /// The current store version. This will be zero on a fresh database initialisation.
+ /// The target version which we are migrating to (equal to the current ).
+ protected override void PerformMigration(int currentVersion, int targetVersion)
+ {
+ base.PerformMigration(currentVersion, targetVersion);
+
+ while (currentVersion++ < targetVersion)
+ {
+ switch (currentVersion)
+ {
+ case 1:
+ case 2:
+ // cannot migrate; breaking underlying changes.
+ Reset();
+ break;
+ }
+ }
+ }
+
public FileInfo Add(Stream data)
{
string hash = data.ComputeSHA2Hash();