@@ -136,15 +136,15 @@ func addUnresolvedPackage(g *pkggraph.PkgGraph, pkgVer *pkgjson.PackageVer) (new
136136 return
137137 }
138138
139- logger .Log .Infof ("Adding unresolved node %s \n " , newRunNode .FriendlyName ())
139+ logger .Log .Infof ("Adding unresolved node '%s'. " , newRunNode .FriendlyName ())
140140
141141 return
142142}
143143
144144// addNodesForPackage creates a "Run", "Build", and "Test" node for the package described
145145// in the Package structure. Returns pointers to the build and run Nodes
146146// created, or an error if one of the nodes could not be created.
147- func addNodesForPackage (g * pkggraph.PkgGraph , pkg * pkgjson.Package ) (err error ) {
147+ func addNodesForPackage (g * pkggraph.PkgGraph , pkg * pkgjson.Package ) (foundDuplicate bool , err error ) {
148148 var (
149149 newRunNode * pkggraph.PkgNode
150150 newBuildNode * pkggraph.PkgNode
@@ -156,34 +156,23 @@ func addNodesForPackage(g *pkggraph.PkgGraph, pkg *pkgjson.Package) (err error)
156156 return
157157 }
158158
159- skipNewTestNode := false
160159 if nodes != nil {
161- logger .Log .Warnf (`Duplicate package name for package %+v read from SRPM "%s" (Previous: %+v)` , pkg .Provides , pkg .SrpmPath , nodes .RunNode )
162- newRunNode = nodes .RunNode
163- newBuildNode = nodes .BuildNode
164- newTestNode = nodes .TestNode
165-
166- // Test nodes must be assigned to the build nodes of their true origin and not a duplicate from a potentially different SRPM.
167- skipNewTestNode = true
160+ logger .Log .Warnf (`Skipping duplicate package name for package %+v read from SRPM "%s". Original: %+v.` , pkg .Provides , pkg .SrpmPath , nodes .RunNode )
161+ foundDuplicate = true
162+ return
168163 }
169164
170- if newRunNode == nil {
171- // Add "Run" node
172- newRunNode , err = g .AddPkgNode (pkg .Provides , pkggraph .StateMeta , pkggraph .TypeLocalRun , pkg .SrpmPath , pkg .RpmPath , pkg .SpecPath , pkg .SourceDir , pkg .Architecture , pkggraph .LocalRepo )
173- if err != nil {
174- return
175- }
176- logger .Log .Debugf ("Adding run node %s with id %d\n " , newRunNode .FriendlyName (), newRunNode .ID ())
165+ newRunNode , err = g .AddPkgNode (pkg .Provides , pkggraph .StateMeta , pkggraph .TypeLocalRun , pkg .SrpmPath , pkg .RpmPath , pkg .SpecPath , pkg .SourceDir , pkg .Architecture , pkggraph .LocalRepo )
166+ if err != nil {
167+ return
177168 }
169+ logger .Log .Debugf ("Adding run node '%s' with id %d." , newRunNode .FriendlyName (), newRunNode .ID ())
178170
179- if newBuildNode == nil {
180- // Add "Build" node
181- newBuildNode , err = g .AddPkgNode (pkg .Provides , pkggraph .StateBuild , pkggraph .TypeLocalBuild , pkg .SrpmPath , pkg .RpmPath , pkg .SpecPath , pkg .SourceDir , pkg .Architecture , pkggraph .LocalRepo )
182- if err != nil {
183- return
184- }
185- logger .Log .Debugf ("Adding build node %s with id %d\n " , newBuildNode .FriendlyName (), newBuildNode .ID ())
171+ newBuildNode , err = g .AddPkgNode (pkg .Provides , pkggraph .StateBuild , pkggraph .TypeLocalBuild , pkg .SrpmPath , pkg .RpmPath , pkg .SpecPath , pkg .SourceDir , pkg .Architecture , pkggraph .LocalRepo )
172+ if err != nil {
173+ return
186174 }
175+ logger .Log .Debugf ("Adding build node '%s' with id %d." , newBuildNode .FriendlyName (), newBuildNode .ID ())
187176
188177 // A "run" node has an implicit dependency on its corresponding "build" node, encode that here.
189178 err = g .AddEdge (newRunNode , newBuildNode )
@@ -192,19 +181,16 @@ func addNodesForPackage(g *pkggraph.PkgGraph, pkg *pkgjson.Package) (err error)
192181 return
193182 }
194183
195- if skipNewTestNode || ! pkg .RunTests {
184+ if ! pkg .RunTests {
196185 logger .Log .Debugf ("Skipping adding a test node for package %+v" , pkg )
197186 return
198187 }
199188
200- if newTestNode == nil {
201- // Add "Test" node
202- newTestNode , err = g .AddPkgNode (pkg .Provides , pkggraph .StateBuild , pkggraph .TypeTest , pkg .SrpmPath , pkggraph .NoRPMPath , pkg .SpecPath , pkg .SourceDir , pkg .Architecture , pkggraph .LocalRepo )
203- if err != nil {
204- return
205- }
206- logger .Log .Debugf ("Adding test node %s with id %d\n " , newTestNode .FriendlyName (), newTestNode .ID ())
189+ newTestNode , err = g .AddPkgNode (pkg .Provides , pkggraph .StateBuild , pkggraph .TypeTest , pkg .SrpmPath , pkggraph .NoRPMPath , pkg .SpecPath , pkg .SourceDir , pkg .Architecture , pkggraph .LocalRepo )
190+ if err != nil {
191+ return
207192 }
193+ logger .Log .Debugf ("Adding test node '%s' with id %d." , newTestNode .FriendlyName (), newTestNode .ID ())
208194
209195 // A "test" node has a dependency on its corresponding "build" node. This dependency is required
210196 // to guarantee we will first check if the build node needs to be built or not before we make
@@ -331,12 +317,17 @@ func populateGraph(graph *pkggraph.PkgGraph, repo *pkgjson.PackageRepo) (err err
331317
332318 // Scan and add each package we know about
333319 logger .Log .Infof ("Adding all packages from %s" , * input )
320+ uniquePackages := make (map [* pkgjson.Package ]bool )
334321 for _ , pkg := range packages {
335- err = addNodesForPackage (graph , pkg )
322+ foundDuplicate , err : = addNodesForPackage (graph , pkg )
336323 if err != nil {
337324 logger .Log .Errorf ("Failed to add local package %+v" , pkg )
338325 return err
339326 }
327+
328+ if ! foundDuplicate {
329+ uniquePackages [pkg ] = true
330+ }
340331 }
341332 logger .Log .Infof ("\t Added %d packages" , len (packages ))
342333
@@ -346,11 +337,10 @@ func populateGraph(graph *pkggraph.PkgGraph, repo *pkgjson.PackageRepo) (err err
346337 // Rescan and add all the dependencies
347338 logger .Log .Infof ("Adding all dependencies from %s" , * input )
348339 dependenciesAdded := 0
349- for idx := range packages {
350- pkg := packages [idx ]
351- num , err := addPkgDependencies (graph , pkg )
340+ for uniquePkg := range uniquePackages {
341+ num , err := addPkgDependencies (graph , uniquePkg )
352342 if err != nil {
353- logger .Log .Errorf ("Failed to add dependency %+v" , pkg )
343+ logger .Log .Errorf ("Failed to add dependency %+v" , uniquePkg )
354344 return err
355345 }
356346 dependenciesAdded += num
0 commit comments