private static int ParseCommandLine(TextWriter outwriter, Action <Library.Main.Controller> setup, ref bool verboseErrors, string[] args) { List <string> cargs = new List <string>(args); var tmpparsed = Library.Utility.FilterCollector.ExtractOptions(cargs); var options = tmpparsed.Item1; var filter = tmpparsed.Item2; verboseErrors = Library.Utility.Utility.ParseBoolOption(options, "debug-output"); if (cargs.Count == 1 && string.Equals(cargs[0], "changelog", StringComparison.OrdinalIgnoreCase)) { return(ShowChangeLog(outwriter)); } foreach (string internaloption in Library.Main.Options.InternalOptions) { if (options.ContainsKey(internaloption)) { outwriter.WriteLine(Strings.Program.InternalOptionUsedError(internaloption)); return(200); } } // Probe for "help" to avoid extra processing if (cargs.Count == 0 || (string.Equals(cargs[0], "help", StringComparison.OrdinalIgnoreCase))) { return(Commands.Help(outwriter, setup, cargs, options, filter)); } // try and parse all parameter file aliases foreach (string parameterOption in new [] { "parameters-file", "parameters-file", "parameterfile" }) { if (options.ContainsKey(parameterOption) && !string.IsNullOrEmpty(options[parameterOption])) { string filename = options[parameterOption]; options.Remove(parameterOption); if (!ReadOptionsFromFile(outwriter, filename, ref filter, cargs, options)) { return(100); } break; } } if (!options.ContainsKey("passphrase")) { if (!string.IsNullOrEmpty(System.Environment.GetEnvironmentVariable("PASSPHRASE"))) { options["passphrase"] = System.Environment.GetEnvironmentVariable("PASSPHRASE"); } } if (!options.ContainsKey("auth-password")) { if (!string.IsNullOrEmpty(System.Environment.GetEnvironmentVariable("AUTH_PASSWORD"))) { options["auth-password"] = System.Environment.GetEnvironmentVariable("AUTH_PASSWORD"); } } if (!options.ContainsKey("auth-username")) { if (!string.IsNullOrEmpty(System.Environment.GetEnvironmentVariable("AUTH_USERNAME"))) { options["auth-username"] = System.Environment.GetEnvironmentVariable("AUTH_USERNAME"); } } var showDeletionErrors = verboseErrors; Duplicati.Library.Utility.TempFile.RemoveOldApplicationTempFiles((path, ex) => { if (showDeletionErrors) { outwriter.WriteLine(string.Format("Failed to delete temp file: {0}", path)); } }); string command = cargs[0]; cargs.RemoveAt(0); if (CommandMap.ContainsKey(command)) { var autoupdate = Library.Utility.Utility.ParseBoolOption(options, "auto-update"); options.Remove("auto-update"); var res = CommandMap[command](outwriter, setup, cargs, options, filter); if (autoupdate && FROM_COMMANDLINE) { CheckForUpdates(outwriter); } return(res); } else { Commands.PrintInvalidCommand(outwriter, command, cargs); return(200); } }