Domanda

Ho bisogno di fare quanto segue:

  1. Scrivi pre-commit hook in Perl

  2. 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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top