예제 #1
0
    public void GivenARemoteGitRepositoryWithCommitsAndBranches_ThenClonedLocalShouldMatchRemoteVersion()
    {
        using (var fixture = new RemoteRepositoryFixture(
            path =>
            {
                Repository.Init(path);
                Console.WriteLine("Created git repository at '{0}'", path);

                var repo = new Repository(path);
                repo.MakeCommits(5);

                repo.CreateBranch("develop");
                repo.CreateBranch("release-1.0");

                repo.Checkout("release-1.0");
                repo.MakeCommits(5);

                return repo;
            }))
        {
            GitRepositoryHelper.NormalizeGitDirectory(fixture.LocalRepositoryFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: string.Empty);

            fixture.AssertFullSemver("1.0.0-beta.1+5");
            fixture.AssertFullSemver("1.0.0-beta.1+5", fixture.LocalRepositoryFixture.Repository);
        }
    }
예제 #2
0
    public void CalculateVersionVariables_TwoBranchHasSameCommitHeadDetachedAndTagged_ReturnSemver()
    {
        // Setup
        using var fixture = new RemoteRepositoryFixture();
        fixture.LocalRepositoryFixture.Repository.MakeACommit("Init commit");
        fixture.LocalRepositoryFixture.Repository.CreateBranch("feature/1.0");
        fixture.LocalRepositoryFixture.Checkout("feature/1.0");
        var commit = fixture.LocalRepositoryFixture.Repository.MakeACommit("feat: a new commit");

        fixture.LocalRepositoryFixture.Repository.CreateBranch("support/1.0");
        fixture.LocalRepositoryFixture.ApplyTag("1.0.1");
        fixture.LocalRepositoryFixture.Checkout(commit.Sha);

        using var worktreeFixture = new LocalRepositoryFixture(new Repository(fixture.LocalRepositoryFixture.RepositoryPath));
        var gitVersionOptions = new GitVersionOptions {
            WorkingDirectory = worktreeFixture.RepositoryPath
        };

        var environment = new TestEnvironment();

        environment.SetEnvironmentVariable(AzurePipelines.EnvironmentVariableName, "true");

        this.sp = GetServiceProvider(gitVersionOptions, environment: environment);
        var sut = sp.GetRequiredService <IGitVersionCalculateTool>();

        // Execute
        var version = sut.CalculateVersionVariables();

        // Verify
        version.SemVer.ShouldBe("1.0.1");
        var commits = worktreeFixture.Repository.Head.Commits;

        version.Sha.ShouldBe(commits.First().Sha);
    }
    public void GivenARemoteGitRepositoryWithCommitsAndBranches_ThenClonedLocalShouldMatchRemoteVersion()
    {
        using (var fixture = new RemoteRepositoryFixture(
                   path =>
        {
            Repository.Init(path);
            Console.WriteLine("Created git repository at '{0}'", path);

            var repo = new Repository(path);
            repo.MakeCommits(5);

            repo.CreateBranch("develop");
            repo.CreateBranch("release-1.0");

            Commands.Checkout(repo, "release-1.0");
            repo.MakeCommits(5);

            return(repo);
        }))
        {
            GitRepositoryHelper.NormalizeGitDirectory(fixture.LocalRepositoryFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: string.Empty);

            fixture.AssertFullSemver("1.0.0-beta.1+5");
            fixture.AssertFullSemver("1.0.0-beta.1+5", fixture.LocalRepositoryFixture.Repository);
        }
    }
