Example usage for org.eclipse.jgit.treewalk TreeWalk reset

List of usage examples for org.eclipse.jgit.treewalk TreeWalk reset

Introduction

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

Prototype

public void reset(AnyObjectId... ids)
        throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException 

Source Link

Document

Reset this walker to run over a set of existing trees.

Usage

From source file:com.gitblit.utils.JGitUtils.java

License:Apache License

/**
 * Retrieves the raw byte content of a file in the specified tree.
 *
 * @param repository/*  w  w  w.j  a va 2  s .c  om*/
 * @param tree
 *            if null, the RevTree from HEAD is assumed.
 * @param path
 * @return content as a byte []
 */
public static byte[] getByteContent(Repository repository, RevTree tree, final String path,
        boolean throwError) {
    RevWalk rw = new RevWalk(repository);
    TreeWalk tw = new TreeWalk(repository);
    tw.setFilter(PathFilterGroup.createFromStrings(Collections.singleton(path)));
    byte[] content = null;
    try {
        if (tree == null) {
            ObjectId object = getDefaultBranch(repository);
            if (object == null)
                return null;
            RevCommit commit = rw.parseCommit(object);
            tree = commit.getTree();
        }
        tw.reset(tree);
        while (tw.next()) {
            if (tw.isSubtree() && !path.equals(tw.getPathString())) {
                tw.enterSubtree();
                continue;
            }
            ObjectId entid = tw.getObjectId(0);
            FileMode entmode = tw.getFileMode(0);
            if (entmode != FileMode.GITLINK) {
                ObjectLoader ldr = repository.open(entid, Constants.OBJ_BLOB);
                content = ldr.getCachedBytes();
            }
        }
    } catch (Throwable t) {
        if (throwError) {
            error(t, repository, "{0} can't find {1} in tree {2}", path, tree.name());
        }
    } finally {
        rw.dispose();
        tw.close();
    }
    return content;
}

From source file:com.gitblit.utils.JGitUtils.java

License:Apache License

public static String getSubmoduleCommitId(Repository repository, String path, RevCommit commit) {
    String commitId = null;/*from w  ww . j  ava2  s .c o  m*/
    RevWalk rw = new RevWalk(repository);
    TreeWalk tw = new TreeWalk(repository);
    tw.setFilter(PathFilterGroup.createFromStrings(Collections.singleton(path)));
    try {
        tw.reset(commit.getTree());
        while (tw.next()) {
            if (tw.isSubtree() && !path.equals(tw.getPathString())) {
                tw.enterSubtree();
                continue;
            }
            if (FileMode.GITLINK == tw.getFileMode(0)) {
                commitId = tw.getObjectId(0).getName();
                break;
            }
        }
    } catch (Throwable t) {
        error(t, repository, "{0} can't find {1} in commit {2}", path, commit.name());
    } finally {
        rw.dispose();
        tw.close();
    }
    return commitId;
}

From source file:com.mpdeimos.ct_tests.vcs.GitFileDiff.java

License:Apache License

/**
 * Computer file diffs for specified tree walk and commit
 *
 * @param walk/*from   w  w w  .jav  a  2s.c o  m*/
 * @param commit
 * @return non-null but possibly empty array of file diffs
 * @throws MissingObjectException
 * @throws IncorrectObjectTypeException
 * @throws CorruptObjectException
 * @throws IOException
 */
