diff --git a/internal/dependencymanager/dependencyinstaller.go b/internal/dependencymanager/dependencyinstaller.go index ad5225e87..23569a4cc 100644 --- a/internal/dependencymanager/dependencyinstaller.go +++ b/internal/dependencymanager/dependencyinstaller.go @@ -103,14 +103,13 @@ func (f *dependencyManagerFlagsCollection) AddToCommand(cmd *cobra.Command) { } type DependencyInstaller struct { - Gateways map[string]gateway.Gateway - Logger output.Logger - State *flowkit.State - SkipDeployments bool - SkipAlias bool - logs categorizedLogs - initialContractsState config.Contracts - dependencies map[string]config.Dependency + Gateways map[string]gateway.Gateway + Logger output.Logger + State *flowkit.State + SkipDeployments bool + SkipAlias bool + logs categorizedLogs + dependencies map[string]config.Dependency } // NewDependencyInstaller creates a new instance of DependencyInstaller @@ -137,13 +136,12 @@ func NewDependencyInstaller(logger output.Logger, state *flowkit.State, flags de } return &DependencyInstaller{ - Gateways: gateways, - Logger: logger, - State: state, - SkipDeployments: flags.skipDeployments, - SkipAlias: flags.skipAlias, - initialContractsState: *state.Contracts(), // Copy at this point in time - dependencies: make(map[string]config.Dependency), + Gateways: gateways, + Logger: logger, + State: state, + SkipDeployments: flags.skipDeployments, + SkipAlias: flags.skipAlias, + dependencies: make(map[string]config.Dependency), }, nil } @@ -207,25 +205,24 @@ func (di *DependencyInstaller) Add(depSource, customName string) error { } func (di *DependencyInstaller) addDependency(dep config.Dependency) error { - if _, exists := di.dependencies[dep.Source.Address.String()]; exists { + sourceString := fmt.Sprintf("%s://%s.%s", dep.Source.NetworkName, dep.Source.Address.String(), dep.Source.ContractName) + + if _, exists := di.dependencies[sourceString]; exists { return nil } - di.dependencies[dep.Source.Address.String()] = dep + di.dependencies[sourceString] = dep return nil - } // checkForConflictingContracts checks if any of the dependencies conflict with contracts already in the state func (di *DependencyInstaller) checkForConflictingContracts() { for _, dependency := range di.dependencies { - _, err := di.initialContractsState.ByName(dependency.Name) - if err != nil { - if !isCoreContract(dependency.Name) { - msg := util.MessageWithEmojiPrefix("❌", fmt.Sprintf("Contract named %s already exists in flow.json", dependency.Name)) - di.logs.issues = append(di.logs.issues, msg) - } + foundContract, _ := di.State.Contracts().ByName(dependency.Name) + if foundContract != nil && !foundContract.IsDependency { + msg := util.MessageWithEmojiPrefix("❌", fmt.Sprintf("Contract named %s already exists in flow.json", dependency.Name)) + di.logs.issues = append(di.logs.issues, msg) } } }