예제 #4
0
    public void CalculateVersionVariables_TwoBranchHasSameCommitHeadDetachedAndNotTagged_ThrowException()
    {
        // Setup
        using var fixture = new RemoteRepositoryFixture();
        fixture.LocalRepositoryFixture.Repository.MakeACommit("Init commit");
        fixture.LocalRepositoryFixture.Repository.CreateBranch("feature/1.0");
        fixture.LocalRepositoryFixture.Checkout("feature/1.0");
        var commit = fixture.LocalRepositoryFixture.Repository.MakeACommit("feat: a new commit");

        fixture.LocalRepositoryFixture.Repository.CreateBranch("support/1.0");
        fixture.LocalRepositoryFixture.Checkout(commit.Sha);

        using var worktreeFixture = new LocalRepositoryFixture(new Repository(fixture.LocalRepositoryFixture.RepositoryPath));
        var gitVersionOptions = new GitVersionOptions {
            WorkingDirectory = worktreeFixture.RepositoryPath
        };

        var environment = new TestEnvironment();

        environment.SetEnvironmentVariable(AzurePipelines.EnvironmentVariableName, "true");

        this.sp = GetServiceProvider(gitVersionOptions, environment: environment);
        var sut = sp.GetRequiredService <IGitVersionCalculateTool>();

        // Execute & Verify
        var exception = Assert.Throws <WarningException>(() => sut.CalculateVersionVariables());

        exception?.Message.ShouldBe("Failed to try and guess branch to use. Move one of the branches along a commit to remove warning");
    }
    public void GivenARemoteGitRepositoryWithCommitsAndBranches_ThenClonedLocalShouldMatchRemoteVersion()
    {
        using (var fixture = new RemoteRepositoryFixture(
                   path =>
        {
            Repository.Init(path);
            Console.WriteLine("Created git repository at '{0}'", path);

            var repo = new Repository(path);
            repo.MakeCommits(5);

            repo.CreateBranch("develop");
            repo.CreateBranch("release-1.0");

            repo.Checkout("release-1.0");
            repo.MakeCommits(5);

            return(repo);
        },
                   new Config()))
        {
            fixture.AssertFullSemver("1.0.0-beta.1+5");
            fixture.AssertFullSemver("1.0.0-beta.1+5", fixture.LocalRepository);
        }
    }
    public void GivenARemoteGitRepositoryWithCommitsAndBranches_ThenClonedLocalShouldMatchRemoteVersion()
    {
        using (var fixture = new RemoteRepositoryFixture(
            path =>
            {
                Repository.Init(path);
                Console.WriteLine("Created git repository at '{0}'", path);

                var repo = new Repository(path);
                repo.MakeCommits(5);

                repo.CreateBranch("develop");
                repo.CreateBranch("release-1.0");

                repo.Checkout("release-1.0");
                repo.MakeCommits(5);

                return repo;
            },
            new Config()))
        {
            fixture.AssertFullSemver("1.0.0-beta.1+5");
            fixture.AssertFullSemver("1.0.0-beta.1+5", fixture.LocalRepository);
        }
    }
    public void BeingOnBuildServerWithOutputJsonAndOutputFileDoesNotFail(string outputFile, string fileName)
    {
        using var fixture = new RemoteRepositoryFixture();
        fixture.Repository.MakeATaggedCommit("1.2.3");
        fixture.Repository.MakeACommit();

        var env = new KeyValuePair <string, string>(TeamCity.EnvironmentVariableName, "8.0.0");

        var result = GitVersionHelper.ExecuteIn(fixture.LocalRepositoryFixture.RepositoryPath, arguments: $" /output json /output buildserver /output file /outputfile {outputFile}", environments: env);

        result.ExitCode.ShouldBe(0);
        const string version = "0.1.0+4";

        result.Output.ShouldContain($"##teamcity[buildNumber '{version}']");
        result.OutputVariables.ShouldNotBeNull();
        result.OutputVariables.FullSemVer.ShouldBeEquivalentTo(version);

        var filePath = Path.Combine(fixture.LocalRepositoryFixture.RepositoryPath, fileName);
        var json     = File.ReadAllText(filePath);

        var outputVariables = VersionVariables.FromJson(json);

        outputVariables.ShouldNotBeNull();
        outputVariables.FullSemVer.ShouldBeEquivalentTo(version);
    }
        public void GivenARemoteGitRepositoryWhenCheckingOutDetachedheadUsingTrackingBranchOnlyBehaviourShouldReturnVersion014Plus5()
        {
            using var fixture = new RemoteRepositoryFixture();
            Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Head.Tip);

            fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepositoryFixture.Repository);
        }
 public void GivenARemoteGitRepositoryWithCommits_ThenClonedLocalShouldMatchRemoteVersion()
 {
     using (var fixture = new RemoteRepositoryFixture())
     {
         fixture.AssertFullSemver("0.1.0+4");
         fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepositoryFixture.Repository);
     }
 }
 public void GivenARemoteGitRepositoryWithCommits_ThenClonedLocalShouldMatchRemoteVersion()
 {
     using (var fixture = new RemoteRepositoryFixture(new Config()))
     {
         fixture.AssertFullSemver("0.1.0+4");
         fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepository);
     }
 }
    public void GivenARemoteGitRepositoryWhenCheckingOutDetachedhead_UsingTrackingBranchOnlyBehaviourShouldReturnVersion_0_1_4plus5()
    {
        using (var fixture = new RemoteRepositoryFixture(new Config()))
        {
            fixture.LocalRepository.Checkout(fixture.LocalRepository.Head.Tip);

            fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepository);
        }
    }
