private static BuildJsonConfig ParseOptions(BuildCommandOptions options) { var configFile = options.ConfigFile; BuildJsonConfig config; if (string.IsNullOrEmpty(configFile)) { if (!File.Exists(DocAsCode.Constants.ConfigFileName)) { if (options.Content == null && options.Resource == null) { throw new ArgumentException("Either provide config file or specify content files to start building documentation."); } else { config = new BuildJsonConfig(); MergeOptionsToConfig(options, ref config); return config; } } else { Logger.Log(LogLevel.Verbose, $"Config file {DocAsCode.Constants.ConfigFileName} is found."); configFile = DocAsCode.Constants.ConfigFileName; } } config = CommandUtility.GetConfig<BuildConfig>(configFile).Item; if (config == null) throw new DocumentException($"Unable to find build subcommand config in file '{configFile}'."); config.BaseDirectory = Path.GetDirectoryName(configFile); MergeOptionsToConfig(options, ref config); return config; }
public BuildCommand(BuildCommandOptions options) { Config = ParseOptions(options); if (Config.Templates == null || Config.Templates.Count == 0) { Config.Templates = new ListWithStringFallback { DocAsCode.Constants.DefaultTemplateName }; } var assembly = typeof(Program).Assembly; _templateManager = new TemplateManager(assembly, "Template", Config.Templates, Config.Themes, Config.BaseDirectory); }
private static BuildJsonConfig GetConfigFromOptions(BuildCommandOptions options) { string configFile = options.ConfigFile; if (string.IsNullOrEmpty(configFile) && options.Content == null && options.Resource == null) { if (!File.Exists(Constants.ConfigFileName)) { throw new ArgumentException("Either provide config file or specify content files to start building documentation."); } else { Logger.Log(LogLevel.Info, $"Config file {Constants.ConfigFileName} found, start building..."); configFile = Constants.ConfigFileName; } } BuildJsonConfig config; if (!string.IsNullOrEmpty(configFile)) { var command = (BuildCommand)CommandFactory.ReadConfig(configFile, null).Commands.FirstOrDefault(s => s is BuildCommand); if (command == null) { throw new ApplicationException($"Unable to find {CommandType.Build} subcommand config in file '{Constants.ConfigFileName}'."); } config = command.Config; config.BaseDirectory = Path.GetDirectoryName(configFile); } else { config = new BuildJsonConfig(); } config.OutputFolder = options.OutputFolder; string optionsBaseDirectory = Environment.CurrentDirectory; // Override config file with options from command line if (options.Templates != null && options.Templates.Count > 0) { config.Templates = new ListWithStringFallback(options.Templates); } if (options.Themes != null && options.Themes.Count > 0) { config.Themes = new ListWithStringFallback(options.Themes); } if (!string.IsNullOrEmpty(options.OutputFolder)) { config.Destination = Path.GetFullPath(Path.Combine(options.OutputFolder, config.Destination ?? string.Empty)); } if (options.Content != null) { if (config.Content == null) { config.Content = new FileMapping(new FileMappingItem()); } config.Content.Add(new FileMappingItem() { Files = new FileItems(options.Content), CurrentWorkingDirectory = optionsBaseDirectory }); } if (options.Resource != null) { if (config.Resource == null) { config.Resource = new FileMapping(new FileMappingItem()); } config.Resource.Add(new FileMappingItem() { Files = new FileItems(options.Resource), CurrentWorkingDirectory = optionsBaseDirectory }); } if (options.Overwrite != null) { if (config.Overwrite == null) { config.Overwrite = new FileMapping(new FileMappingItem()); } config.Overwrite.Add(new FileMappingItem() { Files = new FileItems(options.Overwrite), CurrentWorkingDirectory = optionsBaseDirectory }); } if (options.ExternalReference != null) { if (config.ExternalReference == null) { config.ExternalReference = new FileMapping(new FileMappingItem()); } config.ExternalReference.Add(new FileMappingItem() { Files = new FileItems(options.ExternalReference), CurrentWorkingDirectory = optionsBaseDirectory }); } if (options.Serve) { config.Serve = options.Serve; } if (options.Port.HasValue) { config.Port = options.Port.Value.ToString(); } return(config); }
private static BuildJsonConfig GetConfigFromOptions(BuildCommandOptions options) { string configFile = options.ConfigFile; if (string.IsNullOrEmpty(configFile) && options.Content == null && options.Resource == null) { if (!File.Exists(Constants.ConfigFileName)) { throw new ArgumentException("Either provide config file or specify content files to start building documentation."); } else { Logger.Log(LogLevel.Info, $"Config file {Constants.ConfigFileName} found, start building..."); configFile = Constants.ConfigFileName; } } BuildJsonConfig config; if (!string.IsNullOrEmpty(configFile)) { var command = (BuildCommand)CommandFactory.ReadConfig(configFile, null).Commands.FirstOrDefault(s => s is BuildCommand); if (command == null) throw new ApplicationException($"Unable to find {CommandType.Build} subcommand config in file '{Constants.ConfigFileName}'."); config = command.Config; config.BaseDirectory = Path.GetDirectoryName(configFile); } else { config = new BuildJsonConfig(); } config.OutputFolder = options.OutputFolder; string optionsBaseDirectory = Environment.CurrentDirectory; // Override config file with options from command line if (options.Templates != null && options.Templates.Count > 0) config.Templates = new ListWithStringFallback(options.Templates); if (options.Themes != null && options.Themes.Count > 0) config.Themes = new ListWithStringFallback(options.Themes); if (!string.IsNullOrEmpty(options.OutputFolder)) config.Destination = Path.GetFullPath(Path.Combine(options.OutputFolder, config.Destination ?? string.Empty)); if (options.Content != null) { if (config.Content == null) config.Content = new FileMapping(new FileMappingItem()); config.Content.Add(new FileMappingItem() { Files = new FileItems(options.Content), CurrentWorkingDirectory = optionsBaseDirectory }); } if (options.Resource != null) { if (config.Resource == null) config.Resource = new FileMapping(new FileMappingItem()); config.Resource.Add(new FileMappingItem() { Files = new FileItems(options.Resource), CurrentWorkingDirectory = optionsBaseDirectory }); } if (options.Overwrite != null) { if (config.Overwrite == null) config.Overwrite = new FileMapping(new FileMappingItem()); config.Overwrite.Add(new FileMappingItem() { Files = new FileItems(options.Overwrite), CurrentWorkingDirectory = optionsBaseDirectory }); } if (options.ExternalReference != null) { if (config.ExternalReference == null) config.ExternalReference = new FileMapping(new FileMappingItem()); config.ExternalReference.Add(new FileMappingItem() { Files = new FileItems(options.ExternalReference), CurrentWorkingDirectory = optionsBaseDirectory }); } if (options.Serve) config.Serve = options.Serve; if (options.Port.HasValue) config.Port = options.Port.Value.ToString(); return config; }
private static void MergeOptionsToConfig(BuildCommandOptions options, ref BuildJsonConfig config) { // base directory for content from command line is current directory // e.g. C:\folder1>docfx build folder2\docfx.json --content "*.cs" // for `--content "*.cs*`, base directory should be `C:\folder1` string optionsBaseDirectory = Environment.CurrentDirectory; config.OutputFolder = options.OutputFolder; // Override config file with options from command line if (options.Templates != null && options.Templates.Count > 0) config.Templates = new ListWithStringFallback(options.Templates); if (options.Themes != null && options.Themes.Count > 0) config.Themes = new ListWithStringFallback(options.Themes); if (!string.IsNullOrEmpty(options.OutputFolder)) config.Destination = Path.GetFullPath(Path.Combine(options.OutputFolder, config.Destination ?? string.Empty)); if (options.Content != null) { if (config.Content == null) config.Content = new FileMapping(new FileMappingItem()); config.Content.Add(new FileMappingItem() { Files = new FileItems(options.Content), SourceFolder = optionsBaseDirectory }); } if (options.Resource != null) { if (config.Resource == null) config.Resource = new FileMapping(new FileMappingItem()); config.Resource.Add(new FileMappingItem() { Files = new FileItems(options.Resource), SourceFolder = optionsBaseDirectory }); } if (options.Overwrite != null) { if (config.Overwrite == null) config.Overwrite = new FileMapping(new FileMappingItem()); config.Overwrite.Add(new FileMappingItem() { Files = new FileItems(options.Overwrite), SourceFolder = optionsBaseDirectory }); } if (options.ExternalReference != null) { if (config.ExternalReference == null) config.ExternalReference = new FileMapping(new FileMappingItem()); config.ExternalReference.Add(new FileMappingItem() { Files = new FileItems(options.ExternalReference), SourceFolder = optionsBaseDirectory }); } if (options.Serve) config.Serve = options.Serve; if (options.Port.HasValue) config.Port = options.Port.Value.ToString(); config.Force |= options.ForceRebuild; config.ExportRawModel |= options.ExportRawModel; config.ExportViewModel |= options.ExportViewModel; var fileMetadata = GetFileMetadataFromOption(options.FileMetadataFilePath); if (fileMetadata != null) config.FileMetadata = fileMetadata; var globalMetadata = GetGlobalMetadataFromOption(options.GlobalMetadata, options.GlobalMetadataFilePath); if (globalMetadata != null) config.GlobalMetadata = globalMetadata; }