diff --git a/.gitignore b/.gitignore index 8e2ad0e..3429a71 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ go.* *.swp *.patch +*.mbox *.pb.go diff --git a/patchset.Make.go b/patchset.Make.go index 675f5cc..5081cb9 100644 --- a/patchset.Make.go +++ b/patchset.Make.go @@ -110,7 +110,19 @@ func (pset *Patchset) makePatchSetNew(repo *gitpb.Repo) error { return err } + // maybe better? maybe worse? + // git format-patch -o patches --stdout > my-patch.mbox + // git format-patch --stdout -5 > my-patch.mbox # last 5 patches + // git am < my-patch.mbox // git format-patch branch1..branch2 + // export GIT_COMMITTER_DATE="2024-01-01T12:00:00" + // export GIT_AUTHOR_DATE="2024-01-01T12:00:00" + // export GIT_COMMITTER_NAME="Your Name" + // export GIT_COMMITTER_EMAIL="your.email@example.com" + // export GIT_AUTHOR_NAME="Your Name" + // export GIT_AUTHOR_EMAIL="your.email@example.com" + // git am < patch.mbox + cmd := []string{"git", "format-patch", "-o", repoDir, startBranch + ".." + endBranch} r := repo.Run(cmd) if r.Error != nil { diff --git a/patchset.proto.new b/patchset.proto.new new file mode 100644 index 0000000..96c6e39 --- /dev/null +++ b/patchset.proto.new @@ -0,0 +1,74 @@ +syntax = "proto3"; + +package forgepb; + +import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp + +/* +message Blob { + string hunkLine = 1; + bytes data = 2; +} + +message File { + string filename = 1; + string hashLine = 2; + repeated Blob Blobs = 3; +} + +message Patch { + repeated File Files = 1; + string repoNamespace = 2; + string gH = 3; + string gaI = 4; + string gcI = 5; +} +*/ + +// git log -1 --format="%H %aI %cI %an %ae %cn %ce" +message Patch { + string repoNamespace = 1; // the base repo git URL + bytes data = 2; // the raw data of the whole patch + string gH = 3; // after some deliberation, I think I'll just try variable names + string gT = 4; + string gP = 5; + string gs = 6; + string gaI = 7; // that exactly match what git uses. + string gan = 8; + string gae = 9; + string gcI = 10; + string gcn = 11; + string gce = 12; + string gN = 13; + string gGG = 14; + string gGS = 15; + string gGK = 16; + string newHash = 17; // new hash + string state = 18; // the 'state' of the patch +} + +message Patches { // this is a "PATCH: [1/x]" series + 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; // + string name = 2; // `autogenpb:sort` + string comment = 3; // + string gitAuthorName = 4; // `autogenpb:sort` + string gitAuthorEmail = 5; // + google.protobuf.Timestamp ctime = 6; // create time of the patchset + string tmpDir = 7; // temp dir + string startBranchName = 8; // + string endBranchName = 9; // + string startBranchHash = 10; // + string endBranchHash = 11; // +} + +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; +}