scan/scan-projects.ps1
import-module newtonsoft.json function Initialize-Projects { [CmdletBinding()] param ($Path = ".") $_path = $path ipmo pathutils $projectFiles = Get-Listing -Path $_path -files -include "*.csproj","*.xproj","*.nuspec","project.json" -Recursive ` -Excludes "node_modules/","artifacts/","bin/","obj/",".hg/","dnx-packages/","packages/","/common/","bower_components/","reader-content/","publish/","^\..*/" $projects = @{} $projectFiles = $projectFiles | ? { !$_.Name.EndsWith(".user") } $projectFiles | % { if ($_.Name -eq "project.json") { $name = [System.IO.Path]::GetDirectoryName($_.Fullname) } else { $name = [System.IO.Path]::GetFileNameWithoutExtension($_.Name) } $path = Get-RelativePath (gi .).fullname $_.fullname # $false and $true cause trouble when serializing with newtonsoft $hasNuspec = "false" try { $foundNuspec = test-path (join-path (split-path $path -Parent) "$name.nuspec") if ($foundNuspec) { $hasNuspec = "true" } } catch { } if ($projects.ContainsKey($name)) { write-warning "duplicate projects found: $($projects[$name].path)" write-warning " and $path" $guid = [guid]::NewGuid().ToString("n") $projects += @{ "$($name)_$guid" = @{ path = $path; hasNuspec = $hasNuspec }} } else { write-verbose "found project '$name' at '$path'" $projects += @{ "$name" = @{ path = $path; hasNuspec = $hasNuspec }} } } $projects | convertto-jsonnewtonsoft | out-file (join-path $_path ".projects.json") #$s =new-object -type "Newtonsoft.Json.JsonSerializerSettings" #$s.ReferenceLoopHandling = [Newtonsoft.Json.ReferenceLoopHandling]::Ignore write-host "Found $($projects.Count) projects" } New-Alias Scan-Projects Initialize-Projects -Force |