コード例 #1
0
        ProcessModifiedFiles(ICollection <string> modifiedFiles, ILogger logger)
        {
            if (!modifiedFiles.Any())
            {
                return(
                    Enumerable.Empty <CodeFragment>(),
                    Enumerable.Empty <CodeFragment>(),
                    Enumerable.Empty <CodeFragment>()
                    );
            }

            var fragmentsToAdd    = new List <CodeFragment>();
            var fragmentsToModify = new List <CodeFragment>();
            var fragmentsToRemove = new List <CodeFragment>();

            var codeConverter = new CodeConverter();

            foreach (var filePath in modifiedFiles)
            {
                var oldCodeFile = await _codeFileRepository.GetAsync(filePath);

                var newCodeFile = await _githubService.GetCodeFileAsync(filePath);

                await _codeFileRepository.StoreAsync(newCodeFile);

                if (oldCodeFile == null)
                {
                    logger.LogWarning(
                        $"Trying to modify code file {filePath} might result in inconsistent content " +
                        "in KC because there is no known previous version of the code file.");

                    fragmentsToAdd.AddRange(newCodeFile.CodeFragments);
                }
                else
                {
                    var(newFragments, modifiedFragments, removedFragments) =
                        codeConverter.CompareFragmentLists(oldCodeFile.CodeFragments, newCodeFile.CodeFragments);

                    fragmentsToAdd.AddRange(newFragments);
                    fragmentsToModify.AddRange(modifiedFragments);
                    fragmentsToRemove.AddRange(removedFragments);
                }
            }

            return(fragmentsToAdd, fragmentsToModify, fragmentsToRemove);
        }