예제 #12
0
    public void GivenARemoteGitRepositoryWhenCheckingOutDetachedhead_UsingTrackingBranchOnlyBehaviourShouldReturnVersion_0_1_4plus5()
    {
        using (var fixture = new RemoteRepositoryFixture())
        {
            fixture.LocalRepositoryFixture.Repository.Checkout(fixture.LocalRepositoryFixture.Repository.Head.Tip);

            fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepositoryFixture.Repository);
        }
    }
    public void GivenARemoteGitRepositoryWhenCheckingOutDetachedhead_UsingExistingImplementationThrowsException()
    {
        using (var fixture = new RemoteRepositoryFixture(new Config()))
        {
            fixture.IsForTrackedBranchOnly = false;
            fixture.LocalRepository.Checkout(fixture.LocalRepository.Head.Tip);

            Assert.Throws<WarningException>(() => fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepository), "It looks like the branch being examined is a detached Head pointing to commit '{0}'. Without a proper branch name GitVersion cannot determine the build version.", fixture.LocalRepository.Head.Tip.Id.ToString(7));
        }
    }
    public void GivenARemoteGitRepositoryWhenCheckingOutDetachedhead_UsingExistingImplementationThrowsException()
    {
        using (var fixture = new RemoteRepositoryFixture(new Config()))
        {
            fixture.IsForTrackedBranchOnly = false;
            fixture.LocalRepository.Checkout(fixture.LocalRepository.Head.Tip);

            Assert.Throws <WarningException>(() => fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepository), "It looks like the branch being examined is a detached Head pointing to commit '{0}'. Without a proper branch name GitVersion cannot determine the build version.", fixture.LocalRepository.Head.Tip.Id.ToString(7));
        }
    }
        public void GivenARemoteGitRepositoryWhenCheckingOutDetachedheadUsingExistingImplementationThrowsException()
        {
            using var fixture = new RemoteRepositoryFixture();
            Commands.Checkout(
                fixture.LocalRepositoryFixture.Repository,
                fixture.LocalRepositoryFixture.Repository.Head.Tip);

            Should.Throw <WarningException>(() => fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepositoryFixture.Repository, onlyTrackedBranches: false),
                                            $"It looks like the branch being examined is a detached Head pointing to commit '{fixture.LocalRepositoryFixture.Repository.Head.Tip.Id.ToString(7)}'. Without a proper branch name GitVersion cannot determine the build version.");
        }
예제 #16
0
        public void TakesVersionFromNameOfRemoteReleaseBranchInOrigin()
        {
            using var fixture = new RemoteRepositoryFixture();
            fixture.BranchTo("release/2.0.0");
            fixture.MakeACommit();
            Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, new string[0], new FetchOptions(), null);

            fixture.LocalRepositoryFixture.Checkout("origin/release/2.0.0");

            fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0-beta.1+1");
        }
    public void TakesVersionFromNameOfRemoteReleaseBranchInOrigin()
    {
        using var fixture = new RemoteRepositoryFixture();
        fixture.BranchTo("release/2.0.0");
        fixture.MakeACommit();
        Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty <string>(), new FetchOptions(), null);

        fixture.LocalRepositoryFixture.MergeNoFF("origin/release/2.0.0");

        fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0+0");
    }
 public void GivenARemoteGitRepositoryAheadOfLocalRepository_ThenChangesShouldPull()
 {
     using (var fixture = new RemoteRepositoryFixture(new Config()))
     {
         fixture.Repository.MakeACommit();
         fixture.AssertFullSemver("0.1.0+5");
         fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepository);
         fixture.LocalRepository.Network.Pull(fixture.LocalRepository.Config.BuildSignature(new DateTimeOffset(DateTime.Now)), new PullOptions());
         fixture.AssertFullSemver("0.1.0+5", fixture.LocalRepository);
     }
 }
    public void GivenARemoteGitRepositoryWithCommitsAndBranchesThenClonedLocalShouldMatchRemoteVersion()
    {
        const string targetBranch = "release-1.0";

        using var fixture = new RemoteRepositoryFixture(
                  path =>
        {
            Repository.Init(path);
            Console.WriteLine("Created git repository at '{0}'", path);

            var repo = new Repository(path);
            repo.MakeCommits(5);

            repo.CreateBranch("develop");
            repo.CreateBranch(targetBranch);

            Commands.Checkout(repo, targetBranch);
            repo.MakeCommits(5);

            return(repo);
        });

        var gitVersionOptions = new GitVersionOptions
        {
            WorkingDirectory = fixture.LocalRepositoryFixture.RepositoryPath,
            RepositoryInfo   =
            {
                TargetBranch = targetBranch
            },

            Settings =
            {
                NoNormalize = false,
                NoFetch     = false
            }
        };
        var options     = Options.Create(gitVersionOptions);
        var environment = new TestEnvironment();

        environment.SetEnvironmentVariable(AzurePipelines.EnvironmentVariableName, "true");

        var sp = ConfigureServices(services =>
        {
            services.AddSingleton(options);
            services.AddSingleton <IEnvironment>(environment);
        });

        var gitPreparer = sp.GetRequiredService <IGitPreparer>();

        gitPreparer.Prepare();

        fixture.AssertFullSemver("1.0.0-beta.1+5");
        fixture.AssertFullSemver("1.0.0-beta.1+5", repository: fixture.LocalRepositoryFixture.Repository);
    }
        public void GivenARemoteGitRepositoryAheadOfLocalRepositoryThenChangesShouldPull()
        {
            using var fixture = new RemoteRepositoryFixture();
            fixture.Repository.MakeACommit();
            fixture.AssertFullSemver("0.1.0+5");
            fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepositoryFixture.Repository);
            var buildSignature = fixture.LocalRepositoryFixture.Repository.Config.BuildSignature(new DateTimeOffset(DateTime.Now));

            Commands.Pull((Repository)fixture.LocalRepositoryFixture.Repository, buildSignature, new PullOptions());
            fixture.AssertFullSemver("0.1.0+5", fixture.LocalRepositoryFixture.Repository);
        }
 public void GivenARemoteGitRepositoryAheadOfLocalRepository_ThenChangesShouldPull()
 {
     using (var fixture = new RemoteRepositoryFixture(new Config()))
     {
         fixture.Repository.MakeACommit();
         fixture.AssertFullSemver("0.1.0+5");
         fixture.AssertFullSemver("0.1.0+4", fixture.LocalRepository);
         fixture.LocalRepository.Network.Pull(fixture.LocalRepository.Config.BuildSignature(new DateTimeOffset(DateTime.Now)), new PullOptions());
         fixture.AssertFullSemver("0.1.0+5", fixture.LocalRepository);
     }
 }
        /// <summary>
        /// Simulates running on build server
        /// </summary>
        public static void InitializeRepo(this RemoteRepositoryFixture fixture)
        {
            var log = new NullLog();

            var arguments = new Arguments
            {
                Authentication = new Authentication(),
                TargetPath     = fixture.LocalRepositoryFixture.RepositoryPath
            };

            new GitPreparer(log, new TestEnvironment(), Options.Create(arguments)).Prepare(true, null);
        }
