public void VerifyOverriddenChangesAreUsed()
        {
            var yesterday   = DateTimeOffset.Now.AddDays(-1);
            var twoDaysAgo  = DateTimeOffset.Now.AddDays(-2);
            var badChange   = new DefaultChange(" ", "Added", "WithoutVersion", yesterday);
            var fixedChange = new DefaultChange("0.2.0", badChange.Tag, badChange.Summary, badChange.Date);
            var fineChange  = new DefaultChange("0.1.0", "Removed", "Another Summary", twoDaysAgo);
            var overrides   = new Dictionary <string, IChange>
            {
                { ToSha1String(badChange), fixedChange }
            };
            var changes = new List <IChange>
            {
                badChange,
                fineChange
            };
            var expectedChanges = new List <IChange>
            {
                fixedChange,
                fineChange
            };
            var repoMock   = new Mock <IRepository>();
            var commitLog  = Mock.Of <IQueryableCommitLog>(cl => cl.GetEnumerator() == MockCommitEnumerator(changes));
            var parserMock = new Mock <ICommitParser <IChange> >();

            parserMock.Setup(p => p.Parse(fixedChange)).Returns(fixedChange);
            parserMock.Setup(p => p.Parse(It.IsAny <Commit>())).Returns(fineChange);
            repoMock.Setup(r => r.Commits).Returns(commitLog);

            var reader        = new GitReader <IChange>(repoMock.Object, parserMock.Object, overrides);
            var actualChanges = reader.Values();

            Assert.That(actualChanges, Is.EquivalentTo(expectedChanges));
            repoMock.VerifyAll();
        }
        public void VerifyUnparseableAreSkipped()
        {
            var today      = DateTimeOffset.Now;
            var yesterday  = DateTimeOffset.Now.AddDays(-1);
            var twoDaysAgo = DateTimeOffset.Now.AddDays(-2);
            var changes    = new List <IChange>
            {
                new DefaultChange("0.2.0", " ", "Without tag", today),
                new DefaultChange(" ", "Added", "WithoutVersion", yesterday),
                new DefaultChange("0.1.0", "Removed", "Another Summary", twoDaysAgo)
            };
            var expectedChanges = new List <IChange>
            {
                new DefaultChange("0.1.0", "Removed", "Another Summary", twoDaysAgo)
            };
            var repoMock   = new Mock <IRepository>();
            var commitLog  = Mock.Of <IQueryableCommitLog>(cl => cl.GetEnumerator() == MockCommitEnumerator(changes));
            var parserMock = new Mock <ICommitParser <IChange> >();
            var reader     = new GitReader <IChange>(repoMock.Object, parserMock.Object);

            parserMock.SetupSequence(p => p.Parse(It.IsAny <Commit>()))
            .Returns((IChange)null)
            .Returns((IChange)null)
            .Returns(expectedChanges.First);

            repoMock.Setup(r => r.Commits).Returns(commitLog);
            var actualChanges = reader.Values().ToList();

            Assert.That(actualChanges, Is.EquivalentTo(expectedChanges));
            repoMock.VerifyAll();
        }
示例#3
0
        public void Update()
        {
            if (Origin == null)
            {
                Log.Error("Can`t find project");
                return;
            }

            var branches      = this.GitLabWrapper.GetBranches(Origin).ToList();
            var localBranches = GitReader.GetLocalBranches();

            Branches = branches.Where(x => !x.Protected && localBranches.Any(local => local.FriendlyName == x.Name))
                       .Select(x => new BranchViewModel(GitLabWrapper, this, x.Name)).ToList();
        }
        public void VerifyReaderReadsFromRepository()
        {
            var expectedChanges = new List <IChange>
            {
                new DefaultChange("0.2.0", "Added", "Some Summary", DateTimeOffset.Now),
                new DefaultChange("0.1.0", "Removed", "Another Summary", DateTimeOffset.Now.AddDays(-1))
            };
            var repoMock   = new Mock <IRepository>();
            var commitLog  = Mock.Of <IQueryableCommitLog>(cl => cl.GetEnumerator() == MockCommitEnumerator(expectedChanges));
            var parserMock = new Mock <ICommitParser <IChange> >();
            var reader     = new GitReader <IChange>(repoMock.Object, parserMock.Object);

            repoMock.Setup(r => r.Commits).Returns(commitLog);
            foreach (var expectedChange in expectedChanges)
            {
                parserMock.Setup(p => p.Parse(It.Is <Commit>(c => c.Id.Sha == ToSha1String(expectedChange)))).Returns(expectedChange);
            }

            Assert.That(reader.Values(), Is.EquivalentTo(expectedChanges));
            repoMock.VerifyAll();
        }
示例#5
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);
            }
        }