// Copyright 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package codereview;
option java_package = "com.google.codereview";

// Uploads a bundle to start a review process.
//

message ReplacePatchSet {
  // Identity of the change to add a replacement patch set to.
  //
  required string change_id = 1;

  // Commit within the bundle to use as the replacement patch set.
  //
  required string object_id = 2;
}

message UploadBundleRequest {
  // Name of the project this bundle is applied to.
  //
  required string dest_project = 10;

  // Name of the branch the uploader thinks it should
  // have its tip commit merged into.
  //
  required string dest_branch = 11;

  // Set if this is a partial bundle upload.  Remaining
  // segments can be supplied with UploadBundleContinue.
  //
  required bool partial_upload = 12;

  // The unmodified bundle file, including its text based header.
  //
  // The bundle must have exactly 1 ref available, but the
  // name of the ref does not matter.  It only needs to be
  // a valid ref name ("refs/..." or "HEAD").
  //
  // This may be a partial fragment of the bundle, in which
  // case the partial_upload flag must be set.
  //
  required bytes bundle_data = 13;

  // An object id known to be in this bundle.  Typically only
  // commits and/or annotated tags would be enumerated here.
  //
  repeated string contained_object = 1;

  // Optional specification of replacement patches for
  // already existing change records.
  //
  repeated ReplacePatchSet replace = 2;

  // The requested reviewers for this change.  If any are 
  // email addresses that the server doesn't recognize, an
  // UNKNOWN_EMAIL error will be returned, with the
  // invalid_reviewers field set to the invalid reviewers.
  repeated string reviewers = 3;

  // Email addresses to CC for this change.  If any are 
  // not properly formed, email addresses, an UNKNOWN_EMAIL
  // error will be returned, with the invalid_cc field see to
  // the invalid values.
  repeated string cc = 4;
}

message UploadBundleResponse {
  enum CodeType {
    RECEIVED = 1;         // the bundle is fully uploaded
    CONTINUE = 4;         // client should use UploadBundleContinue

    UNAUTHORIZED_USER = 7;  // the user account is not allowed to upload
    UNKNOWN_CHANGE = 9;     // an invalid replacement was suggested
    CHANGE_CLOSED =  10;    // an invalid replacement was suggested
    UNKNOWN_EMAIL = 11;     // an unknown or invalid email was supplied

    UNKNOWN_PROJECT = 2;  // the project is invalid
    UNKNOWN_BRANCH = 3;   // the branch is invalid
    UNKNOWN_BUNDLE = 5;   // the bundle id is invalid
    NOT_BUNDLE_OWNER = 6; // the bundle is not your bundle
    BUNDLE_CLOSED = 8;    // the bundle is already uploaded
  }
  required CodeType status_code = 10;

  // Unique identification of this bundle record.
  // (RECEIVED, CONTINUE)
  //
  optional string bundle_id = 11;

  // Set for UNKNOWN_EMAIL errors.
  repeated string invalid_reviewers = 12;
  repeated string invalid_cc = 13;
}

message UploadBundleContinue {
  // The bundle identifier supplied by UploadBundleResponse
  //
  required string bundle_id = 10;

  // The segment number of this segment in the bundle.
  //
  // The first segment (created by UploadBundleRequest)
  // is always 1.  The first UploadBundleContinue should
  // use a segment_id of 2.
  //
  required int32 segment_id = 11;

  // Set if this is a partial bundle upload.  Remaining
  // segments can be supplied with UploadBundleContinue.
  //
  required bool partial_upload = 12;

  // The next data segment for the bundle.
  //
  // This may be a partial fragment of the bundle, in which
  // case the partial_upload flag must be set.
  //
  optional bytes bundle_data = 13;
}
