Ejemplo n.º 1
0
        public void VerifyParsesWithoutProject()
        {
            var expectedChange = new ProjectChange("Unused", new ChangeVersion("Unreleased"), "Added", "Some Summary", DateTimeOffset.Now);
            var parser         = new ProjectCommitParser(_defaultParsingConfig);

            var actual = parser.Parse(MockCommit(expectedChange, "", expectedChange.Version));

            Assert.That(actual, Is.Null);
        }
Ejemplo n.º 2
0
        public void VerifyPropagatesNullFromBase()
        {
            var expectedChange = new ProjectChange("MyProj", new ChangeVersion("Unreleased"), "Added", "Some Summary", DateTimeOffset.Now);
            var parser         = new ProjectCommitParser(_defaultParsingConfig);

            var actual = parser.Parse(MockCommit(expectedChange, expectedChange.Project));

            Assert.That(actual, Is.Null);
        }
        public void VerifyParsesWithProject()
        {
            var expectedChange = new ProjectChange("MyProj", "Unreleased", "Added", "Some Summary", DateTimeOffset.Now);
            var parser         = new ProjectCommitParser(_defaultPatterns);

            var actual = parser.Parse(MockCommit(expectedChange, expectedChange.Project, expectedChange.Version));

            Assert.That(actual, Is.EqualTo(expectedChange));
        }
Ejemplo n.º 4
0
        static void Main(string[] args)
        {
            try
            {
                var configBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
                Parser.Default.ParseArguments <Options>(args)
                .WithParsed(options =>
                {
                    var additionalSettings = new List <KeyValuePair <string, string> >();

                    if (!string.IsNullOrEmpty(options.CustomSettingsPath))
                    {
                        configBuilder.AddJsonFile(options.CustomSettingsPath);
                    }

                    if (!string.IsNullOrEmpty(options.CustomTemplatePath))
                    {
                        additionalSettings.Add(new KeyValuePair <string, string>("Template", options.CustomTemplatePath));
                    }

                    if (!string.IsNullOrEmpty(options.ChangeTypesToExclude))
                    {
                        additionalSettings.Add(new KeyValuePair <string, string>("ChangeTypesToExclude", options.ChangeTypesToExclude));
                    }

                    if (!string.IsNullOrEmpty(options.MinVersion))
                    {
                        additionalSettings.Add(new KeyValuePair <string, string>("MinVersion", options.MinVersion));
                    }

                    if (!string.IsNullOrEmpty(options.RepositoryPath))
                    {
                        additionalSettings.Add(new KeyValuePair <string, string>("Repository:Path", options.RepositoryPath));
                    }

                    if (!string.IsNullOrEmpty(options.FileSourcePath))
                    {
                        additionalSettings.Add(new KeyValuePair <string, string>("FileSource", options.FileSourcePath));
                    }

                    configBuilder.AddInMemoryCollection(additionalSettings);
                });

                var config    = TryOrExit(() => configBuilder.Build(), "Failed to build configuration");
                var appConfig = config.Get <AppConfig>();

                var template             = GetTemplate(appConfig.Template);
                var repo                 = TryOrExit(() => new Repository(appConfig.Repository.Path), "Failed to initialize repository");
                var idToOverrideChange   = new Dictionary <string, IChange>();
                var changeTypesToExclude = appConfig.ChangeTypesToExclude.Split(",");
                var renderer             = new StubbleBuilder().Build();
                var minVersion           = string.IsNullOrEmpty(appConfig.MinVersion) ? null : new ChangeVersion(appConfig.MinVersion);

                if (appConfig.MultiProject)
                {
                    var readers           = new List <IGenericReader <ProjectChange> >();
                    var idToProjectChange = new Dictionary <string, ProjectChange>();
                    if (!string.IsNullOrEmpty(appConfig.FileSource))
                    {
                        var fileReader = new FileReader <ProjectChange>(appConfig.FileSource, new ProjectFileSourceRowParser(Console.Error));
                        readers.Add(fileReader);
                    }
                    if (!string.IsNullOrEmpty(appConfig.Repository.OverrideSource))
                    {
                        var overrideFileReader = new FileReader <OverrideProjectChange>(appConfig.Repository.OverrideSource, new OverrideProjectSourceRowParser(Console.Error));
                        readers.Add(overrideFileReader);
                        idToProjectChange = overrideFileReader.Values().ToDictionary <OverrideProjectChange, string, ProjectChange>(change => change.Id, change => change);
                    }
                    var parser    = new ProjectCommitParser(appConfig.Parsing);
                    var gitReader = new GitReader <ProjectChange>(repo, parser, idToProjectChange);
                    readers.Add(gitReader);

                    var generator       = new ProjectChangelogGenerator(readers, template, renderer);
                    var projectToOutput = generator.Generate(minVersion, changeTypesToExclude);

                    foreach (var(project, output) in projectToOutput)
                    {
                        File.WriteAllText($@"{project}-changelog.md", output);
                    }
                }
                else
                {
                    var readers = new List <IGenericReader <IChange> >();

                    if (!string.IsNullOrEmpty(appConfig.FileSource))
                    {
                        var fileReader = new FileReader <DefaultChange>(appConfig.FileSource, new DefaultFileSourceRowParser(Console.Error));
                        readers.Add(fileReader);
                    }

                    if (!string.IsNullOrEmpty(appConfig.Repository.OverrideSource))
                    {
                        var overrideFileReader = new FileReader <OverrideChange>(appConfig.Repository.OverrideSource, new OverrideSourceRowParser(Console.Error));
                        idToOverrideChange = overrideFileReader.Values().ToDictionary <OverrideChange, string, IChange>(change => change.Id, change => change);
                    }
                    Dictionary <string, string> commitShaToTagName = null;
                    if (UsesTagAsSource(appConfig.Parsing))
                    {
                        commitShaToTagName = new Dictionary <string, string>();
                        foreach (var tag in repo.Tags)
                        {
                            commitShaToTagName.Add(tag.Target.Sha, tag.FriendlyName);
                        }
                    }
                    var commitParser = new DefaultCommitParser(appConfig.Parsing, commitShaToTagName);
                    var gitReader    = new GitReader <IChange>(repo, commitParser, idToOverrideChange);
                    readers.Add(gitReader);

                    var cache     = new ChangeCache();
                    var generator = new StringChangelogGenerator(readers, cache, template, renderer);
                    var output    = generator.Generate(minVersion, changeTypesToExclude);
                    File.WriteAllText(@"changelog.md", output);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"{e.Message}");
                Environment.Exit(-1);
            }
        }