mirror of https://github.com/axmolengine/axmol.git
85 lines
2.4 KiB
PowerShell
85 lines
2.4 KiB
PowerShell
# sync file or directory
|
|
# .\fsync.ps1 -s srcPath -d destPath -l 1
|
|
param(
|
|
[Parameter(Mandatory=$true, ValueFromPipeline=$true)]
|
|
[string]$srcPath,
|
|
[Parameter(Mandatory=$true, ValueFromPipeline=$true)]
|
|
[string]$destPath,
|
|
[Parameter(Mandatory=$false, ValueFromPipeline=$true)]
|
|
[PSDefaultValue(Value=$null)]
|
|
$linkOnly
|
|
)
|
|
|
|
|
|
function ParseBoolFuzzy($value) {
|
|
$value = "$value".ToLower()
|
|
return $value.startsWith('1') -or $value.StartsWith('t') -or $value.StartsWith('y')
|
|
}
|
|
|
|
$linkOnly = ParseBoolFuzzy($linkOnly)
|
|
|
|
# 0: windows, 1: linux, 2: macos
|
|
$IsWin = $IsWindows -or ("$env:OS" -eq 'Windows_NT')
|
|
|
|
# convert to native path style
|
|
if ($IsWin) {
|
|
$srcPath = $srcPath.Replace('/', '\')
|
|
$destPath = $destPath.Replace('/', '\')
|
|
} else {
|
|
$srcPath = $srcPath.Replace('\', '/')
|
|
$destPath = $destPath.Replace('\', '/')
|
|
}
|
|
|
|
if(!$srcPath -or !(Test-Path $srcPath -PathType Any)) {
|
|
throw "fsync.ps1: The source directory $srcPath not exist"
|
|
}
|
|
|
|
if (Test-Path $destPath -PathType Any) { # dest already exist
|
|
if ($linkOnly) { # is symlink and dest exist
|
|
$fileItem = (Get-Item $destPath)
|
|
if ($fileItem.Target -eq $srcPath) {
|
|
Write-Host "fsync.ps1: Symlink $destPath ===> $($fileItem.Target) exists"
|
|
return
|
|
}
|
|
Write-Host "fsync.ps1: Removing old link target $($fileItem.Target)"
|
|
# force delete if exist dest not symlink
|
|
if ($fileItem.PSIsContainer -and !$fileItem.Target) {
|
|
$fileItem.Delete($true)
|
|
} else {
|
|
$fileItem.Delete()
|
|
}
|
|
}
|
|
}
|
|
|
|
$destLoc = Split-Path $destPath -Parent
|
|
if (!(Test-Path $destLoc -PathType Container)) {
|
|
New-Item $destLoc -ItemType Directory 1>$null
|
|
}
|
|
|
|
if ($linkOnly) {
|
|
Write-Host "fsync.ps1: Symlink $srcPath to $destPath ..."
|
|
if ($IsWin -and (Test-Path $srcPath -PathType Container)) {
|
|
cmd.exe /c mklink /J $destPath $srcPath
|
|
}
|
|
else {
|
|
# ln -s $srcPath $destPath
|
|
New-Item -ItemType SymbolicLink -Path $destPath -Target $srcPath 2>$null
|
|
}
|
|
}
|
|
else { # copy
|
|
Write-Host "fsync.ps1: Copying $srcPath to $destPath ..."
|
|
if (Test-Path $srcPath -PathType Container) {
|
|
if (!(Test-Path $destPath -PathType Container)) {
|
|
Copy-Item $srcPath $destPath -Recurse -Force
|
|
} else {
|
|
Copy-Item $srcPath/* $destPath/ -Recurse -Force
|
|
}
|
|
} else {
|
|
Copy-Item $srcPath $destPath -Force
|
|
}
|
|
}
|
|
|
|
if(!$?) { # $Error array
|
|
exit 1
|
|
}
|