diff --git a/scripts/Push-Mirror.ps1 b/scripts/Push-Mirror.ps1 new file mode 100644 index 0000000..4602a60 --- /dev/null +++ b/scripts/Push-Mirror.ps1 @@ -0,0 +1,41 @@ +# Push main to a mirror remote with host-specific doc URLs, without leaving URL churn on main. +# Usage: .\scripts\Push-Mirror.ps1 github|kalinamall|papatramp +param( + [Parameter(Mandatory = $true)] + [ValidateSet('github', 'kalinamall', 'papatramp')] + [string]$Target +) + +$ErrorActionPreference = 'Stop' +$Root = Split-Path -Parent $PSScriptRoot +Set-Location $Root + +$remote = switch ($Target) { + 'github' { 'github' } + 'kalinamall' { 'kalinamall' } + 'papatramp' { 'papatramp' } +} + +git remote get-url $remote 2>$null | Out-Null +if ($LASTEXITCODE -ne 0) { + throw "remote not configured: $remote" +} + +if ((git status --porcelain)) { + throw 'working tree not clean; commit or stash first' +} + +$before = (git rev-parse HEAD).Trim() +& "$PSScriptRoot\Rewrite-GitHostUrls.ps1" -Target $Target + +if (-not (git status --porcelain)) { + Write-Output "no URL changes for $Target; pushing as-is" + git push $remote main + exit 0 +} + +git add -A +git commit -m "chore(docs): sync repository URLs for ${Target} mirror" +git push $remote main +git reset --hard $before +Write-Output "pushed $remote with ${Target} URLs; local main reset to $before" diff --git a/scripts/Rewrite-GitHostUrls.ps1 b/scripts/Rewrite-GitHostUrls.ps1 new file mode 100644 index 0000000..bbd8952 --- /dev/null +++ b/scripts/Rewrite-GitHostUrls.ps1 @@ -0,0 +1,57 @@ +# Rewrite cross-repo URLs in tracked docs/config for the target Git host. +# Usage: .\scripts\Rewrite-GitHostUrls.ps1 github|kalinamall|papatramp +param( + [Parameter(Mandatory = $true)] + [ValidateSet('github', 'kalinamall', 'papatramp')] + [string]$Target +) + +$ErrorActionPreference = 'Stop' +$Root = Split-Path -Parent $PSScriptRoot +Set-Location $Root + +switch ($Target) { + 'github' { + $Base = 'https://github.com/PTah' + $BlobSuffix = '/blob/main' + } + 'kalinamall' { + $Base = 'https://git.kalinamall.ru/PapaTramp' + $BlobSuffix = '/src/branch/main' + } + 'papatramp' { + $Base = 'https://git.papatramp.ru/PTah' + $BlobSuffix = '/src/branch/main' + } +} + +$BaseHost = $Base -replace '^https://', '' + +$patterns = @( + @{ From = 'https://git.kalinamall.ru/PapaTramp/([^)/''"\s]+)/blob/main/'; To = "$Base/`$1$BlobSuffix/" } + @{ From = 'https://git.kalinamall.ru/PapaTramp/([^)/''"\s]+)/src/branch/main/'; To = "$Base/`$1$BlobSuffix/" } + @{ From = 'https://git.kalinamall.ru/PapaTramp/([^)/''"\s]+)/src/branch/main/'; To = "$Base/`$1$BlobSuffix/" } + @{ From = 'https://git.kalinamall.ru/PapaTramp/'; To = "$Base/" } + @{ From = 'https://git.kalinamall.ru/PapaTramp/'; To = "$Base/" } + @{ From = 'https://git.kalinamall.ru/PapaTramp/'; To = "$Base/" } + @{ From = 'git.kalinamall.ru/PapaTramp/'; To = "$BaseHost/" } + @{ From = 'git.kalinamall.ru/PapaTramp/'; To = "$BaseHost/" } + @{ From = 'git.kalinamall.ru/PapaTramp/'; To = "$BaseHost/" } +) + +$extensions = @('*.md', '*.json', '*.service', '*.example', '*.sh', '*.ps1', '*.yml', '*.yaml') +$files = git ls-files $extensions 2>$null | Where-Object { $_ -and (Test-Path $_) } + +foreach ($file in $files) { + $content = [System.IO.File]::ReadAllText((Join-Path $Root $file)) + $updated = $content + foreach ($p in $patterns) { + $updated = [regex]::Replace($updated, $p.From, $p.To) + } + if ($updated -ne $content) { + [System.IO.File]::WriteAllText((Join-Path $Root $file), $updated, [System.Text.UTF8Encoding]::new($false)) + Write-Output "updated: $file" + } +} + +Write-Output "Rewrite-GitHostUrls: target=$Target base=$Base" diff --git a/update-rdp-monitor.ps1 b/update-rdp-monitor.ps1 index 2d98340..2e3af55 100644 --- a/update-rdp-monitor.ps1 +++ b/update-rdp-monitor.ps1 @@ -4,7 +4,7 @@ .DESCRIPTION Dlya servera publikatsii (napr. DC3). Po umolchaniyu GitHub (github.com/PTah). Na zakrytom zerkale ukazhite -GitUrl URL vashego Gitea. - Posle fetch: vsegda reset --hard na origin/main (bez merge), zatem clean -fd. + Posle fetch: vsegda reset --hard na vetku upstream (bez merge), zatem clean -fd. Kopiruyutsya: polnyj spisok v Docs/deploy-netlogon-publish.md. .EXAMPLE powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\soft\update-rdp-monitor.ps1