}
tw.setRecursive(true);
MutableObjectId id = new MutableObjectId();
long modified = commit.getAuthorIdent().getWhen().getTime();
while (tw.next()) {
FileMode mode = tw.getFileMode(0);
if (mode == FileMode.GITLINK || mode == FileMode.TREE) {
continue;
}
tw.getObjectId(id, 0);
ObjectLoader loader = repository.open(id);
if (FileMode.SYMLINK == mode) {
TarArchiveEntry entry = new TarArchiveEntry(tw.getPathString(),TarArchiveEntry.LF_SYMLINK);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
loader.copyTo(bos);
entry.setLinkName(bos.toString());
entry.setModTime(modified);
tos.putArchiveEntry(entry);
tos.closeArchiveEntry();
} else {
TarArchiveEntry entry = new TarArchiveEntry(tw.getPathString());
entry.setMode(mode.getBits());
entry.setModTime(modified);
entry.setSize(loader.getSize());
tos.putArchiveEntry(entry);
loader.copyTo(tos);
tos.closeArchiveEntry();