Exemplo n.º 1
0
	    public void TestPick()
        {
		    // B---O
		    // \----P---T
		    //
		    // Cherry-pick "T" onto "O". This shouldn't introduce "p-fail", which
		    // was created by "P", nor should it modify "a", which was done by "P".
		    //
		    DirCache treeB = DirCache.read(db);
		    DirCache treeO = DirCache.read(db);
		    DirCache treeP = DirCache.read(db);
		    DirCache treeT = DirCache.read(db);
		    {
			    DirCacheBuilder b = treeB.builder();
			    DirCacheBuilder o = treeO.builder();
			    DirCacheBuilder p = treeP.builder();
			    DirCacheBuilder t = treeT.builder();

			    b.add(MakeEntry("a", FileMode.RegularFile));

                o.add(MakeEntry("a", FileMode.RegularFile));
                o.add(MakeEntry("o", FileMode.RegularFile));

                p.add(MakeEntry("a", FileMode.RegularFile, "q"));
                p.add(MakeEntry("p-fail", FileMode.RegularFile));

                t.add(MakeEntry("a", FileMode.RegularFile));
                t.add(MakeEntry("t", FileMode.RegularFile));

			    b.finish();
			    o.finish();
			    p.finish();
			    t.finish();
		    }

		    ObjectWriter ow = new ObjectWriter(db);
		    ObjectId B = Commit(ow, treeB, new ObjectId[] {});
		    ObjectId O = Commit(ow, treeO, new[] { B });
		    ObjectId P = Commit(ow, treeP, new[] { B });
		    ObjectId T = Commit(ow, treeT, new[] { P });

		    ThreeWayMerger twm = (ThreeWayMerger) MergeStrategy.SimpleTwoWayInCore.NewMerger(db);
		    twm.SetBase(P);
		    bool merge = twm.Merge(new[] { O, T });
	        Assert.IsTrue(merge);

            GitSharp.TreeWalk.TreeWalk tw = new GitSharp.TreeWalk.TreeWalk(db);
		    tw.setRecursive(true);
		    tw.reset(twm.GetResultTreeId());

		    Assert.IsTrue(tw.next());
		    Assert.Equals("a", tw.getPathString());
		    AssertCorrectId(treeO, tw);

		    Assert.IsTrue(tw.next());
		    Assert.Equals("o", tw.getPathString());
		    AssertCorrectId(treeO, tw);

		    Assert.IsTrue(tw.next());
		    Assert.Equals("t", tw.getPathString());
		    AssertCorrectId(treeT, tw);

		    Assert.IsFalse(tw.next());
	    }
Exemplo n.º 2
0
	    public void TestTrivialTwoWayConcurrentSubtreeChange()
        {
		    DirCache treeB = DirCache.read(db);
		    DirCache treeO = DirCache.read(db);
		    DirCache treeT = DirCache.read(db);
		    {
			    DirCacheBuilder b = treeB.builder();
			    DirCacheBuilder o = treeO.builder();
			    DirCacheBuilder t = treeT.builder();

			    b.add(MakeEntry("d/o", FileMode.RegularFile));
			    b.add(MakeEntry("d/t", FileMode.RegularFile));

			    o.add(MakeEntry("d/o", FileMode.RegularFile, "o !"));
			    o.add(MakeEntry("d/t", FileMode.RegularFile));

			    t.add(MakeEntry("d/o", FileMode.RegularFile));
			    t.add(MakeEntry("d/t", FileMode.RegularFile, "t !"));

			    b.finish();
			    o.finish();
			    t.finish();
		    }

		    ObjectWriter ow = new ObjectWriter(db);
		    ObjectId B = Commit(ow, treeB, new ObjectId[] {});
		    ObjectId O = Commit(ow, treeO, new[] { B });
		    ObjectId T = Commit(ow, treeT, new[] { B });

		    Merger ourMerger = MergeStrategy.SimpleTwoWayInCore.NewMerger(db);
		    bool merge = ourMerger.Merge(new[] { O, T });
		    Assert.IsTrue(merge);

            GitSharp.TreeWalk.TreeWalk tw = new GitSharp.TreeWalk.TreeWalk(db);
		    tw.setRecursive(true);
		    tw.reset(ourMerger.GetResultTreeId());

		    Assert.IsTrue(tw.next());
		    Assert.AreEqual("d/o", tw.getPathString());
		    AssertCorrectId(treeO, tw);

		    Assert.IsTrue(tw.next());
		    Assert.AreEqual("d/t", tw.getPathString());
		    AssertCorrectId(treeT, tw);

		    Assert.IsFalse(tw.next());
	    }