From 86937d0a0f5572b002cdb6efc499c234b2a9bd1b Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Fri, 27 Aug 2010 23:22:49 +0100
Subject: allow inventory path specified in "load iar" to start with a / (e.g.
/Objects is now valid where it wasn't before)
---
.../Inventory/Archiver/InventoryArchiveUtils.cs | 10 ++++++++-
.../Archiver/Tests/InventoryArchiverTests.cs | 24 ++++++++++++++++++++++
.../Tests/Common/Mock/TestInventoryDataPlugin.cs | 24 +++++++++++-----------
3 files changed, 45 insertions(+), 13 deletions(-)
(limited to 'OpenSim')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs
index 84afb40..8343091 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs
@@ -41,7 +41,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
///
public static class InventoryArchiveUtils
{
-// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// Character used for escaping the path delimter ("\/") and itself ("\\") in human escaped strings
public static readonly char ESCAPE_CHARACTER = '\\';
@@ -120,6 +120,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
foundFolders.Add(startFolder);
return foundFolders;
}
+
+ // If the path isn't just / then trim any starting extraneous slashes
+ path = path.TrimStart(new char[] { PATH_DELIMITER });
+
+// m_log.DebugFormat("[INVENTORY ARCHIVE UTILS]: Adjusted path in FindFolderByPath() is [{0}]", path);
string[] components = SplitEscapedPath(path);
components[0] = UnescapePath(components[0]);
@@ -199,6 +204,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
public static InventoryItemBase FindItemByPath(
IInventoryService inventoryService, InventoryFolderBase startFolder, string path)
{
+ // If the path isn't just / then trim any starting extraneous slashes
+ path = path.TrimStart(new char[] { PATH_DELIMITER });
+
string[] components = SplitEscapedPath(path);
components[0] = UnescapePath(components[0]);
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index 892680e..e8a26b5 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -343,6 +343,30 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
}
///
+ /// Test that things work when the load path specified starts with a slash
+ ///
+ [Test]
+ public void TestLoadIarPathStartsWithSlash()
+ {
+ TestHelper.InMethod();
+ log4net.Config.XmlConfigurator.Configure();
+
+ SerialiserModule serialiserModule = new SerialiserModule();
+ InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
+ Scene scene = SceneSetupHelpers.SetupScene("inventory");
+ SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
+
+ UserProfileTestUtils.CreateUserWithInventory(scene, m_ua1, "password");
+ archiverModule.DearchiveInventory(m_ua1.FirstName, m_ua1.LastName, "/Objects", "password", m_iarStream);
+
+ InventoryItemBase foundItem1
+ = InventoryArchiveUtils.FindItemByPath(
+ scene.InventoryService, m_ua1.PrincipalID, "/Objects/" + m_item1Name);
+
+ Assert.That(foundItem1, Is.Not.Null, "Didn't find loaded item 1 in TestLoadIarFolderStartsWithSlash()");
+ }
+
+ ///
/// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet) where
/// an account exists with the creator name.
///
diff --git a/OpenSim/Tests/Common/Mock/TestInventoryDataPlugin.cs b/OpenSim/Tests/Common/Mock/TestInventoryDataPlugin.cs
index ed0b1a6..b70b47d 100644
--- a/OpenSim/Tests/Common/Mock/TestInventoryDataPlugin.cs
+++ b/OpenSim/Tests/Common/Mock/TestInventoryDataPlugin.cs
@@ -86,7 +86,7 @@ namespace OpenSim.Tests.Common.Mock
{
InventoryFolderBase folder = m_folders[folderID];
- m_log.DebugFormat("[MOCK INV DB]: Getting items in folder {0} {1}", folder.Name, folder.ID);
+// m_log.DebugFormat("[MOCK INV DB]: Getting items in folder {0} {1}", folder.Name, folder.ID);
List items = new List();
@@ -94,7 +94,7 @@ namespace OpenSim.Tests.Common.Mock
{
if (item.Folder == folderID)
{
- m_log.DebugFormat("[MOCK INV DB]: getInventoryInFolder() adding item {0}", item.Name);
+// m_log.DebugFormat("[MOCK INV DB]: getInventoryInFolder() adding item {0}", item.Name);
items.Add(item);
}
}
@@ -106,7 +106,7 @@ namespace OpenSim.Tests.Common.Mock
public InventoryFolderBase getUserRootFolder(UUID user)
{
- m_log.DebugFormat("[MOCK INV DB]: Looking for root folder for {0}", user);
+// m_log.DebugFormat("[MOCK INV DB]: Looking for root folder for {0}", user);
InventoryFolderBase folder = null;
m_rootFolders.TryGetValue(user, out folder);
@@ -118,7 +118,7 @@ namespace OpenSim.Tests.Common.Mock
{
InventoryFolderBase parentFolder = m_folders[parentID];
- m_log.DebugFormat("[MOCK INV DB]: Getting folders in folder {0} {1}", parentFolder.Name, parentFolder.ID);
+// m_log.DebugFormat("[MOCK INV DB]: Getting folders in folder {0} {1}", parentFolder.Name, parentFolder.ID);
List folders = new List();
@@ -126,9 +126,9 @@ namespace OpenSim.Tests.Common.Mock
{
if (folder.ParentID == parentID)
{
- m_log.DebugFormat(
- "[MOCK INV DB]: Found folder {0} {1} in {2} {3}",
- folder.Name, folder.ID, parentFolder.Name, parentFolder.ID);
+// m_log.DebugFormat(
+// "[MOCK INV DB]: Found folder {0} {1} in {2} {3}",
+// folder.Name, folder.ID, parentFolder.Name, parentFolder.ID);
folders.Add(folder);
}
@@ -152,9 +152,9 @@ namespace OpenSim.Tests.Common.Mock
public void addInventoryFolder(InventoryFolderBase folder)
{
- m_log.DebugFormat(
- "[MOCK INV DB]: Adding inventory folder {0} {1} type {2}",
- folder.Name, folder.ID, (AssetType)folder.Type);
+// m_log.DebugFormat(
+// "[MOCK INV DB]: Adding inventory folder {0} {1} type {2}",
+// folder.Name, folder.ID, (AssetType)folder.Type);
m_folders[folder.ID] = folder;
@@ -187,8 +187,8 @@ namespace OpenSim.Tests.Common.Mock
{
InventoryFolderBase folder = m_folders[item.Folder];
- m_log.DebugFormat(
- "[MOCK INV DB]: Adding inventory item {0} {1} in {2} {3}", item.Name, item.ID, folder.Name, folder.ID);
+// m_log.DebugFormat(
+// "[MOCK INV DB]: Adding inventory item {0} {1} in {2} {3}", item.Name, item.ID, folder.Name, folder.ID);
m_items[item.ID] = item;
}
--
cgit v1.1