Example usage for org.eclipse.jgit.treewalk CanonicalTreeParser CanonicalTreeParser

List of usage examples for org.eclipse.jgit.treewalk CanonicalTreeParser CanonicalTreeParser

Introduction

In this page you can find the example usage for org.eclipse.jgit.treewalk CanonicalTreeParser CanonicalTreeParser.

Prototype

public CanonicalTreeParser() 

Source Link

Document

Create a new parser.

Usage

From source file:ShowFileDiff.java

License:Apache License

private static AbstractTreeIterator prepareTreeParser(Repository repository, String objectId)
        throws IOException, MissingObjectException, IncorrectObjectTypeException {
    // from the commit we can build the tree which allows us to construct the TreeParser
    RevWalk walk = new RevWalk(repository);
    RevCommit commit = walk.parseCommit(ObjectId.fromString(objectId));
    RevTree tree = walk.parseTree(commit.getTree().getId());

    CanonicalTreeParser oldTreeParser = new CanonicalTreeParser();
    ObjectReader oldReader = repository.newObjectReader();
    try {//from w w  w . ja v  a2 s  .c o m
        oldTreeParser.reset(oldReader, tree.getId());
    } finally {
        oldReader.release();
    }

    walk.dispose();

    return oldTreeParser;
}

From source file:at.bitandart.zoubek.mervin.gerrit.GerritReviewRepositoryService.java

License:Open Source License

/**
 * loads all patches of from the given list of {@link DiffEntry}s.
 * /*from w  w  w.j  a v a  2s . co m*/
 * @param patchSet
 *            the patchSet to add the patches to.
 * @param ref
 *            the ref to the commit of the patch set.
 * @param repository
 *            the git repository instance
 * @throws RepositoryIOException
 */
private void loadPatches(PatchSet patchSet, Ref ref, Git git) throws RepositoryIOException {

    EList<Patch> patches = patchSet.getPatches();
    Repository repository = git.getRepository();

    try {

        RevWalk revWalk = new RevWalk(repository);
        RevCommit newCommit = revWalk.parseCommit(ref.getObjectId());
        RevCommit oldCommit = newCommit.getParent(0);
        revWalk.parseHeaders(oldCommit);
        ObjectReader objectReader = repository.newObjectReader();
        revWalk.close();

        CanonicalTreeParser newTreeIterator = new CanonicalTreeParser();
        newTreeIterator.reset(objectReader, newCommit.getTree().getId());
        CanonicalTreeParser oldTreeIterator = new CanonicalTreeParser();
        oldTreeIterator.reset(objectReader, oldCommit.getTree().getId());

        List<DiffEntry> diffs = git.diff().setOldTree(oldTreeIterator).setNewTree(newTreeIterator).call();

        for (DiffEntry diff : diffs) {

            String newPath = diff.getNewPath();
            String oldPath = diff.getOldPath();
            Patch patch = null;

            /*
             * only papyrus diagrams are supported for now, so models are in
             * .uml files, diagrams in .notation files
             */

            if (diff.getChangeType() != ChangeType.DELETE) {
                if (newPath.endsWith(".uml")) {
                    patch = modelReviewFactory.createModelPatch();

                } else if (newPath.endsWith(".notation")) {
                    patch = modelReviewFactory.createDiagramPatch();
                } else {
                    patch = modelReviewFactory.createPatch();
                }
            } else {
                if (oldPath.endsWith(".uml")) {
                    patch = modelReviewFactory.createModelPatch();

                } else if (oldPath.endsWith(".notation")) {
                    patch = modelReviewFactory.createDiagramPatch();
                } else {
                    patch = modelReviewFactory.createPatch();
                }
            }

            switch (diff.getChangeType()) {
            case ADD:
                patch.setChangeType(PatchChangeType.ADD);
                break;
            case COPY:
                patch.setChangeType(PatchChangeType.COPY);
                break;
            case DELETE:
                patch.setChangeType(PatchChangeType.DELETE);
                break;
            case MODIFY:
                patch.setChangeType(PatchChangeType.MODIFY);
                break;
            case RENAME:
                patch.setChangeType(PatchChangeType.RENAME);
                break;
            }

            patch.setNewPath(newPath);
            patch.setOldPath(oldPath);

            if (diff.getChangeType() != ChangeType.DELETE) {
                ObjectLoader objectLoader = repository.open(diff.getNewId().toObjectId());
                patch.setNewContent(objectLoader.getBytes());
            }
            if (diff.getChangeType() != ChangeType.ADD) {
                ObjectLoader objectLoader = repository.open(diff.getOldId().toObjectId());
                patch.setOldContent(objectLoader.getBytes());
            }
            patches.add(patch);

        }

    } catch (IOException e) {
        throw new RepositoryIOException(MessageFormat.format(
                "An IO error occured during loading the patches for patch set #{0}", patchSet.getId()), e);
    } catch (GitAPIException e) {
        throw new RepositoryIOException(
                MessageFormat.format("An JGit API error occured during loading the patches for patch set #{0}",
                        patchSet.getId()),
                e);
    }
}

