First pass at implementing GetSharedTagGroups
This commit is contained in:
parent
8488b2f8fc
commit
c48fd9a499
|
|
@ -197,6 +197,37 @@ func (manifest Manifest2822) GetAllSharedTags() []string {
|
||||||
return fakeEntry.SharedTags
|
return fakeEntry.SharedTags
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SharedTagGroup struct {
|
||||||
|
SharedTags []string
|
||||||
|
Entries []*Manifest2822Entry
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSharedTagGroups returns a map of shared tag groups to the list of entries they share (as described in https://github.com/docker-library/go-dockerlibrary/pull/2#issuecomment-277853597).
|
||||||
|
func (manifest Manifest2822) GetSharedTagGroups() []SharedTagGroup {
|
||||||
|
inter := map[string][]string{}
|
||||||
|
interKeySep := ","
|
||||||
|
for _, sharedTag := range manifest.GetAllSharedTags() {
|
||||||
|
interKeyParts := []string{}
|
||||||
|
for _, entry := range manifest.GetSharedTag(sharedTag) {
|
||||||
|
interKeyParts = append(interKeyParts, entry.Tags[0])
|
||||||
|
}
|
||||||
|
interKey := strings.Join(interKeyParts, interKeySep)
|
||||||
|
inter[interKey] = append(inter[interKey], sharedTag)
|
||||||
|
}
|
||||||
|
ret := []SharedTagGroup{}
|
||||||
|
for tags, sharedTags := range inter {
|
||||||
|
group := SharedTagGroup{
|
||||||
|
SharedTags: sharedTags,
|
||||||
|
Entries: []*Manifest2822Entry{},
|
||||||
|
}
|
||||||
|
for _, tag := range strings.Split(tags, interKeySep) {
|
||||||
|
group.Entries = append(group.Entries, manifest.GetTag(tag))
|
||||||
|
}
|
||||||
|
ret = append(ret, group)
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
func (manifest *Manifest2822) AddEntry(entry Manifest2822Entry) error {
|
func (manifest *Manifest2822) AddEntry(entry Manifest2822Entry) error {
|
||||||
if len(entry.Tags) < 1 {
|
if len(entry.Tags) < 1 {
|
||||||
return fmt.Errorf("missing Tags")
|
return fmt.Errorf("missing Tags")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue