aboutsummaryrefslogtreecommitdiffstats
path: root/init-repository
diff options
context:
space:
mode:
Diffstat (limited to 'init-repository')
-rwxr-xr-xinit-repository46
1 files changed, 44 insertions, 2 deletions
diff --git a/init-repository b/init-repository
index 8ad799ad..b38a07e9 100755
--- a/init-repository
+++ b/init-repository
@@ -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.
@@ -200,7 +206,6 @@ my %PROTOCOLS = (
my %GERRIT_REPOS = map { $_ => "qt/$_" } qw(
qt3d
qt5
- qlalr
qtactiveqt
qtandroidextras
qtbase
@@ -244,6 +249,7 @@ my @DEFAULT_REPOS = qw(
qtconnectivity
qtdeclarative
qtdoc
+ qtenginio
qtgraphicaleffects
qtimageformats
qtmacextras
@@ -312,6 +318,7 @@ sub parse_arguments
'codereview-username' => "",
'detach-alternates' => 0 ,
'force' => 0 ,
+ 'force-hooks' => 0 ,
'ignore-submodules' => 0 ,
'mirror-url' => "",
'protocol' => "",
@@ -324,7 +331,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 }},
@@ -576,6 +584,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) = @_;
@@ -597,6 +637,8 @@ sub run
$self->git_add_remotes('qt5');
+ $self->git_install_hooks;
+
return;
}