From: James Moger Date: Tue, 4 Dec 2012 02:29:32 +0000 (-0500) Subject: Fixes to symlink handling (issue-174) X-Git-Tag: v1.2.0~31 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8ee931e0a051b73c1128e8fa73ead9084c6d2e09;p=gitblit.git Fixes to symlink handling (issue-174) --- diff --git a/src/com/gitblit/utils/CompressionUtils.java b/src/com/gitblit/utils/CompressionUtils.java index 41451906..a8dcdd8f 100644 --- a/src/com/gitblit/utils/CompressionUtils.java +++ b/src/com/gitblit/utils/CompressionUtils.java @@ -27,6 +27,7 @@ import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import org.apache.commons.compress.compressors.CompressorException; import org.apache.commons.compress.compressors.CompressorStreamFactory; +import org.apache.wicket.util.io.ByteArrayOutputStream; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.MutableObjectId; @@ -256,7 +257,6 @@ public class CompressionUtils { } tw.setRecursive(true); MutableObjectId id = new MutableObjectId(); - ObjectReader reader = tw.getObjectReader(); long modified = commit.getAuthorIdent().getWhen().getTime(); while (tw.next()) { FileMode mode = tw.getFileMode(0); @@ -265,16 +265,24 @@ public class CompressionUtils { } tw.getObjectId(id, 0); - TarArchiveEntry entry = new TarArchiveEntry(tw.getPathString()); - entry.setSize(reader.getObjectSize(id, Constants.OBJ_BLOB)); - - entry.setMode(mode.getBits()); - entry.setModTime(modified); - tos.putArchiveEntry(entry); - - ObjectLoader ldr = repository.open(id); - ldr.copyTo(tos); - tos.closeArchiveEntry(); + 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(); + } } tos.finish(); tos.close();