Merge pull request #158 from Sonarr/update-handshake

Update handshake
This commit is contained in:
Keivan Beigi 2014-12-18 16:57:08 -08:00
commit 3d1e0e7042
6 changed files with 79 additions and 6 deletions

View File

@ -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");
}
} }
} }

View File

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

View File

@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.InteropServices.ComTypes;
namespace NzbDrone.Common.EnvironmentInfo namespace NzbDrone.Common.EnvironmentInfo
{ {
@ -8,6 +9,8 @@ namespace NzbDrone.Common.EnvironmentInfo
Dictionary<string, string> Args { get; } Dictionary<string, string> Args { get; }
bool InstallService { get; } bool InstallService { get; }
bool UninstallService { get; } bool UninstallService { get; }
string PreservedArguments { get; }
} }
public class StartupContext : IStartupContext public class StartupContext : IStartupContext
@ -60,5 +63,25 @@ namespace NzbDrone.Common.EnvironmentInfo
return Flags.Contains(UNINSTALL_SERVICE); 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();
}
}
} }
} }

View File

@ -27,6 +27,7 @@ namespace NzbDrone.Core.Update
private readonly IArchiveService _archiveService; private readonly IArchiveService _archiveService;
private readonly IProcessProvider _processProvider; private readonly IProcessProvider _processProvider;
private readonly IVerifyUpdates _updateVerifier; private readonly IVerifyUpdates _updateVerifier;
private readonly IStartupContext _startupContext;
private readonly IConfigFileProvider _configFileProvider; private readonly IConfigFileProvider _configFileProvider;
private readonly IRuntimeInfo _runtimeInfo; private readonly IRuntimeInfo _runtimeInfo;
private readonly IBackupService _backupService; private readonly IBackupService _backupService;
@ -36,6 +37,7 @@ namespace NzbDrone.Core.Update
IDiskProvider diskProvider, IHttpClient httpClient, IDiskProvider diskProvider, IHttpClient httpClient,
IArchiveService archiveService, IProcessProvider processProvider, IArchiveService archiveService, IProcessProvider processProvider,
IVerifyUpdates updateVerifier, IVerifyUpdates updateVerifier,
IStartupContext startupContext,
IConfigFileProvider configFileProvider, IConfigFileProvider configFileProvider,
IRuntimeInfo runtimeInfo, IRuntimeInfo runtimeInfo,
IBackupService backupService, IBackupService backupService,
@ -52,6 +54,7 @@ namespace NzbDrone.Core.Update
_archiveService = archiveService; _archiveService = archiveService;
_processProvider = processProvider; _processProvider = processProvider;
_updateVerifier = updateVerifier; _updateVerifier = updateVerifier;
_startupContext = startupContext;
_configFileProvider = configFileProvider; _configFileProvider = configFileProvider;
_runtimeInfo = runtimeInfo; _runtimeInfo = runtimeInfo;
_backupService = backupService; _backupService = backupService;
@ -142,7 +145,7 @@ namespace NzbDrone.Core.Update
var processId = _processProvider.GetCurrentProcess().Id.ToString(); var processId = _processProvider.GetCurrentProcess().Id.ToString();
var executingApplication = _runtimeInfo.ExecutingApplication; 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() private void EnsureAppDataSafety()

View File

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

View File

@ -17,12 +17,14 @@ namespace NzbDrone.Update.UpdateEngine
{ {
private readonly IServiceProvider _serviceProvider; private readonly IServiceProvider _serviceProvider;
private readonly IProcessProvider _processProvider; private readonly IProcessProvider _processProvider;
private readonly IStartupContext _startupContext;
private readonly Logger _logger; private readonly Logger _logger;
public StartNzbDrone(IServiceProvider serviceProvider, IProcessProvider processProvider, Logger logger) public StartNzbDrone(IServiceProvider serviceProvider, IProcessProvider processProvider, IStartupContext startupContext, Logger logger)
{ {
_serviceProvider = serviceProvider; _serviceProvider = serviceProvider;
_processProvider = processProvider; _processProvider = processProvider;
_startupContext = startupContext;
_logger = logger; _logger = logger;
} }
@ -73,7 +75,12 @@ namespace NzbDrone.Update.UpdateEngine
_logger.Info("Starting {0}", fileName); _logger.Info("Starting {0}", fileName);
var path = Path.Combine(installationFolder, 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);
} }
} }
} }