diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-04-01 16:08:31 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-04-01 16:08:31 -0400 |
commit | 4675da0600edf6781cd740549ad0a175b606fc1e (patch) | |
tree | 0219cab065bfffbbbb9b048b6a30044f510be2c5 /src/StardewModdingAPI | |
parent | c023118356d9d7877dbdc9e88c4512fcdf33c256 (diff) | |
download | SMAPI-4675da0600edf6781cd740549ad0a175b606fc1e.tar.gz SMAPI-4675da0600edf6781cd740549ad0a175b606fc1e.tar.bz2 SMAPI-4675da0600edf6781cd740549ad0a175b606fc1e.zip |
add --log-path argument to specify SMAPI log path during testing
Diffstat (limited to 'src/StardewModdingAPI')
-rw-r--r-- | src/StardewModdingAPI/Constants.cs | 2 | ||||
-rw-r--r-- | src/StardewModdingAPI/Program.cs | 29 |
2 files changed, 26 insertions, 5 deletions
diff --git a/src/StardewModdingAPI/Constants.cs b/src/StardewModdingAPI/Constants.cs index e28b33d7..4a036cd0 100644 --- a/src/StardewModdingAPI/Constants.cs +++ b/src/StardewModdingAPI/Constants.cs @@ -69,7 +69,7 @@ namespace StardewModdingAPI internal static string ApiConfigPath => Path.Combine(Constants.ExecutionPath, $"{typeof(Program).Assembly.GetName().Name}.config.json"); /// <summary>The file path to the log where the latest output should be saved.</summary> - internal static string LogPath => Path.Combine(Constants.LogDir, "SMAPI-latest.txt"); + internal static string DefaultLogPath => Path.Combine(Constants.LogDir, "SMAPI-latest.txt"); /// <summary>The full path to the folder containing mods.</summary> internal static string ModPath { get; } = Path.Combine(Constants.ExecutionPath, "Mods"); diff --git a/src/StardewModdingAPI/Program.cs b/src/StardewModdingAPI/Program.cs index ac98f2e4..58850dc3 100644 --- a/src/StardewModdingAPI/Program.cs +++ b/src/StardewModdingAPI/Program.cs @@ -30,7 +30,7 @@ namespace StardewModdingAPI ** Properties *********/ /// <summary>The log file to which to write messages.</summary> - private readonly LogFileManager LogFile = new LogFileManager(Constants.LogPath); + private readonly LogFileManager LogFile; /// <summary>Manages console output interception.</summary> private readonly ConsoleInterceptionManager ConsoleManager = new ConsoleInterceptionManager(); @@ -67,17 +67,38 @@ namespace StardewModdingAPI /// <param name="args">The command-line arguments.</param> private static void Main(string[] args) { - new Program(writeToConsole: !args.Contains("--no-terminal")) + // get flags from arguments + bool writeToConsole = !args.Contains("--no-terminal"); + + // get log path from arguments + string logPath = null; + { + int pathIndex = Array.LastIndexOf(args, "--log-path") + 1; + if (pathIndex >= 1 && args.Length >= pathIndex) + { + logPath = args[pathIndex]; + if (!Path.IsPathRooted(logPath)) + logPath = Path.Combine(Constants.LogDir, logPath); + } + } + if (string.IsNullOrWhiteSpace(logPath)) + logPath = Constants.DefaultLogPath; + + // load SMAPI + new Program(writeToConsole, logPath) .LaunchInteractively(); } /// <summary>Construct an instance.</summary> - internal Program(bool writeToConsole) + /// <param name="writeToConsole">Whether to output log messages to the console.</param> + /// <param name="logPath">The full file path to which to write log messages.</param> + internal Program(bool writeToConsole, string logPath) { // load settings this.Settings = JsonConvert.DeserializeObject<SConfig>(File.ReadAllText(Constants.ApiConfigPath)); // initialise + this.LogFile = new LogFileManager(logPath); this.Monitor = new Monitor("SMAPI", this.ConsoleManager, this.LogFile, this.ExitGameImmediately) { WriteToConsole = writeToConsole }; this.ModRegistry = new ModRegistry(this.Settings.ModCompatibility); this.DeprecationManager = new DeprecationManager(this.Monitor, this.ModRegistry); @@ -460,7 +481,7 @@ namespace StardewModdingAPI try { int modEntries = modAssembly.DefinedTypes.Count(type => typeof(Mod).IsAssignableFrom(type) && !type.IsAbstract); - if(modEntries == 0) + if (modEntries == 0) { this.Monitor.Log($"{skippedPrefix} because its DLL has no '{nameof(Mod)}' subclass.", LogLevel.Error); continue; |