Example usage for org.eclipse.jgit.lib ObjectChecker checkTree

List of usage examples for org.eclipse.jgit.lib ObjectChecker checkTree

Introduction

In this page you can find the example usage for org.eclipse.jgit.lib ObjectChecker checkTree.

Prototype

public void checkTree(byte[] raw) throws CorruptObjectException 

Source Link

Document

Check a canonical formatted tree for errors.

Usage

From source file:svnserver.repository.git.LayoutHelper.java

License:GNU General Public License

@Nullable
private static ObjectId createSvnLayoutTree(@NotNull ObjectInserter inserter,
        @NotNull Map<String, ObjectId> revBranches) throws IOException {
    final Deque<TreeFormatter> stack = new ArrayDeque<>();
    stack.add(new TreeFormatter());
    String dir = "";
    final ObjectChecker checker = new ObjectChecker();
    for (Map.Entry<String, ObjectId> entry : new TreeMap<>(revBranches).entrySet()) {
        final String path = entry.getKey();
        // Save already added nodes.
        while (!path.startsWith(dir)) {
            final int index = dir.lastIndexOf('/', dir.length() - 2) + 1;
            final TreeFormatter tree = stack.pop();
            checker.checkTree(tree.toByteArray());
            stack.element().append(dir.substring(index, dir.length() - 1), FileMode.TREE,
                    inserter.insert(tree));
            dir = dir.substring(0, index);
        }/*from ww w.ja v  a2 s.  c o  m*/
        // Go deeper.
        for (int index = path.indexOf('/', dir.length()) + 1; index < path
                .length(); index = path.indexOf('/', index) + 1) {
            dir = path.substring(0, index);
            stack.push(new TreeFormatter());
        }
        // Add commit to tree.
        {
            final int index = path.lastIndexOf('/', path.length() - 2) + 1;
            stack.element().append(path.substring(index, path.length() - 1), FileMode.GITLINK,
                    entry.getValue());
        }
    }
    // Save already added nodes.
    while (!dir.isEmpty()) {
        int index = dir.lastIndexOf('/', dir.length() - 2) + 1;
        final TreeFormatter tree = stack.pop();
        checker.checkTree(tree.toByteArray());
        stack.element().append(dir.substring(index, dir.length() - 1), FileMode.TREE, inserter.insert(tree));
        dir = dir.substring(0, index);
    }
    // Save root tree to disk.
    final TreeFormatter rootTree = stack.pop();
    checker.checkTree(rootTree.toByteArray());
    if (!stack.isEmpty()) {
        throw new IllegalStateException();
    }
    return inserter.insert(rootTree);
}