예제 #23
0
        public void BeingOnBuildServerDoesntOverrideOutputJson()
        {
            using var fixture = new RemoteRepositoryFixture();
            fixture.Repository.MakeATaggedCommit("1.2.3");
            fixture.Repository.MakeACommit();

            var result = GitVersionHelper.ExecuteIn(fixture.LocalRepositoryFixture.RepositoryPath, arguments: " /output json", isTeamCity: true);

            result.ExitCode.ShouldBe(0);
            result.Output.ShouldStartWith("{");
            result.Output.TrimEnd().ShouldEndWith("}");
        }
예제 #24
0
        public void DoesNotTakeVersionFromNameOfRemoteReleaseBranchInCustomRemote()
        {
            using var fixture = new RemoteRepositoryFixture();
            fixture.LocalRepositoryFixture.Repository.Network.Remotes.Rename("origin", "upstream");
            fixture.BranchTo("release/2.0.0");
            fixture.MakeACommit();
            Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, new string[0], new FetchOptions(), null);

            fixture.LocalRepositoryFixture.Checkout("upstream/release/2.0.0");

            fixture.LocalRepositoryFixture.AssertFullSemver("0.1.0-beta.1+5");
        }
    public void FindCommitBranchWasBranchedFromShouldReturnNullIfTheRemoteIsTheOnlySource()
    {
        using var fixture = new RemoteRepositoryFixture();
        fixture.MakeACommit("initial");

        var localRepository = fixture.LocalRepositoryFixture.Repository.ToGitRepository();

        var gitRepoMetadataProvider = new RepositoryStore(this.log, localRepository, this.incrementStrategyFinder);

        var branchedCommit = gitRepoMetadataProvider.FindCommitBranchWasBranchedFrom(localRepository.FindBranch("main"), new Model.Configuration.Config(), Array.Empty <IBranch>());

        Assert.IsNull(branchedCommit.Branch);
        Assert.IsNull(branchedCommit.Commit);
    }
        public void BeingOnBuildServerDoesntOverrideOutputJson()
        {
            using (var fixture = new RemoteRepositoryFixture(new Config()))
            {
                fixture.Repository.MakeATaggedCommit("1.2.3");
                fixture.Repository.MakeACommit();

                var result = GitVersionHelper.ExecuteIn(fixture.LocalRepositoryFixture.RepositoryPath, arguments: " /output json", isTeamCity: true);

                result.ExitCode.ShouldBe(0);
                result.Output.ShouldStartWith("{");
                result.Output.TrimEnd().ShouldEndWith("}");
            }
        }
예제 #27
0
        public void DoNotBlowUpWhenMasterAndDevelopPointAtSameCommit()
        {
            using var fixture = new RemoteRepositoryFixture();
            fixture.Repository.MakeACommit();
            fixture.Repository.MakeATaggedCommit("1.0.0");
            fixture.Repository.MakeACommit();
            fixture.Repository.CreateBranch("develop");

            Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, new string[0], new FetchOptions(), null);
            Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.Repository.Head.Tip);
            fixture.LocalRepositoryFixture.Repository.Branches.Remove("master");
            fixture.InitializeRepo();
            fixture.AssertFullSemver("1.0.1+1");
        }
    public void BeingOnBuildServerDoesntOverrideOutputJson()
    {
        using var fixture = new RemoteRepositoryFixture();
        fixture.Repository.MakeATaggedCommit("1.2.3");
        fixture.Repository.MakeACommit();

        var env = new KeyValuePair <string, string>(TeamCity.EnvironmentVariableName, "8.0.0");

        var result = GitVersionHelper.ExecuteIn(fixture.LocalRepositoryFixture.RepositoryPath, arguments: " /output json", environments: env);

        result.ExitCode.ShouldBe(0);
        result.Output.ShouldStartWith("{");
        result.Output.TrimEnd().ShouldEndWith("}");
    }
