示例#1
0
		public virtual void TestCherryPick()
		{
			Git git = new Git(db);
			WriteTrashFile("a", "first line\nsec. line\nthird line\n");
			git.Add().AddFilepattern("a").Call();
			RevCommit firstCommit = git.Commit().SetMessage("create a").Call();
			WriteTrashFile("b", "content\n");
			git.Add().AddFilepattern("b").Call();
			git.Commit().SetMessage("create b").Call();
			WriteTrashFile("a", "first line\nsec. line\nthird line\nfourth line\n");
			git.Add().AddFilepattern("a").Call();
			git.Commit().SetMessage("enlarged a").Call();
			WriteTrashFile("a", "first line\nsecond line\nthird line\nfourth line\n");
			git.Add().AddFilepattern("a").Call();
			RevCommit fixingA = git.Commit().SetMessage("fixed a").Call();
			git.BranchCreate().SetName("side").SetStartPoint(firstCommit).Call();
			CheckoutBranch("refs/heads/side");
			WriteTrashFile("a", "first line\nsec. line\nthird line\nfeature++\n");
			git.Add().AddFilepattern("a").Call();
			git.Commit().SetMessage("enhanced a").Call();
			git.CherryPick().Include(fixingA).Call();
			NUnit.Framework.Assert.IsFalse(new FilePath(db.WorkTree, "b").Exists());
			CheckFile(new FilePath(db.WorkTree, "a"), "first line\nsecond line\nthird line\nfeature++\n"
				);
			Iterator<RevCommit> history = git.Log().Call().Iterator();
			NUnit.Framework.Assert.AreEqual("fixed a", history.Next().GetFullMessage());
			NUnit.Framework.Assert.AreEqual("enhanced a", history.Next().GetFullMessage());
			NUnit.Framework.Assert.AreEqual("create a", history.Next().GetFullMessage());
			NUnit.Framework.Assert.IsFalse(history.HasNext());
		}
示例#2
0
        public virtual void TestCherryPick()
        {
            Git git = new Git(db);

            WriteTrashFile("a", "first line\nsec. line\nthird line\n");
            git.Add().AddFilepattern("a").Call();
            RevCommit firstCommit = git.Commit().SetMessage("create a").Call();

            WriteTrashFile("b", "content\n");
            git.Add().AddFilepattern("b").Call();
            git.Commit().SetMessage("create b").Call();
            WriteTrashFile("a", "first line\nsec. line\nthird line\nfourth line\n");
            git.Add().AddFilepattern("a").Call();
            git.Commit().SetMessage("enlarged a").Call();
            WriteTrashFile("a", "first line\nsecond line\nthird line\nfourth line\n");
            git.Add().AddFilepattern("a").Call();
            RevCommit fixingA = git.Commit().SetMessage("fixed a").Call();

            git.BranchCreate().SetName("side").SetStartPoint(firstCommit).Call();
            CheckoutBranch("refs/heads/side");
            WriteTrashFile("a", "first line\nsec. line\nthird line\nfeature++\n");
            git.Add().AddFilepattern("a").Call();
            git.Commit().SetMessage("enhanced a").Call();
            git.CherryPick().Include(fixingA).Call();
            NUnit.Framework.Assert.IsFalse(new FilePath(db.WorkTree, "b").Exists());
            CheckFile(new FilePath(db.WorkTree, "a"), "first line\nsecond line\nthird line\nfeature++\n"
                      );
            Iterator <RevCommit> history = git.Log().Call().Iterator();

            NUnit.Framework.Assert.AreEqual("fixed a", history.Next().GetFullMessage());
            NUnit.Framework.Assert.AreEqual("enhanced a", history.Next().GetFullMessage());
            NUnit.Framework.Assert.AreEqual("create a", history.Next().GetFullMessage());
            NUnit.Framework.Assert.IsFalse(history.HasNext());
        }
