@ -182,7 +182,9 @@ public class PackWriter {
// edge objects for thin packs
// edge objects for thin packs
private final ObjectIdSubclassMap < ObjectId > edgeObjects = new ObjectIdSubclassMap < ObjectId > ( ) ;
private final ObjectIdSubclassMap < ObjectId > edgeObjects = new ObjectIdSubclassMap < ObjectId > ( ) ;
private final Deflater deflater ;
private int compressionLevel ;
private Deflater myDeflater ;
private final ObjectReader reader ;
private final ObjectReader reader ;
@ -252,7 +254,7 @@ public class PackWriter {
reuseSupport = null ;
reuseSupport = null ;
final CoreConfig coreConfig = configOf ( repo ) . get ( CoreConfig . KEY ) ;
final CoreConfig coreConfig = configOf ( repo ) . get ( CoreConfig . KEY ) ;
deflater = new Deflater ( coreConfig . getCompression ( ) ) ;
compressionLevel = coreConfig . getCompression ( ) ;
outputVersion = coreConfig . getPackIndexVersion ( ) ;
outputVersion = coreConfig . getPackIndexVersion ( ) ;
}
}
@ -639,6 +641,10 @@ public class PackWriter {
/** Release all resources used by this writer. */
/** Release all resources used by this writer. */
public void release ( ) {
public void release ( ) {
reader . release ( ) ;
reader . release ( ) ;
if ( myDeflater ! = null ) {
myDeflater . end ( ) ;
myDeflater = null ;
}
}
}
private void searchForReuse ( ProgressMonitor compressMonitor )
private void searchForReuse ( ProgressMonitor compressMonitor )
@ -745,6 +751,7 @@ public class PackWriter {
private void writeWholeObjectDeflate ( PackOutputStream out ,
private void writeWholeObjectDeflate ( PackOutputStream out ,
final ObjectToPack otp ) throws IOException {
final ObjectToPack otp ) throws IOException {
final Deflater deflater = deflater ( ) ;
final ObjectLoader loader = reader . open ( otp , otp . getType ( ) ) ;
final ObjectLoader loader = reader . open ( otp , otp . getType ( ) ) ;
final byte [ ] data = loader . getCachedBytes ( ) ;
final byte [ ] data = loader . getCachedBytes ( ) ;
out . writeHeader ( otp , data . length ) ;
out . writeHeader ( otp , data . length ) ;
@ -760,6 +767,12 @@ public class PackWriter {
} while ( ! deflater . finished ( ) ) ;
} while ( ! deflater . finished ( ) ) ;
}
}
private Deflater deflater ( ) {
if ( myDeflater = = null )
myDeflater = new Deflater ( compressionLevel ) ;
return myDeflater ;
}
private void writeChecksum ( PackOutputStream out ) throws IOException {
private void writeChecksum ( PackOutputStream out ) throws IOException {
packcsum = out . getDigest ( ) ;
packcsum = out . getDigest ( ) ;
out . write ( packcsum ) ;
out . write ( packcsum ) ;