in src/main/org/apache/ant/compress/taskdefs/Tar.java [40:136]
public Tar() {
setFactory(new TarStreamFactory(){
@Override
public ArchiveOutputStream getArchiveStream(OutputStream stream,
String encoding)
throws IOException {
TarArchiveOutputStream o =
(TarArchiveOutputStream) super.getArchiveStream(stream,
encoding);
if (format.equals(Format.OLDGNU)) {
o.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
}
else if (format.equals(Format.GNU)) {
o.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
o.setBigNumberMode(TarArchiveOutputStream
.BIGNUMBER_STAR);
}
else if (format.equals(Format.STAR)) {
o.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
o.setBigNumberMode(TarArchiveOutputStream
.BIGNUMBER_STAR);
}
else if (format.equals(Format.PAX)) {
o.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
o.setBigNumberMode(TarArchiveOutputStream
.BIGNUMBER_POSIX);
o.setAddPaxHeadersForNonAsciiNames(true);
}
return o;
}
});
setEntryBuilder(
new ArchiveBase.EntryBuilder() {
@Override
public ArchiveEntry buildEntry(ArchiveBase.ResourceWithFlags r) {
boolean isDir = r.getResource().isDirectory();
String name = r.getName();
if (isDir && !name.endsWith("/")) {
name += "/";
} else if (!isDir && name.endsWith("/")) {
name = name.substring(0, name.length() - 1);
}
TarArchiveEntry ent =
new TarArchiveEntry(name, getPreserveLeadingSlashes());
ent.setModTime(round(r.getResource().getLastModified(),
1000));
ent.setSize(isDir ? 0 : r.getResource().getSize());
if (!isDir && r.getCollectionFlags().hasModeBeenSet()) {
ent.setMode(r.getCollectionFlags().getMode());
} else if (isDir
&& r.getCollectionFlags().hasDirModeBeenSet()) {
ent.setMode(r.getCollectionFlags().getDirMode());
} else if (r.getResourceFlags().hasModeBeenSet()) {
ent.setMode(r.getResourceFlags().getMode());
} else {
ent.setMode(isDir
? ArchiveFileSet.DEFAULT_DIR_MODE
: ArchiveFileSet.DEFAULT_FILE_MODE);
}
if (r.getResourceFlags().hasUserIdBeenSet()) {
ent.setUserId(r.getResourceFlags().getUserId());
} else if (r.getCollectionFlags().hasUserIdBeenSet()) {
ent.setUserId(r.getCollectionFlags().getUserId());
}
if (r.getResourceFlags().hasGroupIdBeenSet()) {
ent.setGroupId(r.getResourceFlags().getGroupId());
} else if (r.getCollectionFlags().hasGroupIdBeenSet()) {
ent.setGroupId(r.getCollectionFlags().getGroupId());
}
if (r.getResourceFlags().hasUserNameBeenSet()) {
ent.setUserName(r.getResourceFlags().getUserName());
} else if (r.getCollectionFlags().hasUserNameBeenSet()) {
ent.setUserName(r.getCollectionFlags().getUserName());
}
if (r.getResourceFlags().hasGroupNameBeenSet()) {
ent.setGroupName(r.getResourceFlags().getGroupName());
} else if (r.getCollectionFlags().hasGroupNameBeenSet()) {
ent.setGroupName(r.getCollectionFlags().getGroupName());
}
return ent;
}
});
setFileSetBuilder(new ArchiveBase.FileSetBuilder() {
@Override
public ArchiveFileSet buildFileSet(Resource dest) {
ArchiveFileSet afs = new TarFileSet();
afs.setSrcResource(dest);
return afs;
}
});
}