From 93726970012dd59ca66aa65f4a78c5401215db2b Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 10 Feb 2014 21:30:52 +0100 Subject: automatically install hooks Change-Id: I2fabc610dd69730cfdac45046d4bbc6f53822fc4 Reviewed-by: Thiago Macieira Reviewed-by: Friedemann Kleint --- init-repository | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'init-repository') diff --git a/init-repository b/init-repository index 20b53d42..ed99139e 100755 --- a/init-repository +++ b/init-repository @@ -70,6 +70,12 @@ B 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. @@ -311,6 +317,7 @@ sub parse_arguments 'codereview-username' => "", 'detach-alternates' => 0 , 'force' => 0 , + 'force-hooks' => 0 , 'ignore-submodules' => 0 , 'mirror-url' => "", 'protocol' => "", @@ -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 }}, @@ -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) = @_; @@ -596,6 +636,8 @@ sub run $self->git_add_remotes('qt5'); + $self->git_install_hooks; + return; } -- cgit v1.2.3