in src/tooling/docs-assembler/AssembleSources.cs [58:108]
private AssembleSources(AssembleContext assembleContext, Checkout[] checkouts)
{
AssembleContext = assembleContext;
TocTopLevelMappings = GetConfiguredSources(assembleContext);
HistoryMappings = GetHistoryMapping(assembleContext);
var crossLinkFetcher = new AssemblerCrossLinkFetcher(NullLoggerFactory.Instance, assembleContext.Configuration, assembleContext.Environment);
UriResolver = new PublishEnvironmentUriResolver(TocTopLevelMappings, assembleContext.Environment);
var crossLinkResolver = new CrossLinkResolver(crossLinkFetcher, UriResolver);
AssembleSets = checkouts
.Where(c => !c.Repository.Skip)
.Select(c => new AssemblerDocumentationSet(NullLoggerFactory.Instance, assembleContext, c, crossLinkResolver, TreeCollector))
.ToDictionary(s => s.Checkout.Repository.Name, s => s)
.ToFrozenDictionary();
TocConfigurationMapping = TocTopLevelMappings
.Select(kv =>
{
var repo = kv.Value.Source.Scheme;
if (!AssembleSets.TryGetValue(repo, out var set))
throw new Exception($"Unable to find repository: {repo}");
var fs = set.BuildContext.ReadFileSystem;
var config = set.BuildContext.Configuration;
var tocDirectory = Path.Combine(config.ScopeDirectory.FullName, kv.Value.Source.Host, kv.Value.Source.AbsolutePath.TrimStart('/'));
var relative = Path.GetRelativePath(config.ScopeDirectory.FullName, tocDirectory);
IFileInfo[] tocFiles =
[
fs.FileInfo.New(Path.Combine(tocDirectory, "toc.yml")),
fs.FileInfo.New(Path.Combine(tocDirectory, "_toc.yml")),
fs.FileInfo.New(Path.Combine(tocDirectory, "docset.yml")),
fs.FileInfo.New(Path.Combine(tocDirectory, "_docset.yml"))
];
var file = tocFiles.FirstOrDefault(f => f.Exists);
if (file is null)
{
assembleContext.Collector.EmitWarning(assembleContext.ConfigurationPath.FullName, $"Unable to find toc file in {tocDirectory}");
file = tocFiles.First();
}
var toc = new TableOfContentsConfiguration(config, file, fs.DirectoryInfo.New(tocDirectory), set.BuildContext, 0, relative);
var mapping = new TocConfigurationMapping
{
TopLevel = kv.Value,
RepositoryConfigurationFile = config,
TableOfContentsConfiguration = toc
};
return new KeyValuePair<Uri, TocConfigurationMapping>(kv.Value.Source, mapping);
})
.ToFrozenDictionary();
}