Merge pull request #158 from Sonarr/update-handshake

Update handshake
pull/6/head
Keivan Beigi 10 years ago
commit 3d1e0e7042

@ -38,5 +38,29 @@ namespace NzbDrone.Common.Test.EnvironmentTests
}
[TestCase("/data=test", "/data=test")]
[TestCase("/Data=/a/b/c", "/data=/a/b/c")]
public void should_preserver_data(string arg, string preserved)
{
var args = new StartupContext(new[] { arg });
args.PreservedArguments.Should().Be(preserved);
}
[TestCase("/nobrowser", "/nobrowser")]
[TestCase("/Nobrowser", "/nobrowser")]
[TestCase("-Nobrowser", "/nobrowser")]
public void should_preserver_no_browser(string arg, string preserved)
{
var args = new StartupContext(new[] { arg });
args.PreservedArguments.Should().Be(preserved);
}
[Test]
public void should_preserver_both()
{
var args = new StartupContext(new[] { "/data=test", "/Nobrowser" });
args.PreservedArguments.Should().Be("/data=test /nobrowser");
}
}
}

@ -1,6 +1,8 @@
using System;
using System.IO;
using System.Reflection;
using NLog;
using NzbDrone.Common.Instrumentation;
namespace NzbDrone.Common.EnvironmentInfo
{
@ -15,6 +17,9 @@ namespace NzbDrone.Common.EnvironmentInfo
{
private readonly Environment.SpecialFolder DATA_SPECIAL_FOLDER = Environment.SpecialFolder.CommonApplicationData;
private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(AppFolderInfo));
public AppFolderInfo(IStartupContext startupContext)
{
if (OsInfo.IsNotWindows)
@ -25,6 +30,7 @@ namespace NzbDrone.Common.EnvironmentInfo
if (startupContext.Args.ContainsKey(StartupContext.APPDATA))
{
AppDataFolder = startupContext.Args[StartupContext.APPDATA];
Logger.Info("Data directory is being overridden to [{0}]", AppDataFolder);
}
else
{

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Runtime.InteropServices.ComTypes;
namespace NzbDrone.Common.EnvironmentInfo
{
@ -8,6 +9,8 @@ namespace NzbDrone.Common.EnvironmentInfo
Dictionary<string, string> Args { get; }
bool InstallService { get; }
bool UninstallService { get; }
string PreservedArguments { get; }
}
public class StartupContext : IStartupContext
@ -60,5 +63,25 @@ namespace NzbDrone.Common.EnvironmentInfo
return Flags.Contains(UNINSTALL_SERVICE);
}
}
public string PreservedArguments
{
get
{
var args = "";
if (Args.ContainsKey(APPDATA))
{
args = "/data=" + Args[APPDATA];
}
if (Flags.Contains(NO_BROWSER))
{
args += " /" + NO_BROWSER;
}
return args.Trim();
}
}
}
}

@ -27,6 +27,7 @@ namespace NzbDrone.Core.Update
private readonly IArchiveService _archiveService;
private readonly IProcessProvider _processProvider;
private readonly IVerifyUpdates _updateVerifier;
private readonly IStartupContext _startupContext;
private readonly IConfigFileProvider _configFileProvider;
private readonly IRuntimeInfo _runtimeInfo;
private readonly IBackupService _backupService;
@ -36,6 +37,7 @@ namespace NzbDrone.Core.Update
IDiskProvider diskProvider, IHttpClient httpClient,
IArchiveService archiveService, IProcessProvider processProvider,
IVerifyUpdates updateVerifier,
IStartupContext startupContext,
IConfigFileProvider configFileProvider,
IRuntimeInfo runtimeInfo,
IBackupService backupService,
@ -52,6 +54,7 @@ namespace NzbDrone.Core.Update
_archiveService = archiveService;
_processProvider = processProvider;
_updateVerifier = updateVerifier;
_startupContext = startupContext;
_configFileProvider = configFileProvider;
_runtimeInfo = runtimeInfo;
_backupService = backupService;
@ -142,7 +145,7 @@ namespace NzbDrone.Core.Update
var processId = _processProvider.GetCurrentProcess().Id.ToString();
var executingApplication = _runtimeInfo.ExecutingApplication;
return String.Join(" ", processId, updateSandboxFolder.TrimEnd(Path.DirectorySeparatorChar).WrapInQuotes(), executingApplication.WrapInQuotes());
return String.Join(" ", processId, updateSandboxFolder.TrimEnd(Path.DirectorySeparatorChar).WrapInQuotes(), executingApplication.WrapInQuotes(), _startupContext.PreservedArguments);
}
private void EnsureAppDataSafety()

@ -1,4 +1,5 @@
using NLog;
using System;
using NLog;
using NzbDrone.Common.Disk;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Extensions;
@ -29,8 +30,17 @@ namespace NzbDrone.Update.UpdateEngine
var backupFolderAppData = _appFolderInfo.GetUpdateBackUpAppDataFolder();
_diskProvider.CreateFolder(backupFolderAppData);
try
{
_diskProvider.CopyFile(_appFolderInfo.GetConfigPath(), _appFolderInfo.GetUpdateBackupConfigFile(), true);
_diskProvider.CopyFile(_appFolderInfo.GetNzbDroneDatabase(), _appFolderInfo.GetUpdateBackupDatabase(), true);
_diskProvider.CopyFile(_appFolderInfo.GetNzbDroneDatabase(), _appFolderInfo.GetUpdateBackupDatabase(),
true);
}
catch (Exception e)
{
_logger.ErrorException("Couldn't create a data backup", e);
}
}
}
}

@ -17,12 +17,14 @@ namespace NzbDrone.Update.UpdateEngine
{
private readonly IServiceProvider _serviceProvider;
private readonly IProcessProvider _processProvider;
private readonly IStartupContext _startupContext;
private readonly Logger _logger;
public StartNzbDrone(IServiceProvider serviceProvider, IProcessProvider processProvider, Logger logger)
public StartNzbDrone(IServiceProvider serviceProvider, IProcessProvider processProvider, IStartupContext startupContext, Logger logger)
{
_serviceProvider = serviceProvider;
_processProvider = processProvider;
_startupContext = startupContext;
_logger = logger;
}
@ -73,7 +75,12 @@ namespace NzbDrone.Update.UpdateEngine
_logger.Info("Starting {0}", fileName);
var path = Path.Combine(installationFolder, fileName);
_processProvider.SpawnNewProcess(path, "--" + StartupContext.NO_BROWSER);
if (!_startupContext.Flags.Contains(StartupContext.NO_BROWSER))
{
_startupContext.Flags.Add(StartupContext.NO_BROWSER);
}
_processProvider.SpawnNewProcess(path, _startupContext.PreservedArguments);
}
}
}
Loading…
Cancel
Save