@@ -20,9 +20,6 @@ function determineManifestType (filename) {
2020 case / p a c k a g e s .c o n f i g $ / . test ( filename ) : {
2121 return 'packages.config' ;
2222 }
23- case / .c s p r o j $ / . test ( filename ) : {
24- return '.csproj' ;
25- }
2623 default : {
2724 throw new Error ( 'Could not determine manifest type for ' + filename ) ;
2825 }
@@ -117,57 +114,15 @@ module.exports = {
117114 } ) ;
118115 resolve ( installedPackages ) ;
119116 }
120- } )
121- break ;
122- }
123- case '.csproj' : {
124- debug ( 'Trying to parse .csproj manifest' ) ;
125- parseXML ( fileContent , function scanCsprojContent ( err , result ) {
126- if ( err ) {
127- reject ( err ) ;
128- } else {
129- ( result . Project . ItemGroup || [ ] ) . forEach ( function ( itemGroup ) {
130- ( itemGroup . Reference || [ ] ) . forEach ( function ( referenceItem ) {
131- if ( referenceItem . HintPath ) {
132- try {
133- var installedDependency =
134- Dependecy . from . csprojEntry ( referenceItem ) ;
135- if ( installedDependency . name . indexOf ( 'System.' ) !== 0 ) {
136- installedPackages . push ( installedDependency ) ;
137- }
138- }
139- catch ( err ) {
140- debug ( 'Could not parse package name. Skipping' ) ;
141- // gracefully continue
142- }
143- }
144- } ) ;
145- } ) ;
146- }
147- resolve ( installedPackages ) ;
148117 } ) ;
149118 break ;
150119 }
151120 }
152121 } ) . then ( function scanInstalled ( installedPackages ) {
153122 if ( manifestType !== 'dotnet-core' ) {
154123 debug ( 'Located ' + installedPackages . length + ' packages in manifest' ) ;
155- function injectPath ( dep ) {
156- dep . path = dep . localPath
157- ? path . resolve (
158- packagesFolder ,
159- dep . localPath
160- )
161- : path . resolve (
162- packagesFolder ,
163- dep . name + '.' + dep . version
164- ) ;
165- if ( dep . localPath ) {
166- delete dep . localPath ;
167- }
168- }
169124 installedPackages . forEach ( function ( entry ) {
170- injectPath ( entry ) ;
125+ injectPath ( entry , packagesFolder ) ;
171126 flattendPackageList [ entry . name ] =
172127 flattendPackageList [ entry . name ] || entry ;
173128 debug ( 'Entry: ' + entry . name + ' -> ' + entry . path ) ;
@@ -178,15 +133,24 @@ module.exports = {
178133 packagesFolder ) ;
179134 fs . readdirSync ( packagesFolder )
180135 . filter ( function ( name ) {
181- return name . slice ( 0 , 7 ) . toLowerCase ( ) !== 'system.'
136+ return name . slice ( 0 , 7 ) . toLowerCase ( ) !== 'system.' ;
182137 } )
183138 . map ( function ( folderName ) {
184139 return Dependecy . from . folderName ( folderName ) ;
185140 } )
186141 . forEach ( function ( dep ) {
187- injectPath ( dep ) ;
188- flattendPackageList [ dep . name ] =
189- flattendPackageList [ dep . name ] || dep ;
142+ injectPath ( dep , packagesFolder ) ;
143+ // only add a package from packages folder if version is different
144+ if ( flattendPackageList [ dep . name ] &&
145+ flattendPackageList [ dep . name ] . version !== dep . version ) {
146+ // prefer found from packages folder (dep) over existing
147+ debug ( 'For package ' + dep . name + ' the version ' +
148+ flattendPackageList [ dep . name ] . version +
149+ ' was extracted from manifest file.' +
150+ '\nWe are overwriting it with version ' + dep . version +
151+ ' from the packages folder' ) ;
152+ flattendPackageList [ dep . name ] = dep ;
153+ }
190154 } ) ;
191155 }
192156 catch ( err ) {
@@ -196,7 +160,7 @@ module.exports = {
196160 } else {
197161 debug ( 'Located ' +
198162 Object . keys ( tree . dependencies ) . length + 'packages in manifest' ) ;
199- var sorted = { }
163+ var sorted = { } ;
200164 Object . keys ( flattendPackageList ) . sort ( ) . forEach ( function ( key ) {
201165 sorted [ key ] = flattendPackageList [ key ] ;
202166 } ) ;
@@ -245,7 +209,7 @@ module.exports = {
245209 requiredChild . version ) ;
246210 transitiveDependency . versionSpec = requiredChild . version ;
247211 }
248- transitiveDependency . from = node . from . concat ( )
212+ transitiveDependency . from = node . from . concat ( ) ;
249213 var transitiveChildren =
250214 ( nuspecResolutions [ transitiveDependency . name ] &&
251215 nuspecResolutions [ transitiveDependency . name ] . children ) || [ ] ;
@@ -260,23 +224,33 @@ module.exports = {
260224 var _nugtKeyCount = Object . keys ( nuspecResolutions ) . length ;
261225 Object . keys ( flattendPackageList ) . forEach ( function ( packageName ) {
262226 tree . dependencies [ packageName ] =
263- flattendPackageList [ packageName ] . cloneShallow ( )
264- } )
227+ flattendPackageList [ packageName ] . cloneShallow ( ) ;
228+ } ) ;
265229 if ( _nugtKeyCount > 0 ) {
266230 // local folders scanned, build list from .nuspec
267231 for ( var key in nuspecResolutions ) {
268232 var resolution = nuspecResolutions [ key ] ;
269233 var node = flattendPackageList [ resolution . name ] . cloneShallow ( ) ;
270- node . from = tree . from . concat ( )
234+ node . from = tree . from . concat ( ) ;
271235 buildTree ( node , resolution . children , flattendPackageList ) ;
272236 tree . dependencies [ node . name ] = node ;
273237 }
274238 }
275239 return packageTree ;
276240 } ) [ 'catch' ] ( function ( err ) {
277241 throw ( err ) ;
278- } )
242+ } ) ;
279243
280244 return job ;
281245 } ,
282- } ;
246+ } ;
247+
248+ function injectPath ( dep , packagesFolder ) {
249+ dep . path =
250+ dep . localPath ?
251+ path . resolve ( packagesFolder , dep . localPath )
252+ : path . resolve ( packagesFolder , dep . name + '.' + dep . version ) ;
253+ if ( dep . localPath ) {
254+ delete dep . localPath ;
255+ }
256+ }
0 commit comments