Пример #1
0
        public void FetchRebaseBranchesNoMatchedRemoteBranchTest()
        {
            // Prepare
            var mock             = new Mock <ICommandRunner>();
            var localBranchInfo  = "*dev";
            var remoteBranchInfo = $"*master{Environment.NewLine}dev1{Environment.NewLine}dev2{Environment.NewLine}dev3";

            mock.Setup(f => f.Run("git", "branch -l --no-color", out localBranchInfo))
            .Returns(0);

            mock.Setup(f => f.Run("git", "branch -r --no-color", out remoteBranchInfo))
            .Returns(0);

            var options = new Options()
            {
                RebaseBranch = "dev"
            };

            IGrabber grabber = CreateGrabber(options, mock.Object);

            // Act
            Exception ex = Record.Exception(() => grabber.FetchRebaseBraches());

            // Assert
            Assert.IsType <MigrateException>(ex);
            Assert.Equal(string.Format(ExceptionHelper.ExceptionMessage.NO_REMOTE_BRANCH_FOUND, options.RebaseBranch), ex.Message);
        }
Пример #2
0
        public void FetchRebaseBranchesSingleMatchingRemoteBranchTest()
        {
            // Prepare
            var mock = new Mock <ICommandRunner>();

            var localBranchInfo  = "*dev";
            var remoteBranchInfo = $"*master{Environment.NewLine}dev";

            mock.Setup(f => f.Run("git", "branch -l --no-color", out localBranchInfo))
            .Returns(0);

            mock.Setup(f => f.Run("git", "branch -r --no-color", out remoteBranchInfo))
            .Returns(0);

            var options = new Options()
            {
                RebaseBranch = "dev"
            };

            var expected = new List <string>(new string[]
            {
                "dev"
            });

            IGrabber grabber = CreateGrabber(options, mock.Object);

            // Act
            grabber.FetchRebaseBraches();
            var actual = grabber.GetMetaInfo().LocalBranches;

            // Assert
            Assert.Equal(expected, actual);
        }
Пример #3
0
        public void FetchRebaseBranchesTooManyMatchingLocalBranchesTest()
        {
            // Prepare
            var mock             = new Mock <ICommandRunner>();
            var localBranchInfo  = $"*master{Environment.NewLine}dev{Environment.NewLine}dev";
            var remoteBranchInfo = "dev";

            mock.Setup(f => f.Run("git", "branch -l --no-color", out localBranchInfo))
            .Returns(0);
            mock.Setup(f => f.Run("git", "branch -r --no-color", out remoteBranchInfo))
            .Returns(0);

            var options = new Options()
            {
                RebaseBranch = "dev"
            };

            IGrabber grabber = CreateGrabber(options, mock.Object);

            // Act
            Exception ex = Record.Exception(() => grabber.FetchRebaseBraches());

            // Assert
            Assert.IsType <MigrateException>(ex);
            Assert.Equal(ExceptionHelper.ExceptionMessage.TOO_MANY_MATCHING_LOCAL_BRANCHES, ex.Message);
        }
Пример #4
0
        public void Run(IGrabber grabber, IFixer fixer)
        {
            if (grabber == null)
            {
                throw new ArgumentNullException("grabber");
            }

            if (fixer == null)
            {
                throw new ArgumentNullException("fixer");
            }

            try
            {
                PreRunPrepare();

                if (Options.Rebase)
                {
                    grabber.FetchBranches();
                }
                else if (!string.IsNullOrWhiteSpace(Options.RebaseBranch))
                {
                    grabber.FetchRebaseBraches();
                }
                else
                {
                    grabber.Clone();
                }

                fixer.FixBranches();
                fixer.FixTags();
                fixer.FixTrunk();
                fixer.OptimizeRepos();
            }
            finally
            {
                PostRunCleanup();
            }
        }
Пример #5
0
        public void Run(
            IGrabber grabber,
            IFixer fixer,
            IStaleSvnBranchDeleter svnBranchDeleter,
            IGitPusher gitPusher,
            ILockBreaker lockBreaker
            )
        {
            if (grabber == null)
            {
                throw new ArgumentNullException(nameof(grabber));
            }

            if (fixer == null)
            {
                throw new ArgumentNullException(nameof(fixer));
            }

            if (svnBranchDeleter == null)
            {
                throw new ArgumentNullException(nameof(svnBranchDeleter));
            }

            if (lockBreaker == null)
            {
                throw new ArgumentNullException(nameof(lockBreaker));
            }

            try
            {
                PreRunPrepare();

                lockBreaker.BreakLocksIfEnabled();

                if (Options.Rebase)
                {
                    grabber.FetchBranches();
                }
                else if (!string.IsNullOrWhiteSpace(Options.RebaseBranch))
                {
                    grabber.FetchRebaseBraches();
                }
                else
                {
                    grabber.Clone();
                }

                fixer.FixBranches();
                fixer.FixTags();
                fixer.FixTrunk();
                fixer.OptimizeRepos();

                if (Options.StaleSvnBranchPurgeOption != StaleSvnBranchPurgeOptions.nothing)
                {
                    IEnumerable <string> svnBranches = svnBranchDeleter.QueryHeadSvnBranches();

                    IEnumerable <string> gitBranchesToPurge = svnBranchDeleter.GetGitBranchesToPurge(svnBranches);
                    svnBranches = null;

                    svnBranchDeleter.PurgeGitBranches(gitBranchesToPurge);
                    gitBranchesToPurge = null;

                    if (Options.StaleSvnBranchPurgeOption == StaleSvnBranchPurgeOptions.delete_local_and_remote)
                    {
                        gitPusher.PushPrune();
                    }
                }

                if (Options.PushWhenDone)
                {
                    gitPusher.PushAll();
                }
            }
            finally
            {
                PostRunCleanup();
            }
        }