|
|
@@ -1853,98 +1853,113 @@ public class ReceivePack { |
|
|
|
/** |
|
|
|
* Send a status report. |
|
|
|
* |
|
|
|
* @param forClient |
|
|
|
* true if this report is for a Git client, false if it is for an |
|
|
|
* end-user. |
|
|
|
* @param unpackError |
|
|
|
* an error that occurred during unpacking, or {@code null} |
|
|
|
* @param out |
|
|
|
* the reporter for sending the status strings. |
|
|
|
* @throws java.io.IOException |
|
|
|
* an error occurred writing the status report. |
|
|
|
* @since 5.6 |
|
|
|
*/ |
|
|
|
private void sendStatusReport(final boolean forClient, |
|
|
|
final Throwable unpackError, final Reporter out) |
|
|
|
throws IOException { |
|
|
|
if (unpackError != null) { |
|
|
|
out.sendString("unpack error " + unpackError.getMessage()); //$NON-NLS-1$ |
|
|
|
if (forClient) { |
|
|
|
for (ReceiveCommand cmd : commands) { |
|
|
|
out.sendString("ng " + cmd.getRefName() //$NON-NLS-1$ |
|
|
|
+ " n/a (unpacker error)"); //$NON-NLS-1$ |
|
|
|
private void sendStatusReport(Throwable unpackError) throws IOException { |
|
|
|
Reporter out = new Reporter() { |
|
|
|
@Override |
|
|
|
void sendString(String s) throws IOException { |
|
|
|
if (reportStatus) { |
|
|
|
pckOut.writeString(s + "\n"); //$NON-NLS-1$ |
|
|
|
} else if (msgOut != null) { |
|
|
|
msgOut.write(Constants.encode(s + "\n")); //$NON-NLS-1$ |
|
|
|
} |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
if (forClient) |
|
|
|
out.sendString("unpack ok"); //$NON-NLS-1$ |
|
|
|
for (ReceiveCommand cmd : commands) { |
|
|
|
if (cmd.getResult() == Result.OK) { |
|
|
|
if (forClient) |
|
|
|
out.sendString("ok " + cmd.getRefName()); //$NON-NLS-1$ |
|
|
|
continue; |
|
|
|
try { |
|
|
|
if (unpackError != null) { |
|
|
|
out.sendString("unpack error " + unpackError.getMessage()); //$NON-NLS-1$ |
|
|
|
if (reportStatus) { |
|
|
|
for (ReceiveCommand cmd : commands) { |
|
|
|
out.sendString("ng " + cmd.getRefName() //$NON-NLS-1$ |
|
|
|
+ " n/a (unpacker error)"); //$NON-NLS-1$ |
|
|
|
} |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
final StringBuilder r = new StringBuilder(); |
|
|
|
if (forClient) |
|
|
|
r.append("ng ").append(cmd.getRefName()).append(" "); //$NON-NLS-1$ //$NON-NLS-2$ |
|
|
|
else |
|
|
|
r.append(" ! [rejected] ").append(cmd.getRefName()) //$NON-NLS-1$ |
|
|
|
.append(" ("); //$NON-NLS-1$ |
|
|
|
|
|
|
|
switch (cmd.getResult()) { |
|
|
|
case NOT_ATTEMPTED: |
|
|
|
r.append("server bug; ref not processed"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_NOCREATE: |
|
|
|
r.append("creation prohibited"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_NODELETE: |
|
|
|
r.append("deletion prohibited"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_NONFASTFORWARD: |
|
|
|
r.append("non-fast forward"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_CURRENT_BRANCH: |
|
|
|
r.append("branch is currently checked out"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_MISSING_OBJECT: |
|
|
|
if (cmd.getMessage() == null) |
|
|
|
r.append("missing object(s)"); //$NON-NLS-1$ |
|
|
|
else if (cmd.getMessage() |
|
|
|
.length() == Constants.OBJECT_ID_STRING_LENGTH) { |
|
|
|
r.append("object "); //$NON-NLS-1$ |
|
|
|
r.append(cmd.getMessage()); |
|
|
|
r.append(" missing"); //$NON-NLS-1$ |
|
|
|
} else |
|
|
|
r.append(cmd.getMessage()); |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_OTHER_REASON: |
|
|
|
if (cmd.getMessage() == null) |
|
|
|
r.append("unspecified reason"); //$NON-NLS-1$ |
|
|
|
else |
|
|
|
r.append(cmd.getMessage()); |
|
|
|
break; |
|
|
|
|
|
|
|
case LOCK_FAILURE: |
|
|
|
r.append("failed to lock"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case OK: |
|
|
|
// We shouldn't have reached this case (see 'ok' case above). |
|
|
|
continue; |
|
|
|
if (reportStatus) { |
|
|
|
out.sendString("unpack ok"); //$NON-NLS-1$ |
|
|
|
} |
|
|
|
for (ReceiveCommand cmd : commands) { |
|
|
|
if (cmd.getResult() == Result.OK) { |
|
|
|
if (reportStatus) { |
|
|
|
out.sendString("ok " + cmd.getRefName()); //$NON-NLS-1$ |
|
|
|
} |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
final StringBuilder r = new StringBuilder(); |
|
|
|
if (reportStatus) { |
|
|
|
r.append("ng ").append(cmd.getRefName()).append(" "); //$NON-NLS-1$ //$NON-NLS-2$ |
|
|
|
} else { |
|
|
|
r.append(" ! [rejected] ").append(cmd.getRefName()) //$NON-NLS-1$ |
|
|
|
.append(" ("); //$NON-NLS-1$ |
|
|
|
} |
|
|
|
|
|
|
|
switch (cmd.getResult()) { |
|
|
|
case NOT_ATTEMPTED: |
|
|
|
r.append("server bug; ref not processed"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_NOCREATE: |
|
|
|
r.append("creation prohibited"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_NODELETE: |
|
|
|
r.append("deletion prohibited"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_NONFASTFORWARD: |
|
|
|
r.append("non-fast forward"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_CURRENT_BRANCH: |
|
|
|
r.append("branch is currently checked out"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_MISSING_OBJECT: |
|
|
|
if (cmd.getMessage() == null) |
|
|
|
r.append("missing object(s)"); //$NON-NLS-1$ |
|
|
|
else if (cmd.getMessage() |
|
|
|
.length() == Constants.OBJECT_ID_STRING_LENGTH) { |
|
|
|
r.append("object "); //$NON-NLS-1$ |
|
|
|
r.append(cmd.getMessage()); |
|
|
|
r.append(" missing"); //$NON-NLS-1$ |
|
|
|
} else |
|
|
|
r.append(cmd.getMessage()); |
|
|
|
break; |
|
|
|
|
|
|
|
case REJECTED_OTHER_REASON: |
|
|
|
if (cmd.getMessage() == null) |
|
|
|
r.append("unspecified reason"); //$NON-NLS-1$ |
|
|
|
else |
|
|
|
r.append(cmd.getMessage()); |
|
|
|
break; |
|
|
|
|
|
|
|
case LOCK_FAILURE: |
|
|
|
r.append("failed to lock"); //$NON-NLS-1$ |
|
|
|
break; |
|
|
|
|
|
|
|
case OK: |
|
|
|
// We shouldn't have reached this case (see 'ok' case |
|
|
|
// above). |
|
|
|
continue; |
|
|
|
} |
|
|
|
if (!reportStatus) { |
|
|
|
r.append(")"); //$NON-NLS-1$ |
|
|
|
} |
|
|
|
out.sendString(r.toString()); |
|
|
|
} |
|
|
|
} finally { |
|
|
|
if (reportStatus) { |
|
|
|
pckOut.end(); |
|
|
|
} |
|
|
|
if (!forClient) |
|
|
|
r.append(")"); //$NON-NLS-1$ |
|
|
|
out.sendString(r.toString()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -2228,22 +2243,7 @@ public class ReceivePack { |
|
|
|
unlockPack(); |
|
|
|
} |
|
|
|
|
|
|
|
if (reportStatus) { |
|
|
|
sendStatusReport(true, unpackError, new Reporter() { |
|
|
|
@Override |
|
|
|
void sendString(String s) throws IOException { |
|
|
|
pckOut.writeString(s + "\n"); //$NON-NLS-1$ |
|
|
|
} |
|
|
|
}); |
|
|
|
pckOut.end(); |
|
|
|
} else if (msgOut != null) { |
|
|
|
sendStatusReport(false, unpackError, new Reporter() { |
|
|
|
@Override |
|
|
|
void sendString(String s) throws IOException { |
|
|
|
msgOut.write(Constants.encode(s + "\n")); //$NON-NLS-1$ |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
sendStatusReport(unpackError); |
|
|
|
|
|
|
|
if (unpackError != null) { |
|
|
|
// we already know which exception to throw. Ignore |