From 8c99b37ac0480addcf14cb8643cba85bebe822ad Mon Sep 17 00:00:00 2001
From: "Nyx (Neal Orman)" <nyx@lindenlab.com>
Date: Tue, 17 Nov 2009 16:22:12 -0500
Subject: [PATCH] EXT-2535 wearables saved in 2.0 don't load in 1.23

Incrementing wearable version number was a bad thing here - we want to
keep all wearables reporting as version 22 until we make a breaking change.
Reverted the version number and put in a hack to force any version 24 wearables
to be re-saved as version 22. The hack can be removed before release, as it
should only affect internal testers.

Code reviewed by Seraph

--HG--
branch : avatar-pipeline
---
 indra/newview/character/avatar_lad.xml |  2 +-
 indra/newview/llwearable.cpp           | 20 +++++++++++++++++++-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 10c197d09eb..d7182dfaab2 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
 <linden_avatar
- version="1.0" wearable_definition_version="24"> 
+ version="1.0" wearable_definition_version="22"> 
   <!-- The wearable_definition_version is checked during asset upload. -->
   <!-- If you increment it, check indra/lib/python/indra/assetutil.py.  -->
   <skeleton
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index e37dffd5269..2849cfa20ed 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -225,7 +225,13 @@ BOOL LLWearable::importFile( LLFILE* file )
 		return FALSE;
 	}
 
-	if( mDefinitionVersion > LLWearable::sCurrentDefinitionVersion )
+
+	// Temoprary hack to allow wearables with definition version 24 to still load.
+	// This should only affect lindens and NDA'd testers who have saved wearables in 2.0
+	// the extra check for version == 24 can be removed before release, once internal testers
+	// have loaded these wearables again. See hack pt 2 at bottom of function to ensure that
+	// these wearables get re-saved with version definition 22.
+	if( mDefinitionVersion > LLWearable::sCurrentDefinitionVersion && mDefinitionVersion != 24 )
 	{
 		llwarns << "Wearable asset has newer version (" << mDefinitionVersion << ") than XML (" << LLWearable::sCurrentDefinitionVersion << ")" << llendl;
 		return FALSE;
@@ -414,6 +420,18 @@ BOOL LLWearable::importFile( LLFILE* file )
 	// copy all saved param values to working params
 	revertValues();
 
+	// Hack pt 2. If the wearable we just loaded has definition version 24,
+	// then force a re-save of this wearable after slamming the version number to 22.
+	// This number was incorrectly incremented for internal builds before release, and
+	// this fix will ensure that the affected wearables are re-saved with the right version number.
+	// the versions themselves are compatible. This code can be removed before release.
+	if( mDefinitionVersion == 24 )
+	{
+		mDefinitionVersion = 22;
+		U32 index = gAgentWearables.getWearableIndex(this);
+		gAgentWearables.saveWearable(mType,index,TRUE);
+	}
+
 	return TRUE;
 }
 
-- 
GitLab