示例#3
0
        public virtual void TestCherryPickOverExecutableChangeOnNonExectuableFileSystem()
        {
            Git      git  = new Git(db);
            FilePath file = WriteTrashFile("test.txt", "a");

            NUnit.Framework.Assert.IsNotNull(git.Add().AddFilepattern("test.txt").Call());
            NUnit.Framework.Assert.IsNotNull(git.Commit().SetMessage("commit1").Call());
            NUnit.Framework.Assert.IsNotNull(git.Checkout().SetCreateBranch(true).SetName("a"
                                                                                          ).Call());
            WriteTrashFile("test.txt", "b");
            NUnit.Framework.Assert.IsNotNull(git.Add().AddFilepattern("test.txt").Call());
            RevCommit commit2 = git.Commit().SetMessage("commit2").Call();

            NUnit.Framework.Assert.IsNotNull(commit2);
            NUnit.Framework.Assert.IsNotNull(git.Checkout().SetName(Constants.MASTER).Call());
            DirCache cache = db.LockDirCache();

            cache.GetEntry("test.txt").FileMode = FileMode.EXECUTABLE_FILE;
            cache.Write();
            NUnit.Framework.Assert.IsTrue(cache.Commit());
            cache.Unlock();
            NUnit.Framework.Assert.IsNotNull(git.Commit().SetMessage("commit3").Call());
            git.GetRepository().GetConfig().SetBoolean(ConfigConstants.CONFIG_CORE_SECTION, null
                                                       , ConfigConstants.CONFIG_KEY_FILEMODE, false);
            CherryPickResult result = git.CherryPick().Include(commit2).Call();

            NUnit.Framework.Assert.IsNotNull(result);
            NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.OK, result.GetStatus
                                                ());
        }
示例#4
0
        /// <exception cref="System.Exception"></exception>
        private void DoCherryPickAndCheckResult(Git git, RevCommit sideCommit, ResolveMerger.MergeFailureReason
                                                reason)
        {
            // get current index state
            string indexState = IndexState(CONTENT);
            // cherry-pick
            CherryPickResult result = git.CherryPick().Include(sideCommit.Id).Call();

            NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.FAILED, result.
                                            GetStatus());
            // staged file a causes DIRTY_INDEX
            NUnit.Framework.Assert.AreEqual(1, result.GetFailingPaths().Count);
            NUnit.Framework.Assert.AreEqual(reason, result.GetFailingPaths().Get("a"));
            NUnit.Framework.Assert.AreEqual("a(modified)", Read(new FilePath(db.WorkTree, "a"
                                                                             )));
            // index shall be unchanged
            NUnit.Framework.Assert.AreEqual(indexState, IndexState(CONTENT));
            NUnit.Framework.Assert.AreEqual(RepositoryState.SAFE, db.GetRepositoryState());
            if (reason == null)
            {
                ReflogReader reader = db.GetReflogReader(Constants.HEAD);
                NUnit.Framework.Assert.IsTrue(reader.GetLastEntry().GetComment().StartsWith("cherry-pick: "
                                                                                            ));
                reader = db.GetReflogReader(db.GetBranch());
                NUnit.Framework.Assert.IsTrue(reader.GetLastEntry().GetComment().StartsWith("cherry-pick: "
                                                                                            ));
            }
        }
示例#5
0
        public virtual void TestCherryPickConflictResolution()
        {
            Git              git        = new Git(db);
            RevCommit        sideCommit = PrepareCherryPick(git);
            CherryPickResult result     = git.CherryPick().Include(sideCommit.Id).Call();

            NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.CONFLICTING, result
                                            .GetStatus());
            NUnit.Framework.Assert.IsTrue(new FilePath(db.Directory, Constants.MERGE_MSG).Exists
                                              ());
            NUnit.Framework.Assert.AreEqual("side\n\nConflicts:\n\ta\n", db.ReadMergeCommitMsg
                                                ());
            NUnit.Framework.Assert.IsTrue(new FilePath(db.Directory, Constants.CHERRY_PICK_HEAD
                                                       ).Exists());
            NUnit.Framework.Assert.AreEqual(sideCommit.Id, db.ReadCherryPickHead());
            NUnit.Framework.Assert.AreEqual(RepositoryState.CHERRY_PICKING, db.GetRepositoryState
                                                ());
            // Resolve
            WriteTrashFile("a", "a");
            git.Add().AddFilepattern("a").Call();
            NUnit.Framework.Assert.AreEqual(RepositoryState.CHERRY_PICKING_RESOLVED, db.GetRepositoryState
                                                ());
            git.Commit().SetOnly("a").SetMessage("resolve").Call();
            NUnit.Framework.Assert.AreEqual(RepositoryState.SAFE, db.GetRepositoryState());
        }
