/** * Executes the squash command using the provided options. */ @Override public void runInternal(GeogigCLI cli) { checkParameter(commits.size() == 2, "2 commit references must be supplied"); final GeoGIG geogig = cli.getGeogig(); Optional<ObjectId> sinceId = geogig.command(RevParse.class).setRefSpec(commits.get(0)) .call(); checkParameter(sinceId.isPresent(), "'since' reference cannot be found"); checkParameter(geogig.getRepository().commitExists(sinceId.get()), "'since' reference does not resolve to a commit"); RevCommit sinceCommit = geogig.getRepository().getCommit(sinceId.get()); Optional<ObjectId> untilId = geogig.command(RevParse.class).setRefSpec(commits.get(1)) .call(); checkParameter(untilId.isPresent(), "'until' reference cannot be found"); checkParameter(geogig.getRepository().commitExists(untilId.get()), "'until' reference does not resolve to a commit"); RevCommit untilCommit = geogig.getRepository().getCommit(untilId.get()); geogig.command(SquashOp.class).setSince(sinceCommit).setUntil(untilCommit) .setMessage(message).call(); }
/** * Executes the squash command using the provided options. */ @Override public void runInternal(GeogigCLI cli) { checkParameter(commits.size() == 2, "2 commit references must be supplied"); final GeoGIG geogig = cli.getGeogig(); Optional<ObjectId> sinceId = geogig.command(RevParse.class).setRefSpec(commits.get(0)) .call(); checkParameter(sinceId.isPresent(), "'since' reference cannot be found"); checkParameter(geogig.getRepository().commitExists(sinceId.get()), "'since' reference does not resolve to a commit"); RevCommit sinceCommit = geogig.getRepository().getCommit(sinceId.get()); Optional<ObjectId> untilId = geogig.command(RevParse.class).setRefSpec(commits.get(1)) .call(); checkParameter(untilId.isPresent(), "'until' reference cannot be found"); checkParameter(geogig.getRepository().commitExists(untilId.get()), "'until' reference does not resolve to a commit"); RevCommit untilCommit = geogig.getRepository().getCommit(untilId.get()); geogig.command(SquashOp.class).setSince(sinceCommit).setUntil(untilCommit) .setMessage(message).call(); }
/** * Executes the squash command using the provided options. */ @Override public void runInternal(GeogigCLI cli) { checkParameter(commits.size() == 2, "2 commit references must be supplied"); final GeoGIG geogig = cli.getGeogig(); Optional<ObjectId> sinceId = geogig.command(RevParse.class).setRefSpec(commits.get(0)) .call(); checkParameter(sinceId.isPresent(), "'since' reference cannot be found"); checkParameter(geogig.getRepository().commitExists(sinceId.get()), "'since' reference does not resolve to a commit"); RevCommit sinceCommit = geogig.getRepository().getCommit(sinceId.get()); Optional<ObjectId> untilId = geogig.command(RevParse.class).setRefSpec(commits.get(1)) .call(); checkParameter(untilId.isPresent(), "'until' reference cannot be found"); checkParameter(geogig.getRepository().commitExists(untilId.get()), "'until' reference does not resolve to a commit"); RevCommit untilCommit = geogig.getRepository().getCommit(untilId.get()); geogig.command(SquashOp.class).setSince(sinceCommit).setUntil(untilCommit) .setMessage(message).call(); }
@Test public void testSquashAtHistoryOrigin() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class).call(); commits.add(commit); } try { geogig.command(SquashOp.class).setSince(commits.get(0)).setUntil(commits.get(4)).call(); fail(); } catch (IllegalArgumentException e) { assertTrue(e.getMessage().contains("no parents")); } }
@Test public void testSquashAtHistoryOrigin() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class).call(); commits.add(commit); } try { geogig.command(SquashOp.class).setSince(commits.get(0)).setUntil(commits.get(4)).call(); fail(); } catch (IllegalArgumentException e) { assertTrue(e.getMessage().contains("no parents")); } }
@Test public void testSquash() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class).call(); commits.add(commit); } geogig.command(SquashOp.class).setSince(commits.get(1)).setUntil(commits.get(4)).call(); Iterator<RevCommit> log = geogig.command(LogOp.class).call(); ArrayList<RevCommit> logentries = Lists.newArrayList(log); assertEquals(3, logentries.size()); RevCommit headCommit = logentries.get(0); RevCommit squashedCommit = logentries.get(1); RevCommit presquashCommit = logentries.get(2); assertEquals(commits.get(5).getTreeId(), headCommit.getTreeId()); assertEquals(commits.get(1).getMessage(), squashedCommit.getMessage()); assertEquals(commits.get(4).getAuthor().getTimestamp(), squashedCommit.getAuthor().getTimestamp()); assertEquals(commits.get(0).getTreeId(), presquashCommit.getTreeId()); }
@Test public void testSquashAtBranchTip() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class).call(); commits.add(commit); } geogig.command(SquashOp.class).setSince(commits.get(1)).setUntil(commits.get(5)).call(); Iterator<RevCommit> log = geogig.command(LogOp.class).call(); ArrayList<RevCommit> logentries = Lists.newArrayList(log); assertEquals(2, logentries.size()); RevCommit squashedCommit = logentries.get(0); RevCommit presquashCommit = logentries.get(1); assertEquals(commits.get(5).getTreeId(), squashedCommit.getTreeId()); assertEquals(commits.get(1).getMessage(), squashedCommit.getMessage()); assertEquals(commits.get(5).getAuthor().getTimestamp(), squashedCommit.getAuthor().getTimestamp()); assertEquals(commits.get(0).getTreeId(), presquashCommit.getTreeId()); }
@Test public void testSquashWithMessage() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class).setMessage("Squashed").call(); commits.add(commit); } geogig.command(SquashOp.class).setSince(commits.get(1)).setUntil(commits.get(4)).call(); Iterator<RevCommit> log = geogig.command(LogOp.class).call(); ArrayList<RevCommit> logentries = Lists.newArrayList(log); assertEquals(3, logentries.size()); RevCommit headCommit = logentries.get(0); RevCommit squashedCommit = logentries.get(1); RevCommit presquashCommit = logentries.get(2); assertEquals(commits.get(5).getTreeId(), headCommit.getTreeId()); assertEquals("Squashed", squashedCommit.getMessage()); assertEquals(commits.get(4).getAuthor().getTimestamp(), squashedCommit.getAuthor().getTimestamp()); assertEquals(commits.get(0).getTreeId(), presquashCommit.getTreeId()); }
@Test public void testSquashWithMessage() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class).setMessage("Squashed").call(); commits.add(commit); } geogig.command(SquashOp.class).setSince(commits.get(1)).setUntil(commits.get(4)).call(); Iterator<RevCommit> log = geogig.command(LogOp.class).call(); ArrayList<RevCommit> logentries = Lists.newArrayList(log); assertEquals(3, logentries.size()); RevCommit headCommit = logentries.get(0); RevCommit squashedCommit = logentries.get(1); RevCommit presquashCommit = logentries.get(2); assertEquals(commits.get(5).getTreeId(), headCommit.getTreeId()); assertEquals("Squashed", squashedCommit.getMessage()); assertEquals(commits.get(4).getAuthor().getTimestamp(), squashedCommit.getAuthor().getTimestamp()); assertEquals(commits.get(0).getTreeId(), presquashCommit.getTreeId()); }
@Test public void testSquash() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class).call(); commits.add(commit); } geogig.command(SquashOp.class).setSince(commits.get(1)).setUntil(commits.get(4)).call(); Iterator<RevCommit> log = geogig.command(LogOp.class).call(); ArrayList<RevCommit> logentries = Lists.newArrayList(log); assertEquals(3, logentries.size()); RevCommit headCommit = logentries.get(0); RevCommit squashedCommit = logentries.get(1); RevCommit presquashCommit = logentries.get(2); assertEquals(commits.get(5).getTreeId(), headCommit.getTreeId()); assertEquals(commits.get(1).getMessage(), squashedCommit.getMessage()); assertEquals(commits.get(4).getAuthor().getTimestamp(), squashedCommit.getAuthor().getTimestamp()); assertEquals(commits.get(0).getTreeId(), presquashCommit.getTreeId()); }
@Test public void testSquashAtBranchTip() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class).call(); commits.add(commit); } geogig.command(SquashOp.class).setSince(commits.get(1)).setUntil(commits.get(5)).call(); Iterator<RevCommit> log = geogig.command(LogOp.class).call(); ArrayList<RevCommit> logentries = Lists.newArrayList(log); assertEquals(2, logentries.size()); RevCommit squashedCommit = logentries.get(0); RevCommit presquashCommit = logentries.get(1); assertEquals(commits.get(5).getTreeId(), squashedCommit.getTreeId()); assertEquals(commits.get(1).getMessage(), squashedCommit.getMessage()); assertEquals(commits.get(5).getAuthor().getTimestamp(), squashedCommit.getAuthor().getTimestamp()); assertEquals(commits.get(0).getTreeId(), presquashCommit.getTreeId()); }
@Test public void testSquash2() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class) .setMessage(f.getIdentifier().getID()).call(); commits.add(commit); } geogig.command(SquashOp.class).setSince(commits.get(1)).setUntil(commits.get(2)) .setMessage("squashed").call(); Iterator<RevCommit> log = geogig.command(LogOp.class).call(); ArrayList<RevCommit> logentries = Lists.newArrayList(log); assertEquals(5, logentries.size()); RevCommit squashedCommit = logentries.get(3); assertEquals(commits.get(2).getTreeId(), squashedCommit.getTreeId()); assertEquals("squashed", squashedCommit.getMessage()); }
@Test public void testSquashwithSameSinceAndUntilCommit() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class) .setMessage(f.getIdentifier().getID()).call(); commits.add(commit); } geogig.command(SquashOp.class).setSince(commits.get(1)).setUntil(commits.get(1)) .setMessage("squashed").call(); Iterator<RevCommit> log = geogig.command(LogOp.class).call(); ArrayList<RevCommit> logentries = Lists.newArrayList(log); assertEquals(6, logentries.size()); RevCommit squashedCommit = logentries.get(4); assertEquals(commits.get(1).getTreeId(), squashedCommit.getTreeId()); assertEquals("squashed", squashedCommit.getMessage()); }
@Test public void testSquashwithSameSinceAndUntilCommit() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class) .setMessage(f.getIdentifier().getID()).call(); commits.add(commit); } geogig.command(SquashOp.class).setSince(commits.get(1)).setUntil(commits.get(1)) .setMessage("squashed").call(); Iterator<RevCommit> log = geogig.command(LogOp.class).call(); ArrayList<RevCommit> logentries = Lists.newArrayList(log); assertEquals(6, logentries.size()); RevCommit squashedCommit = logentries.get(4); assertEquals(commits.get(1).getTreeId(), squashedCommit.getTreeId()); assertEquals("squashed", squashedCommit.getMessage()); }
@Test public void testSquash2() throws Exception { List<Feature> features = Arrays.asList(points1, lines1, points2, lines2, points3, lines3); List<RevCommit> commits = Lists.newArrayList(); for (Feature f : features) { insertAndAdd(f); final RevCommit commit = geogig.command(CommitOp.class) .setMessage(f.getIdentifier().getID()).call(); commits.add(commit); } geogig.command(SquashOp.class).setSince(commits.get(1)).setUntil(commits.get(2)) .setMessage("squashed").call(); Iterator<RevCommit> log = geogig.command(LogOp.class).call(); ArrayList<RevCommit> logentries = Lists.newArrayList(log); assertEquals(5, logentries.size()); RevCommit squashedCommit = logentries.get(3); assertEquals(commits.get(2).getTreeId(), squashedCommit.getTreeId()); assertEquals("squashed", squashedCommit.getMessage()); }
@Test public void testUncleanIndex() throws Exception { insertAndAdd(points1); RevCommit c1 = geogig.command(CommitOp.class).setMessage("commit for " + idP1).call(); insertAndAdd(points2); exception.expect(IllegalStateException.class); geogig.command(SquashOp.class).setSince(c1).setUntil(c1).call(); }
@Test public void testUncleanWorkingTree() throws Exception { insertAndAdd(points1); RevCommit c1 = geogig.command(CommitOp.class).setMessage("commit for " + idP1).call(); insert(points2); exception.expect(IllegalStateException.class); geogig.command(SquashOp.class).setSince(c1).setUntil(c1).call(); }
@Test public void testUncleanWorkingTree() throws Exception { insertAndAdd(points1); RevCommit c1 = geogig.command(CommitOp.class).setMessage("commit for " + idP1).call(); insert(points2); exception.expect(IllegalStateException.class); geogig.command(SquashOp.class).setSince(c1).setUntil(c1).call(); }
@Test public void testUncleanIndex() throws Exception { insertAndAdd(points1); RevCommit c1 = geogig.command(CommitOp.class).setMessage("commit for " + idP1).call(); insertAndAdd(points2); exception.expect(IllegalStateException.class); geogig.command(SquashOp.class).setSince(c1).setUntil(c1).call(); }
@Test public void testSquashwithBranchWithoutCommitsCreatedInChildren() throws Exception { insertAndAdd(points1); @SuppressWarnings("unused") final RevCommit c1 = geogig.command(CommitOp.class).setMessage("commit for " + idP1).call(); insertAndAdd(points2); final RevCommit c2 = geogig.command(CommitOp.class).setMessage("commit for " + idP2).call(); insertAndAdd(points3); final RevCommit c3 = geogig.command(CommitOp.class).setMessage("commit for " + idP3).call(); insertAndAdd(lines1); @SuppressWarnings("unused") final RevCommit c4 = geogig.command(CommitOp.class).setMessage("commit for " + idL1).call(); geogig.command(BranchCreateOp.class).setName("branch1").call(); insertAndAdd(lines2); @SuppressWarnings("unused") final RevCommit c5 = geogig.command(CommitOp.class).setMessage("commit for " + idL2).call(); try { geogig.command(SquashOp.class).setSince(c2).setUntil(c3).setMessage("Squashed").call(); fail(); } catch (IllegalArgumentException e) { assertTrue(e.getMessage().equals( "The commits after the ones to squash include a branch starting point. This scenario is not supported.")); } }