示例#1
0
        public virtual void FailingPathsShouldNotResultInOKReturnValue(MergeStrategy strategy
                                                                       )
        {
            FilePath folder1 = new FilePath(db.WorkTree, "folder1");

            FileUtils.Mkdir(folder1);
            FilePath file = new FilePath(folder1, "file1.txt");

            Write(file, "folder1--file1.txt");
            file = new FilePath(folder1, "file2.txt");
            Write(file, "folder1--file2.txt");
            Git git = new Git(db);

            git.Add().AddFilepattern(folder1.GetName()).Call();
            RevCommit @base = git.Commit().SetMessage("adding folder").Call();

            RecursiveDelete(folder1);
            git.Rm().AddFilepattern("folder1/file1.txt").AddFilepattern("folder1/file2.txt").
            Call();
            RevCommit other = git.Commit().SetMessage("removing folders on 'other'").Call();

            git.Checkout().SetName(@base.Name).Call();
            file = new FilePath(db.WorkTree, "unrelated.txt");
            Write(file, "unrelated");
            git.Add().AddFilepattern("unrelated.txt").Call();
            RevCommit head = git.Commit().SetMessage("Adding another file").Call();

            // Untracked file to cause failing path for delete() of folder1
            file = new FilePath(folder1, "file3.txt");
            Write(file, "folder1--file3.txt");
            ResolveMerger merger = (ResolveMerger)strategy.NewMerger(db, false);

            merger.SetCommitNames(new string[] { "BASE", "HEAD", "other" });
            merger.SetWorkingTreeIterator(new FileTreeIterator(db));
            bool ok = merger.Merge(head.Id, other.Id);

            NUnit.Framework.Assert.IsFalse(merger.GetFailingPaths().IsEmpty());
            NUnit.Framework.Assert.IsFalse(ok);
        }
示例#2
0
        public virtual void CheckMergeEqualTreesInCore(MergeStrategy strategy)
        {
            Git git = Git.Wrap(db);

            WriteTrashFile("d/1", "orig");
            git.Add().AddFilepattern("d/1").Call();
            RevCommit first = git.Commit().SetMessage("added d/1").Call();

            WriteTrashFile("d/1", "modified");
            RevCommit masterCommit = git.Commit().SetAll(true).SetMessage("modified d/1 on master"
                                                                          ).Call();

            git.Checkout().SetCreateBranch(true).SetStartPoint(first).SetName("side").Call();
            WriteTrashFile("d/1", "modified");
            RevCommit sideCommit = git.Commit().SetAll(true).SetMessage("modified d/1 on side"
                                                                        ).Call();

            git.Rm().AddFilepattern("d/1").Call();
            git.Rm().AddFilepattern("d").Call();
            ThreeWayMerger resolveMerger = (ThreeWayMerger)strategy.NewMerger(db, true);
            bool           noProblems    = resolveMerger.Merge(masterCommit, sideCommit);

            NUnit.Framework.Assert.IsTrue(noProblems);
        }
示例#3
0
		public virtual void FailingPathsShouldNotResultInOKReturnValue(MergeStrategy strategy
			)
		{
			FilePath folder1 = new FilePath(db.WorkTree, "folder1");
			FileUtils.Mkdir(folder1);
			FilePath file = new FilePath(folder1, "file1.txt");
			Write(file, "folder1--file1.txt");
			file = new FilePath(folder1, "file2.txt");
			Write(file, "folder1--file2.txt");
			Git git = new Git(db);
			git.Add().AddFilepattern(folder1.GetName()).Call();
			RevCommit @base = git.Commit().SetMessage("adding folder").Call();
			RecursiveDelete(folder1);
			git.Rm().AddFilepattern("folder1/file1.txt").AddFilepattern("folder1/file2.txt").
				Call();
			RevCommit other = git.Commit().SetMessage("removing folders on 'other'").Call();
			git.Checkout().SetName(@base.Name).Call();
			file = new FilePath(db.WorkTree, "unrelated.txt");
			Write(file, "unrelated");
			git.Add().AddFilepattern("unrelated.txt").Call();
			RevCommit head = git.Commit().SetMessage("Adding another file").Call();
			// Untracked file to cause failing path for delete() of folder1
			file = new FilePath(folder1, "file3.txt");
			Write(file, "folder1--file3.txt");
			ResolveMerger merger = (ResolveMerger)strategy.NewMerger(db, false);
			merger.SetCommitNames(new string[] { "BASE", "HEAD", "other" });
			merger.SetWorkingTreeIterator(new FileTreeIterator(db));
			bool ok = merger.Merge(head.Id, other.Id);
			NUnit.Framework.Assert.IsFalse(merger.GetFailingPaths().IsEmpty());
			NUnit.Framework.Assert.IsFalse(ok);
		}
示例#4
0
		public virtual void CheckMergeEqualTreesInCore(MergeStrategy strategy)
		{
			Git git = Git.Wrap(db);
			WriteTrashFile("d/1", "orig");
			git.Add().AddFilepattern("d/1").Call();
			RevCommit first = git.Commit().SetMessage("added d/1").Call();
			WriteTrashFile("d/1", "modified");
			RevCommit masterCommit = git.Commit().SetAll(true).SetMessage("modified d/1 on master"
				).Call();
			git.Checkout().SetCreateBranch(true).SetStartPoint(first).SetName("side").Call();
			WriteTrashFile("d/1", "modified");
			RevCommit sideCommit = git.Commit().SetAll(true).SetMessage("modified d/1 on side"
				).Call();
			git.Rm().AddFilepattern("d/1").Call();
			git.Rm().AddFilepattern("d").Call();
			ThreeWayMerger resolveMerger = (ThreeWayMerger)strategy.NewMerger(db, true);
			bool noProblems = resolveMerger.Merge(masterCommit, sideCommit);
			NUnit.Framework.Assert.IsTrue(noProblems);
		}