示例#6
0
        public virtual void TestCherryPickConflictMarkers()
        {
            Git              git        = new Git(db);
            RevCommit        sideCommit = PrepareCherryPick(git);
            CherryPickResult result     = git.CherryPick().Include(sideCommit.Id).Call();

            NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.CONFLICTING, result
                                            .GetStatus());
            string expected = "<<<<<<< master\na(master)\n=======\na(side)\n>>>>>>> 527460a side\n";

            CheckFile(new FilePath(db.WorkTree, "a"), expected);
        }
示例#7
0
        public virtual void TestCherryPickConflictReset()
        {
            Git              git        = new Git(db);
            RevCommit        sideCommit = PrepareCherryPick(git);
            CherryPickResult result     = git.CherryPick().Include(sideCommit.Id).Call();

            NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.CONFLICTING, result
                                            .GetStatus());
            NUnit.Framework.Assert.AreEqual(RepositoryState.CHERRY_PICKING, db.GetRepositoryState
                                                ());
            NUnit.Framework.Assert.IsTrue(new FilePath(db.Directory, Constants.CHERRY_PICK_HEAD
                                                       ).Exists());
            git.Reset().SetMode(ResetCommand.ResetType.MIXED).SetRef("HEAD").Call();
            NUnit.Framework.Assert.AreEqual(RepositoryState.SAFE, db.GetRepositoryState());
            NUnit.Framework.Assert.IsFalse(new FilePath(db.Directory, Constants.CHERRY_PICK_HEAD
                                                        ).Exists());
        }
示例#8
0
		/// <exception cref="System.Exception"></exception>
		private void DoCherryPickAndCheckResult(Git git, RevCommit sideCommit, ResolveMerger.MergeFailureReason
			 reason)
		{
			// get current index state
			string indexState = IndexState(CONTENT);
			// cherry-pick
			CherryPickResult result = git.CherryPick().Include(sideCommit.Id).Call();
			NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.FAILED, result.
				GetStatus());
			// staged file a causes DIRTY_INDEX
			NUnit.Framework.Assert.AreEqual(1, result.GetFailingPaths().Count);
			NUnit.Framework.Assert.AreEqual(reason, result.GetFailingPaths().Get("a"));
			NUnit.Framework.Assert.AreEqual("a(modified)", Read(new FilePath(db.WorkTree, "a"
				)));
			// index shall be unchanged
			NUnit.Framework.Assert.AreEqual(indexState, IndexState(CONTENT));
			NUnit.Framework.Assert.AreEqual(RepositoryState.SAFE, db.GetRepositoryState());
		}
示例#9
0
		public virtual void TestCherryPickConflictReset()
		{
			Git git = new Git(db);
			RevCommit sideCommit = PrepareCherryPick(git);
			CherryPickResult result = git.CherryPick().Include(sideCommit.Id).Call();
			NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.CONFLICTING, result
				.GetStatus());
			NUnit.Framework.Assert.AreEqual(RepositoryState.CHERRY_PICKING, db.GetRepositoryState
				());
			NUnit.Framework.Assert.IsTrue(new FilePath(db.Directory, Constants.CHERRY_PICK_HEAD
				).Exists());
			git.Reset().SetMode(ResetCommand.ResetType.MIXED).SetRef("HEAD").Call();
			NUnit.Framework.Assert.AreEqual(RepositoryState.SAFE, db.GetRepositoryState());
			NUnit.Framework.Assert.IsFalse(new FilePath(db.Directory, Constants.CHERRY_PICK_HEAD
				).Exists());
		}
