summaryrefslogtreecommitdiff
path: root/repo.proto
blob: 048dc3b54751ae8c540b8460fe876d5c4c9d7a9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
syntax = "proto3";

package gitpb;

// stores information about git repos
// If the project is in golang, also gets the go language dependacies

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

// global settings for autogenpb `autogenpb:mutex`

// should it be done this way?

message GitTimes {                                                 // `autogenpb:nomutex`
        google.protobuf.Timestamp   lastPull                 = 1;  // last time a git pull was done
        google.protobuf.Timestamp   lastUpdate               = 2;  // when was ReloadGit() last done
        google.protobuf.Timestamp   lastDirty                = 3;  // last time CheckDirty() was run
        google.protobuf.Timestamp   mtimeDir                 = 4;  // mtime for ./git // maybe useful to track
        google.protobuf.Timestamp   mtimeHead                = 5;  // mtime for ./git/HEAD // these two mtimes allow really fast checks to see if git has changed
        google.protobuf.Timestamp   mtimeIndex               = 6;  // mtime for ./git/HEAD // probably always in sync with HEAD
        google.protobuf.Timestamp   mtimeFetch               = 7;  // mtime for ./git/FETCH_HEAD // last time 'git fetch' or 'git pull' was run on current branch?
        google.protobuf.Timestamp   lastGoDep                = 8;  // mtime for last go.sum scan
        google.protobuf.Timestamp   newestCommit             = 9;  // when the newest commit was
        google.protobuf.Timestamp   mtimeConfig              = 10; // mtime for the .git/config file
}

// this is probably better. think about moving to this instead
message GoInfo {                                                   // `autogenpb:nomutex`
        string                      goPath                   = 1;  // the logical path as used by golang: 'go.wit.com/apps/helloworld'
        string                      desc                     = 2;  // what is this repo?
        bool                        goLibrary                = 3;  // is this a golang library?
        bool                        goBinary                 = 4;  // is this a golang binary?
        bool                        goPrimitive              = 5;  // if this is a golang primitive (only has go.mod)
        bool                        goPlugin                 = 6;  // is this a golang plugin?
        bool                        goProtobuf               = 7;  // autogen go files from .proto
        GoDeps                      goDeps                   = 8;  // what is in the go.sum file
        GoDeps                      published                = 9;  // the last published go.mod/go.sum
        bytes                       goMod                    = 10; // the last go.mod file
        bytes                       goSum                    = 11; // the last go.sum file
        bool                        gitIgnoresGoSum          = 12; // does .gitignore ignore go.mod & go.sum?
}

message Repo {                                                     // `autogenpb:marshal` `autogenpb:nomutex`
        string                      namespace                = 1;  // `autogenpb:unique` `autogenpb:sort` 	// this repo is 'go.wit.com/lib/protobuf/gitpb'
        string                      fullPath                 = 2;  // `autogenpb:unique` `autogenpb:sort` 	// the OS path to the .git directory: '/home/devel/golang.org/x/tools'
        string                      masterBranchName         = 3;  // git 'main' or 'master' branch name
        string                      develBranchName          = 4;  // whatever the git 'devel' branch name is
        string                      userBranchName           = 5;  // whatever your username branch is
        bool                        dirty                    = 6;  // if git says things have been changed
        string                      URL                      = 7;  // the URL
        GitTags                     tags                     = 8;  // known tags
        GitTimes                    times                    = 9;  // store all the mtime values here. these are temporary
        GoInfo                      goInfo                   = 10; // put all the go specifcs here
        GoDeps                      goDeps                   = 11; // what is in the go.sum file
        string                      currentBranchName        = 12; // the branch currently checked out
        string                      currentBranchVersion     = 13; // the branch currently checked out
        string                      lastTag                  = 14; // the oldest tag
        string                      targetVersion            = 15; // useful during the package release process
        bool                        readOnly                 = 16; // tracks access to 'git push'
        string                      desc                     = 17; // what is this repo?
        string                      stateChange              = 18; // used for debugging tool logic
        string                      masterVersion            = 19; // just store this for now
        string                      develVersion             = 20; //
        string                      userVersion              = 21; //
        repeated string             dirtyList                = 22; // store the list from git status --porcelain
        string                      state                    = 23; // status or state. useful for building tooling
        GitTag                      currentTag               = 24; // used to examine repo branches
        GitConfig                   gitConfig                = 25; // protobuf of the current .git/config
        map<string, string>         control                  = 26; // control values. can be used to make packages (like .deb or .rpm)
        Stats                       stats                    = 27; // rewrite the existing crappy code here
}

message Repos {                                                    // `autogenpb:marshal` `autogenpb:sort` `autogenpb:gui` `autogenpb:nomutex` `autogenpb:http`
        string                      uuid                     = 1;  // `autogenpb:uuid:8daaeba1-fb1f-4762-ae6e-95a55d352673`
        string                      version                  = 2;  // `autogenpb:version:v4`
        repeated Repo               repos                    = 3;  // `autogenpb:append`   // generate AppendUnique() function for this
        bool                        hasFullScan              = 4;  // a full repo scan has been saved to disk
        google.protobuf.Timestamp   fullScan                 = 5;  // mtime of the last full scan saved to disk
        string                      filename                 = 6;  // `autogenpb:save` -- this enables autogenerated pb.Load() and pb.Save()
}