UploadPack: Consolidate the sideband handling code to one place
This consolidates the sideband stream creation code and the error handling code for the sideband-allowed part in the Git protocol to one place. Change-Id: I0e3e94564f50d1be32006f9d8bcd1ef1ce6bf07e Signed-off-by: Masaya Suzuki <masayasuzuki@google.com>
This commit is contained in:
parent
63bd24cf35
commit
1e3a7bcef7
|
@ -809,11 +809,6 @@ public void upload(InputStream input, OutputStream output,
|
|||
} else {
|
||||
service(pckOut);
|
||||
}
|
||||
} catch (UploadPackInternalServerErrorException err) {
|
||||
// UploadPackInternalServerErrorException is a special exception
|
||||
// that indicates an error is already written to the client. Do
|
||||
// nothing.
|
||||
throw err;
|
||||
} catch (ServiceMayNotContinueException err) {
|
||||
if (!err.isOutput() && err.getMessage() != null) {
|
||||
try {
|
||||
|
@ -2117,45 +2112,42 @@ private void sendPack(PackStatistics.Accumulator accumulator,
|
|||
Set<String> caps = req.getClientCapabilities();
|
||||
boolean sideband = caps.contains(OPTION_SIDE_BAND)
|
||||
|| caps.contains(OPTION_SIDE_BAND_64K);
|
||||
|
||||
if (sideband) {
|
||||
errOut = new SideBandErrorWriter();
|
||||
|
||||
try {
|
||||
sendPack(true, req, accumulator, allTags, unshallowCommits,
|
||||
deepenNots, pckOut);
|
||||
} catch (ServiceMayNotContinueException err) {
|
||||
String message = err.getMessage();
|
||||
if (message == null) {
|
||||
message = JGitText.get().internalServerError;
|
||||
}
|
||||
try {
|
||||
errOut.writeError(message);
|
||||
} catch (IOException e) {
|
||||
err.addSuppressed(e);
|
||||
throw err;
|
||||
}
|
||||
throw new UploadPackInternalServerErrorException(err);
|
||||
} catch (IOException | RuntimeException | Error err) {
|
||||
try {
|
||||
errOut.writeError(JGitText.get().internalServerError);
|
||||
} catch (IOException e) {
|
||||
err.addSuppressed(e);
|
||||
throw err;
|
||||
}
|
||||
throw new UploadPackInternalServerErrorException(err);
|
||||
int bufsz = SideBandOutputStream.SMALL_BUF;
|
||||
if (req.getClientCapabilities().contains(OPTION_SIDE_BAND_64K)) {
|
||||
bufsz = SideBandOutputStream.MAX_BUF;
|
||||
}
|
||||
OutputStream packOut = new SideBandOutputStream(
|
||||
SideBandOutputStream.CH_DATA, bufsz, rawOut);
|
||||
|
||||
ProgressMonitor pm = NullProgressMonitor.INSTANCE;
|
||||
if (!req.getClientCapabilities().contains(OPTION_NO_PROGRESS)) {
|
||||
msgOut = new SideBandOutputStream(
|
||||
SideBandOutputStream.CH_PROGRESS, bufsz, rawOut);
|
||||
pm = new SideBandProgressMonitor(msgOut);
|
||||
}
|
||||
|
||||
sendPack(pm, pckOut, packOut, req, accumulator, allTags,
|
||||
unshallowCommits, deepenNots);
|
||||
pckOut.end();
|
||||
} else {
|
||||
sendPack(false, req, accumulator, allTags, unshallowCommits, deepenNots,
|
||||
pckOut);
|
||||
sendPack(NullProgressMonitor.INSTANCE, pckOut, rawOut, req,
|
||||
accumulator, allTags, unshallowCommits, deepenNots);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the requested objects to the client.
|
||||
*
|
||||
* @param sideband
|
||||
* whether to wrap the pack in side-band pkt-lines, interleaved
|
||||
* with progress messages and errors.
|
||||
* @param pm
|
||||
* progress monitor
|
||||
* @param pckOut
|
||||
* PacketLineOut that shares the output with packOut
|
||||
* @param packOut
|
||||
* packfile output
|
||||
* @param req
|
||||
* request being processed
|
||||
* @param accumulator
|
||||
|
@ -2167,35 +2159,14 @@ private void sendPack(PackStatistics.Accumulator accumulator,
|
|||
* shallow commits on the client that are now becoming unshallow
|
||||
* @param deepenNots
|
||||
* objects that the client specified using --shallow-exclude
|
||||
* @param pckOut
|
||||
* output writer
|
||||
* @throws IOException
|
||||
* if an error occurred while generating or writing the pack.
|
||||
*/
|
||||
private void sendPack(final boolean sideband,
|
||||
FetchRequest req,
|
||||
private void sendPack(ProgressMonitor pm, PacketLineOut pckOut,
|
||||
OutputStream packOut, FetchRequest req,
|
||||
PackStatistics.Accumulator accumulator,
|
||||
@Nullable Collection<Ref> allTags,
|
||||
List<ObjectId> unshallowCommits,
|
||||
List<ObjectId> deepenNots,
|
||||
PacketLineOut pckOut) throws IOException {
|
||||
ProgressMonitor pm = NullProgressMonitor.INSTANCE;
|
||||
OutputStream packOut = rawOut;
|
||||
|
||||
if (sideband) {
|
||||
int bufsz = SideBandOutputStream.SMALL_BUF;
|
||||
if (req.getClientCapabilities().contains(OPTION_SIDE_BAND_64K))
|
||||
bufsz = SideBandOutputStream.MAX_BUF;
|
||||
|
||||
packOut = new SideBandOutputStream(SideBandOutputStream.CH_DATA,
|
||||
bufsz, rawOut);
|
||||
if (!req.getClientCapabilities().contains(OPTION_NO_PROGRESS)) {
|
||||
msgOut = new SideBandOutputStream(
|
||||
SideBandOutputStream.CH_PROGRESS, bufsz, rawOut);
|
||||
pm = new SideBandProgressMonitor(msgOut);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable Collection<Ref> allTags, List<ObjectId> unshallowCommits,
|
||||
List<ObjectId> deepenNots) throws IOException {
|
||||
if (wantAll.isEmpty()) {
|
||||
preUploadHook.onSendPack(this, wantIds, commonBase);
|
||||
} else {
|
||||
|
@ -2338,9 +2309,6 @@ else if (ref.getName().startsWith(Constants.R_HEADS))
|
|||
}
|
||||
pw.close();
|
||||
}
|
||||
|
||||
if (sideband)
|
||||
pckOut.end();
|
||||
}
|
||||
|
||||
private static void findSymrefs(
|
||||
|
|
Loading…
Reference in New Issue