/* Copyright (c) 2014 Boundless and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/edl-v10.html * * Contributors: * Johnathan Garrett (LMN Solutions) - initial implementation */ package org.locationtech.geogig.test.integration; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.locationtech.geogig.api.RevCommit; import org.locationtech.geogig.api.plumbing.CheckSparsePath; import org.locationtech.geogig.api.porcelain.BranchCreateOp; import org.locationtech.geogig.api.porcelain.CheckoutOp; import org.locationtech.geogig.api.porcelain.CommitOp; import org.locationtech.geogig.api.porcelain.ConfigOp; import org.locationtech.geogig.api.porcelain.ConfigOp.ConfigAction; import org.locationtech.geogig.api.porcelain.MergeOp; import org.locationtech.geogig.storage.GraphDatabase; import com.google.common.base.Suppliers; public class CheckSparsePathTest extends RepositoryTestCase { @Rule public ExpectedException exception = ExpectedException.none(); @Override protected void setUpInternal() throws Exception { // These values should be used during a commit to set author/committer // TODO: author/committer roles need to be defined better, but for // now they are the same thing. repo.command(ConfigOp.class).setAction(ConfigAction.CONFIG_SET).setName("user.name") .setValue("groldan").call(); repo.command(ConfigOp.class).setAction(ConfigAction.CONFIG_SET).setName("user.email") .setValue("groldan@boundlessgeo.com").call(); } @Test public void testCheckSparsePath() throws Exception { // Create the following revision graph // o - commit1 // |\ // | o - commit2 // | | // | o - commit3 // | |\ // | | o - commit4 // | | |\ // | | | o - commit5 (sparse) // | | | | // | | o | - commit6 // | | |/ // | | o - commit7 // | | // o | - commit8 // | | // | o - commit9 // |/ // o - commit10 insertAndAdd(points1); RevCommit commit1 = geogig.command(CommitOp.class).setMessage("commit1").call(); // create branch1 and checkout geogig.command(BranchCreateOp.class).setAutoCheckout(true).setName("branch1").call(); insertAndAdd(points2); RevCommit commit2 = geogig.command(CommitOp.class).setMessage("commit2").call(); insertAndAdd(points3); RevCommit commit3 = geogig.command(CommitOp.class).setMessage("commit3").call(); geogig.command(BranchCreateOp.class).setAutoCheckout(true).setName("branch2").call(); insertAndAdd(lines1); RevCommit commit4 = geogig.command(CommitOp.class).setMessage("commit4").call(); geogig.command(BranchCreateOp.class).setAutoCheckout(true).setName("branch3").call(); insertAndAdd(poly1); RevCommit commit5 = geogig.command(CommitOp.class).setMessage("commit5").call(); geogig.getRepository().graphDatabase() .setProperty(commit5.getId(), GraphDatabase.SPARSE_FLAG, "true"); geogig.command(CheckoutOp.class).setSource("branch2").call(); insertAndAdd(poly2); RevCommit commit6 = geogig.command(CommitOp.class).setMessage("commit6").call(); RevCommit commit7 = geogig.command(MergeOp.class).setMessage("commit7") .addCommit(Suppliers.ofInstance(commit5.getId())).call().getMergeCommit(); geogig.command(CheckoutOp.class).setSource("branch1").call(); insertAndAdd(lines3); RevCommit commit9 = geogig.command(CommitOp.class).setMessage("commit9").call(); // checkout master geogig.command(CheckoutOp.class).setSource("master").call(); insertAndAdd(lines2); RevCommit commit8 = geogig.command(CommitOp.class).setMessage("commit8").call(); RevCommit commit10 = geogig.command(MergeOp.class).setMessage("commit10") .addCommit(Suppliers.ofInstance(commit9.getId())).call().getMergeCommit(); CheckSparsePath command = geogig.command(CheckSparsePath.class); assertTrue(command.setStart(commit7.getId()).setEnd(commit1.getId()).call()); assertFalse(command.setStart(commit6.getId()).setEnd(commit1.getId()).call()); assertTrue(command.setStart(commit5.getId()).setEnd(commit2.getId()).call()); assertFalse(command.setStart(commit10.getId()).setEnd(commit1.getId()).call()); assertFalse(command.setStart(commit10.getId()).setEnd(commit3.getId()).call()); assertFalse(command.setStart(commit8.getId()).setEnd(commit1.getId()).call()); assertFalse(command.setStart(commit4.getId()).setEnd(commit2.getId()).call()); assertFalse(command.setStart(commit7.getId()).setEnd(commit5.getId()).call()); } @Test public void testCheckSparsePath2() throws Exception { // Create the following revision graph // o - commit1 // |\ // | o - commit2 (sparse) // | | // | o - commit3 // | |\ // | | o - commit4 // | | |\ // | | | o - commit5 (sparse) // | | | | // | | o | - commit6 // | | |/ // | | o - commit7 // | | // o | - commit8 // | | // | o - commit9 // |/ // o - commit10 insertAndAdd(points1); RevCommit commit1 = geogig.command(CommitOp.class).setMessage("commit1").call(); // create branch1 and checkout geogig.command(BranchCreateOp.class).setAutoCheckout(true).setName("branch1").call(); insertAndAdd(points2); RevCommit commit2 = geogig.command(CommitOp.class).setMessage("commit2").call(); geogig.getRepository().graphDatabase() .setProperty(commit2.getId(), GraphDatabase.SPARSE_FLAG, "true"); insertAndAdd(points3); RevCommit commit3 = geogig.command(CommitOp.class).setMessage("commit3").call(); geogig.command(BranchCreateOp.class).setAutoCheckout(true).setName("branch2").call(); insertAndAdd(lines1); RevCommit commit4 = geogig.command(CommitOp.class).setMessage("commit4").call(); geogig.command(BranchCreateOp.class).setAutoCheckout(true).setName("branch3").call(); insertAndAdd(poly1); RevCommit commit5 = geogig.command(CommitOp.class).setMessage("commit5").call(); geogig.getRepository().graphDatabase() .setProperty(commit5.getId(), GraphDatabase.SPARSE_FLAG, "true"); geogig.command(CheckoutOp.class).setSource("branch2").call(); insertAndAdd(poly2); RevCommit commit6 = geogig.command(CommitOp.class).setMessage("commit6").call(); RevCommit commit7 = geogig.command(MergeOp.class).setMessage("commit7") .addCommit(Suppliers.ofInstance(commit5.getId())).call().getMergeCommit(); geogig.command(CheckoutOp.class).setSource("branch1").call(); insertAndAdd(lines3); RevCommit commit9 = geogig.command(CommitOp.class).setMessage("commit9").call(); // checkout master geogig.command(CheckoutOp.class).setSource("master").call(); insertAndAdd(lines2); RevCommit commit8 = geogig.command(CommitOp.class).setMessage("commit8").call(); RevCommit commit10 = geogig.command(MergeOp.class).setMessage("commit10") .addCommit(Suppliers.ofInstance(commit9.getId())).call().getMergeCommit(); CheckSparsePath command = geogig.command(CheckSparsePath.class); assertTrue(command.setStart(commit7.getId()).setEnd(commit1.getId()).call()); assertTrue(command.setStart(commit6.getId()).setEnd(commit1.getId()).call()); assertTrue(command.setStart(commit5.getId()).setEnd(commit2.getId()).call()); assertTrue(command.setStart(commit10.getId()).setEnd(commit1.getId()).call()); assertFalse(command.setStart(commit10.getId()).setEnd(commit3.getId()).call()); assertFalse(command.setStart(commit8.getId()).setEnd(commit1.getId()).call()); assertFalse(command.setStart(commit4.getId()).setEnd(commit2.getId()).call()); assertFalse(command.setStart(commit7.getId()).setEnd(commit5.getId()).call()); } }