예제 #1
0
  private void sendStatusReport(final boolean forClient, final Reporter out) throws IOException {
    if (unpackError != null) {
      out.sendString("unpack error " + unpackError.getMessage());
      if (forClient) {
        for (final ReceiveCommand cmd : commands) {
          out.sendString("ng " + cmd.getRefName() + " n/a (unpacker error)");
        }
      }
      return;
    }

    if (forClient) out.sendString("unpack ok");
    for (final ReceiveCommand cmd : commands) {
      if (cmd.getResult() == Result.OK) {
        if (forClient) out.sendString("ok " + cmd.getRefName());
        continue;
      }

      final StringBuilder r = new StringBuilder();
      r.append("ng ");
      r.append(cmd.getRefName());
      r.append(" ");

      switch (cmd.getResult()) {
        case NOT_ATTEMPTED:
          r.append("server bug; ref not processed");
          break;

        case REJECTED_NOCREATE:
          r.append("creation prohibited");
          break;

        case REJECTED_NODELETE:
          r.append("deletion prohibited");
          break;

        case REJECTED_NONFASTFORWARD:
          r.append("non-fast forward");
          break;

        case REJECTED_CURRENT_BRANCH:
          r.append("branch is currently checked out");
          break;

        case REJECTED_MISSING_OBJECT:
          if (cmd.getMessage() == null) r.append("missing object(s)");
          else if (cmd.getMessage().length() == Constants.OBJECT_ID_STRING_LENGTH)
            r.append("object " + cmd.getMessage() + " missing");
          else r.append(cmd.getMessage());
          break;

        case REJECTED_OTHER_REASON:
          if (cmd.getMessage() == null) r.append("unspecified reason");
          else r.append(cmd.getMessage());
          break;

        case LOCK_FAILURE:
          r.append("failed to lock");
          break;

        case OK:
          // We shouldn't have reached this case (see 'ok' case above).
          continue;
      }
      out.sendString(r.toString());
    }
  }