diff options
Diffstat (limited to 'godep.sort.go')
| -rw-r--r-- | godep.sort.go | 99 |
1 files changed, 0 insertions, 99 deletions
diff --git a/godep.sort.go b/godep.sort.go deleted file mode 100644 index ead6e59..0000000 --- a/godep.sort.go +++ /dev/null @@ -1,99 +0,0 @@ -package gitpb - -// this is becoming a standard format -// todo: autogenerate this from the .proto file? - -import ( - "fmt" - "os" - "sort" - sync "sync" -) - -// bad global lock until I figure out some other plan -var godeplock sync.RWMutex - -type GoDepIterator struct { - sync.RWMutex - - packs []*GoDep - index int -} - -// NewGoDepGoDepIterator initializes a new iterator. -func NewGoDepIterator(packs []*GoDep) *GoDepIterator { - return &GoDepIterator{packs: packs} -} - -// Scan moves to the next element and returns false if there are no more packs. -func (it *GoDepIterator) Scan() bool { - if it.index >= len(it.packs) { - return false - } - it.index++ - return true -} - -// GoDep returns the current repo. -func (it *GoDepIterator) GoDep() *GoDep { - if it.packs[it.index-1] == nil { - for i, d := range it.packs { - fmt.Println("i =", i, d) - } - fmt.Println("len =", len(it.packs)) - fmt.Println("repo == nil", it.index, it.index-1) - os.Exit(-1) - } - return it.packs[it.index-1] -} - -// Use Scan() in a loop, similar to a while loop -// -// for iterator.Scan() { -// d := iterator.GoDep() -// fmt.Println("GoDep UUID:", d.Uuid) -// } - -func (r *Repo) AllGoDeps() *GoDepIterator { - repoPointers := r.selectAllGoDeps() - - iterator := NewGoDepIterator(repoPointers) - return iterator -} - -func (r *Repo) SortGoDepsByName() *GoDepIterator { - packs := r.selectAllGoDeps() - - sort.Sort(GoDepByPath(packs)) - - iterator := NewGoDepIterator(packs) - return iterator -} - -func (repo *Repo) Len() int { - refslock.RLock() - defer refslock.RUnlock() - - return len(repo.GoDeps) -} - -type GoDepByPath []*GoDep - -func (a GoDepByPath) Len() int { return len(a) } -func (a GoDepByPath) Less(i, j int) bool { return a[i].GoPath < a[j].GoPath } -func (a GoDepByPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] } - -// safely returns a slice of pointers to the GoDep protobufs -func (r *Repo) selectAllGoDeps() []*GoDep { - refslock.RLock() - defer refslock.RUnlock() - - // Create a new slice to hold pointers to each GoDep - var allPacks []*GoDep - allPacks = make([]*GoDep, len(r.GoDeps)) - for i, p := range r.GoDeps { - allPacks[i] = p // Copy pointers for safe iteration - } - - return allPacks -} |