public static GitFileDiff[] compute(final TreeWalk walk, final RevCommit commit)
        throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException {
    final ArrayList<GitFileDiff> r = new ArrayList<GitFileDiff>();

    if (commit.getParentCount() > 0)
        walk.reset(trees(commit));
    else {
        walk.reset();
        walk.addTree(new EmptyTreeIterator());
        walk.addTree(commit.getTree());
    }

    if (walk.getTreeCount() <= 2) {
        List<DiffEntry> entries = DiffEntry.scan(walk);
        for (DiffEntry entry : entries) {
            final GitFileDiff d = new GitFileDiff(commit, entry);
            r.add(d);
        }
    } else { // DiffEntry does not support walks with more than two trees
        final int nTree = walk.getTreeCount();
        final int myTree = nTree - 1;
        while (walk.next()) {
            if (matchAnyParent(walk, myTree))
                continue;

            final GitFileDiffForMerges d = new GitFileDiffForMerges(commit);
            d.path = walk.getPathString();
            int m0 = 0;
            for (int i = 0; i < myTree; i++)
                m0 |= walk.getRawMode(i);
            final int m1 = walk.getRawMode(myTree);
            d.change = ChangeType.MODIFY;
            if (m0 == 0 && m1 != 0)
                d.change = ChangeType.ADD;
            else if (m0 != 0 && m1 == 0)
                d.change = ChangeType.DELETE;
            else if (m0 != m1 && walk.idEqual(0, myTree))
                d.change = ChangeType.MODIFY; // there is no ChangeType.TypeChanged
            d.blobs = new ObjectId[nTree];
            d.modes = new FileMode[nTree];
            for (int i = 0; i < nTree; i++) {
                d.blobs[i] = walk.getObjectId(i);
                d.modes[i] = walk.getFileMode(i);
            }
            r.add(d);
        }

    }

    final GitFileDiff[] tmp = new GitFileDiff[r.size()];
    r.toArray(tmp);
    return tmp;
}

From source file:com.netbeetle.reboot.git.CachedRepository.java

License:Apache License

public TreeWalk openTree(ObjectId treeId, boolean recursive) throws IOException {
    TreeWalk treeWalk = new TreeWalk(repository.getObjectDatabase().newReader());
    treeWalk.reset(treeId);
    treeWalk.setRecursive(recursive);/*from  w  w  w .  ja  v a  2  s .c  o  m*/
    return treeWalk;
}

From source file:com.smartitengineering.version.impl.jgit.JGitImpl.java

License:Open Source License

protected Set<ObjectId> getGraphForResourceId(String resourceId)
        throws MissingObjectException, IncorrectObjectTypeException, IOException {
    final Set<ObjectId> versions = new LinkedHashSet<ObjectId>();
    final RevWalk rw = new RevWalk(getReadRepository());
    final TreeWalk tw = new TreeWalk(getReadRepository());
    rw.markStart(rw.parseCommit(getReadRepository().resolve(Constants.HEAD)));
    tw.setFilter(TreeFilter.ANY_DIFF);//from   ww  w .  j av  a2 s .c  o m
    RevCommit c;
    while ((c = rw.next()) != null) {
        final ObjectId[] p = new ObjectId[c.getParentCount() + 1];
        for (int i = 0; i < c.getParentCount(); i++) {
            rw.parseAny(c.getParent(i));
            p[i] = c.getParent(i).getTree();
        }
        final int me = p.length - 1;
        p[me] = c.getTree();
        tw.reset(p);
        while (tw.next()) {
            if (tw.getFileMode(me).getObjectType() == Constants.OBJ_BLOB) {
                // This path was modified relative to the ancestor(s)
                String s = tw.getPathString();
                if (s != null && s.equals(resourceId)) {
                    versions.add(tw.getObjectId(me));
                }
            }
            if (tw.isSubtree()) {
                // make sure we recurse into modified directories
                tw.enterSubtree();
            }
        }
    }
    return versions;
}

From source file:com.tasktop.c2c.server.scm.service.GitBrowseUtil.java

License:Open Source License

private static TreeWalk getTreeOnPath(MutableObjectId id, Repository repo, ObjectId rev, String path)
        throws MissingObjectException, IOException {

    RevTree tree = new RevWalk(repo).parseTree(rev);

    TreeWalk tw = new TreeWalk(repo);
    tw.reset(tree);
    tw.setRecursive(false);/*from   w  w  w . ja  v  a2 s.  c  o  m*/

    if (path == null || path.isEmpty() || "/".equals(path)) {
        id.fromObjectId(tree.getId());
        return tw;
    }

    PathFilter f = PathFilter.create(path);
    tw.setFilter(f);

    while (tw.next()) {
        if (f.isDone(tw)) {
            id.fromObjectId(tw.getObjectId(0));
            if (tw.isSubtree()) {
                tw.enterSubtree();
                return tw;
            } else {
                throw new MissingObjectException(tw.getObjectId(0), Constants.OBJ_TREE);
            }

        } else if (tw.isSubtree()) {
            tw.enterSubtree();
        }
    }
    return null;

}

From source file:com.xiplink.jira.git.FileDiff.java

