Merge branch 'master' of /var/git/opensim/
commit
4ec0933c99
|
@ -265,9 +265,9 @@ namespace OpenSim
|
||||||
LoadOar);
|
LoadOar);
|
||||||
|
|
||||||
m_console.Commands.AddCommand("region", false, "save oar",
|
m_console.Commands.AddCommand("region", false, "save oar",
|
||||||
"save oar [-v|version=N] [<OAR path>]",
|
"save oar [-v|--version=N] [<OAR path>]",
|
||||||
"Save a region's data to an OAR archive.",
|
"Save a region's data to an OAR archive.",
|
||||||
"-v|version=N generates scene objects as per older versions of the serialization (e.g. -v=0)" + Environment.NewLine
|
"-v|--version=N generates scene objects as per older versions of the serialization (e.g. -v=0)" + Environment.NewLine
|
||||||
+ "The OAR path must be a filesystem path."
|
+ "The OAR path must be a filesystem path."
|
||||||
+ " If this is not given then the oar is saved to region.oar in the current directory.",
|
+ " If this is not given then the oar is saved to region.oar in the current directory.",
|
||||||
SaveOar);
|
SaveOar);
|
||||||
|
|
|
@ -50,6 +50,16 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The minimum major version of OAR that we can write.
|
||||||
|
/// </summary>
|
||||||
|
public static int MIN_MAJOR_VERSION = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The maximum major version of OAR that we can write.
|
||||||
|
/// </summary>
|
||||||
|
public static int MAX_MAJOR_VERSION = 1;
|
||||||
|
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
protected Stream m_saveStream;
|
protected Stream m_saveStream;
|
||||||
protected Guid m_requestId;
|
protected Guid m_requestId;
|
||||||
|
@ -100,6 +110,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <exception cref="System.IO.IOException">if there was an io problem with creating the file</exception>
|
/// <exception cref="System.IO.IOException">if there was an io problem with creating the file</exception>
|
||||||
public void ArchiveRegion(Dictionary<string, object> options)
|
public void ArchiveRegion(Dictionary<string, object> options)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
Dictionary<UUID, AssetType> assetUuids = new Dictionary<UUID, AssetType>();
|
Dictionary<UUID, AssetType> assetUuids = new Dictionary<UUID, AssetType>();
|
||||||
|
|
||||||
|
@ -173,38 +185,62 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
// Write out control file. This has to be done first so that subsequent loaders will see this file first
|
// Write out control file. This has to be done first so that subsequent loaders will see this file first
|
||||||
// XXX: I know this is a weak way of doing it since external non-OAR aware tar executables will not do this
|
// XXX: I know this is a weak way of doing it since external non-OAR aware tar executables will not do this
|
||||||
archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p2ControlFile(options));
|
archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, CreateControlFile(options));
|
||||||
m_log.InfoFormat("[ARCHIVER]: Added control file to archive.");
|
m_log.InfoFormat("[ARCHIVER]: Added control file to archive.");
|
||||||
|
|
||||||
new AssetsRequest(
|
new AssetsRequest(
|
||||||
new AssetsArchiver(archiveWriter), assetUuids,
|
new AssetsArchiver(archiveWriter), assetUuids,
|
||||||
m_scene.AssetService, awre.ReceivedAllAssets).Execute();
|
m_scene.AssetService, awre.ReceivedAllAssets).Execute();
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_saveStream.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create the control file for the most up to date archive
|
/// Create the control file for the most up to date archive
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static string Create0p2ControlFile(Dictionary<string, object> options)
|
public static string CreateControlFile(Dictionary<string, object> options)
|
||||||
{
|
{
|
||||||
int majorVersion = 0, minorVersion = 5;
|
int majorVersion = MAX_MAJOR_VERSION, minorVersion = 0;
|
||||||
|
|
||||||
if (options.ContainsKey("version"))
|
if (options.ContainsKey("version"))
|
||||||
{
|
{
|
||||||
minorVersion = 0;
|
|
||||||
string[] parts = options["version"].ToString().Split('.');
|
string[] parts = options["version"].ToString().Split('.');
|
||||||
if (parts.Length >= 1)
|
if (parts.Length >= 1)
|
||||||
|
{
|
||||||
majorVersion = Int32.Parse(parts[0]);
|
majorVersion = Int32.Parse(parts[0]);
|
||||||
|
|
||||||
if (parts.Length >= 2)
|
if (parts.Length >= 2)
|
||||||
minorVersion = Int32.Parse(parts[1]);
|
minorVersion = Int32.Parse(parts[1]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (majorVersion < MIN_MAJOR_VERSION || majorVersion > MAX_MAJOR_VERSION)
|
||||||
|
{
|
||||||
|
throw new Exception(
|
||||||
|
string.Format(
|
||||||
|
"OAR version number for save must be between {0} and {1}",
|
||||||
|
MIN_MAJOR_VERSION, MAX_MAJOR_VERSION));
|
||||||
|
}
|
||||||
|
else if (majorVersion == MAX_MAJOR_VERSION)
|
||||||
|
{
|
||||||
|
// Force 1.0
|
||||||
|
minorVersion = 0;
|
||||||
|
}
|
||||||
|
else if (majorVersion == MIN_MAJOR_VERSION)
|
||||||
|
{
|
||||||
|
// Force 0.4
|
||||||
|
minorVersion = 4;
|
||||||
|
}
|
||||||
|
|
||||||
m_log.InfoFormat("[ARCHIVER]: Creating version {0}.{1} OAR", majorVersion, minorVersion);
|
m_log.InfoFormat("[ARCHIVER]: Creating version {0}.{1} OAR", majorVersion, minorVersion);
|
||||||
// if (majorVersion == 1)
|
if (majorVersion == 1)
|
||||||
// {
|
{
|
||||||
// m_log.WarnFormat("[ARCHIVER]: Please be aware that version 1.0 OARs are not compatible with OpenSim 0.7.0.2 and earlier. Please use the --version=0 option if you want to produce a compatible OAR");
|
m_log.WarnFormat("[ARCHIVER]: Please be aware that version 1.0 OARs are not compatible with OpenSim 0.7.0.2 and earlier. Please use the --version=0 option if you want to produce a compatible OAR");
|
||||||
// }
|
}
|
||||||
|
|
||||||
|
|
||||||
StringWriter sw = new StringWriter();
|
StringWriter sw = new StringWriter();
|
||||||
XmlTextWriter xtw = new XmlTextWriter(sw);
|
XmlTextWriter xtw = new XmlTextWriter(sw);
|
||||||
|
|
Loading…
Reference in New Issue