Package org.locationtech.geogig.api

Examples of org.locationtech.geogig.api.Ref


        Feature points1ModifiedB = feature(pointsType, idP1, "StringProp1_3", new Integer(2000),
                "POINT(1 1)");
        insertAndAdd(points1ModifiedB);
        geogig.command(CommitOp.class).call();
        geogig.command(CheckoutOp.class).setSource("master").call();
        Ref branch = geogig.command(RefParse.class).setName("TestBranch").call().get();
        try {
            geogig.command(MergeOp.class).addCommit(Suppliers.ofInstance(branch.getObjectId()))
                    .setTheirs(true).setOurs(true).call();
            fail();
        } catch (IllegalArgumentException e) {
            assertTrue(true);
        }
View Full Code Here


        // checkout master
        geogig.command(CheckoutOp.class).setSource("master").call();
        insertAndAdd(points3);
        RevCommit lastCommit = geogig.command(CommitOp.class).setMessage("commit for " + idP3)
                .call();
        Ref branch = geogig.command(RefParse.class).setName("branch1").call().get();

        geogig.command(MergeOp.class).addCommit(Suppliers.ofInstance(branch.getObjectId()))
                .setNoCommit(true).call();

        String path = NodeRef.appendChild(pointsName, idP2);
        Optional<RevFeature> revFeature = geogig.command(RevObjectParse.class)
                .setRefSpec(Ref.STAGE_HEAD + ":" + path).call(RevFeature.class);
        assertTrue(revFeature.isPresent());
        assertEquals(RevFeatureBuilder.build(points2), revFeature.get());
        revFeature = geogig.command(RevObjectParse.class).setRefSpec(Ref.HEAD + ":" + path)
                .call(RevFeature.class);
        assertFalse(revFeature.isPresent());
        revFeature = geogig.command(RevObjectParse.class).setRefSpec(Ref.WORK_HEAD + ":" + path)
                .call(RevFeature.class);
        assertTrue(revFeature.isPresent());
        assertEquals(RevFeatureBuilder.build(points2), revFeature.get());

        Optional<Ref> ref = geogig.command(RefParse.class).setName(Ref.ORIG_HEAD).call();
        assertTrue(ref.isPresent());
        assertEquals(lastCommit.getId(), ref.get().getObjectId());
        ref = geogig.command(RefParse.class).setName(Ref.MERGE_HEAD).call();
        assertTrue(ref.isPresent());
        assertEquals(branch.getObjectId(), ref.get().getObjectId());

    }
View Full Code Here

        insertAndAdd(points1ModifiedB);
        insertAndAdd(points2);
        geogig.command(CommitOp.class).call();

        geogig.command(CheckoutOp.class).setSource("master").call();
        Ref branch = geogig.command(RefParse.class).setName("TestBranch").call().get();
        try {
            geogig.command(MergeOp.class).addCommit(Suppliers.ofInstance(branch.getObjectId()))
                    .call();
            fail();
        } catch (MergeConflictsException e) {
            assertTrue(e.getMessage().contains("conflict"));
        }
View Full Code Here

                "POLYGON((0 0,1 0,2 0,3 0,4 0,5 0,5 1,4 1,3 0.8,2 0.8,1 1,1 0,0 0))");
        insertAndAdd(polygonBranch);
        geogig.command(CommitOp.class).call();

        geogig.command(CheckoutOp.class).setSource("master").call();
        Ref branch = geogig.command(RefParse.class).setName("TestBranch").call().get();
        geogig.command(MergeOp.class).addCommit(Suppliers.ofInstance(branch.getObjectId())).call();

        Optional<RevFeature> feature = repo.command(RevObjectParse.class)
                .setRefSpec("WORK_HEAD:polygons/polyId").call(RevFeature.class);
        assertTrue(feature.isPresent());
        RevFeature merged = feature.get();