예제 #29
0
        protected static RemoteRepositoryFixture CreateRemoteRepositoryFixture()
        {
            var fixture = new RemoteRepositoryFixture();

            fixture.Repository.MakeACommit();
            fixture.Repository.MakeATaggedCommit("1.0.0");
            fixture.Repository.MakeACommit();
            fixture.Repository.CreateBranch("develop");

            Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, new string[0], new FetchOptions(), null);
            Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.Repository.Head.Tip);
            fixture.LocalRepositoryFixture.Repository.Branches.Remove("master");
            fixture.InitializeRepo();
            return(fixture);
        }
        public void CanTakeVersionFromNameOfRemoteReleaseBranch(string branchName, string expectedBaseVersion)
        {
            using var fixture = new RemoteRepositoryFixture();
            var branch = fixture.Repository.CreateBranch(branchName);

            Commands.Checkout(fixture.Repository, branch);
            fixture.MakeACommit();

            Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, new string[0], new FetchOptions(), null);
            fixture.LocalRepositoryFixture.Checkout($"origin/{branchName}");

            var strategy    = GetVersionStrategy(fixture.RepositoryPath, fixture.Repository, branchName);
            var baseVersion = strategy.GetVersions().Single();

            baseVersion.SemanticVersion.ToString().ShouldBe(expectedBaseVersion);
        }
예제 #31
0
    public void DoNotBlowUpWhenDevelopAndFeatureBranchPointAtSameCommit()
    {
        using var fixture = new RemoteRepositoryFixture();
        fixture.Repository.MakeACommit();
        Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop"));
        fixture.Repository.MakeACommit();
        fixture.Repository.MakeATaggedCommit("1.0.0");
        fixture.Repository.MakeACommit();
        fixture.Repository.CreateBranch("feature/someFeature");

        Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty <string>(), new FetchOptions(), null);
        Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.Repository.Head.Tip);
        fixture.LocalRepositoryFixture.Repository.Branches.Remove(MainBranch);
        fixture.InitializeRepo();
        fixture.AssertFullSemver("1.1.0-alpha.1");
    }
예제 #32
0
        public void DoNotBlowUpWhenMasterAndDevelopPointAtSameCommit()
        {
            using (var fixture = new RemoteRepositoryFixture(new Config()))
            {
                fixture.Repository.MakeACommit();
                fixture.Repository.MakeATaggedCommit("1.0.0");
                fixture.Repository.MakeACommit();
                fixture.Repository.CreateBranch("develop");

                fixture.LocalRepositoryFixture.Repository.Network.Fetch(fixture.LocalRepositoryFixture.Repository.Network.Remotes.First());
                fixture.LocalRepositoryFixture.Repository.Checkout(fixture.Repository.Head.Tip);
                fixture.LocalRepositoryFixture.Repository.Branches.Remove("master");
                fixture.InitialiseRepo();
                fixture.AssertFullSemver("1.0.1+1");
            }
        }
예제 #33
0
        public void DoNotBlowUpWhenMasterAndDevelopPointAtSameCommit()
        {
            using (var fixture = new RemoteRepositoryFixture(new Config()))
            {
                fixture.Repository.MakeACommit();
                fixture.Repository.MakeATaggedCommit("1.0.0");
                fixture.Repository.MakeACommit();
                fixture.Repository.CreateBranch("develop");

                fixture.LocalRepository.Network.Fetch(fixture.LocalRepository.Network.Remotes.First());
                fixture.LocalRepository.Checkout(fixture.Repository.Head.Tip);
                fixture.LocalRepository.Branches.Remove("master");
                fixture.InitialiseRepo();
                fixture.AssertFullSemver("1.0.1+1");
            }
        }
