@ -183,8 +183,6 @@ public class PackWriter {
private final Repository db ;
private final Repository db ;
private PackOutputStream out ;
private final Deflater deflater ;
private final Deflater deflater ;
private ProgressMonitor initMonitor ;
private ProgressMonitor initMonitor ;
@ -613,14 +611,14 @@ public class PackWriter {
if ( ( reuseDeltas | | reuseObjects ) & & reuseSupport ! = null )
if ( ( reuseDeltas | | reuseObjects ) & & reuseSupport ! = null )
searchForReuse ( ) ;
searchForReuse ( ) ;
out = new PackOutputStream ( packStream , isDeltaBaseAsOffset ( ) ) ;
final PackOutputStream out = new PackOutputStream ( packStream ,
isDeltaBaseAsOffset ( ) ) ;
writeMonitor . beginTask ( WRITING_OBJECTS_PROGRESS , getObjectsNumber ( ) ) ;
writeMonitor . beginTask ( WRITING_OBJECTS_PROGRESS , getObjectsNumber ( ) ) ;
out . writeFileHeader ( PACK_VERSION_GENERATED , getObjectsNumber ( ) ) ;
out . writeFileHeader ( PACK_VERSION_GENERATED , getObjectsNumber ( ) ) ;
writeObjects ( ) ;
writeObjects ( out ) ;
writeChecksum ( ) ;
writeChecksum ( out ) ;
out = null ;
reader . release ( ) ;
reader . release ( ) ;
writeMonitor . endTask ( ) ;
writeMonitor . endTask ( ) ;
}
}
@ -644,25 +642,26 @@ public class PackWriter {
initMonitor . endTask ( ) ;
initMonitor . endTask ( ) ;
}
}
private void writeObjects ( ) throws IOException {
private void writeObjects ( PackOutputStream out ) throws IOException {
for ( List < ObjectToPack > list : objectsLists ) {
for ( List < ObjectToPack > list : objectsLists ) {
for ( ObjectToPack otp : list ) {
for ( ObjectToPack otp : list ) {
if ( writeMonitor . isCancelled ( ) )
if ( writeMonitor . isCancelled ( ) )
throw new IOException (
throw new IOException (
JGitText . get ( ) . packingCancelledDuringObjectsWriting ) ;
JGitText . get ( ) . packingCancelledDuringObjectsWriting ) ;
if ( ! otp . isWritten ( ) )
if ( ! otp . isWritten ( ) )
writeObject ( otp ) ;
writeObject ( out , o tp ) ;
}
}
}
}
}
}
private void writeObject ( final ObjectToPack otp ) throws IOException {
private void writeObject ( PackOutputStream out , final ObjectToPack otp )
throws IOException {
if ( otp . isWritten ( ) )
if ( otp . isWritten ( ) )
return ; // We shouldn't be here.
return ; // We shouldn't be here.
otp . markWantWrite ( ) ;
otp . markWantWrite ( ) ;
if ( otp . isDeltaRepresentation ( ) )
if ( otp . isDeltaRepresentation ( ) )
writeBaseFirst ( otp ) ;
writeBaseFirst ( out , o tp ) ;
out . resetCRC32 ( ) ;
out . resetCRC32 ( ) ;
otp . setOffset ( out . length ( ) ) ;
otp . setOffset ( out . length ( ) ) ;
@ -690,12 +689,13 @@ public class PackWriter {
// If we reached here, reuse wasn't possible.
// If we reached here, reuse wasn't possible.
//
//
writeWholeObjectDeflate ( otp ) ;
writeWholeObjectDeflate ( out , o tp ) ;
otp . setCRC ( out . getCRC32 ( ) ) ;
otp . setCRC ( out . getCRC32 ( ) ) ;
writeMonitor . update ( 1 ) ;
writeMonitor . update ( 1 ) ;
}
}
private void writeBaseFirst ( final ObjectToPack otp ) throws IOException {
private void writeBaseFirst ( PackOutputStream out , final ObjectToPack otp )
throws IOException {
ObjectToPack baseInPack = otp . getDeltaBase ( ) ;
ObjectToPack baseInPack = otp . getDeltaBase ( ) ;
if ( baseInPack ! = null ) {
if ( baseInPack ! = null ) {
if ( ! baseInPack . isWritten ( ) ) {
if ( ! baseInPack . isWritten ( ) ) {
@ -708,7 +708,7 @@ public class PackWriter {
redoSearchForReuse ( otp ) ;
redoSearchForReuse ( otp ) ;
reuseDeltas = true ;
reuseDeltas = true ;
} else {
} else {
writeObject ( baseInPack ) ;
writeObject ( out , baseInPack ) ;
}
}
}
}
} else if ( ! thin ) {
} else if ( ! thin ) {
@ -728,8 +728,8 @@ public class PackWriter {
reuseSupport . selectObjectRepresentation ( this , otp ) ;
reuseSupport . selectObjectRepresentation ( this , otp ) ;
}
}
private void writeWholeObjectDeflate ( final ObjectToPack otp )
private void writeWholeObjectDeflate ( PackOutputStream out ,
throws IOException {
final ObjectToPack otp ) throws IOException {
final ObjectLoader loader = reader . openObject ( otp , otp . getType ( ) ) ;
final ObjectLoader loader = reader . openObject ( otp , otp . getType ( ) ) ;
final byte [ ] data = loader . getCachedBytes ( ) ;
final byte [ ] data = loader . getCachedBytes ( ) ;
out . writeHeader ( otp , data . length ) ;
out . writeHeader ( otp , data . length ) ;
@ -745,7 +745,7 @@ public class PackWriter {
} while ( ! deflater . finished ( ) ) ;
} while ( ! deflater . finished ( ) ) ;
}
}
private void writeChecksum ( ) throws IOException {
private void writeChecksum ( PackOutputStream out ) throws IOException {
packcsum = out . getDigest ( ) ;
packcsum = out . getDigest ( ) ;
out . write ( packcsum ) ;
out . write ( packcsum ) ;
}
}