aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs33
1 files changed, 32 insertions, 1 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index 7d50e51..4d97c0a 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -111,6 +111,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
111 /// A list of the inventory nodes loaded. If folders were loaded then only the root folders are 111 /// A list of the inventory nodes loaded. If folders were loaded then only the root folders are
112 /// returned 112 /// returned
113 /// </returns> 113 /// </returns>
114 /// <exception cref="System.Exception">Thrown if load fails.</exception>
114 public HashSet<InventoryNodeBase> Execute() 115 public HashSet<InventoryNodeBase> Execute()
115 { 116 {
116 try 117 try
@@ -143,15 +144,29 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
143 144
144 byte[] data; 145 byte[] data;
145 TarArchiveReader.TarEntryType entryType; 146 TarArchiveReader.TarEntryType entryType;
147 bool controlFileLoaded = false, assetsLoaded = false, inventoryNodesLoaded = false;
146 148
147 while ((data = archive.ReadEntry(out filePath, out entryType)) != null) 149 while ((data = archive.ReadEntry(out filePath, out entryType)) != null)
148 { 150 {
149 if (filePath == ArchiveConstants.CONTROL_FILE_PATH) 151 if (filePath == ArchiveConstants.CONTROL_FILE_PATH)
150 { 152 {
151 LoadControlFile(filePath, data); 153 LoadControlFile(filePath, data);
154 controlFileLoaded = true;
152 } 155 }
153 else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) 156 else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH))
154 { 157 {
158 if (!controlFileLoaded)
159 throw new Exception(
160 string.Format(
161 "The IAR you are trying to load does not list {0} before {1}. Aborting load",
162 ArchiveConstants.CONTROL_FILE_PATH, ArchiveConstants.ASSETS_PATH));
163
164 if (!inventoryNodesLoaded)
165 throw new Exception(
166 string.Format(
167 "The IAR you are trying to load does not list all {0} before {1}. Aborting load",
168 ArchiveConstants.INVENTORY_PATH, ArchiveConstants.ASSETS_PATH));
169
155 if (LoadAsset(filePath, data)) 170 if (LoadAsset(filePath, data))
156 successfulAssetRestores++; 171 successfulAssetRestores++;
157 else 172 else
@@ -160,10 +175,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
160 if ((successfulAssetRestores) % 50 == 0) 175 if ((successfulAssetRestores) % 50 == 0)
161 m_log.DebugFormat( 176 m_log.DebugFormat(
162 "[INVENTORY ARCHIVER]: Loaded {0} assets...", 177 "[INVENTORY ARCHIVER]: Loaded {0} assets...",
163 successfulAssetRestores); 178 successfulAssetRestores);
179
180 assetsLoaded = true;
164 } 181 }
165 else if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH)) 182 else if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH))
166 { 183 {
184 if (!controlFileLoaded)
185 throw new Exception(
186 string.Format(
187 "The IAR you are trying to load does not list {0} before {1}. Aborting load",
188 ArchiveConstants.CONTROL_FILE_PATH, ArchiveConstants.INVENTORY_PATH));
189
190 if (assetsLoaded)
191 throw new Exception(
192 string.Format(
193 "The IAR you are trying to load does not list all {0} before {1}. Aborting load",
194 ArchiveConstants.INVENTORY_PATH, ArchiveConstants.ASSETS_PATH));
195
167 filePath = filePath.Substring(ArchiveConstants.INVENTORY_PATH.Length); 196 filePath = filePath.Substring(ArchiveConstants.INVENTORY_PATH.Length);
168 197
169 // Trim off the file portion if we aren't already dealing with a directory path 198 // Trim off the file portion if we aren't already dealing with a directory path
@@ -188,6 +217,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
188 loadedNodes.Add(item); 217 loadedNodes.Add(item);
189 } 218 }
190 } 219 }
220
221 inventoryNodesLoaded = true;
191 } 222 }
192 } 223 }
193 224