@ -212,33 +212,8 @@ public class DiffFormatter {
* be written to .
* be written to .
* /
* /
public void format ( DiffEntry ent ) throws IOException {
public void format ( DiffEntry ent ) throws IOException {
writeDiffHeader ( out , ent ) ;
FormatResult res = createFormatResult ( ent ) ;
format ( res . header , res . a , res . b ) ;
if ( ent . getOldMode ( ) = = GITLINK | | ent . getNewMode ( ) = = GITLINK ) {
writeGitLinkDiffText ( out , ent ) ;
} else {
if ( db = = null )
throw new IllegalStateException (
JGitText . get ( ) . repositoryIsRequired ) ;
ObjectReader reader = db . newObjectReader ( ) ;
byte [ ] aRaw , bRaw ;
try {
aRaw = open ( reader , ent . getOldMode ( ) , ent . getOldId ( ) ) ;
bRaw = open ( reader , ent . getNewMode ( ) , ent . getNewId ( ) ) ;
} finally {
reader . release ( ) ;
}
if ( RawText . isBinary ( aRaw ) | | RawText . isBinary ( bRaw ) ) {
out . write ( encodeASCII ( "Binary files differ\n" ) ) ;
} else {
RawText a = rawTextFactory . create ( aRaw ) ;
RawText b = rawTextFactory . create ( bRaw ) ;
formatEdits ( a , b , new MyersDiff ( a , b ) . getEdits ( ) ) ;
}
}
}
}
private void writeGitLinkDiffText ( OutputStream o , DiffEntry ent )
private void writeGitLinkDiffText ( OutputStream o , DiffEntry ent )
@ -406,7 +381,7 @@ public class DiffFormatter {
if ( ! head . getHunks ( ) . isEmpty ( ) )
if ( ! head . getHunks ( ) . isEmpty ( ) )
end = head . getHunks ( ) . get ( 0 ) . getStartOffset ( ) ;
end = head . getHunks ( ) . get ( 0 ) . getStartOffset ( ) ;
out . write ( head . getBuffer ( ) , start , end - start ) ;
out . write ( head . getBuffer ( ) , start , end - start ) ;
if ( head . getPatchType ( ) = = PatchType . UNIFIED )
formatEdits ( a , b , head . toEditList ( ) ) ;
formatEdits ( a , b , head . toEditList ( ) ) ;
}
}
@ -603,6 +578,20 @@ public class DiffFormatter {
* /
* /
public FileHeader createFileHeader ( DiffEntry ent ) throws IOException ,
public FileHeader createFileHeader ( DiffEntry ent ) throws IOException ,
CorruptObjectException , MissingObjectException {
CorruptObjectException , MissingObjectException {
return createFormatResult ( ent ) . header ;
}
private static class FormatResult {
FileHeader header ;
RawText a ;
RawText b ;
}
private FormatResult createFormatResult ( DiffEntry ent ) throws IOException ,
CorruptObjectException , MissingObjectException {
final FormatResult res = new FormatResult ( ) ;
ByteArrayOutputStream buf = new ByteArrayOutputStream ( ) ;
ByteArrayOutputStream buf = new ByteArrayOutputStream ( ) ;
final EditList editList ;
final EditList editList ;
final FileHeader . PatchType type ;
final FileHeader . PatchType type ;
@ -631,14 +620,15 @@ public class DiffFormatter {
editList = new EditList ( ) ;
editList = new EditList ( ) ;
type = PatchType . BINARY ;
type = PatchType . BINARY ;
} else {
} else {
RawText a = rawTextFactory . create ( aRaw ) ;
res . a = rawTextFactory . create ( aRaw ) ;
RawText b = rawTextFactory . create ( bRaw ) ;
res . b = rawTextFactory . create ( bRaw ) ;
editList = new MyersDiff ( a , b ) . getEdits ( ) ;
editList = new MyersDiff ( res . a , res . b ) . getEdits ( ) ;
type = PatchType . UNIFIED ;
type = PatchType . UNIFIED ;
}
}
}
}
return new FileHeader ( buf . toByteArray ( ) , editList , type ) ;
res . header = new FileHeader ( buf . toByteArray ( ) , editList , type ) ;
return res ;
}
}
private int findCombinedEnd ( final List < Edit > edits , final int i ) {
private int findCombinedEnd ( final List < Edit > edits , final int i ) {