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); }