示例#1
0
        static void RunOptions(Options o)
        {
            ValidateOptions(o);
            if (HaveError)
            {
                return;
            }

            var fileReaderStrategy = new FileReaderStrategy();
            var alphaFileReader    = new AlphaFileReader(fileReaderStrategy);
            var alphaFileWriter    = new AlphaFileWriter();

            if (o.GoodFiles.Any())
            {
                Console.WriteLine();
                Console.WriteLine("Reading good trace files");
                var data   = alphaFileReader.ParseFolders(o.GoodFiles);
                var result = TraceProcessor.ProcessAlphaTrace(data, o.PercentageToKeep, o.Rise);
                alphaFileWriter.WriteGoodFile(result);
            }

            if (o.BadFiles.Any())
            {
                Console.WriteLine();
                Console.WriteLine("Reading bad trace files");
                var data = alphaFileReader.ParseFolders(o.BadFiles);
                var bad  = TraceProcessor.ProcessAlphaTrace(data, o.PercentageToKeep, o.Rise);

                Console.WriteLine();
                Console.WriteLine("Read in good trace file to calculate delta");
                var good = alphaFileReader.ReadGoodFile();
                if (good != null)
                {
                    var adjustedBad = TraceProcessor.AdjustBadSteadyStateToGoodStateState(good[0], bad);
                    alphaFileWriter.WriteBadFile(adjustedBad);

                    var delta = TraceProcessor.CalculateDelta(good.ToList(), adjustedBad);
                    if (delta != null)
                    {
                        alphaFileWriter.WriteDeltaFile(delta);
                    }
                }
            }

            if (o.TraceFiles.Any() && !string.IsNullOrEmpty(o.OutputFolder))
            {
                Console.WriteLine();
                Console.WriteLine("Reading trace files");
                var delta            = alphaFileReader.ReadDeltaFile();
                var processTraceFile = new ProcessTraceFile(fileReaderStrategy, delta);
                processTraceFile.Process(o.OutputFolder, o.TraceFiles);
            }
        }
示例#2
0
        private static void CreateCoreTTInclude(string generatorRoot, string ttRoot)
        {
            string header1 = @"<#
// Copyright (C) Simon Hughes 2012
" + "// v" + _version + @"
// If you want to submit a pull request, please modify the Generator C# project as this file
// is automatically constructed from the C# Generator project during the build process.
#>
<#@ template debug=""true"" hostspecific=""true"" language=""C#"" #>
<#@ include file=""EF6.Utility.CS.ttinclude""#><#@ assembly name=""System.Configuration"" #>
<#@ assembly name=""System.Windows.Forms"" #>
<#@ import namespace=""System.Data.Entity.Infrastructure.Pluralization"" #>";

            const string header2 = @"<#@ import namespace=""EnvDTE"" #>
<#@ import namespace=""Microsoft.VisualStudio.TextTemplating"" #>
<#@ output extension="".cs"" encoding=""utf-8"" #>
<#
        var DefaultNamespace = new CodeGenerationTools(this).VsNamespaceSuggestion() ?? ""DebugMode"";
        Settings.Root = Host.ResolvePath(string.Empty);
        Settings.TemplateFile = Path.GetFileNameWithoutExtension(DynamicTextTransformation.Create(this).Host.TemplateFile);
#><#+";

            const string footer             = @"
    public static void ArgumentNotNull<T>(T arg, string name) where T : class
    {
        if (arg == null)
        {
            throw new ArgumentNullException(name);
        }
    }
#>";
            var          fileReaderStrategy = new FileReaderStrategy();

            string[] ignoreFolders = { "\\bin", "\\obj" };
            string[] ignoreFiles   =
            {
                "AssemblyInfo.cs",
                "EntityFrameworkTemplateFileManager.cs",
                "GeneratedTextTransformation.cs",

                "GlobalSuppressions.cs", // Resharper
            };
            var filesToListFirst = new List <KeyValuePair <int, string> >
            {
                new KeyValuePair <int, string>(1, "Settings.cs"),
                new KeyValuePair <int, string>(2, "FilterSettings.cs"),
                new KeyValuePair <int, string>(3, "SingleContextFilter.cs")
            };
            var files = Directory
                        .GetFiles(generatorRoot, "*.cs", SearchOption.AllDirectories)
                        .OrderBy(x => x)
                        .ToList();

            var filesToListFirstReaders = new List <KeyValuePair <int, IFileReader> >();
            var remainingFileReaders    = new List <IFileReader>();

            foreach (var file in files)
            {
                var skip      = false;
                var listFirst = false;
                var path      = Path.GetDirectoryName(file);
                var filename  = Path.GetFileName(file);

                foreach (var ignore in ignoreFolders)
                {
                    if (path.Contains(ignore))
                    {
                        skip = true;
                    }
                }
                if (skip)
                {
                    continue;
                }

                foreach (var ignore in ignoreFiles)
                {
                    if (filename == ignore)
                    {
                        skip = true;
                    }
                }
                if (skip)
                {
                    continue;
                }

                var order = 0;
                foreach (var fileToListFirst in filesToListFirst)
                {
                    if (filename == fileToListFirst.Value)
                    {
                        listFirst = true;
                        order     = fileToListFirst.Key;
                    }
                }

                var fileReader = new FileReader(fileReaderStrategy);
                if (fileReader.ReadFile(file))
                {
                    if (listFirst)
                    {
                        filesToListFirstReaders.Add(new KeyValuePair <int, IFileReader>(order, fileReader));
                    }
                    else
                    {
                        remainingFileReaders.Add(fileReader);
                    }
                }
            }

            var fileReaders = new List <IFileReader>();

            fileReaders.AddRange(filesToListFirstReaders.OrderBy(x => x.Key).Select(x => x.Value));
            fileReaders.AddRange(remainingFileReaders);

            using (var tt = File.CreateText(Path.Combine(ttRoot, "EF.Reverse.POCO.v3.ttinclude")))
            {
                var writerStrategy = new TTWriterStrategy();
                var writer         = new FileWriter(tt, writerStrategy, fileReaders);

                tt.WriteLine(header1);
                writer.WriteUsings();
                tt.WriteLine(header2);
                writer.WriteCode();
                tt.WriteLine(footer);
            }
        }