diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs
index 80faa64953..22e5486909 100644
--- a/osu.Game/Database/ArchiveModelManager.cs
+++ b/osu.Game/Database/ArchiveModelManager.cs
@@ -309,6 +309,12 @@ namespace osu.Game.Database
Logger.Log($"{prefix} {message}", LoggingTarget.Database);
}
+ ///
+ /// Whether the implementation overrides with a custom implementation.
+ /// Custom has implementations must bypass the early exit in the import flow (see usage).
+ ///
+ protected virtual bool HasCustomHashFunction => false;
+
///
/// Create a SHA-2 hash from the provided archive based on file content of all files matching .
///
@@ -365,7 +371,7 @@ namespace osu.Game.Database
delayEvents();
- if (archive != null)
+ if (archive != null && !HasCustomHashFunction)
{
// fast bail to improve large import performance.
item.Hash = computeHashFast(archive);
diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs
index 4cde4cd2b8..43cf6b6874 100644
--- a/osu.Game/Skinning/SkinManager.cs
+++ b/osu.Game/Skinning/SkinManager.cs
@@ -125,6 +125,8 @@ namespace osu.Game.Skinning
private const string unknown_creator_string = "Unknown";
+ protected override bool HasCustomHashFunction => true;
+
protected override string ComputeHash(SkinInfo item, ArchiveReader reader = null)
{
// we need to populate early to create a hash based off skin.ini contents