@@ -121,11 +121,11 @@ private List<PackageSearchMetadataRegistration> FindPackageVersionsThroughCache(
121121 public PackageSearchMetadataRegistration ? FindPackageVersion ( PackageIdentity pid )
122122 {
123123 if ( Config . TRACE )
124- Console . WriteLine ( $ "Fetching package metadata for: { pid } ") ;
124+ Console . WriteLine ( $ " Fetching package metadata for: { pid } ") ;
125125
126126 if ( psmr_by_identity . TryGetValue ( key : pid , out PackageSearchMetadataRegistration ? psmr ) )
127127 {
128- if ( Config . TRACE )
128+ if ( Config . TRACE_META )
129129 Console . WriteLine ( $ " Metadata Cache hit for '{ pid } '") ;
130130 return psmr ;
131131 }
@@ -145,7 +145,7 @@ private List<PackageSearchMetadataRegistration> FindPackageVersionsThroughCache(
145145
146146 if ( psmr != null )
147147 {
148- if ( Config . TRACE )
148+ if ( Config . TRACE_META )
149149 Console . WriteLine ( $ " Found metadata for '{ pid } ' from: { metadata_resource } ") ;
150150 psmr_by_identity [ pid ] = psmr ;
151151 return psmr ;
@@ -400,7 +400,7 @@ public IEnumerable<PackageDependency> GetPackageDependenciesForPackage(PackageId
400400 return spdi ;
401401 }
402402
403- if ( Config . TRACE )
403+ if ( Config . TRACE_META )
404404 Console . WriteLine ( $ " GetPackageInfo: { identity } framework: { framework } ") ;
405405
406406 foreach ( var dir in dependency_info_resources )
@@ -416,7 +416,7 @@ public IEnumerable<PackageDependency> GetPackageDependenciesForPackage(PackageId
416416
417417 spdi = infoTask . Result ;
418418
419- if ( Config . TRACE && spdi != null )
419+ if ( Config . TRACE_META && spdi != null )
420420 Console . WriteLine ( $ " Found download URL: { spdi . DownloadUri } hash: { spdi . PackageHash } ") ;
421421
422422 if ( spdi != null )
@@ -506,8 +506,8 @@ public IEnumerable<PackageDependency> GetPackageDependenciesForPackage(PackageId
506506 var spdi = GetResolvedSourcePackageDependencyInfo (
507507 identity : identity ,
508508 framework : project_framework ) ;
509- if ( Config . TRACE )
510- Console . WriteLine ( $ " Info available for package '{ spdi } '") ;
509+ if ( Config . TRACE_DEEP )
510+ Console . WriteLine ( $ " Info available for package '{ spdi } '") ;
511511
512512 if ( spdi != null )
513513 {
@@ -720,8 +720,9 @@ public HashSet<SourcePackageDependencyInfo> ResolveDependenciesForPackageReferen
720720 var walk_context = new RemoteWalkContext (
721721 cacheContext : source_cache_context ,
722722 packageSourceMapping : psm ,
723- logger : nuget_logger ) ;
724-
723+ logger : nuget_logger ) {
724+ IsMsBuildBased = true
725+ } ;
725726 var packages = new List < PackageId > ( ) ;
726727 foreach ( var targetref in target_references )
727728 {
@@ -750,8 +751,8 @@ public HashSet<SourcePackageDependencyInfo> ResolveDependenciesForPackageReferen
750751 walk_context . RemoteLibraryProviders . Add ( provider ) ;
751752 }
752753
753- // We need a fake root lib as there is only one allowed input
754- // This represents the project
754+ // We need a fake root lib as there is only one allowed input to walk
755+ // the dependencies: This represents the project
755756 var rootlib = new LibraryRange (
756757 name : "root_project" ,
757758 versionRange : VersionRange . Parse ( "1.0.0" ) ,
@@ -762,23 +763,71 @@ public HashSet<SourcePackageDependencyInfo> ResolveDependenciesForPackageReferen
762763 var results = walker . WalkAsync (
763764 library : rootlib ,
764765 framework : project_framework ,
766+ // TODO: add eventual support for runtime id
767+ // https://learn.microsoft.com/en-us/dotnet/core/rid-catalog
765768 runtimeIdentifier : null ,
766- runtimeGraph : RuntimeGraph . Empty ,
769+ runtimeGraph : null , // RuntimeGraph.Empty,
767770 recursive : true ) ;
768- var resolved_graph = results . Result ;
771+ GraphNode < RemoteResolveResult > resolved_graph = results . Result ;
769772 CheckGraphForErrors ( resolved_graph ) ;
770773
774+ RestoreTargetGraph rg = RestoreTargetGraph . Create (
775+ graphs : new List < GraphNode < RemoteResolveResult > > ( ) { resolved_graph } ,
776+ context : walk_context ,
777+ logger : nuget_logger ,
778+ framework : project_framework
779+ ) ;
780+
771781 var resolved_package_info_by_package_id = new Dictionary < PackageId , ResolvedPackageInfo > ( ) ;
772782
773- // we iterate only inner nodes, because we have only one outer node: the "fake" root project
774- foreach ( GraphNode < RemoteResolveResult > inner in resolved_graph . InnerNodes )
783+ if ( Config . TRACE )
784+ Console . WriteLine ( " RestoreTargetGraph" ) ;
785+
786+ if ( rg . Flattened != null )
775787 {
776- if ( Config . TRACE_DEEP )
777- Console . WriteLine ( $ " Resolved direct dependency: { inner . Item . Key . Name } @{ inner . Item . Key . Version } ") ;
788+ var flats = new List < GraphItem < RemoteResolveResult > > ( rg . Flattened ) ;
789+ flats . Sort ( ( x , y ) => x . Data . Match . Library . CompareTo ( y . Data . Match . Library ) ) ;
790+
791+ foreach ( var item in flats )
792+ {
793+ LibraryIdentity lib = item . Key ;
794+ if ( lib . Type != "package" )
795+ continue ;
796+
797+
798+ string name = lib . Name ;
799+ string version = lib . Version . ToNormalizedString ( ) ;
800+ bool is_prerelease = lib . Version . IsPrerelease ;
778801
779- FlattenGraph ( inner , resolved_package_info_by_package_id ) ;
802+ RemoteMatch remote_match = item . Data . Match ;
803+
804+ var deps = item . Data . Dependencies ;
805+ var pid = new PackageId ( id : name , version : version , allow_prerelease_versions : is_prerelease ) ;
806+ var rpi = new ResolvedPackageInfo ( ) {
807+ package_id = pid ,
808+ remote_match = remote_match
809+ } ;
810+ resolved_package_info_by_package_id [ pid ] = rpi ;
811+ if ( Config . TRACE )
812+ {
813+ Console . WriteLine ( $ " { lib } ") ;
814+ foreach ( var dep in deps )
815+ {
816+ Console . WriteLine ( $ " { lib . Type } /{ dep . Name } @{ dep . LibraryRange } autoref: { dep . AutoReferenced } ") ;
817+ }
818+ }
819+ }
780820 }
781821
822+ // we iterate only inner nodes, because we have only one outer node: the "fake" root project
823+ // foreach (GraphNode<RemoteResolveResult> inner in resolved_graph.InnerNodes)
824+ // {
825+ // if (Config.TRACE_DEEP)
826+ // Console.WriteLine($"\n Resolved direct dependency: {inner.Item.Key.Name}@{inner.Item.Key.Version}");
827+
828+ // FlattenGraph(inner, resolved_package_info_by_package_id);
829+ // }
830+
782831 HashSet < SourcePackageDependencyInfo > flat_dependencies = new ( ) ;
783832 foreach ( KeyValuePair < PackageId , ResolvedPackageInfo > item in resolved_package_info_by_package_id )
784833 {
@@ -803,7 +852,7 @@ public HashSet<SourcePackageDependencyInfo> ResolveDependenciesForPackageReferen
803852 }
804853
805854 /// <summary>
806- /// Flatten the graph and populate the result a mapping recursively
855+ /// Flatten the graph and populate the result mapping recursively
807856 /// </summary>
808857 public static void FlattenGraph (
809858 GraphNode < RemoteResolveResult > node ,
@@ -831,8 +880,18 @@ public static void FlattenGraph(
831880 string name = key . Name ;
832881 string version = key . Version . ToNormalizedString ( ) ;
833882 bool isPrerelease = key . Version . IsPrerelease ;
883+
884+ RemoteMatch remote_match = item . Data . Match ;
885+
834886 if ( Config . TRACE_DEEP )
835- Console . WriteLine ( $ " FlattenGraph: node.Item { node . Item } LibraryId: { key } ") ;
887+ {
888+ Console . WriteLine ( $ "\n FlattenGraph: node.Item { node . Item } type: { node . GetType ( ) } LibraryId: { key } LibraryIdType: { key . Type } ") ;
889+ Console . WriteLine ( $ " remote_match: { remote_match } path: { remote_match . Path } type: { remote_match . Library } ") ;
890+ foreach ( var idd in item . Data . Dependencies )
891+ {
892+ Console . WriteLine ( $ " Dependency: { idd } AutoReferenced: { idd . AutoReferenced } ") ;
893+ }
894+ }
836895
837896 var pid = new PackageId (
838897 id : name ,
@@ -842,11 +901,11 @@ public static void FlattenGraph(
842901 var resolved_package_info = new ResolvedPackageInfo
843902 {
844903 package_id = pid ,
845- remote_match = ( RemoteMatch ? ) item . Data . Match
904+ remote_match = item . Data . Match
846905 } ;
847906
848907 if ( Config . TRACE_DEEP )
849- Console . WriteLine ( $ " FlattenGraph: { pid } Library: { item . Data . Match . Library } ") ;
908+ Console . WriteLine ( $ " FlattenGraph: { pid } Library: { item . Data . Match . Library } ") ;
850909
851910 if ( ! resolved_package_info_by_package_id . ContainsKey ( resolved_package_info . package_id ) )
852911 resolved_package_info_by_package_id . Add ( resolved_package_info . package_id , resolved_package_info ) ;
0 commit comments