Come posso accedere al file Commited da un Subversion pre-commit hook in Perl?
-
18-09-2019 - |
Domanda
Ho bisogno di fare quanto segue:
-
Scrivi pre-commit hook in Perl
-
Hook deve controllare tutti i file che vengono commessi per la presenza di un testo, e non riuscire se il testo non è stato trovato
Fondamentalmente, ho bisogno di un esempio di gancio Perl che legge i file di commessi.
Non vedo per qualche soluzione elegante con la minor quantità di codice.
Note:
Hook dovrebbe usare svnlook
o altro modo migliore per trovare i file.
Soluzione
gancio pre-commit:
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
}
}
}
Altri suggerimenti
Sembra che tu hai le basi capito già:
- ottenere l'elenco di tutti i file viene commesso
- cercare ciascuno di loro a sua volta per il testo particolare
- se il testo viene trovato, scarto commit
Troverete alcune informazioni sulla scrittura pre-commit hook nel manuale .
Non dovrebbe essere troppo difficile da modificare questo esempio in Python per fare quello che vuoi. Vedi anche la sottodirectory hooks
del repository per alcuni modelli e gancio script e script di hook contribuito .