License:Open Source License

static FileDiff[] compute(final TreeWalk walk, final RevCommit commit)
        throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException {
    final ArrayList<FileDiff> r = new ArrayList<FileDiff>();

    if (commit.getParentCount() > 0) {
        walk.reset(trees(commit));
    } else {/*w  w w .j  a  v a 2  s.c om*/
        walk.reset();
        walk.addTree(new EmptyTreeIterator());
        walk.addTree(commit.getTree());
    }

    if (walk.getTreeCount() <= 2) {
        List<DiffEntry> entries = DiffEntry.scan(walk);
        int number = 0;
        for (DiffEntry entry : entries) {
            final FileDiff d = new FileDiff(commit, entry, number);
            r.add(d);
            number++;
        }
    } else { // DiffEntry does not support walks with more than two trees
        final int nTree = walk.getTreeCount();
        final int myTree = nTree - 1;
        while (walk.next()) {
            if (matchAnyParent(walk, myTree)) {
                continue;
            }

            final FileDiffForMerges d = new FileDiffForMerges(commit);
            d.path = walk.getPathString();
            int m0 = 0;
            for (int i = 0; i < myTree; i++) {
                m0 |= walk.getRawMode(i);
            }
            final int m1 = walk.getRawMode(myTree);
            d.change = ChangeType.MODIFY;
            if (m0 == 0 && m1 != 0) {
                d.change = ChangeType.ADD;
            } else if (m0 != 0 && m1 == 0) {
                d.change = ChangeType.DELETE;
            } else if (m0 != m1 && walk.idEqual(0, myTree)) {
                d.change = ChangeType.MODIFY; // there is no ChangeType.TypeChanged
            }
            d.blobs = new ObjectId[nTree];
            d.modes = new FileMode[nTree];
            for (int i = 0; i < nTree; i++) {
                d.blobs[i] = walk.getObjectId(i);
                d.modes[i] = walk.getFileMode(i);
            }
            r.add(d);
        }

    }

    final FileDiff[] tmp = new FileDiff[r.size()];
    r.toArray(tmp);
    return tmp;
}

From source file:org.eclipse.egit.ui.internal.history.FileDiff.java

License:Open Source License

static FileDiff[] compute(final TreeWalk walk, final RevCommit commit)
        throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException {
    final ArrayList<FileDiff> r = new ArrayList<FileDiff>();

    if (commit.getParentCount() > 0)
        walk.reset(trees(commit));
    else {// w w w.  j  a v  a2s  . c  om
        walk.reset();
        walk.addTree(new EmptyTreeIterator());
        walk.addTree(commit.getTree());
    }

    if (walk.getTreeCount() <= 2) {
        List<DiffEntry> entries = DiffEntry.scan(walk);
        for (DiffEntry entry : entries) {
            final FileDiff d = new FileDiff(commit, entry);
            r.add(d);
        }
    } else { // DiffEntry does not support walks with more than two trees
        final int nTree = walk.getTreeCount();
        final int myTree = nTree - 1;
        while (walk.next()) {
            if (matchAnyParent(walk, myTree))
                continue;

            final FileDiffForMerges d = new FileDiffForMerges(commit);
            d.path = walk.getPathString();
            int m0 = 0;
            for (int i = 0; i < myTree; i++)
                m0 |= walk.getRawMode(i);
            final int m1 = walk.getRawMode(myTree);
            d.change = ChangeType.MODIFY;
            if (m0 == 0 && m1 != 0)
                d.change = ChangeType.ADD;
            else if (m0 != 0 && m1 == 0)
                d.change = ChangeType.DELETE;
            else if (m0 != m1 && walk.idEqual(0, myTree))
                d.change = ChangeType.MODIFY; // there is no ChangeType.TypeChanged
            d.blobs = new ObjectId[nTree];
            d.modes = new FileMode[nTree];
            for (int i = 0; i < nTree; i++) {
                d.blobs[i] = walk.getObjectId(i);
                d.modes[i] = walk.getFileMode(i);
            }
            r.add(d);
        }

    }

    final FileDiff[] tmp = new FileDiff[r.size()];
    r.toArray(tmp);
    return tmp;
}

From source file:org.flowerplatform.web.git.history.internal.FileDiff.java

