Como posso acessar o arquivo comprometido de um gancho de pré-compromisso de subversão em Perl?
-
18-09-2019 - |
Pergunta
Eu preciso fazer o seguinte:
Escreva um gancho de pré-compromisso em Perl
Hook deve verificar todos os arquivos que estão sendo comprometidos quanto à presença de algum texto e falhar se esse texto não for encontrado
Basicamente, preciso de um exemplo de gancho Perl que lê arquivos que estão sendo comprometidos.
Estou realmente procurando uma solução elegante com a menor quantidade de código.
Notas: Hook deve usar svnlook
ou outra maneira melhor de encontrar arquivos.
Solução
gancho pré-comprometido:
my $repos = shift;
my $txn = shift;
foreach my $line (`$svnlook changed -t $txn "$repos"`)
{
chomp($line);
if ($line !~ /^([AUD]).\s\s(.+)$/)
{
print STDERR "Can't parse [$line].\n";
exit(1);
}
else
{
my $action = $1;
my $file = $2;
chomp($file);
#If path has trailing slash, then it is a folder and we want to skip folders
if($file =~ /\/$/)
{
next;
}
my $fileContent = `$svnlook cat -t $txn "$repos" "$file"`;
if ($action =~ /[AU]/)
{
my @lines = split(/\n/, $fileContent );
#Check for whatever you need in this file's content
}
}
}
Outras dicas
Parece que você já descobriu a fundação:
- Obtenha a lista de todos os arquivos que estão sendo comprometidos
- Pesquise cada um deles por sua vez para obter um texto específico
- Se o texto for encontrado, rejeitar commit
Você encontrará algumas informações sobre como escrever ganchos pré-comprometidos no manual.
Não deve ser muito difícil modificar Este exemplo em Python fazer o que você quiser. Veja também o hooks
subdiretório do seu repositório para alguns modelos e scripts de gancho e scripts de gancho contribuídos.