Exemple #1
0
        public override bool OnNext()
        {
            bool   compressData = compressCheckBox.IsChecked == true;
            string path;

            if (!AskForFolder(out path))
            {
                return(false);
            }
            if (compressData)
            {
                path += ".zip";
            }
            Storage    storage    = StorageFactory.Create(path, compressData);
            OutputType outputType = controlToOutputTypeCache.First(
                entry => entry.Key.IsChecked == true).Value;

            Context.OutputWriter = OutputWriterFactory.Create(
                outputType, storage);
            Context.GroupingStrategy = CreateGroupingStrategy();
            Context.UseNicknames     = useNicknamesCheckBox.IsChecked == true;
            Context.UseDateFilter    = dateFilterCheckBox.IsChecked == true;
            if (Context.UseDateFilter)
            {
                if (!SetDateFilter())
                {
                    Logger.Info("Invalid date filter: filter1 is {0}, filter2 is {1}",
                                dateFilter1.SelectedDate, dateFilter2.SelectedDate);
                    return(false);
                }
            }
            return(true);
        }
 /**
  * Makes an output writer.
  */
 private OutputWriter MakeOutputWriter(CompilerArguments arguments, string file, string configFilePath)
 {
     return(OutputWriterFactory.Make(
                arguments,
                NormaliseFilePath(configFilePath, file),
                new OutputFileStreamFactory()
                ));
 }
        public OutputWriterTest()
        {
            var arguments = CompilerArgumentsFactory.Make();

            arguments.StripComments = true;
            outputMock = new Mock <TextWriter>();
            writer     = OutputWriterFactory.Make(
                arguments,
                "file.txt",
                new MockOutputStreamFactory(outputMock.Object)
                );
        }
Exemple #4
0
        private static int Main(string[] args)
        {
            var providers = new AssemblyProviderFactoryCollection(
                new AssemblyProviderFactory(),
                new DirectoryAssemblyProviderFactory(),
                new NuGetAssemblyProviderFactory(new Providers.NuGet.NuGet()),
                new PreviousNuGetAssemblyProviderFactory(new PreviousNugetLocator()),
                new GitHubAssemblyProviderFactory(new Git(Environment.GetEnvironmentVariable("GIT")))
                );

            var exporters = new ExporterCollection(
                new XmlExporter(),
                new MarkdownExporter(),
                new AsciiDocExporter(),
                new GitHubActionCommentExporter()
                );

            var options = new OptionSet
            {
                { "t|target=", "the assembly targets. Defaults to *all* assemblies located by the provider", AddTarget },
                { "f|format=", $"the format of the diff output. Supported formats are {exporters.SupportedFormats}. Defaults to {_format}", f => _format = f },
                { "o|output=", "the output directory or file name. If not specified only prints to console", o => _output = new OutputWriterFactory(o) },
                { "p|prevent-change=", "Fail if the change detected is higher then specified: none|patch|minor|major. Defaults to `none` which will never fail.",
                  c => _preventChange = Enum.Parse <SuggestedVersionChange>(c, true) },
                { "a|allow-empty-previous-nuget=", "",
                  n => _allowEmptyPreviousNuget = n != null },
                { "h|?|help", "show this message and exit", h => _help = h != null },
            };

            if (_help)
            {
                ShowHelp(options, providers);
                return(2);
            }


            if (args.Length < 2)
            {
                ShowHelp(options, providers);
                return(2);
            }

            List <string> unflaggedArgs;

            try
            {
                unflaggedArgs = options.Parse(args);
            }
            catch (OptionException e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("Try 'Differ.exe --help' for more information.");
                Environment.ExitCode = 1;
                return(2);
            }

            try
            {
                var firstProvider      = providers.GetProvider(unflaggedArgs[0]);
                var secondProvider     = providers.GetProvider(unflaggedArgs[1]);
                var firstProviderName  = providers.GetProviderName(unflaggedArgs[0]);
                var secondProviderName = providers.GetProviderName(unflaggedArgs[1]);

                if (!exporters.Contains(_format))
                {
                    throw new Exception($"No exporter for format '{_format}'");
                }

                var exporter = exporters[_format];

                var first  = firstProvider.GetAssemblies(Targets).ToList();
                var second = secondProvider.GetAssemblies(Targets).ToList();
                var pairs  = CreateAssemblyPairs(first, second).ToList();

                if (!pairs.Any())
                {
                    if (_allowEmptyPreviousNuget &&
                        (firstProviderName == "previous-nuget" || secondProviderName == "previous-nuget"))
                    {
                        Console.WriteLine($"[diff] No previous nuget found for: {firstProviderName}");
                        Console.WriteLine($"[diff]   {firstProvider.GetType().Name}: {first.Count()} assemblies");
                        Console.WriteLine($"[diff]   {secondProvider.GetType().Name}: {second.Count()} assemblies");
                        Console.WriteLine($"[diff]");
                        Console.WriteLine($"[diff]   NOT treated as an error because --allow-empty-previous-nuget was set");
                        return(0);
                    }

                    Console.Error.WriteLine($"[diff] Unable to create diff!");
                    Console.Error.WriteLine($"[diff]   {firstProvider.GetType().Name}: {first.Count()} assemblies");
                    Console.Error.WriteLine($"[diff]   {secondProvider.GetType().Name}: {second.Count()} assemblies");
                    return(1);
                }

                var result = new AllComparisonResults(pairs, _preventChange);
                foreach (var assemblyPair in pairs)
                {
                    assemblyPair.Diff =
                        APIDiffHelper.GetAPIDifferences(assemblyPair.First.FullName, assemblyPair.Second.FullName);

                    if (assemblyPair.Diff == null)
                    {
                        Console.WriteLine($"[diff] No diff between {assemblyPair.First.FullName} and {assemblyPair.Second.FullName}");
                        continue;
                    }
                    Console.WriteLine($"[diff] Difference found: {firstProvider.GetType().Name}:{assemblyPair.First.Name} and {secondProvider.GetType().Name}:{assemblyPair.Second.Name}");

                    if (exporter is IAssemblyComparisonExporter c)
                    {
                        c.Export(assemblyPair, _output);
                    }
                }
                if (exporter is IAllComparisonResultsExporter allExporter)
                {
                    allExporter.Export(result, _output);
                }

                if (_preventChange > SuggestedVersionChange.None && result.SuggestedVersionChange >= _preventChange)
                {
                    Console.Error.WriteLine($"[diff] Needed version change '{result.SuggestedVersionChange}' exceeds or equals configured lock: '{_preventChange}");
                    return(4);
                }
                Console.WriteLine($"[diff] Suggested version change: {result.SuggestedVersionChange}");
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e);
                return(1);
            }
            return(0);
        }