예제 #1
0
        private List <HostService> GetInnerContexts(
            DocumentBuildParameters parameters,
            IEnumerable <IDocumentProcessor> processors,
            TemplateProcessor templateProcessor,
            IHostServiceCreator creator)
        {
            var files = (from file in parameters.Files.EnumerateFiles().AsParallel().WithDegreeOfParallelism(parameters.MaxParallelism)
                         from p in (from processor in processors
                                    let priority = processor.GetProcessingPriority(file)
                                                   where priority != ProcessingPriority.NotSupported
                                                   group processor by priority into ps
                                                   orderby ps.Key descending
                                                   select ps.ToList()).FirstOrDefault() ?? new List <IDocumentProcessor> {
                null
            }
                         group file by p).ToList();

            var toHandleItems    = files.Where(s => s.Key != null);
            var notToHandleItems = files
                                   .Where(s => s.Key == null)
                                   .SelectMany(s => s)
                                   .Where(s => s.Type != DocumentType.Overwrite &&
                                          !s.File.EndsWith(".yaml.md", StringComparison.OrdinalIgnoreCase) &&
                                          !s.File.EndsWith(".yml.md", StringComparison.OrdinalIgnoreCase))
                                   .ToList();

            if (notToHandleItems.Count > 0)
            {
                Logger.LogWarning(
                    $"Unable to handle following files: {notToHandleItems.Select(s => s.File).ToDelimitedString()}. Do they miss `YamlMime` as the first line of file, e.g.: `### YamlMime:ManagedReference`?",
                    code: WarningCodes.Build.UnknownContentType);
            }

            try
            {
                return((from processor in processors.AsParallel().WithDegreeOfParallelism(parameters.MaxParallelism)
                        join item in toHandleItems.AsParallel() on processor equals item.Key into g
                        from item in g.DefaultIfEmpty()
                        where item != null && item.Any(s => s.Type != DocumentType.Overwrite) // when normal file exists then processing is needed
                        select LoggerPhaseScope.WithScope(
                            processor.Name,
                            LogLevel.Verbose,
                            () => creator.CreateHostService(
                                parameters,
                                templateProcessor,
                                MarkdownService,
                                MetadataValidators,
                                processor,
                                item)
                            )).ToList());
            }
            catch (AggregateException ex)
            {
                throw ex.GetBaseException();
            }
        }
예제 #2
0
        private IEnumerable <HostService> GetInnerContexts(
            DocumentBuildParameters parameters,
            IEnumerable <IDocumentProcessor> processors,
            TemplateProcessor templateProcessor,
            IHostServiceCreator creator)
        {
            var k = from fileItem in (
                from file in parameters.Files.EnumerateFiles()
                from p in (from processor in processors
                           let priority = processor.GetProcessingPriority(file)
                                          where priority != ProcessingPriority.NotSupported
                                          group processor by priority into ps
                                          orderby ps.Key descending
                                          select ps.ToList()).FirstOrDefault() ?? new List <IDocumentProcessor> {
                null
            }
                select new { file, p })
                    group fileItem by fileItem.p;

            var toHandleItems    = k.Where(s => s.Key != null);
            var notToHandleItems = k.Where(s => s.Key == null);

            foreach (var item in notToHandleItems)
            {
                var sb = new StringBuilder();
                sb.AppendLine("Cannot handle following file:");
                foreach (var f in item)
                {
                    sb.Append("\t");
                    sb.AppendLine(f.file.File);
                }
                Logger.LogWarning(sb.ToString());
            }

            foreach (var pair in (from processor in processors
                                  join item in toHandleItems on processor equals item.Key into g
                                  from item in g.DefaultIfEmpty()
                                  select new
            {
                processor,
                item,
            }).AsParallel().WithDegreeOfParallelism(parameters.MaxParallelism))
            {
                using (new LoggerPhaseScope(pair.processor.Name, true))
                {
                    var hostService = creator.CreateHostService(
                        parameters,
                        templateProcessor,
                        MarkdownService,
                        MetadataValidators,
                        pair.processor,
                        pair.item?.Select(f => f.file));
                    yield return(hostService);
                }
            }
        }
예제 #3
0
        private List <HostService> GetInnerContexts(
            DocumentBuildParameters parameters,
            IEnumerable <IDocumentProcessor> processors,
            TemplateProcessor templateProcessor,
            IHostServiceCreator creator)
        {
            var files = (from file in parameters.Files.EnumerateFiles().AsParallel().WithDegreeOfParallelism(parameters.MaxParallelism)
                         from p in (from processor in processors
                                    let priority = processor.GetProcessingPriority(file)
                                                   where priority != ProcessingPriority.NotSupported
                                                   group processor by priority into ps
                                                   orderby ps.Key descending
                                                   select ps.ToList()).FirstOrDefault() ?? new List <IDocumentProcessor> {
                null
            }
                         group file by p).ToList();

            var toHandleItems    = files.Where(s => s.Key != null);
            var notToHandleItems = files.Where(s => s.Key == null);

            foreach (var item in notToHandleItems)
            {
                var sb = new StringBuilder();
                sb.AppendLine("Cannot handle following file:");
                foreach (var f in item)
                {
                    sb.Append("\t");
                    sb.AppendLine(f.File);
                }
                Logger.LogWarning(sb.ToString());
            }

            try
            {
                return((from processor in processors.AsParallel().WithDegreeOfParallelism(parameters.MaxParallelism)
                        join item in toHandleItems.AsParallel() on processor equals item.Key into g
                        from item in g.DefaultIfEmpty()
                        select LoggerPhaseScope.WithScope(
                            processor.Name,
                            LogLevel.Verbose,
                            () => creator.CreateHostService(
                                parameters,
                                templateProcessor,
                                MarkdownService,
                                MetadataValidators,
                                processor,
                                item)
                            )).ToList());
            }
            catch (AggregateException ex)
            {
                throw new DocfxException(ex.InnerException?.Message, ex);
            }
        }
예제 #4
0
        private IEnumerable<HostService> GetInnerContexts(
            DocumentBuildParameters parameters,
            IEnumerable<IDocumentProcessor> processors,
            TemplateProcessor templateProcessor,
            IHostServiceCreator creator)
        {
            var k = from fileItem in (
                    from file in parameters.Files.EnumerateFiles()
                    from p in (from processor in processors
                               let priority = processor.GetProcessingPriority(file)
                               where priority != ProcessingPriority.NotSupported
                               group processor by priority into ps
                               orderby ps.Key descending
                               select ps.ToList()).FirstOrDefault() ?? new List<IDocumentProcessor> { null }
                    select new { file, p })
                    group fileItem by fileItem.p;

            var toHandleItems = k.Where(s => s.Key != null);
            var notToHandleItems = k.Where(s => s.Key == null);
            foreach (var item in notToHandleItems)
            {
                var sb = new StringBuilder();
                sb.AppendLine("Cannot handle following file:");
                foreach (var f in item)
                {
                    sb.Append("\t");
                    sb.AppendLine(f.file.File);
                }
                Logger.LogWarning(sb.ToString());
            }

            foreach (var pair in (from processor in processors
                                  join item in toHandleItems on processor equals item.Key into g
                                  from item in g.DefaultIfEmpty()
                                  select new
                                  {
                                      processor,
                                      item,
                                  }).AsParallel().WithDegreeOfParallelism(parameters.MaxParallelism))
            {
                var hostService = creator.CreateHostService(
                    parameters,
                    templateProcessor,
                    MarkdownService,
                    MetadataValidators,
                    pair.processor,
                    pair.item?.Select(f => f.file));
                yield return hostService;
            }
        }