/// <summary> /// TODO: refactor /// </summary> /// <param name="options"></param> /// <returns></returns> private static BuildJsonConfig ParseOptions(BuildCommandOptions options) { var configFile = GetConfigFilePath(options); BuildJsonConfig config; if (configFile == null) { if (options.Content == null && options.Resource == null) { throw new OptionParserException("Either provide config file or specify content files to start building documentation."); } config = new BuildJsonConfig(); MergeOptionsToConfig(options, config); return(config); } 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, config); return(config); }
public BuildCommand(BuildCommandOptions options) { var assembly = typeof(Program).Assembly; _version = assembly.GetName().Version.ToString(); Config = ParseOptions(options); SetDefaultConfigValue(Config); _templateManager = new TemplateManager(assembly, "Template", Config.Templates, Config.Themes, Config.BaseDirectory); }
public BuildCommand(BuildCommandOptions options) { var assembly = typeof(Program).Assembly; _version = assembly.GetName().Version.ToString(); Config = ParseOptions(options); SetDefaultConfigValue(Config); EnvironmentContext.BaseDirectory = Path.GetFullPath(string.IsNullOrEmpty(Config.BaseDirectory) ? Directory.GetCurrentDirectory() : Config.BaseDirectory); _templateManager = new TemplateManager(assembly, "Template", Config.Templates, Config.Themes, Config.BaseDirectory); }
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); }
internal static string GetConfigFilePath(BuildCommandOptions options) { var configFile = options.ConfigFile; if (string.IsNullOrEmpty(configFile)) { if (!File.Exists(Constants.ConfigFileName)) { return(null); } else { Logger.Log(LogLevel.Verbose, $"Config file {Constants.ConfigFileName} is found."); return(Constants.ConfigFileName); } } return(configFile); }
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, 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, config); MergeNewFileRepositoryToConfig(config); return(config); }
private static void MergeOptionsToConfig(BuildCommandOptions options, 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; if (!string.IsNullOrEmpty(options.RawModelOutputFolder)) { config.RawModelOutputFolder = Path.GetFullPath(options.RawModelOutputFolder); } if (!string.IsNullOrEmpty(options.ViewModelOutputFolder)) { config.ViewModelOutputFolder = Path.GetFullPath(options.ViewModelOutputFolder); } config.DryRun |= options.DryRun; config.FileMetadata = GetFileMetadataFromOption(options.FileMetadataFilePath, config.FileMetadata); config.GlobalMetadata = GetGlobalMetadataFromOption(options.GlobalMetadata, options.GlobalMetadataFilePath, config.GlobalMetadata); }
private static void MergeOptionsToConfig(BuildCommandOptions options, 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 = Directory.GetCurrentDirectory(); 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.PostProcessors != null && options.PostProcessors.Count > 0) { config.PostProcessors = new ListWithStringFallback(options.PostProcessors); } 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.XRefMaps != null) { config.XRefMaps = new ListWithStringFallback( (config.XRefMaps ?? new ListWithStringFallback()) .Concat(options.XRefMaps) .Where(x => !string.IsNullOrWhiteSpace(x)) .Distinct()); } //to-do: get changelist from options 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; if (!string.IsNullOrEmpty(options.RawModelOutputFolder)) { config.RawModelOutputFolder = Path.GetFullPath(options.RawModelOutputFolder); } if (!string.IsNullOrEmpty(options.ViewModelOutputFolder)) { config.ViewModelOutputFolder = Path.GetFullPath(options.ViewModelOutputFolder); } config.DryRun |= options.DryRun; if (options.MaxParallelism != null) { config.MaxParallelism = options.MaxParallelism; } if (options.MarkdownEngineName != null) { config.MarkdownEngineName = options.MarkdownEngineName; } if (options.MarkdownEngineProperties != null) { config.MarkdownEngineProperties = JsonConvert.DeserializeObject <Dictionary <string, object> >( options.MarkdownEngineProperties, new JsonSerializerSettings { Converters = { new JObjectDictionaryToObjectDictionaryConverter() } }); } if (options.NoLangKeyword != null) { config.NoLangKeyword = options.NoLangKeyword.Value; } if (options.IntermediateFolder != null) { config.IntermediateFolder = options.IntermediateFolder; } if (options.ChangesFile != null) { config.ChangesFile = options.ChangesFile; } if (options.GlobalMetadataFilePaths != null && options.GlobalMetadataFilePaths.Any()) { config.GlobalMetadataFilePaths.AddRange(options.GlobalMetadataFilePaths); } config.GlobalMetadataFilePaths = new ListWithStringFallback(config.GlobalMetadataFilePaths.Select( path => PathUtility.IsRelativePath(path) ? Path.Combine(config.BaseDirectory, path) : path).Reverse()); if (options.FileMetadataFilePaths != null && options.FileMetadataFilePaths.Any()) { config.FileMetadataFilePaths.AddRange(options.FileMetadataFilePaths); } config.FileMetadataFilePaths = new ListWithStringFallback(config.FileMetadataFilePaths.Select( path => PathUtility.IsRelativePath(path) ? Path.Combine(config.BaseDirectory, path) : path).Reverse()); config.FileMetadata = GetFileMetadataFromOption(config.FileMetadata, options.FileMetadataFilePath, config.FileMetadataFilePaths); config.GlobalMetadata = GetGlobalMetadataFromOption(config.GlobalMetadata, options.GlobalMetadataFilePath, config.GlobalMetadataFilePaths, options.GlobalMetadata); }
public BuildCommand(BuildCommandOptions options) : this(ParseOptions(options)) { }