diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/TreeFormatter.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/TreeFormatter.java index 6e53cc740..737a1c3fc 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/TreeFormatter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/TreeFormatter.java @@ -52,9 +52,11 @@ import static org.eclipse.jgit.lib.FileMode.TREE; import java.io.IOException; +import org.eclipse.jgit.errors.CorruptObjectException; import org.eclipse.jgit.revwalk.RevBlob; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevTree; +import org.eclipse.jgit.treewalk.CanonicalTreeParser; import org.eclipse.jgit.util.TemporaryBuffer; /** @@ -311,4 +313,38 @@ public class TreeFormatter { throw new RuntimeException(err); } } + + @Override + public String toString() { + byte[] raw = toByteArray(); + + CanonicalTreeParser p = new CanonicalTreeParser(); + p.reset(raw); + + StringBuilder r = new StringBuilder(); + r.append("Tree={"); + if (!p.eof()) { + r.append('\n'); + try { + new ObjectChecker().checkTree(raw); + } catch (CorruptObjectException error) { + r.append("*** ERROR: ").append(error.getMessage()).append("\n"); + r.append('\n'); + } + } + while (!p.eof()) { + final FileMode mode = p.getEntryFileMode(); + r.append(mode); + r.append(' '); + r.append(Constants.typeString(mode.getObjectType())); + r.append(' '); + r.append(p.getEntryObjectId().name()); + r.append(' '); + r.append(p.getEntryPathString()); + r.append('\n'); + p.next(); + } + r.append("}"); + return r.toString(); + } }