syntax = "proto3";

package forgepb;

import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp

// this generic message is used by autogen to identify and
// then dump the uuid and version from any arbitrary .pb file
message Identify {                                            // `autogenpb:marshal`
        string                      uuid                = 1;  //
        string                      version             = 2;  //
}

message Patch {
        string                      filename            = 1;  // `autogenpb:unique` `autogenpb:sort`
        bytes                       data                = 2;  //
        string                      repoPath            = 3;  // path to the git repo
        string                      branchName          = 4;  //
        string                      branchHash          = 5;  //
        google.protobuf.Timestamp   ctime               = 7;  // the git commit timestamp of this patch
        string                      commitHash          = 8;  // the git commit hash of this patch
        string                      startHash           = 9;  // the start commit hash
        repeated string             Files               = 10; // the filenames this patch changes
        string                      comment             = 11; // the git commit message (in patch form)
        string                      repoNamespace       = 12; // the base repo git URL
        string                      newHash             = 13; // new hash after git am
}

message Patches {                                             // `autogenpb:marshal`
        string                      uuid                = 1;  // `autogenpb:uuid:be926ad9-1111-484c-adf2-d96eeabf3079` // todo: add autogenpb support for this
        string                      version             = 2;  // `autogenpb:version:v0.0.45` // todo: add autogenpb support for this
        repeated Patch              Patches             = 3;
}

message Patchset {                                            // `autogenpb:marshal`
        Patches                     patches             = 1;  // `autogenpb:unique` `autogenpb:sort`
        string                      name                = 2;  // `autogenpb:sort`
        string                      comment             = 3;  //
        string                      gitAuthorName       = 4;  // `autogenpb:sort`
        string                      gitAuthorEmail      = 5;  //
        google.protobuf.Timestamp   ctime               = 6;  // create time of this patchset
        string                      tmpDir              = 7;  // temp dir
        string                      startBranchName     = 8;  //
        string                      endBranchName       = 9;  //
        string                      startBranchHash     = 10; //
        string                      endBranchHash       = 11; //
        string                      state               = 12; // the state of the patch
        string                      uuid                = 13; // identify each patchset somehow
}

message Patchsets {                                           // `autogenpb:marshal`
        string                      uuid                = 1;  // `autogenpb:uuid:be926ad9-f07f-484c-adf2-d96eeabf3079` // todo: add autogenpb support for this
        string                      version             = 2;  // `autogenpb:version:v0.0.45` // todo: add autogenpb support for this
        repeated Patchset           Patchsets           = 3;
}