Files
Rules/scripts/Push-HomeMirror.ps1

61 lines
2.1 KiB
PowerShell

#Requires -Version 5.1
<#
.SYNOPSIS
Mirror current kalinamall/main tree to remote "home" with papatramp URLs (force).
.DESCRIPTION
Canonical working tree stays on kalinamall. This builds a temp orphan commit
with git host URLs rewritten to git.papatramp.ru and force-pushes to home.
Private content (LAN, names, secrets) is kept — unlike Publish-GithubOrphan.
#>
param(
[string]$SourceRepo = (Get-Location).Path,
[string]$Branch = 'main',
[string]$RemoteName = 'home'
)
$ErrorActionPreference = 'Stop'
$SourceRepo = (Resolve-Path $SourceRepo).Path
Set-Location $SourceRepo
$rewrite = Join-Path $PSScriptRoot 'Rewrite-GitHostUrls.ps1'
if (-not (Test-Path $rewrite)) { throw "missing: $rewrite" }
$ensure = Join-Path $PSScriptRoot 'Ensure-GiteaHomeRepo.ps1'
$repoName = Split-Path -Leaf (git rev-parse --show-toplevel)
if (Test-Path $ensure) {
try {
& powershell -NoProfile -ExecutionPolicy Bypass -File $ensure -RepoName $repoName
} catch {
Write-Warning "Ensure-GiteaHomeRepo: $($_.Exception.Message)"
}
}
$remoteUrl = (git remote get-url $RemoteName).Trim()
if (-not $remoteUrl) { throw "remote not found: $RemoteName" }
$work = Join-Path $env:TEMP "home-mirror-$repoName-$PID"
if (Test-Path $work) { Remove-Item $work -Recurse -Force }
New-Item -ItemType Directory -Path $work | Out-Null
$zip = Join-Path $env:TEMP "home-archive-$PID.zip"
if (Test-Path $zip) { Remove-Item $zip -Force }
git archive --format=zip -o $zip $Branch
Expand-Archive -Path $zip -DestinationPath $work -Force
Remove-Item $zip -Force
& powershell -NoProfile -ExecutionPolicy Bypass -File $rewrite -Target home -Root $work
Set-Location $work
if (Test-Path .git) { Remove-Item .git -Recurse -Force }
git init -b main | Out-Null
git add -A
$sha = (git -C $SourceRepo rev-parse --short HEAD).Trim()
$msg = "chore(home): mirror from kalinamall ($sha) with papatramp URLs"
git -c user.name='PTah' -c user.email='papatramp@gmail.com' commit -m $msg | Out-Null
git remote add target $remoteUrl
git push target main --force
Write-Host "OK -> $remoteUrl (home mirror, force)"
Set-Location $SourceRepo
Remove-Item $work -Recurse -Force