diff options
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | 33 |
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 | ||