views:

211

answers:

3

I need to do the following:

  1. Write pre-commit hook in Perl

  2. Hook should check all files being committed for presence of some text, and fail if that text is not found

Basically, I need an example of Perl hook that reads files being committed.

I am really looking for some elegant solution with the least amount of code.

Notes: Hook should use svnlook or other better way to find files.

A: 

It should not be too difficult to modify this example in Python to do what you want. See also the hooks subdirectory of your repository for some templates and hook scripts and contributed hook scripts.

Sinan Ünür
A: 

It sounds like you've got the foundation figured out already:

  • get list of all files being committed
  • search each one of them in turn for particular text
  • if text is found, reject commit

You'll find some information on writing pre-commit hooks in the manual.

Ether
+1  A: 

pre-commit hook:

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

    }
  }
}
Chicago