示例#10
0
		public virtual void TestCherryPickConflictResolution()
		{
			Git git = new Git(db);
			RevCommit sideCommit = PrepareCherryPick(git);
			CherryPickResult result = git.CherryPick().Include(sideCommit.Id).Call();
			NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.CONFLICTING, result
				.GetStatus());
			NUnit.Framework.Assert.IsTrue(new FilePath(db.Directory, Constants.MERGE_MSG).Exists
				());
			NUnit.Framework.Assert.AreEqual("side\n\nConflicts:\n\ta\n", db.ReadMergeCommitMsg
				());
			NUnit.Framework.Assert.IsTrue(new FilePath(db.Directory, Constants.CHERRY_PICK_HEAD
				).Exists());
			NUnit.Framework.Assert.AreEqual(sideCommit.Id, db.ReadCherryPickHead());
			NUnit.Framework.Assert.AreEqual(RepositoryState.CHERRY_PICKING, db.GetRepositoryState
				());
			// Resolve
			WriteTrashFile("a", "a");
			git.Add().AddFilepattern("a").Call();
			NUnit.Framework.Assert.AreEqual(RepositoryState.CHERRY_PICKING_RESOLVED, db.GetRepositoryState
				());
			git.Commit().SetOnly("a").SetMessage("resolve").Call();
			NUnit.Framework.Assert.AreEqual(RepositoryState.SAFE, db.GetRepositoryState());
		}
示例#11
0
 public virtual void TestCherryPickOverExecutableChangeOnNonExectuableFileSystem()
 {
     Git git = new Git(db);
     FilePath file = WriteTrashFile("test.txt", "a");
     NUnit.Framework.Assert.IsNotNull(git.Add().AddFilepattern("test.txt").Call());
     NUnit.Framework.Assert.IsNotNull(git.Commit().SetMessage("commit1").Call());
     NUnit.Framework.Assert.IsNotNull(git.Checkout().SetCreateBranch(true).SetName("a"
         ).Call());
     WriteTrashFile("test.txt", "b");
     NUnit.Framework.Assert.IsNotNull(git.Add().AddFilepattern("test.txt").Call());
     RevCommit commit2 = git.Commit().SetMessage("commit2").Call();
     NUnit.Framework.Assert.IsNotNull(commit2);
     NUnit.Framework.Assert.IsNotNull(git.Checkout().SetName(Constants.MASTER).Call());
     DirCache cache = db.LockDirCache();
     cache.GetEntry("test.txt").FileMode = FileMode.EXECUTABLE_FILE;
     cache.Write();
     NUnit.Framework.Assert.IsTrue(cache.Commit());
     cache.Unlock();
     NUnit.Framework.Assert.IsNotNull(git.Commit().SetMessage("commit3").Call());
     db.FileSystem.SetExecute(file, false);
     git.GetRepository().GetConfig().SetBoolean(ConfigConstants.CONFIG_CORE_SECTION, null
         , ConfigConstants.CONFIG_KEY_FILEMODE, false);
     CherryPickResult result = git.CherryPick().Include(commit2).Call();
     NUnit.Framework.Assert.IsNotNull(result);
     NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.OK, result.GetStatus
         ());
 }
示例#12
0
		public virtual void TestCherryPickOurCommitName()
		{
			Git git = new Git(db);
			RevCommit sideCommit = PrepareCherryPick(git);
			CherryPickResult result = git.CherryPick().Include(sideCommit.Id).SetOurCommitName
				("custom name").Call();
			NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.CONFLICTING, result
				.GetStatus());
			string expected = "<<<<<<< custom name\na(master)\n=======\na(side)\n>>>>>>> 527460a side\n";
			CheckFile(new FilePath(db.WorkTree, "a"), expected);
		}