License:Open Source License

/**
 * Computer file diffs for specified tree walk and commit
 *
 * @param walk//from   ww  w .j a  v  a2s .  com
 * @param commit
 * @param markTreeFilters optional filters for marking entries, see {@link #isMarked(int)}
 * @return non-null but possibly empty array of file diffs
 * @throws MissingObjectException
 * @throws IncorrectObjectTypeException
 * @throws CorruptObjectException
 * @throws IOException
 */
public static FileDiff[] compute(final TreeWalk walk, final RevCommit commit,
        final TreeFilter... markTreeFilters)
        throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException {
    final ArrayList<FileDiff> r = new ArrayList<FileDiff>();

    if (commit.getParentCount() > 0)
        walk.reset(trees(commit));
    else {
        walk.reset();
        walk.addTree(new EmptyTreeIterator());
        walk.addTree(commit.getTree());
    }

    if (walk.getTreeCount() <= 2) {
        List<DiffEntry> entries = DiffEntry.scan(walk, false, markTreeFilters);
        for (DiffEntry entry : entries) {
            final FileDiff d = new FileDiff(commit, entry);
            r.add(d);
        }
    } else { // DiffEntry does not support walks with more than two trees
        final int nTree = walk.getTreeCount();
        final int myTree = nTree - 1;

        TreeFilterMarker treeFilterMarker = new TreeFilterMarker(markTreeFilters);

        while (walk.next()) {
            if (matchAnyParent(walk, myTree))
                continue;

            int treeFilterMarks = treeFilterMarker.getMarks(walk);

            final FileDiffForMerges d = new FileDiffForMerges(commit, treeFilterMarks);
            d.path = walk.getPathString();
            int m0 = 0;
            for (int i = 0; i < myTree; i++)
                m0 |= walk.getRawMode(i);
            final int m1 = walk.getRawMode(myTree);
            d.change = ChangeType.MODIFY;
            if (m0 == 0 && m1 != 0)
                d.change = ChangeType.ADD;
            else if (m0 != 0 && m1 == 0)
                d.change = ChangeType.DELETE;
            else if (m0 != m1 && walk.idEqual(0, myTree))
                d.change = ChangeType.MODIFY; // there is no ChangeType.TypeChanged
            d.blobs = new ObjectId[nTree];
            d.modes = new FileMode[nTree];
            for (int i = 0; i < nTree; i++) {
                d.blobs[i] = walk.getObjectId(i);
                d.modes[i] = walk.getFileMode(i);
            }

            r.add(d);
        }

    }

    final FileDiff[] tmp = new FileDiff[r.size()];
    r.toArray(tmp);
    return tmp;
}

From source file:org.kie.commons.java.nio.fs.jgit.util.JGitUtil.java

License:Apache License

public static InputStream resolveInputStream(final Git git, final String treeRef, final String path) {
    checkNotNull("git", git);
    checkNotEmpty("treeRef", treeRef);
    checkNotEmpty("path", path);

    final String gitPath = fixPath(path);

    RevWalk rw = null;//from ww  w .ja  v  a  2 s . c o  m
    TreeWalk tw = null;
    try {
        final ObjectId tree = git.getRepository().resolve(treeRef + "^{tree}");
        rw = new RevWalk(git.getRepository());
        tw = new TreeWalk(git.getRepository());
        tw.setFilter(createFromStrings(singleton(gitPath)));
        tw.reset(tree);
        while (tw.next()) {
            if (tw.isSubtree() && !gitPath.equals(tw.getPathString())) {
                tw.enterSubtree();
                continue;
            }
            final ObjectId entid = tw.getObjectId(0);
            final FileMode entmode = tw.getFileMode(0);
            final RevObject ro = rw.lookupAny(entid, entmode.getObjectType());
            rw.parseBody(ro);
            final ObjectLoader ldr = git.getRepository().open(ro.getId(), Constants.OBJ_BLOB);
            return ldr.openStream();
        }
    } catch (final Throwable t) {
        throw new NoSuchFileException("Can't find '" + gitPath + "' in tree '" + treeRef + "'");
    } finally {
        if (rw != null) {
            rw.dispose();
        }
        if (tw != null) {
            tw.release();
        }
    }
    throw new NoSuchFileException("");
}