@ -719,7 +719,7 @@ public class UploadPack {
}
}
private void service ( ) throws IOException {
private void service ( ) throws IOException {
boolean sendPack ;
boolean sendPack = false ;
// If it's a non-bidi request, we need to read the entire request before
// If it's a non-bidi request, we need to read the entire request before
// writing a response. Buffer the response until then.
// writing a response. Buffer the response until then.
try {
try {
@ -752,6 +752,17 @@ public class UploadPack {
if ( ! clientShallowCommits . isEmpty ( ) )
if ( ! clientShallowCommits . isEmpty ( ) )
walk . assumeShallow ( clientShallowCommits ) ;
walk . assumeShallow ( clientShallowCommits ) ;
sendPack = negotiate ( ) ;
sendPack = negotiate ( ) ;
if ( sendPack & & ! biDirectionalPipe ) {
// Ensure the request was fully consumed. Any remaining input must
// be a protocol error. If we aren't at EOF the implementation is broken.
int eof = rawIn . read ( ) ;
if ( 0 < = eof ) {
sendPack = false ;
throw new CorruptObjectException ( MessageFormat . format (
JGitText . get ( ) . expectedEOFReceived ,
"\\x" + Integer . toHexString ( eof ) ) ) ; //$NON-NLS-1$
}
}
} catch ( ServiceMayNotContinueException err ) {
} catch ( ServiceMayNotContinueException err ) {
if ( ! err . isOutput ( ) & & err . getMessage ( ) ! = null ) {
if ( ! err . isOutput ( ) & & err . getMessage ( ) ! = null ) {
try {
try {
@ -778,6 +789,11 @@ public class UploadPack {
}
}
throw err ;
throw err ;
} finally {
} finally {
if ( ! sendPack & & ! biDirectionalPipe ) {
while ( 0 < rawIn . skip ( 2048 ) | | 0 < = rawIn . read ( ) ) {
// Discard until EOF.
}
}
rawOut . stopBuffering ( ) ;
rawOut . stopBuffering ( ) ;
}
}
@ -1390,17 +1406,6 @@ public class UploadPack {
private void sendPack ( ) throws IOException {
private void sendPack ( ) throws IOException {
final boolean sideband = options . contains ( OPTION_SIDE_BAND )
final boolean sideband = options . contains ( OPTION_SIDE_BAND )
| | options . contains ( OPTION_SIDE_BAND_64K ) ;
| | options . contains ( OPTION_SIDE_BAND_64K ) ;
if ( ! biDirectionalPipe ) {
// Ensure the request was fully consumed. Any remaining input must
// be a protocol error. If we aren't at EOF the implementation is broken.
int eof = rawIn . read ( ) ;
if ( 0 < = eof )
throw new CorruptObjectException ( MessageFormat . format (
JGitText . get ( ) . expectedEOFReceived ,
"\\x" + Integer . toHexString ( eof ) ) ) ; //$NON-NLS-1$
}
if ( sideband ) {
if ( sideband ) {
try {
try {
sendPack ( true ) ;
sendPack ( true ) ;