private static void MergeOptionsToConfig(MergeCommandOptions options, ref MergeJsonConfig 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 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(); 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<MergeConfig>(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 MergeCommand(MergeCommandOptions options) { Config = ParseOptions(options); }
private static Dictionary<string, object> GetGlobalMetadataFromOption(MergeCommandOptions options) { Dictionary<string, object> globalMetadata = null; if (options.GlobalMetadata != null) { using (var sr = new StringReader(options.GlobalMetadata)) { try { globalMetadata = JsonUtility.Deserialize<Dictionary<string, object>>(sr, GetSerializer()); if (globalMetadata != null && globalMetadata.Count > 0) { Logger.LogInfo($"Global metadata from \"--globalMetadata\" overrides the one defined in config file"); } } catch (JsonException e) { Logger.LogWarning($"Metadata from \"--globalMetadata {options.GlobalMetadata}\" is not a valid JSON format global metadata, ignored: {e.Message}"); } } } if (options.GlobalMetadataFilePath != null) { try { var globalMetadataFromFile = JsonUtility.Deserialize<MergeJsonConfig>(options.GlobalMetadataFilePath).GlobalMetadata; if (globalMetadataFromFile == null) { Logger.LogWarning($" File from \"--globalMetadataFile {options.GlobalMetadataFilePath}\" does not contain \"globalMetadata\" definition."); } else { if (globalMetadata == null) globalMetadata = globalMetadataFromFile; else { foreach (var pair in globalMetadataFromFile) { if (globalMetadata.ContainsKey(pair.Key)) { Logger.LogWarning($"Both --globalMetadata and --globalMetadataFile contain definition for \"{pair.Key}\", the one from \"--globalMetadata\" overrides the one from \"--globalMetadataFile {options.GlobalMetadataFilePath}\"."); } else { globalMetadata[pair.Key] = pair.Value; } } } } } catch (FileNotFoundException) { Logger.LogWarning($"Invalid option \"--globalMetadataFile {options.GlobalMetadataFilePath}\": file does not exist, ignored."); } catch (JsonException e) { Logger.LogWarning($"File from \"--globalMetadataFile {options.GlobalMetadataFilePath}\" is not a valid JSON format global metadata, ignored: {e.Message}"); } } if (globalMetadata?.Count > 0) { return globalMetadata; } return null; }