First commit - backup RDOC
This commit is contained in:
178
scripts/auto-syncRDO.ps1
Normal file
178
scripts/auto-syncRDO.ps1
Normal file
@@ -0,0 +1,178 @@
|
||||
# Parâmetros de linha de comando
|
||||
param(
|
||||
[switch]$Once,
|
||||
[int]$Interval = 15,
|
||||
[string]$BranchName = "main"
|
||||
)
|
||||
|
||||
# Configurações
|
||||
$PossiblePaths = @(
|
||||
"c:\Users\Administrator\Documents\GitHub\RDO-D",
|
||||
"c:\Users\Marcos\Documents\GitHub\RDO-D"
|
||||
)
|
||||
$Branch = $BranchName
|
||||
$IntervalSeconds = $Interval
|
||||
$RunOnce = $Once.IsPresent
|
||||
$RemoteUrl = "https://github.com/Reifonas/RDO-D.git"
|
||||
|
||||
# Função para verificar se é um repositório Git válido
|
||||
function Test-GitRepository($path) {
|
||||
if (-not (Test-Path $path)) { return $false }
|
||||
if (-not (Test-Path (Join-Path $path ".git"))) { return $false }
|
||||
|
||||
$currentDir = Get-Location
|
||||
try {
|
||||
Set-Location $path
|
||||
$gitStatus = git status 2>&1
|
||||
return $LASTEXITCODE -eq 0
|
||||
} catch {
|
||||
return $false
|
||||
} finally {
|
||||
Set-Location $currentDir
|
||||
}
|
||||
}
|
||||
|
||||
# Detecta automaticamente o caminho correto
|
||||
$RepoPath = $null
|
||||
foreach ($path in $PossiblePaths) {
|
||||
if (Test-GitRepository $path) {
|
||||
$RepoPath = $path
|
||||
Write-Host "Usando repositório em: $RepoPath" -ForegroundColor Green
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $RepoPath) {
|
||||
Write-Host "ERRO: Nenhum repositório Git válido foi encontrado:" -ForegroundColor Red
|
||||
foreach ($path in $PossiblePaths) {
|
||||
$exists = Test-Path $path
|
||||
$isGit = if ($exists) { Test-Path (Join-Path $path ".git") } else { $false }
|
||||
Write-Host " - $path (Existe: $exists, Git: $isGit)" -ForegroundColor Yellow
|
||||
}
|
||||
Write-Host "Verifique se o repositório existe e é um repositório Git válido." -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Função para verificar e configurar o remote
|
||||
function Ensure-RemoteConfiguration {
|
||||
Write-Host "Verificando configuração do remote..." -ForegroundColor Cyan
|
||||
|
||||
$currentRemote = git -C $RepoPath remote get-url origin 2>&1
|
||||
if ($LASTEXITCODE -eq 0 -and $currentRemote -ne $RemoteUrl) {
|
||||
Write-Host "Atualizando remote de '$currentRemote' para '$RemoteUrl'" -ForegroundColor Yellow
|
||||
git -C $RepoPath remote set-url origin $RemoteUrl
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "Remote atualizado com sucesso!" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "Erro ao atualizar remote." -ForegroundColor Red
|
||||
return $false
|
||||
}
|
||||
} elseif ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "Configurando remote para '$RemoteUrl'" -ForegroundColor Yellow
|
||||
git -C $RepoPath remote add origin $RemoteUrl
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "Remote configurado com sucesso!" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "Erro ao configurar remote." -ForegroundColor Red
|
||||
return $false
|
||||
}
|
||||
} else {
|
||||
Write-Host "Remote já está configurado corretamente: $RemoteUrl" -ForegroundColor Green
|
||||
}
|
||||
return $true
|
||||
}
|
||||
|
||||
# Função para sincronizar o repositório
|
||||
function Sync-Repository {
|
||||
Write-Host "Verificando alterações no repositório..." -ForegroundColor Cyan
|
||||
|
||||
# Garante que o remote está configurado corretamente
|
||||
if (-not (Ensure-RemoteConfiguration)) {
|
||||
return $false
|
||||
}
|
||||
|
||||
# Verifica o status do repositório
|
||||
$remoteStatus = git -C $RepoPath fetch --dry-run 2>&1
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "Aviso: Não foi possível verificar o repositório remoto." -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
$status = git -C $RepoPath status --porcelain
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "Git retornou erro. Verifique se o repositório está correto." -ForegroundColor Red
|
||||
return $false
|
||||
}
|
||||
|
||||
if (-not $status) {
|
||||
Write-Host "Nenhuma alteração detectada." -ForegroundColor Gray
|
||||
return $true
|
||||
}
|
||||
|
||||
Write-Host "Alterações detectadas:" -ForegroundColor Yellow
|
||||
$status | ForEach-Object { Write-Host " $_" -ForegroundColor White }
|
||||
|
||||
Write-Host "Comitando e enviando para $Branch..." -ForegroundColor Cyan
|
||||
git -C $RepoPath add -A | Out-Null
|
||||
|
||||
# Evita commit vazio
|
||||
$diffCached = git -C $RepoPath diff --cached --name-only
|
||||
if (-not $diffCached) {
|
||||
Write-Host "Nenhuma alteração para commit após staging." -ForegroundColor Gray
|
||||
return $true
|
||||
}
|
||||
|
||||
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
|
||||
$commitResult = git -C $RepoPath commit -m "chore: autosync from Trae $timestamp" 2>&1
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "Erro no commit: $commitResult" -ForegroundColor Red
|
||||
return $false
|
||||
}
|
||||
|
||||
# Faz pull antes do push para evitar rejeições
|
||||
Write-Host "Fazendo pull de $Branch..." -ForegroundColor Yellow
|
||||
$pullResult = git -C $RepoPath pull origin $Branch 2>&1
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "Falha no pull: $pullResult" -ForegroundColor Red
|
||||
Write-Host "Tentando fazer merge automático..." -ForegroundColor Yellow
|
||||
$mergeResult = git -C $RepoPath merge --no-edit origin/$Branch 2>&1
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "Conflitos de merge detectados: $mergeResult" -ForegroundColor Red
|
||||
Write-Host "Intervenção manual necessária." -ForegroundColor Red
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
# Agora faz o push
|
||||
$pushResult = git -C $RepoPath push origin $Branch 2>&1
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "Push realizado com sucesso para $Branch em $timestamp" -ForegroundColor Green
|
||||
return $true
|
||||
} else {
|
||||
Write-Host "Falha no push: $pushResult" -ForegroundColor Red
|
||||
Write-Host "Verifique autenticação/regras da branch." -ForegroundColor Red
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
# Loop principal
|
||||
do {
|
||||
try {
|
||||
$syncResult = Sync-Repository
|
||||
if (-not $syncResult) {
|
||||
Write-Host "Sincronização falhou. Tentando novamente em $IntervalSeconds segundos..." -ForegroundColor Red
|
||||
}
|
||||
} catch {
|
||||
Write-Host "Erro inesperado: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host "Continuando em $IntervalSeconds segundos..." -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
if ($RunOnce) {
|
||||
Write-Host "Execução única concluída." -ForegroundColor Green
|
||||
break
|
||||
}
|
||||
|
||||
Write-Host "Próxima verificação em $IntervalSeconds segundos. Pressione Ctrl+C para parar." -ForegroundColor Gray
|
||||
Start-Sleep -Seconds $IntervalSeconds
|
||||
} while (-not $RunOnce)
|
||||
|
||||
Write-Host "Script finalizado." -ForegroundColor Green
|
||||
Reference in New Issue
Block a user