Return unique containers in Subcontainers().

Before this we'd return an instance for each alias we'd saved.

Fixes #592.
This commit is contained in:
Victor Marmol 2015-03-15 09:58:04 -07:00
parent 8e787e010b
commit 67f6ee48f9

View File

@ -378,22 +378,26 @@ func (self *manager) containerDataToContainerInfo(cont *containerData, query *in
} }
func (self *manager) SubcontainersInfo(containerName string, query *info.ContainerInfoRequest) ([]*info.ContainerInfo, error) { func (self *manager) SubcontainersInfo(containerName string, query *info.ContainerInfoRequest) ([]*info.ContainerInfo, error) {
var containers []*containerData var containersMap map[string]*containerData
func() { func() {
self.containersLock.RLock() self.containersLock.RLock()
defer self.containersLock.RUnlock() defer self.containersLock.RUnlock()
containers = make([]*containerData, 0, len(self.containers)) containersMap = make(map[string]*containerData, len(self.containers))
// Get all the subcontainers of the specified container // Get all the unique subcontainers of the specified container
matchedName := path.Join(containerName, "/") matchedName := path.Join(containerName, "/")
for i := range self.containers { for i := range self.containers {
name := self.containers[i].info.Name name := self.containers[i].info.Name
if name == containerName || strings.HasPrefix(name, matchedName) { if name == containerName || strings.HasPrefix(name, matchedName) {
containers = append(containers, self.containers[i]) containersMap[self.containers[i].info.Name] = self.containers[i]
} }
} }
}() }()
containers := make([]*containerData, 0, len(containersMap))
for _, cont := range containersMap {
containers = append(containers, cont)
}
return self.containerDataSliceToContainerInfoSlice(containers, query) return self.containerDataSliceToContainerInfoSlice(containers, query)
} }