Mineplex2018-withcommit/Website/packages/T4Scaffolding.1.0.6/tools/CustomTemplate/T4Scaffolding.CustomTemplate.ps1

45 lines
2.1 KiB
PowerShell
Raw Normal View History

2013-08-27 17:14:08 +02:00
[T4Scaffolding.Scaffolder(Description = "Allows you to modify the T4 template rendered by a scaffolder")][CmdletBinding()]
param(
[parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string]$ScaffolderName,
[parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string]$TemplateName,
[string]$Project,
[string]$CodeLanguage,
[switch]$Force = $false
)
# Ensure we can find a unique scaffolder
$resolvedScaffolder = Get-Scaffolder $ScaffolderName -Project $Project
if (!$resolvedScaffolder) {
Write-Error "Could not find scaffolder '$ScaffolderName'"
return
} elseif ($resolvedScaffolder -is [Array]) {
Write-Error "More than one scaffolder matches the name '$ScaffolderName'"
return
}
# Find its template
$scaffolderFolder = [System.IO.Path]::GetDirectoryName($resolvedScaffolder.Location)
$sourceTemplateFile = Find-ScaffolderTemplate $TemplateName -TemplateFolders $scaffolderFolder -Project $Project -CodeLanguage $CodeLanguage -ErrorIfNotFound
if (!$sourceTemplateFile) { return }
# Determine where the output will go in the project, and ensure we're not going to overwrite anything (except if Force is on)
$customScaffoldersPath = [T4Scaffolding.Core.ScaffoldingConstants]::CustomScaffoldersFolderPath
$outputPath = Join-Path (Join-Path $customScaffoldersPath $resolvedScaffolder.Name) ([System.IO.Path]::GetFileName($sourceTemplateFile))
$existingProjectItem = Get-ProjectItem $outputPath -Project $Project
if ($existingProjectItem -and -not $Force) {
Write-Warning "$outputPath already exists! Pass -Force to overwrite. Skipping..."
return
}
# Copy the source file to the output location in the project
if ($existingProjectItem) {
$outputPath = $existingProjectItem.Properties.Item("FullPath").Value
Set-IsCheckedOut $outputPath
Copy-Item -Path $sourceTemplateFile -Destination $outputPath -Force
} else {
$outputDir = [System.IO.Path]::GetDirectoryName($outputPath)
$outputDirProjectItem = Get-ProjectFolder $outputDir -Create -Project $Project
$outputDirProjectItem.AddFromFileCopy($sourceTemplateFile) | Out-Null
}
Write-Host "Added custom template '$outputPath'"