private void ExecuteOutputGenerationPostActions(TempGenerationResult result)
        {
            var postActions = PostactionFactory.FindOutputGenerationPostActions(result);

            foreach (var postAction in postActions)
            {
                postAction.Execute();
            }
        }
        private TempGenerationResult CompareTempGenerationWithProject()
        {
            var parentGenerationOutputPath = Directory.GetParent(GenContext.Current.GenerationOutputPath).FullName;
            var parentDestinationPath      = Directory.GetParent(GenContext.Current.DestinationPath).FullName;
            var result = new TempGenerationResult();
            var files  = Directory
                         .EnumerateFiles(parentGenerationOutputPath, "*", SearchOption.AllDirectories)
                         .Where(f => !Regex.IsMatch(f, MergeConfiguration.PostactionRegex) && !Regex.IsMatch(f, MergeConfiguration.FailedPostactionRegex))
                         .ToList();

            foreach (var file in files)
            {
                var destFilePath = file.GetDestinationPath();
                var fileName     = file.GetPathRelativeToGenerationParentPath();

                var projectFileName = Path.GetFullPath(Path.Combine(parentDestinationPath, fileName));

                if (File.Exists(projectFileName))
                {
                    if (GenContext.Current.MergeFilesFromProject.ContainsKey(fileName))
                    {
                        if (FilesAreEqual(file, destFilePath))
                        {
                            if (!GenContext.Current.FailedMergePostActions.Any(g => g.FileName == fileName))
                            {
                                GenContext.Current.MergeFilesFromProject.Remove(fileName);
                                result.UnchangedFiles.Add(fileName);
                            }
                        }
                        else
                        {
                            result.ModifiedFiles.Add(fileName);
                        }
                    }
                    else
                    {
                        if (FilesAreEqual(file, destFilePath))
                        {
                            result.UnchangedFiles.Add(fileName);
                        }
                        else
                        {
                            result.ConflictingFiles.Add(fileName);
                        }
                    }
                }
                else
                {
                    result.NewFiles.Add(fileName);
                }
            }

            return(result);
        }