aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs39
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs38
2 files changed, 45 insertions, 32 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index 29e992e..94c6ef9 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -189,7 +189,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
189 /// <summary> 189 /// <summary>
190 /// Replicate the inventory paths in the archive to the user's inventory as necessary. 190 /// Replicate the inventory paths in the archive to the user's inventory as necessary.
191 /// </summary> 191 /// </summary>
192 /// <param name="archivePath">The item archive path to replicate</param> 192 /// <param name="iarPath">The item archive path to replicate</param>
193 /// <param name="rootDestinationFolder">The root folder for the inventory load</param> 193 /// <param name="rootDestinationFolder">The root folder for the inventory load</param>
194 /// <param name="resolvedFolders"> 194 /// <param name="resolvedFolders">
195 /// The folders that we have resolved so far for a given archive path. 195 /// The folders that we have resolved so far for a given archive path.
@@ -200,24 +200,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
200 /// </param> 200 /// </param>
201 /// <returns>The last user inventory folder created or found for the archive path</returns> 201 /// <returns>The last user inventory folder created or found for the archive path</returns>
202 public InventoryFolderBase ReplicateArchivePathToUserInventory( 202 public InventoryFolderBase ReplicateArchivePathToUserInventory(
203 string archivePath, 203 string iarPath,
204 InventoryFolderBase rootDestFolder, 204 InventoryFolderBase rootDestFolder,
205 Dictionary <string, InventoryFolderBase> resolvedFolders, 205 Dictionary <string, InventoryFolderBase> resolvedFolders,
206 List<InventoryNodeBase> loadedNodes) 206 List<InventoryNodeBase> loadedNodes)
207 { 207 {
208 string originalArchivePath = archivePath; 208 string iarPathExisting = iarPath;
209 209
210// m_log.DebugFormat( 210// m_log.DebugFormat(
211// "[INVENTORY ARCHIVER]: Loading folder {0} {1}", rootDestFolder.Name, rootDestFolder.ID); 211// "[INVENTORY ARCHIVER]: Loading folder {0} {1}", rootDestFolder.Name, rootDestFolder.ID);
212 212
213 InventoryFolderBase destFolder = ResolveDestinationFolder(rootDestFolder, ref archivePath, resolvedFolders); 213 InventoryFolderBase destFolder = ResolveDestinationFolder(rootDestFolder, ref iarPathExisting, resolvedFolders);
214 214
215// m_log.DebugFormat( 215 m_log.DebugFormat(
216// "[INVENTORY ARCHIVER]: originalArchivePath [{0}], section already loaded [{1}]", 216 "[INVENTORY ARCHIVER]: originalArchivePath [{0}], section already loaded [{1}]",
217// originalArchivePath, archivePath); 217 iarPath, iarPathExisting);
218 218
219 string archivePathSectionToCreate = originalArchivePath.Substring(archivePath.Length); 219 string iarPathToCreate = iarPath.Substring(iarPathExisting.Length);
220 CreateFoldersForPath(destFolder, archivePathSectionToCreate, resolvedFolders, loadedNodes); 220 CreateFoldersForPath(destFolder, iarPathExisting, iarPathToCreate, resolvedFolders, loadedNodes);
221 221
222 return destFolder; 222 return destFolder;
223 } 223 }
@@ -297,8 +297,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
297 /// <param name="destFolder"> 297 /// <param name="destFolder">
298 /// The root folder from which the creation will take place. 298 /// The root folder from which the creation will take place.
299 /// </param> 299 /// </param>
300 /// <param name="path"> 300 /// <param name="iarPathExisting">
301 /// The path to create 301 /// the part of the iar path that already exists
302 /// </param>
303 /// <param name="iarPathToReplicate">
304 /// The path to replicate in the user's inventory from iar
302 /// </param> 305 /// </param>
303 /// <param name="resolvedFolders"> 306 /// <param name="resolvedFolders">
304 /// The folders that we have resolved so far for a given archive path. 307 /// The folders that we have resolved so far for a given archive path.
@@ -307,11 +310,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
307 /// Track the inventory nodes created. 310 /// Track the inventory nodes created.
308 /// </param> 311 /// </param>
309 protected void CreateFoldersForPath( 312 protected void CreateFoldersForPath(
310 InventoryFolderBase destFolder, string path, Dictionary <string, InventoryFolderBase> resolvedFolders, 313 InventoryFolderBase destFolder,
314 string iarPathExisting,
315 string iarPathToReplicate,
316 Dictionary <string, InventoryFolderBase> resolvedFolders,
311 List<InventoryNodeBase> loadedNodes) 317 List<InventoryNodeBase> loadedNodes)
312 { 318 {
313 string pathCreated = ""; 319 string[] rawDirsToCreate = iarPathToReplicate.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
314 string[] rawDirsToCreate = path.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
315 int i = 0; 320 int i = 0;
316 321
317 while (i < rawDirsToCreate.Length) 322 while (i < rawDirsToCreate.Length)
@@ -343,9 +348,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
343 m_scene.InventoryService.AddFolder(destFolder); 348 m_scene.InventoryService.AddFolder(destFolder);
344 349
345 // Record that we have now created this folder 350 // Record that we have now created this folder
346 pathCreated += rawDirsToCreate[i] + "/"; 351 iarPathExisting += rawDirsToCreate[i] + "/";
347 m_log.DebugFormat("[INVENTORY ARCHIVER]: Created folder {0} from IAR", pathCreated); 352 m_log.DebugFormat("[INVENTORY ARCHIVER]: Created folder {0} from IAR", iarPathExisting);
348 resolvedFolders[pathCreated] = destFolder; 353 resolvedFolders[iarPathExisting] = destFolder;
349 354
350 if (0 == i) 355 if (0 == i)
351 loadedNodes.Add(destFolder); 356 loadedNodes.Add(destFolder);
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index 6bf1219..85afbf9 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -279,7 +279,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
279 public void TestIarV0_1WithEscapedChars() 279 public void TestIarV0_1WithEscapedChars()
280 { 280 {
281 TestHelper.InMethod(); 281 TestHelper.InMethod();
282// log4net.Config.XmlConfigurator.Configure(); 282 log4net.Config.XmlConfigurator.Configure();
283 283
284 string itemName = "You & you are a mean/man/"; 284 string itemName = "You & you are a mean/man/";
285 string humanEscapedItemName = @"You & you are a mean\/man\/"; 285 string humanEscapedItemName = @"You & you are a mean\/man\/";
@@ -542,7 +542,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
542 } 542 }
543 543
544 /// <summary> 544 /// <summary>
545 /// Test replication of a partly existing archive path to the user's inventory. 545 /// Test replication of a partly existing archive path to the user's inventory. This should create
546 /// a duplicate path without the merge option.
546 /// </summary> 547 /// </summary>
547 [Test] 548 [Test]
548 public void TestPartExistingIarPath() 549 public void TestPartExistingIarPath()
@@ -555,7 +556,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
555 556
556 string folder1ExistingName = "a"; 557 string folder1ExistingName = "a";
557 string folder2Name = "b"; 558 string folder2Name = "b";
558 string itemName = "c.lsl";
559 559
560 InventoryFolderBase folder1 560 InventoryFolderBase folder1
561 = UserInventoryTestUtils.CreateInventoryFolder( 561 = UserInventoryTestUtils.CreateInventoryFolder(
@@ -563,28 +563,36 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
563 563
564 string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); 564 string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random());
565 string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); 565 string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random());
566 string itemArchiveName = InventoryArchiveWriteRequest.CreateArchiveItemName(itemName, UUID.Random());
567 566
568 string itemArchivePath 567 string itemArchivePath
569 = string.Format( 568 = string.Format(
570 "{0}{1}{2}{3}", 569 "{0}{1}{2}",
571 ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName, itemArchiveName); 570 ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName);
572 571
573 new InventoryArchiveReadRequest(scene, ua1, null, (Stream)null) 572 new InventoryArchiveReadRequest(scene, ua1, null, (Stream)null)
574 .ReplicateArchivePathToUserInventory( 573 .ReplicateArchivePathToUserInventory(
575 itemArchivePath, scene.InventoryService.GetRootFolder(ua1.PrincipalID), 574 itemArchivePath, scene.InventoryService.GetRootFolder(ua1.PrincipalID),
576 new Dictionary<string, InventoryFolderBase>(), new List<InventoryNodeBase>()); 575 new Dictionary<string, InventoryFolderBase>(), new List<InventoryNodeBase>());
577 576
578 InventoryFolderBase folder1Post 577 List<InventoryFolderBase> folder1PostCandidates
579 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1ExistingName)[0]; 578 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1ExistingName);
580 Assert.That(folder1Post.ID, Is.EqualTo(folder1.ID)); 579 Assert.That(folder1PostCandidates.Count, Is.EqualTo(2));
581 /* 580
582 InventoryFolderBase folder2 581 // FIXME: Temporarily, we're going to do something messy to make sure we pick up the created folder.
582 InventoryFolderBase folder1Post = null;
583 foreach (InventoryFolderBase folder in folder1PostCandidates)
584 {
585 if (folder.ID != folder1.ID)
586 {
587 folder1Post = folder;
588 break;
589 }
590 }
591// Assert.That(folder1Post.ID, Is.EqualTo(folder1.ID));
592
593 List<InventoryFolderBase> folder2PostCandidates
583 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b"); 594 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b");
584 Assert.That(folder2, Is.Not.Null); 595 Assert.That(folder2PostCandidates.Count, Is.EqualTo(1));
585 InventoryItemBase item = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, folder2, itemName);
586 Assert.That(item, Is.Not.Null);
587 */
588 } 596 }
589 } 597 }
590} \ No newline at end of file 598} \ No newline at end of file