private static void MergeOptionsToConfig(MergeCommandOptions options, ref MergeJsonItemConfig 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; 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 }); } config.FileMetadata = BuildCommand.GetFileMetadataFromOption(config.FileMetadata, options.FileMetadataFilePath, null); config.GlobalMetadata = BuildCommand.GetGlobalMetadataFromOption(config.GlobalMetadata, options.GlobalMetadataFilePath, null, options.GlobalMetadata); if (options.TocMetadata != null) { config.TocMetadata = new ListWithStringFallback(options.TocMetadata); } }
private static MetadataMergeParameters ConfigToParameter(MergeJsonItemConfig config, string baseDirectory, string outputDirectory) => new MetadataMergeParameters { OutputBaseDir = outputDirectory, Metadata = config.GlobalMetadata?.ToImmutableDictionary() ?? ImmutableDictionary <string, object> .Empty, FileMetadata = ConvertToFileMetadataItem(baseDirectory, config.FileMetadata), TocMetadata = config.TocMetadata?.ToImmutableList() ?? ImmutableList <string> .Empty, Files = GetFileCollectionFromFileMapping( baseDirectory, DocumentType.Article, GlobUtility.ExpandFileMapping(baseDirectory, config.Content)), };
private static MergeJsonConfig ParseOptions(MergeCommandOptions options) { var configFile = options.ConfigFile; MergeJsonConfig config; if (string.IsNullOrEmpty(configFile)) { if (!File.Exists(DocAsCode.Constants.ConfigFileName)) { if (options.Content == null) { throw new ArgumentException("Either provide config file or specify content files to start building documentation."); } else { config = new MergeJsonConfig(); var item = new MergeJsonItemConfig(); MergeOptionsToConfig(options, ref item); config.Add(item); return(config); } } else { Logger.Log(LogLevel.Verbose, $"Config file {DocAsCode.Constants.ConfigFileName} is found."); configFile = DocAsCode.Constants.ConfigFileName; } } config = CommandUtility.GetConfig <MergeConfig>(configFile).Item; if (config == null) { var message = $"Unable to find build subcommand config in file '{configFile}'."; Logger.LogError(message, code: ErrorCodes.Config.BuildConfigNotFound); throw new DocumentException(message); } for (int i = 0; i < config.Count; i++) { var round = config[i]; round.BaseDirectory = Path.GetDirectoryName(configFile); MergeOptionsToConfig(options, ref round); } return(config); }