Report PackProtocolExceptions to client during receive-pack
We have done this since forever with the "wanted old new ref" error, so let's do it for other such errors thrown in the same block as well. Change-Id: Ib3b1c7f05e31a5b3e40e85eb07b16736920a033b
This commit is contained in:
parent
a643aaaa4a
commit
6e4e34bb9e
|
@ -76,6 +76,7 @@
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import org.eclipse.jgit.errors.CorruptObjectException;
|
import org.eclipse.jgit.errors.CorruptObjectException;
|
||||||
|
import org.eclipse.jgit.errors.PackProtocolException;
|
||||||
import org.eclipse.jgit.errors.UnpackException;
|
import org.eclipse.jgit.errors.UnpackException;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
import org.eclipse.jgit.transport.InternalHttpServerGlue;
|
import org.eclipse.jgit.transport.InternalHttpServerGlue;
|
||||||
|
@ -200,7 +201,7 @@ public void flush() throws IOException {
|
||||||
consumeRequestBody(req);
|
consumeRequestBody(req);
|
||||||
out.close();
|
out.close();
|
||||||
|
|
||||||
} catch (UnpackException e) {
|
} catch (UnpackException | PackProtocolException e) {
|
||||||
// This should be already reported to the client.
|
// This should be already reported to the client.
|
||||||
log(rp.getRepository(), e.getCause());
|
log(rp.getRepository(), e.getCause());
|
||||||
consumeRequestBody(req);
|
consumeRequestBody(req);
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class PackProtocolException extends TransportException {
|
||||||
* @param uri
|
* @param uri
|
||||||
* URI used for transport
|
* URI used for transport
|
||||||
* @param s
|
* @param s
|
||||||
* message
|
* message, which may be shown to an end-user.
|
||||||
*/
|
*/
|
||||||
public PackProtocolException(final URIish uri, final String s) {
|
public PackProtocolException(final URIish uri, final String s) {
|
||||||
super(uri + ": " + s); //$NON-NLS-1$
|
super(uri + ": " + s); //$NON-NLS-1$
|
||||||
|
@ -73,7 +73,7 @@ public PackProtocolException(final URIish uri, final String s) {
|
||||||
* @param uri
|
* @param uri
|
||||||
* URI used for transport
|
* URI used for transport
|
||||||
* @param s
|
* @param s
|
||||||
* message
|
* message, which may be shown to an end-user.
|
||||||
* @param cause
|
* @param cause
|
||||||
* root cause exception
|
* root cause exception
|
||||||
*/
|
*/
|
||||||
|
@ -86,7 +86,7 @@ public PackProtocolException(final URIish uri, final String s,
|
||||||
* Constructs an PackProtocolException with the specified detail message.
|
* Constructs an PackProtocolException with the specified detail message.
|
||||||
*
|
*
|
||||||
* @param s
|
* @param s
|
||||||
* message
|
* message, which may be shown to an end-user.
|
||||||
*/
|
*/
|
||||||
public PackProtocolException(final String s) {
|
public PackProtocolException(final String s) {
|
||||||
super(s);
|
super(s);
|
||||||
|
@ -96,7 +96,7 @@ public PackProtocolException(final String s) {
|
||||||
* Constructs an PackProtocolException with the specified detail message.
|
* Constructs an PackProtocolException with the specified detail message.
|
||||||
*
|
*
|
||||||
* @param s
|
* @param s
|
||||||
* message
|
* message, which may be shown to an end-user.
|
||||||
* @param cause
|
* @param cause
|
||||||
* root cause exception
|
* root cause exception
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1065,56 +1065,61 @@ public void sendAdvertisedRefs(final RefAdvertiser adv)
|
||||||
protected void recvCommands() throws IOException {
|
protected void recvCommands() throws IOException {
|
||||||
PushCertificateParser certParser = getPushCertificateParser();
|
PushCertificateParser certParser = getPushCertificateParser();
|
||||||
FirstLine firstLine = null;
|
FirstLine firstLine = null;
|
||||||
for (;;) {
|
try {
|
||||||
String line;
|
for (;;) {
|
||||||
try {
|
String line;
|
||||||
line = pckIn.readString();
|
try {
|
||||||
} catch (EOFException eof) {
|
line = pckIn.readString();
|
||||||
if (commands.isEmpty())
|
} catch (EOFException eof) {
|
||||||
return;
|
if (commands.isEmpty())
|
||||||
throw eof;
|
return;
|
||||||
}
|
throw eof;
|
||||||
if (line == PacketLineIn.END) {
|
}
|
||||||
break;
|
if (line == PacketLineIn.END) {
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (line.length() >= 48 && line.startsWith("shallow ")) { //$NON-NLS-1$
|
if (line.length() >= 48 && line.startsWith("shallow ")) { //$NON-NLS-1$
|
||||||
clientShallowCommits.add(ObjectId.fromString(line.substring(8, 48)));
|
clientShallowCommits.add(ObjectId.fromString(line.substring(8, 48)));
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (firstLine == null) {
|
|
||||||
firstLine = new FirstLine(line);
|
|
||||||
enabledCapabilities = firstLine.getCapabilities();
|
|
||||||
line = firstLine.getLine();
|
|
||||||
|
|
||||||
if (line.equals(GitProtocolConstants.OPTION_PUSH_CERT)) {
|
|
||||||
certParser.receiveHeader(pckIn, !isBiDirectionalPipe());
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (line.equals(PushCertificateParser.BEGIN_SIGNATURE)) {
|
if (firstLine == null) {
|
||||||
certParser.receiveSignature(pckIn);
|
firstLine = new FirstLine(line);
|
||||||
continue;
|
enabledCapabilities = firstLine.getCapabilities();
|
||||||
}
|
line = firstLine.getLine();
|
||||||
|
|
||||||
ReceiveCommand cmd;
|
if (line.equals(GitProtocolConstants.OPTION_PUSH_CERT)) {
|
||||||
try {
|
certParser.receiveHeader(pckIn, !isBiDirectionalPipe());
|
||||||
cmd = parseCommand(line);
|
continue;
|
||||||
} catch (PackProtocolException e) {
|
}
|
||||||
sendError(e.getMessage());
|
}
|
||||||
throw e;
|
|
||||||
}
|
if (line.equals(PushCertificateParser.BEGIN_SIGNATURE)) {
|
||||||
if (cmd.getRefName().equals(Constants.HEAD)) {
|
certParser.receiveSignature(pckIn);
|
||||||
cmd.setResult(Result.REJECTED_CURRENT_BRANCH);
|
continue;
|
||||||
} else {
|
}
|
||||||
cmd.setRef(refs.get(cmd.getRefName()));
|
|
||||||
}
|
ReceiveCommand cmd;
|
||||||
commands.add(cmd);
|
try {
|
||||||
if (certParser.enabled()) {
|
cmd = parseCommand(line);
|
||||||
certParser.addCommand(cmd);
|
} catch (PackProtocolException e) {
|
||||||
|
sendError(e.getMessage());
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
if (cmd.getRefName().equals(Constants.HEAD)) {
|
||||||
|
cmd.setResult(Result.REJECTED_CURRENT_BRANCH);
|
||||||
|
} else {
|
||||||
|
cmd.setRef(refs.get(cmd.getRefName()));
|
||||||
|
}
|
||||||
|
commands.add(cmd);
|
||||||
|
if (certParser.enabled()) {
|
||||||
|
certParser.addCommand(cmd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} catch (PackProtocolException e) {
|
||||||
|
sendError(e.getMessage());
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue