106 lines
3.6 KiB
PowerShell
106 lines
3.6 KiB
PowerShell
[CmdLetBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$true, Position=0)][string]$SearchDir,
|
|
[Parameter(Mandatory=$true, Position=1)][string]$SourceRoot,
|
|
[Parameter(Mandatory=$true, Position=2)][string]$CommitId,
|
|
[string]$Organization = "microsoft",
|
|
[string]$Repo = "terminal",
|
|
[switch]$recursive
|
|
)
|
|
|
|
$pdbStrPackage = ([xml](Get-Content "$SourceRoot\build\packages.config")).packages.package | Where-Object id -like "*PdbStr*"
|
|
# This assumes that we rev PdbStr and SrcTool at the same time.
|
|
$debugPackageVersions = $pdbStrPackage.version
|
|
$srctoolExe = Join-Path $SourceRoot "packages" "Microsoft.Debugging.Tools.SrcTool.$debugPackageVersions" "content" "amd64" "srctool.exe"
|
|
$pdbstrExe = Join-Path $SourceRoot "packages" "Microsoft.Debugging.Tools.PdbStr.$debugPackageVersions" "content" "amd64" "pdbstr.exe"
|
|
|
|
$fileTable = @{}
|
|
foreach ($gitFile in & git ls-files)
|
|
{
|
|
$fileTable[$gitFile] = $gitFile
|
|
}
|
|
|
|
$mappedFiles = New-Object System.Collections.ArrayList
|
|
|
|
foreach ($file in (Get-ChildItem -r:$recursive "$SearchDir\*.pdb"))
|
|
{
|
|
$mappedFiles = New-Object System.Collections.ArrayList
|
|
Write-Verbose "Found $file"
|
|
|
|
$ErrorActionPreference = "Continue" # Azure Pipelines defaults to "Stop", continue past errors in this script.
|
|
|
|
$allFiles = & $srctoolExe -r "$file"
|
|
|
|
# If the pdb didn't have enough files then skip it (the srctool output has a blank line even when there's no info
|
|
# so check for less than 2 lines)
|
|
if ($allFiles.Length -lt 2)
|
|
{
|
|
continue
|
|
}
|
|
|
|
for ($i = 0; $i -lt $allFiles.Length; $i++)
|
|
{
|
|
if ($allFiles[$i].StartsWith($SourceRoot, [StringComparison]::OrdinalIgnoreCase))
|
|
{
|
|
$relative = $allFiles[$i].Substring($SourceRoot.Length).TrimStart("\")
|
|
$relative = $relative.Replace("\", "/")
|
|
|
|
# Git urls are case-sensitive but the PDB might contain a lowercased version of the file path.
|
|
# Look up the relative url in the output of "ls-files". If it's not there then it's not something
|
|
# in git, so don't index it.
|
|
$relative = $fileTable[$relative]
|
|
if ($relative)
|
|
{
|
|
$mapping = $allFiles[$i] + "*$relative"
|
|
$ignore = $mappedFiles.Add($mapping)
|
|
|
|
Write-Verbose "Mapped path $($i): $mapping"
|
|
}
|
|
}
|
|
}
|
|
|
|
$pdbstrFile = Join-Path "$env:TEMP" "pdbstr.txt"
|
|
|
|
Write-Verbose "pdbstr.txt = $pdbstrFile"
|
|
|
|
@"
|
|
SRCSRV: ini ------------------------------------------------
|
|
VERSION=2
|
|
VERCTRL=http
|
|
SRCSRV: variables ------------------------------------------
|
|
ORGANIZATION=$Organization
|
|
REPO=$Repo
|
|
COMMITID=$CommitId
|
|
HTTP_ALIAS=https://raw.githubusercontent.com/%ORGANIZATION%/%REPO%/%COMMITID%/
|
|
HTTP_EXTRACT_TARGET=%HTTP_ALIAS%%var2%
|
|
SRCSRVTRG=%HTTP_EXTRACT_TARGET%
|
|
SRC_INDEX=public
|
|
SRCSRV: source files ---------------------------------------
|
|
$($mappedFiles -join "`r`n")
|
|
SRCSRV: end ------------------------------------------------
|
|
"@ | Set-Content $pdbstrFile
|
|
|
|
Write-Host
|
|
Write-Host
|
|
Write-Host (Get-Content $pdbstrFile)
|
|
Write-Host
|
|
Write-Host
|
|
|
|
Write-Host "$pdbstrExe -p:""$file"" -w -s:srcsrv -i:$pdbstrFile"
|
|
& $pdbstrExe -p:"$file" -w -s:srcsrv -i:$pdbstrFile
|
|
Write-Host
|
|
Write-Host
|
|
|
|
Write-Host "$pdbstrExe -p:""$file"" -r -s:srcsrv"
|
|
& $pdbstrExe -p:"$file" -r -s:srcsrv
|
|
Write-Host
|
|
Write-Host
|
|
|
|
Write-Host "$srctoolExe $file"
|
|
& $srctoolExe "$file"
|
|
Write-Host
|
|
Write-Host
|
|
}
|
|
|
|
# Return with exit 0 to override any weird error code from other tools
|
|
Exit 0 |