View Full Code Here

        insertAndAdd(points1ModifiedB);
        insertAndAdd(points2);
        geogig.command(CommitOp.class).call();

        geogig.command(CheckoutOp.class).setSource("master").call();
        Ref branch = geogig.command(RefParse.class).setName("TestBranch").call().get();
        geogig.command(MergeOp.class).addCommit(Suppliers.ofInstance(branch.getObjectId())).call();

        String path = appendChild(pointsName, points1.getIdentifier().getID());

        Optional<RevFeature> feature = repo.command(RevObjectParse.class)
                .setRefSpec(/*
 
View Full Code Here

    @Override
    protected  Optional<? extends Ref> _call() {
        checkState(branchName != null, "Branch name not provided");
        Optional<Ref> branchRef = command(RefParse.class).setName(branchName).call();
        if (branchRef.isPresent()) {
            final Ref ref = branchRef.get();
            checkArgument(
                    ref.getName().startsWith(Ref.HEADS_PREFIX)
                            || ref.getName().startsWith(Ref.REMOTES_PREFIX), branchName
                            + " does not resolve to a branch reference: " + ref.getName());
            checkState(!(ref instanceof SymRef));

            final Optional<Ref> head = command(RefParse.class).setName(Ref.HEAD).call();
            checkState(!(head.isPresent() && head.get() instanceof SymRef && ((SymRef) head.get())
                    .getTarget().equals(ref.getName())), "Cannot delete the branch you are on");

            UpdateRef updateRef = command(UpdateRef.class).setName(ref.getName()).setDelete(true)
                    .setReason("Delete branch " + ref.getName());
            branchRef = updateRef.call();
            checkState(branchRef.isPresent());
        }
        return branchRef;
    }
View Full Code Here

        }
        return branchTrackingFile;
    }

    private SymRef getHead(GeoGIG geogig) {
        final Ref currentHead = geogig.command(RefParse.class).setName(Ref.HEAD).call().get();
        if (!(currentHead instanceof SymRef)) {
            throw new CommandFailedException("Cannot run on a dettached HEAD");
        }
        return (SymRef) currentHead;
    }
View Full Code Here

                }
                destRef = command(RefParse.class).setName(destinationref).call();
                result.setNewRef(destRef.get());
            } else {
                // make a new branch
                Ref newRef = command(BranchCreateOp.class).setAutoCheckout(true)
                        .setName(destinationref)
                        .setSource(sourceRef.get().getObjectId().toString()).call();
                result.setNewRef(newRef);
            }
View Full Code Here

        insertAndAdd(points1ModifiedB);
        insertAndAdd(points2);
        geogig.command(CommitOp.class).call();

        geogig.command(CheckoutOp.class).setSource("master").call();
        Ref branch = geogig.command(RefParse.class).setName("TestBranch").call().get();
        try {
            geogig.command(MergeOp.class).addCommit(Suppliers.ofInstance(branch.getObjectId()))
                    .call();
            fail();
        } catch (MergeConflictsException e) {
            assertTrue(e.getMessage().contains("conflict"));
        }
View Full Code Here

        Preconditions.checkArgument(commits.size() > 0, "No commits specified for merge.");
        Preconditions.checkArgument(!(ours && theirs), "Cannot use both --ours and --theirs.");

        final Optional<Ref> currHead = command(RefParse.class).setName(Ref.HEAD).call();
        Preconditions.checkState(currHead.isPresent(), "Repository has no HEAD, can't rebase.");
        Ref headRef = currHead.get();
        ObjectId oursId = headRef.getObjectId();
        // Preconditions.checkState(currHead.get() instanceof SymRef,
        // "Can't rebase from detached HEAD");
        // SymRef headRef = (SymRef) currHead.get();
        // final String currentBranch = headRef.getTarget();

        getProgressListener().started();

        boolean fastForward = true;
        boolean changed = false;

        Optional<MergeScenarioReport> mergeScenario = Optional.absent();

        List<CommitAncestorPair> pairs = Lists.newArrayList();

        boolean hasConflictsOrAutomerge;
        List<RevCommit> revCommits = Lists.newArrayList();
        if (!ObjectId.NULL.equals(headRef.getObjectId())) {
            revCommits.add(repository().getCommit(headRef.getObjectId()));
        }
        for (ObjectId commitId : commits) {
            revCommits.add(repository().getCommit(commitId));
        }
        hasConflictsOrAutomerge = command(CheckMergeScenarioOp.class).setCommits(revCommits).call()
                .booleanValue();

        if (hasConflictsOrAutomerge && !theirs) {
            Preconditions.checkState(commits.size() < 2,
                    "Conflicted merge.\nCannot merge more than two commits when conflicts exist"
                            + " or features have been modified in several histories");

            RevCommit headCommit = repository().getCommit(headRef.getObjectId());
            ObjectId commitId = commits.get(0);
            Preconditions.checkArgument(!ObjectId.NULL.equals(commitId),
                    "Cannot merge a NULL commit.");
            Preconditions.checkArgument(repository().commitExists(commitId), "Not a valid commit: "
                    + commitId.toString());

            final RevCommit targetCommit = repository().getCommit(commitId);
            Optional<ObjectId> ancestorCommit = command(FindCommonAncestor.class)
                    .setLeft(headCommit).setRight(targetCommit).call();

            pairs.add(new CommitAncestorPair(commitId, ancestorCommit.get()));

            mergeScenario = Optional.of(command(ReportMergeScenarioOp.class)
                    .setMergeIntoCommit(headCommit).setToMergeCommit(targetCommit).call());

            List<FeatureInfo> merged = mergeScenario.get().getMerged();
            for (FeatureInfo feature : merged) {
                this.workingTree().insert(NodeRef.parentPath(feature.getPath()),
                        feature.getFeature());
                Iterator<DiffEntry> unstaged = workingTree().getUnstaged(null);
                index().stage(getProgressListener(), unstaged, 0);
                changed = true;
                fastForward = false;
            }
            List<DiffEntry> unconflicting = mergeScenario.get().getUnconflicted();
            if (!unconflicting.isEmpty()) {
                index().stage(getProgressListener(), unconflicting.iterator(), 0);
                changed = true;
                fastForward = false;
            }

            workingTree().updateWorkHead(index().getTree().getId());

            List<Conflict> conflicts = mergeScenario.get().getConflicts();
            if (!ours && !conflicts.isEmpty()) {
                // In case we use the "ours" strategy, we do nothing. We ignore conflicting
                // changes and leave the current elements
                command(UpdateRef.class).setName(Ref.MERGE_HEAD).setNewValue(commitId).call();
                command(UpdateRef.class).setName(Ref.ORIG_HEAD).setNewValue(headCommit.getId())
                        .call();
                command(ConflictsWriteOp.class).setConflicts(conflicts).call();

                StringBuilder msg = new StringBuilder();
                Optional<Ref> ref = command(ResolveBranchId.class).setObjectId(commitId).call();
                if (ref.isPresent()) {
                    msg.append("Merge branch " + ref.get().getName());
                } else {
                    msg.append("Merge commit '" + commitId.toString() + "'. ");
                }
                msg.append("\n\nConflicts:\n");
                for (Conflict conflict : mergeScenario.get().getConflicts()) {
                    msg.append("\t" + conflict.getPath() + "\n");
                }

                command(SaveMergeCommitMessageOp.class).setMessage(msg.toString()).call();

                StringBuilder sb = new StringBuilder();
                for (Conflict conflict : conflicts) {
                    sb.append("CONFLICT: Merge conflict in " + conflict.getPath() + "\n");
                }
                sb.append("Automatic merge failed. Fix conflicts and then commit the result.\n");
                throw new MergeConflictsException(sb.toString(), headCommit.getId(), commitId);

            }
        } else {
            Preconditions.checkState(!hasConflictsOrAutomerge || commits.size() < 2,
                    "Conflicted merge.\nCannot merge more than two commits when conflicts exist"
                            + " or features have been modified in several histories");
            for (ObjectId commitId : commits) {
                ProgressListener subProgress = subProgress(100.f / commits.size());

                Preconditions.checkArgument(!ObjectId.NULL.equals(commitId),
                        "Cannot merge a NULL commit.");
                Preconditions.checkArgument(repository().commitExists(commitId),
                        "Not a valid commit: " + commitId.toString());

                subProgress.started();
                if (ObjectId.NULL.equals(headRef.getObjectId())) {
                    // Fast-forward
                    if (headRef instanceof SymRef) {
                        final String currentBranch = ((SymRef) headRef).getTarget();
                        command(UpdateRef.class).setName(currentBranch).setNewValue(commitId)
                                .call();
                        headRef = (SymRef) command(UpdateSymRef.class).setName(Ref.HEAD)
                                .setNewValue(currentBranch).call().get();
                    } else {
                        headRef = command(UpdateRef.class).setName(headRef.getName())
                                .setNewValue(commitId).call().get();
                    }

                    workingTree().updateWorkHead(commitId);
                    index().updateStageHead(commitId);
                    subProgress.complete();
                    changed = true;
                    continue;
                }

                RevCommit headCommit = repository().getCommit(headRef.getObjectId());
                final RevCommit targetCommit = repository().getCommit(commitId);

                Optional<ObjectId> ancestorCommit = command(FindCommonAncestor.class)
                        .setLeft(headCommit).setRight(targetCommit).call();

                pairs.add(new CommitAncestorPair(commitId, ancestorCommit.get()));

                subProgress.setProgress(10.f);

                Preconditions.checkState(ancestorCommit.isPresent(),
                        "No ancestor commit could be found.");

                if (commits.size() == 1) {
                    mergeScenario = Optional.of(command(ReportMergeScenarioOp.class)
                            .setMergeIntoCommit(headCommit).setToMergeCommit(targetCommit).call());
                    if (ancestorCommit.get().equals(headCommit.getId())) {
                        // Fast-forward
                        if (headRef instanceof SymRef) {
                            final String currentBranch = ((SymRef) headRef).getTarget();
                            command(UpdateRef.class).setName(currentBranch).setNewValue(commitId)
                                    .call();
                            headRef = (SymRef) command(UpdateSymRef.class).setName(Ref.HEAD)
                                    .setNewValue(currentBranch).call().get();
                        } else {
                            headRef = command(UpdateRef.class).setName(headRef.getName())
                                    .setNewValue(commitId).call().get();
                        }

                        workingTree().updateWorkHead(commitId);
                        index().updateStageHead(commitId);
View Full Code Here

TOP

Related Classes of org.locationtech.geogig.api.Ref

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.