Skip to content

Commit

Permalink
automatically install hooks
Browse files Browse the repository at this point in the history
Change-Id: I2fabc610dd69730cfdac45046d4bbc6f53822fc4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
  • Loading branch information
ossilator authored and The Qt Project committed Feb 28, 2014
1 parent ed6175d commit 9372697
Showing 1 changed file with 43 additions and 1 deletion.
44 changes: 43 additions & 1 deletion init-repository
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ B<Global options:>
Force initialization (even if the submodules are already checked out).
=item --force-hooks
Force initialization of hooks (even if there are already hooks in checked out
submodules).
=item --quiet, -q
Be quiet. Will exit cleanly if the repository is already initialized.
Expand Down Expand Up @@ -311,6 +317,7 @@ sub parse_arguments
'codereview-username' => "",
'detach-alternates' => 0 ,
'force' => 0 ,
'force-hooks' => 0 ,
'ignore-submodules' => 0 ,
'mirror-url' => "",
'protocol' => "",
Expand All @@ -323,7 +330,8 @@ sub parse_arguments
'alternates=s' => \$self->{qw{ alternates }},
'codereview-username=s' => \$self->{qw{ codereview-username }},
'copy-objects' => \$self->{qw{ detach-alternates }},
'force' => \$self->{qw{ force }},
'force|f' => \$self->{qw{ force }},
'force-hooks' => \$self->{qw{ force-hooks }},
'ignore-submodules' => \$self->{qw{ ignore-submodules }},
'mirror=s' => \$self->{qw{ mirror-url }},
'quiet' => \$self->{qw{ quiet }},
Expand Down Expand Up @@ -575,6 +583,38 @@ sub git_clone_one_submodule
return;
}

sub ensure_link
{
my ($self, $src, $tgt) = @_;
return if (!$self->{'force-hooks'} and -f $tgt);
unlink($tgt); # In case we have a dead symlink or pre-existing hook
print "Aliasing $src\n as $tgt ...\n" if (!$self->{quiet});
return if eval { symlink($src, $tgt) };
# Windows doesn't do (proper) symlinks. As the post_commit script needs
# them to locate itself, we write a forwarding script instead.
open SCRIPT, ">".$tgt or die "Cannot create forwarding script $tgt: $!\n";
print SCRIPT "#!/bin/sh\nexec `dirname \$0`/$src \"\$\@\"\n";
close SCRIPT;
}

sub git_install_hooks
{
my ($self) = @_;

return if (!-d 'qtrepotools/git-hooks');

chomp(my @modules = `git submodule foreach :`);
push @modules, "";
for my $module (@modules) {
$module =~ s,^Entering \'([^\']+)\'$,$1/,;
my $rel = $module;
$rel =~ s,[^/]+,..,g;
$rel .= "../../qtrepotools/git-hooks/";
$self->ensure_link($rel.'gerrit_commit_msg_hook', $module.'.git/hooks/commit-msg');
$self->ensure_link($rel.'git_post_commit_hook', $module.'.git/hooks/post-commit');
}
}
sub run
{
my ($self) = @_;
Expand All @@ -596,6 +636,8 @@ sub run
$self->git_add_remotes('qt5');
$self->git_install_hooks;
return;
}
Expand Down

0 comments on commit 9372697

Please sign in to comment.