UEScripts/legacy/ue4-svn-create.ps1

112 lines
2.9 KiB
PowerShell

[CmdletBinding()] # Fail on unknown args
param (
[string]$url,
[string]$path,
[switch]$help = $false
)
function Print-Usage {
Write-Output "Steve's UE4 Subversion Repo Creation Tool"
Write-Output " Create the structure for a new SVN repo & setup for UE4"
Write-Output " It will create trunk/branches/tags, then checkout trunk & setup UE4"
Write-Output " Run this if you have a completely blank server side repo & no checkout"
Write-Output "Usage:"
Write-Output " ue4-svn-create.ps1 [-urn:]svnurl [[-path:]checkoutpath] [Options]"
Write-Output " "
Write-Output " -url : Subversion URL; the ROOT path (should be empty)"
Write-Output " -path : Checkout path; if omitted append last part of URL to current dir"
Write-Output " -help : Print this help"
}
function Delete-Recursive {
param (
[string]$pathtodelete
)
# Remove-Item -Recurse doesn't work properly so do this manually
# -Force to Get-ChildItem includes hidden files, -Force to Remove-Item allows readonly delete
Get-ChildItem $pathtodelete -Recurse -Force | Remove-Item -Force -Recurse
Remove-Item -Force $pathtodelete # remove parent too
}
if ($help) {
Print-Usage
Exit 0
}
if ($url.Length -eq 0) {
Write-Output "ERROR: Missing Subversion URL argument"
Exit 1
}
$ErrorActionPreference = "Stop"
# Parse URL
$svnurl = [uri]$url
if ($path.Length -eq 0) {
$path = $svnurl.Segments[$svnurl.Segments.Length-1]
Write-Verbose "INFO: Checkout path not specified, using '$path'"
}
# Check $path doesn't exist
if (Test-Path $path) {
Write-Output "ERROR: Directory at '$path' already exists"
Exit 2
}
# Checkout SVN root
Write-Output "Checking out $url to $path"
svn checkout $url $path > $null
Push-Location $path
# check empty
if ($(Get-ChildItem .).Length -gt 0) {
# it's OK if the contents are trunk/branches/tags
# .svn is not listed by default since hidden but allow anyway
$allowed = @("trunk", "branches", "tags", ".svn")
foreach ($sub in $(Get-ChildItem .)) {
if (-not $sub -in $allowed) {
Write-Output "ERROR: Subversion root is not empty (bad entry: '$sub')"
Pop-Location
Delete-Recursive $path
Exit 2
}
}
}
Write-Output "Creating trunk/branches/tags folders"
$commit = $false
foreach ($dir in @("trunk", "branches", "tags")) {
if (-not $(Test-Path $dir)) {
New-Item $dir -ItemType Directory > $null
svn add $dir > $null
$commit = $true
}
}
if ($commit) {
svn commit -m "Created basic trunk/branches/tags structure"
}
Pop-Location
# Now delete and checkout trunk
Delete-Recursive $path
svn checkout $url/trunk $path > $null
Push-Location $path
# Call setup script from our location
& $PSScriptRoot/ue4-svn-setup.ps1
# That doesn't commit, so do that now
svn commit -m "UE4 setup for Subversion" > $null
Pop-Location