예제 #34
0
    public void BeingOnBuildServerWithOutputJsonDoesNotFail()
    {
        using var fixture = new RemoteRepositoryFixture();
        fixture.Repository.MakeATaggedCommit("1.2.3");
        fixture.Repository.MakeACommit();

        var env = new KeyValuePair <string, string?>(TeamCity.EnvironmentVariableName, "8.0.0");

        var result = GitVersionHelper.ExecuteIn(fixture.LocalRepositoryFixture.RepositoryPath, arguments: " /output json /output buildserver", environments: env);

        result.ExitCode.ShouldBe(0);
        const string version = "0.1.0+4";

        result.Output.ShouldContain($"##teamcity[buildNumber '{version}']");
        result.OutputVariables.ShouldNotBeNull();
        result.OutputVariables.FullSemVer.ShouldBeEquivalentTo(version);
    }
        public void CanTakeVersionFromNameOfRemoteReleaseBranch(string branchName, string expectedBaseVersion)
        {
            using var fixture = new RemoteRepositoryFixture();
            var branch = fixture.Repository.CreateBranch(branchName);

            Commands.Checkout(fixture.Repository, branch);
            fixture.MakeACommit();

            Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, new string[0], new FetchOptions(), null);
            fixture.LocalRepositoryFixture.Checkout($"origin/{branchName}");

            var sut = new VersionInBranchNameVersionStrategy();
            var gitVersionContext = new GitVersionContext(fixture.Repository, new NullLog(), branch, new Config().ApplyDefaults());
            var baseVersion       = sut.GetVersions(gitVersionContext).Single();

            baseVersion.SemanticVersion.ToString().ShouldBe(expectedBaseVersion);
        }
예제 #36
0
        /// <summary>
        /// Simulates running on build server
        /// </summary>
        public static void InitializeRepo(this RemoteRepositoryFixture fixture)
        {
            var arguments = new Arguments
            {
                Authentication = new Authentication(),
                TargetPath     = fixture.LocalRepositoryFixture.RepositoryPath
            };
            var options = Options.Create(arguments);

            var serviceProvider = ConfigureService(services =>
            {
                services.AddSingleton(options);
            });

            var gitPreparer = serviceProvider.GetService <IGitPreparer>();

            gitPreparer.Prepare(true, null);
        }
예제 #37
0
        public void DoNotBlowUpWhenDevelopAndFeatureBranchPointAtSameCommit()
        {
            using (var fixture = new RemoteRepositoryFixture())
            {
                fixture.Repository.MakeACommit();
                fixture.Repository.Checkout(fixture.Repository.CreateBranch("develop"));
                fixture.Repository.MakeACommit();
                fixture.Repository.MakeATaggedCommit("1.0.0");
                fixture.Repository.MakeACommit();
                fixture.Repository.CreateBranch("feature/someFeature");

                fixture.LocalRepositoryFixture.Repository.Network.Fetch(fixture.LocalRepositoryFixture.Repository.Network.Remotes.First());
                fixture.LocalRepositoryFixture.Repository.Checkout(fixture.Repository.Head.Tip);
                fixture.LocalRepositoryFixture.Repository.Branches.Remove("master");
                fixture.InitialiseRepo();
                fixture.AssertFullSemver("1.1.0-unstable.1");
            }
        }
예제 #38
0
        /// <summary>
        /// Simulates running on build server
        /// </summary>
        public static void InitializeRepo(this RemoteRepositoryFixture fixture)
        {
            var gitVersionOptions = new GitVersionOptions
            {
                WorkingDirectory = fixture.LocalRepositoryFixture.RepositoryPath
            };
            var options = Options.Create(gitVersionOptions);

            var environment = new TestEnvironment();

            environment.SetEnvironmentVariable(AzurePipelines.EnvironmentVariableName, "true");

            var serviceProvider = ConfigureServices(services =>
            {
                services.AddSingleton(options);
                services.AddSingleton(environment);
            });

            var gitPreparer = serviceProvider.GetService <IGitPreparer>();

            gitPreparer.Prepare();
        }