Skip to content

Instantly share code, notes, and snippets.

@tetri
Created May 23, 2024 11:53
Show Gist options
  • Save tetri/e01abf8fbb49c79fbf55dc0f12396d86 to your computer and use it in GitHub Desktop.
Save tetri/e01abf8fbb49c79fbf55dc0f12396d86 to your computer and use it in GitHub Desktop.
Este script em PowerShell automatiza o processo de verificar e descartar alterações em arquivos dentro de uma pasta e suas subpastas em um repositório SVN, quando as diferenças são apenas espaços em branco e quebras de linha extras.
# Parâmetros do script
param (
[string]$folderPath
)
# Função para normalizar o conteúdo do arquivo
function Normalize-Content {
param (
[string]$content
)
# Remove todos os espaços em branco e normaliza as quebras de linha
return ($content -replace '\s+', '') -replace '[\r\n]+', ''
}
# Função para verificar se há diferenças ignorando espaços em branco e quebras de linha extras
function Check-DiffIgnoringWhitespaceAndLineBreaks {
param (
[string]$file
)
# Obtém o conteúdo do arquivo original do repositório
$originalContent = svn cat $file
# Obtém o conteúdo do arquivo modificado
$modifiedContent = Get-Content $file -Raw
# Normaliza os conteúdos
$originalNormalized = Normalize-Content -content $originalContent
$modifiedNormalized = Normalize-Content -content $modifiedContent
return $originalNormalized -eq $modifiedNormalized
}
# Função para reverter as alterações
function Revert-File {
param (
[string]$file
)
svn revert $file
#Write-Host "Alterações revertidas para o arquivo: $file"
}
# Função para processar cada arquivo
function Process-File {
param (
[string]$filePath
)
#Write-Host "Verificando diferenças no arquivo: $filePath"
if (Check-DiffIgnoringWhitespaceAndLineBreaks -file $filePath) {
#Write-Host "As únicas alterações são espaços em branco e/ou quebras de linha extras. Revertendo as alterações..."
Write-Host $filePath
Revert-File -file $filePath
} else {
#Write-Host "Há outras alterações além de espaços em branco e quebras de linha extras. Nenhuma ação foi tomada."
}
}
# Encontrar todos os arquivos modificados na pasta e subpastas
$svnStatusOutput = svn status $folderPath
$modifiedFiles = $svnStatusOutput | Where-Object { $_ -match '^[M]' } | ForEach-Object { $_.Trim().Substring(8) }
# Processar cada arquivo modificado
foreach ($file in $modifiedFiles) {
Process-File -filePath $file
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment