parent
2e3e4f98d3
commit
6dd1bba42b
|
@ -1,42 +0,0 @@
|
||||||
package gitpb
|
|
||||||
|
|
||||||
// todo: autogen this
|
|
||||||
// functions to import and export the protobuf
|
|
||||||
|
|
||||||
import (
|
|
||||||
"google.golang.org/protobuf/encoding/protojson"
|
|
||||||
"google.golang.org/protobuf/encoding/prototext"
|
|
||||||
"google.golang.org/protobuf/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
// human readable JSON
|
|
||||||
func (r *Refs) FormatJSON() string {
|
|
||||||
return protojson.Format(r)
|
|
||||||
}
|
|
||||||
|
|
||||||
// apparently this isn't supposed to be used?
|
|
||||||
// https://protobuf.dev/reference/go/faq/#unstable-text
|
|
||||||
// this is a shame because this is much nicer output than JSON Format()
|
|
||||||
func (r *Refs) FormatTEXT() string {
|
|
||||||
return prototext.Format(r)
|
|
||||||
}
|
|
||||||
|
|
||||||
// marshal json
|
|
||||||
func (r *Refs) MarshalJSON() ([]byte, error) {
|
|
||||||
return protojson.Marshal(r)
|
|
||||||
}
|
|
||||||
|
|
||||||
// unmarshal
|
|
||||||
func (r *Refs) UnmarshalJSON(data []byte) error {
|
|
||||||
return protojson.Unmarshal(data, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
// marshal to wire
|
|
||||||
func (r *Refs) Marshal() ([]byte, error) {
|
|
||||||
return proto.Marshal(r)
|
|
||||||
}
|
|
||||||
|
|
||||||
// unmarshal from wire
|
|
||||||
func (r *Refs) Unmarshal(data []byte) error {
|
|
||||||
return proto.Unmarshal(data, r)
|
|
||||||
}
|
|
|
@ -11,9 +11,3 @@ message Ref {
|
||||||
string author = 4; // git author
|
string author = 4; // git author
|
||||||
string subject = 5; // git subject
|
string subject = 5; // git subject
|
||||||
}
|
}
|
||||||
|
|
||||||
message Refs {
|
|
||||||
string uuid = 1; // I guess why not just have this on each file
|
|
||||||
string version = 2; // maybe can be used for protobuf schema change violations
|
|
||||||
repeated Ref refs = 3;
|
|
||||||
}
|
|
||||||
|
|
40
refs.sort.go
40
refs.sort.go
|
@ -55,14 +55,14 @@ func (it *RefIterator) Ref() *Ref {
|
||||||
// fmt.Println("Ref UUID:", d.Uuid)
|
// fmt.Println("Ref UUID:", d.Uuid)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
func (r *Refs) All() *RefIterator {
|
func (r *Repo) All() *RefIterator {
|
||||||
repoPointers := r.selectAllRefs()
|
repoPointers := r.selectAllRefs()
|
||||||
|
|
||||||
iterator := NewRefIterator(repoPointers)
|
iterator := NewRefIterator(repoPointers)
|
||||||
return iterator
|
return iterator
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Refs) SortByName() *RefIterator {
|
func (r *Repo) SortByName() *RefIterator {
|
||||||
packs := r.selectAllRefs()
|
packs := r.selectAllRefs()
|
||||||
|
|
||||||
sort.Sort(RefsByName(packs))
|
sort.Sort(RefsByName(packs))
|
||||||
|
@ -72,17 +72,17 @@ func (r *Refs) SortByName() *RefIterator {
|
||||||
}
|
}
|
||||||
|
|
||||||
// enforces no duplicate package names
|
// enforces no duplicate package names
|
||||||
func (r *Repo) AppendRef(newP *Ref) bool {
|
func (repo *Repo) AppendRef(newP *Ref) bool {
|
||||||
refslock.Lock()
|
refslock.Lock()
|
||||||
defer refslock.Unlock()
|
defer refslock.Unlock()
|
||||||
|
|
||||||
for _, p := range r.Refs {
|
for _, p := range repo.Refs {
|
||||||
if p.RefName == newP.RefName {
|
if p.RefName == newP.RefName {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r.Refs = append(r.Refs, newP)
|
repo.Refs = append(repo.Refs, newP)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,11 +93,11 @@ func (r *Ref) Age(newP *Ref) time.Duration {
|
||||||
}
|
}
|
||||||
|
|
||||||
// find a package by name
|
// find a package by name
|
||||||
func (r *Refs) FindByName(name string) *Ref {
|
func (repo *Repo) FindRefByName(name string) *Ref {
|
||||||
refslock.RLock()
|
refslock.RLock()
|
||||||
defer refslock.RUnlock()
|
defer refslock.RUnlock()
|
||||||
|
|
||||||
for _, p := range r.Refs {
|
for _, p := range repo.Refs {
|
||||||
if p.RefName == name {
|
if p.RefName == name {
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
@ -106,11 +106,11 @@ func (r *Refs) FindByName(name string) *Ref {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Refs) Len() int {
|
func (repo *Repo) LenRefs() int {
|
||||||
refslock.RLock()
|
refslock.RLock()
|
||||||
defer refslock.RUnlock()
|
defer refslock.RUnlock()
|
||||||
|
|
||||||
return len(r.Refs)
|
return len(repo.Refs)
|
||||||
}
|
}
|
||||||
|
|
||||||
type RefsByName []*Ref
|
type RefsByName []*Ref
|
||||||
|
@ -120,28 +120,28 @@ func (a RefsByName) Less(i, j int) bool { return a[i].RefName < a[j].RefName }
|
||||||
func (a RefsByName) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
func (a RefsByName) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
||||||
|
|
||||||
// safely returns a slice of pointers to the Ref protobufs
|
// safely returns a slice of pointers to the Ref protobufs
|
||||||
func (r *Refs) selectAllRefs() []*Ref {
|
func (repo *Repo) selectAllRefs() []*Ref {
|
||||||
refslock.RLock()
|
refslock.RLock()
|
||||||
defer refslock.RUnlock()
|
defer refslock.RUnlock()
|
||||||
|
|
||||||
// Create a new slice to hold pointers to each Ref
|
// Create a new slice to hold pointers to each Ref
|
||||||
var allPacks []*Ref
|
var allRefs []*Ref
|
||||||
allPacks = make([]*Ref, len(r.Refs))
|
allRefs = make([]*Ref, len(repo.Refs))
|
||||||
for i, p := range r.Refs {
|
for i, p := range repo.Refs {
|
||||||
allPacks[i] = p // Copy pointers for safe iteration
|
allRefs[i] = p // Copy pointers for safe iteration
|
||||||
}
|
}
|
||||||
|
|
||||||
return allPacks
|
return allRefs
|
||||||
}
|
}
|
||||||
|
|
||||||
func (all *Refs) DeleteByHash(hash string) *Ref {
|
func (repo *Repo) DeleteByHash(hash string) *Ref {
|
||||||
refslock.Lock()
|
refslock.Lock()
|
||||||
defer refslock.Unlock()
|
defer refslock.Unlock()
|
||||||
|
|
||||||
for i, _ := range all.Refs {
|
for i, _ := range repo.Refs {
|
||||||
if all.Refs[i].Hash == hash {
|
if repo.Refs[i].Hash == hash {
|
||||||
all.Refs[i] = all.Refs[len(all.Refs)-1]
|
repo.Refs[i] = repo.Refs[len(repo.Refs)-1]
|
||||||
all.Refs = all.Refs[:len(all.Refs)-1]
|
repo.Refs = repo.Refs[:len(repo.Refs)-1]
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
update.go
12
update.go
|
@ -16,7 +16,7 @@ import (
|
||||||
|
|
||||||
// Update version and timestamp.
|
// Update version and timestamp.
|
||||||
// returns ok (ok == true if not found)
|
// returns ok (ok == true if not found)
|
||||||
func (r *Repo) Update(path string) error {
|
func (r *Repo) Update() error {
|
||||||
// delete the old hash
|
// delete the old hash
|
||||||
// r.DeleteByHash(hash)
|
// r.DeleteByHash(hash)
|
||||||
r.Refs = nil
|
r.Refs = nil
|
||||||
|
@ -25,7 +25,7 @@ func (r *Repo) Update(path string) error {
|
||||||
format := strings.Join(tags, "_,,,_")
|
format := strings.Join(tags, "_,,,_")
|
||||||
cmd := []string{"git", "for-each-ref", "--sort=taggerdate", "--format", format}
|
cmd := []string{"git", "for-each-ref", "--sort=taggerdate", "--format", format}
|
||||||
// log.Info("RUNNING:", strings.Join(cmd, " "))
|
// log.Info("RUNNING:", strings.Join(cmd, " "))
|
||||||
result := shell.PathRunQuiet("", cmd)
|
result := shell.PathRunQuiet(r.FullPath, cmd)
|
||||||
if result.Error != nil {
|
if result.Error != nil {
|
||||||
log.Warn("git for-each-ref error:", result.Error)
|
log.Warn("git for-each-ref error:", result.Error)
|
||||||
return result.Error
|
return result.Error
|
||||||
|
@ -80,7 +80,12 @@ func getGitDateStamp(gitdefault string) time.Time {
|
||||||
return tagTime
|
return tagTime
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Repos) NewGoPath(basepath string, gopath string) *Repo {
|
// scans in a new git repo. If it detects the repo is a golang project,
|
||||||
|
// then it parses the go.mod/go.sum files
|
||||||
|
// TODO: try adding python, rails, perl, rust, other language things?
|
||||||
|
// I probably will never have time to try that, but I'd take patches for anyone
|
||||||
|
// that might see this note and feel so inclined.
|
||||||
|
func (r *Repos) InitNewGoPath(basepath string, gopath string) *Repo {
|
||||||
if oldr := r.FindByPath(gopath); oldr != nil {
|
if oldr := r.FindByPath(gopath); oldr != nil {
|
||||||
// already had this gopath
|
// already had this gopath
|
||||||
return oldr
|
return oldr
|
||||||
|
@ -93,4 +98,5 @@ func (r *Repos) NewGoPath(basepath string, gopath string) *Repo {
|
||||||
newr.Update()
|
newr.Update()
|
||||||
|
|
||||||
r.Append(&newr)
|
r.Append(&newr)
|
||||||
|
return &newr
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue