Skip to content

Commit d2b87a0

Browse files
authored
Merge pull request #5553 from thaJeztah/login_idempotent
cli/config/credentials: skip saving config-file if credentials didn't change
2 parents 24ee5f2 + d3f6867 commit d2b87a0

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

cli/config/credentials/file_store.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ func NewFileStore(file store) Store {
3030

3131
// Erase removes the given credentials from the file store.
3232
func (c *fileStore) Erase(serverAddress string) error {
33+
if _, exists := c.file.GetAuthConfigs()[serverAddress]; !exists {
34+
// nothing to do; no credentials found for the given serverAddress
35+
return nil
36+
}
3337
delete(c.file.GetAuthConfigs(), serverAddress)
3438
return c.file.Save()
3539
}
@@ -70,9 +74,14 @@ https://docs.docker.com/go/credential-store/
7074
// CLI invocation (no need to warn the user multiple times per command).
7175
var alreadyPrinted atomic.Bool
7276

73-
// Store saves the given credentials in the file store.
77+
// Store saves the given credentials in the file store. This function is
78+
// idempotent and does not update the file if credentials did not change.
7479
func (c *fileStore) Store(authConfig types.AuthConfig) error {
7580
authConfigs := c.file.GetAuthConfigs()
81+
if oldAuthConfig, ok := authConfigs[authConfig.ServerAddress]; ok && oldAuthConfig == authConfig {
82+
// Credentials didn't change, so skip updating the configuration file.
83+
return nil
84+
}
7685
authConfigs[authConfig.ServerAddress] = authConfig
7786
if err := c.file.Save(); err != nil {
7887
return err

0 commit comments

Comments
 (0)