@@ -139,36 +139,60 @@ func (s Store) List(_ context.Context) ([]Credential, error) {
139139 return nil , err
140140 }
141141
142- credsByContext := make (map [string ][]Credential )
143- allCreds := make ([]Credential , 0 )
144- for serverAddress , authCfg := range list {
145- if authCfg .ServerAddress == "" {
146- authCfg .ServerAddress = serverAddress // Not sure why we have to do this, but we do.
142+ if len (s .credCtxs ) > 0 && s .credCtxs [0 ] == AllCredentialContexts {
143+ allCreds := make ([]Credential , len (list ))
144+ for serverAddress := range list {
145+ ac , err := store .Get (serverAddress )
146+ if err != nil {
147+ return nil , err
148+ }
149+ ac .ServerAddress = serverAddress
150+
151+ cred , err := credentialFromDockerAuthConfig (ac )
152+ if err != nil {
153+ return nil , err
154+ }
155+ allCreds = append (allCreds , cred )
147156 }
148157
149- c , err := credentialFromDockerAuthConfig (authCfg )
158+ return allCreds , nil
159+ }
160+
161+ serverAddressesByContext := make (map [string ][]string )
162+ for serverAddress := range list {
163+ _ , ctx , err := toolNameAndCtxFromAddress (serverAddress )
150164 if err != nil {
151165 return nil , err
152166 }
153167
154- allCreds = append (allCreds , c )
155-
156- if credsByContext [c .Context ] == nil {
157- credsByContext [c .Context ] = []Credential {c }
168+ if serverAddressesByContext [ctx ] == nil {
169+ serverAddressesByContext [ctx ] = []string {serverAddress }
158170 } else {
159- credsByContext [ c . Context ] = append (credsByContext [ c . Context ], c )
171+ serverAddressesByContext [ ctx ] = append (serverAddressesByContext [ ctx ], serverAddress )
160172 }
161173 }
162174
163- if len (s .credCtxs ) > 0 && s .credCtxs [0 ] == AllCredentialContexts {
164- return allCreds , nil
165- }
166-
167175 // Go through the contexts in reverse order so that higher priority contexts override lower ones.
168176 credsByName := make (map [string ]Credential )
169177 for i := len (s .credCtxs ) - 1 ; i >= 0 ; i -- {
170- for _ , c := range credsByContext [s.credCtxs [i ]] {
171- credsByName [c .ToolName ] = c
178+ for _ , serverAddress := range serverAddressesByContext [s.credCtxs [i ]] {
179+ ac , err := store .Get (serverAddress )
180+ if err != nil {
181+ return nil , err
182+ }
183+ ac .ServerAddress = serverAddress
184+
185+ cred , err := credentialFromDockerAuthConfig (ac )
186+ if err != nil {
187+ return nil , err
188+ }
189+
190+ toolName , _ , err := toolNameAndCtxFromAddress (serverAddress )
191+ if err != nil {
192+ return nil , err
193+ }
194+
195+ credsByName [toolName ] = cred
172196 }
173197 }
174198
0 commit comments