From source file:br.edu.ifpb.scm.api.git.Git.java

private List<DiffEntry> getDiff(String commit, boolean flag) throws IOException {
    ObjectReader reader = git.getRepository().newObjectReader();
    CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
    ObjectId oldTree = git.getRepository().resolve(commit + "^{tree}"); // equals newCommit.getTree()
    oldTreeIter.reset(reader, oldTree);//from  ww w.  j  a v  a2s  .c o  m
    ObjectId newTree = null;
    if (flag) {
        newTree = git.getRepository().resolve(commit + HEAD); // equals oldCommit.getTree()
    } else {
        newTree = git.getRepository().resolve(commit + HEAD_NEIGHBOR); // equals oldCommit.getTree()
    }

    DiffFormatter formatter = new DiffFormatter(System.out);
    formatter.setRepository(git.getRepository());
    List<DiffEntry> scan = formatter.scan(oldTree, newTree);

    return scan;
}

From source file:br.edu.ifpb.scm.api.git.Git.java

/**
 * Recupera a diferea entre as verses//from   w  w w  .j a  v a2 s  .c  om
 *
 * @param repoJGit {@link org.eclipse.jgit.lib.Repository} Repositorio JGit
 * JGit
 * @param rev1 {@link RevCommit} RevCommit
 * @param rev2 {@link RevCommit} RevCommit
 * @return {@link List} List de {@link Version}
 */
private List<ChangedFiles> searchDiff(RevCommit rev1, RevCommit rev2) {
    List<ChangedFiles> listaOfChangedFiles = new ArrayList<>();
    try {
        ObjectId oldHead = repoJGit.resolve(rev2.getTree().getName());
        ObjectId head = repoJGit.resolve(rev1.getTree().getName());
        ObjectReader reader = repoJGit.newObjectReader();
        CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
        oldTreeIter.reset(reader, oldHead);
        CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
        newTreeIter.reset(reader, head);
        org.eclipse.jgit.api.Git g = new org.eclipse.jgit.api.Git(repoJGit);

        List<DiffEntry> diffs = g.diff().setNewTree(newTreeIter).setOldTree(oldTreeIter).call();

        diffs.iterator().forEachRemaining(entry -> {
            String oldPath = null;
            if (entry.getChangeType().equals(DiffEntry.ChangeType.MODIFY)
                    || entry.getChangeType().equals(DiffEntry.ChangeType.COPY)) {
                oldPath = entry.getOldPath();
            }
            List<DiffEntry> call = Collections.EMPTY_LIST;
            ChangedFiles changed = new ChangedFiles(oldPath, entry.getNewPath(), entry.getChangeType().name(),
                    call);
            listaOfChangedFiles.add(changed);
        });
    } catch (RevisionSyntaxException | IOException | GitAPIException e) {
        throw new DiffException(e);
    }

    return listaOfChangedFiles;
}

From source file:br.edu.ifpb.scm.api.loads.Loader.java

public static void showFileDiffs(Git gitRepository) {
    Repository repo = gitRepository.getRepository();

    try {/*from  w ww .  ja v  a2s  .  c  o  m*/
        ObjectId head = ObjectId.fromString("c24af304077e4a6d1925db7cd35d0cd1ed488d6a");
        ObjectId previousHead = ObjectId.fromString("c16be41e77bb53a4b639cb864c9a6e4d0f8df7c2");
        ObjectReader reader = repo.newObjectReader();

        CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
        oldTreeIter.reset(reader, previousHead);
        CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
        newTreeIter.reset(reader, head);

        List<DiffEntry> listDiffs = gitRepository.diff().setOldTree(oldTreeIter).setNewTree(newTreeIter).call();

        listDiffs.stream().forEach((DiffEntry diff) -> {

            DiffFormatter formatter = new DiffFormatter(System.out);
            formatter.setRepository(repo);
            System.out.println(diff);
            try {
                formatter.format(diff);
            } catch (IOException ex) {
                Logger.getLogger(Loader.class.getName()).log(Level.SEVERE, null, ex);
            }
        });
    } catch (IOException | GitAPIException ex) {
        Logger.getLogger(Loader.class.getName()).log(Level.SEVERE, null, ex);
    }
}

From source file:br.edu.ifpb.scm.api.loads.LoaderVersions.java

public static void teste2() throws IOException, GitAPIException {
    org.eclipse.jgit.api.Git git = org.eclipse.jgit.api.Git.open(PATH);
    org.eclipse.jgit.lib.Repository repository = git.getRepository();

    repository.findRef(URL);/*from   ww  w .ja  v  a  2 s. com*/

    ObjectId oldHead = repository.resolve("HEAD~^{tree}");
    ObjectId newHead = repository.resolve("HEAD^{tree}");

    ObjectReader reader = repository.newObjectReader();
    CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
    //        ObjectId oldTree = git.getRepository().resolve("SHA-1{64c852a8fe9e3673aa381f95c4b0420986d1f925}");

    CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
    //        ObjectId newTree = git.getRepository().resolve("SHA-1{12ae7a9960c49cfe68bdd5f7b0a58e1b3b0c6e56}");

    oldTreeIter.reset(reader, oldHead);
    newTreeIter.reset(reader, newHead);

    try (org.eclipse.jgit.api.Git g = new org.eclipse.jgit.api.Git(repository)) {
        List<DiffEntry> diffs = g.diff().setNewTree(newTreeIter).setOldTree(oldTreeIter).call();
        for (DiffEntry entry : diffs) {
            System.out.println("Entry: " + entry);
        }
    }

    //        DiffFormatter diffFormatter = new DiffFormatter(DisabledOutputStream.INSTANCE);
    //        diffFormatter.setRepository(git.getRepository());
    //        List<DiffEntry> entries = diffFormatter.scan(oldTreeIter, newTreeIter);
    //
    //        entries.stream().forEach((entry) -> {
    //            System.out.println(entry.getChangeType());
    //        });
}

From source file:br.edu.ifpb.scm.api.loads.LoaderVersions.java

public static void funcionando(final String commit) throws IOException, GitAPIException {
    org.eclipse.jgit.api.Git git = org.eclipse.jgit.api.Git.open(PATH);
    try (org.eclipse.jgit.lib.Repository repository = git.getRepository()) {
        // The {tree} will return the underlying tree-id instead of the commit-id itself!
        // For a description of what the carets do see e.g. http://www.paulboxley.com/blog/2011/06/git-caret-and-tilde
        // This means we are selecting the parent of the parent of the parent of the parent of current HEAD and
        // take the tree-ish of it
        //id da tree
        // a RevWalk allows to walk over commits based on some filtering that is defined

        ObjectId obj = ObjectId.fromString(commit);
        RevWalk walk = new RevWalk(repository);
        RevCommit revCommit = walk.parseCommit(obj);

        RevCommit[] arra = revCommit.getParents();

        ObjectId obj2 = ObjectId.fromString(arra[0].getName());
        RevWalk walk2 = new RevWalk(repository);
        RevCommit revCommit2 = walk2.parseCommit(obj2);

        ObjectId oldHead = repository.resolve(revCommit2.getTree().getName());
        ObjectId head = repository.resolve(revCommit.getTree().getName());

        //Pegando o codigo de cada commit pra arvore
        System.out.println("Printing diff between tree: " + oldHead.getName() + " and " + head.getName());

        // prepare the two iterators to compute the diff between
        try (ObjectReader reader = repository.newObjectReader()) {
            CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
            oldTreeIter.reset(reader, oldHead);
            CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
            newTreeIter.reset(reader, head);

            // finally get the list of changed files
            try (org.eclipse.jgit.api.Git g = new org.eclipse.jgit.api.Git(repository)) {
                List<DiffEntry> diffs = g.diff().setNewTree(newTreeIter).setOldTree(oldTreeIter).call();
                diffs.stream().forEach((entry) -> {
                    System.out.println("Entry: " + entry);
                });//from  w ww .jav a  2  s. com
            }
        }
    }

    System.out.println("Done");

}

From source file:ch.uzh.ifi.seal.permo.history.git.core.model.jgit.JGitCommit.java

License:Apache License

private AbstractTreeIterator getTreeIteratorOfCommit(final Repository repo, final RevCommit commit)
        throws IncorrectObjectTypeException, IOException {
    final ObjectId head = commit.getTree().getId();
    final ObjectReader reader = repo.newObjectReader();
    final CanonicalTreeParser treeIt = new CanonicalTreeParser();
    treeIt.reset(reader, head);/*from   w  w  w.  j a  v  a2 s  . c om*/
    return treeIt;
}

From source file:co.bledo.gitmin.servlet.Review.java

License:Apache License

private AbstractTreeIterator getTreeIterator(Repository repo, String name) throws IOException {
    final ObjectId id = repo.resolve(name);
    if (id == null)
        throw new IllegalArgumentException(name);
    final CanonicalTreeParser p = new CanonicalTreeParser();
    final ObjectReader or = repo.newObjectReader();
    try {/*from   ww  w  .  ja v a  2s . c om*/
        p.reset(or, new RevWalk(repo).parseTree(id));
        return p;
    } finally {
        or.release();
    }
}

From source file:com.addthis.hydra.job.store.JobStoreGit.java

License:Apache License

private AbstractTreeIterator getTreeIterator(String name) throws IOException {
    final ObjectId id = repository.resolve(name);
    if (id == null) {
        throw new IllegalArgumentException(name);
    }/*from   w  ww.  jav a  2s.  c  o  m*/
    final CanonicalTreeParser p = new CanonicalTreeParser();
    final ObjectReader or = repository.newObjectReader();
    try {
        p.reset(or, new RevWalk(repository).parseTree(id));
        return p;
    } finally {
        or.release();
    }
}