c70eb8e35347aa71171b245c283d91d0baa2410c
[p5sagit/Oyster.git] / lib / Oyster / Deploy / Git.pm
1 package Oyster::Deploy::Git;
2
3 use Moose;
4 use Git::Wrapper;
5 use Error::Simple;
6
7 use Data::Dumper;
8 use File::Copy;
9 use File::ShareDir ':ALL';
10
11 sub create {
12   my $self = shift;
13   my $location = shift;
14
15   if( -f $location || -d $location ) {
16     Error::Simple->throw("$location already exists");
17   }
18
19   mkdir($location);
20   my $git = Git::Wrapper->new($location);
21   $git->init();
22
23   my ($postreceive, $postupdate);
24
25   eval {
26     $postreceive = dist_file( 'Oyster', './deploy/git/post-receive');
27     $postupdate = dist_file( 'Oyster', './deploy/git/post-update');
28   };
29   #Beware there be deamons here
30   if ($@) {
31     $postreceive = './share/deploy/git/post-receive';
32     $postupdate = './share/deploy/git/post-update';
33   }
34
35
36   copy($postreceive, ($git->dir . '/.git/hooks/')) 
37     or Error::Simple->throw('Creating post commit hooks failed.');
38
39   copy($postupdate, ($git->dir . '/.git/hooks/')) 
40     or Error::Simple->throw('Creating post commit hooks failed.');
41
42   chmod(0x755, ($git->dir . '.git/hooks/post-receive', $git->dir . '.git/hooks/post-update'));
43
44   return 1;
45 }
46
47
48 1;