diff options
author | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2015-02-16 16:24:22 +0100 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2015-02-16 16:24:40 +0100 |
commit | f46b8dc760f65577396ed21181c1bc2499d36b59 (patch) | |
tree | 12a04b8562e5e1c6368e682e216b453c8f3ca343 /init-repository | |
parent | 2c39898934a5950dae1edecc47ba4712688ef6be (diff) | |
parent | f900f38f710e434cc75fdb349b1c5c7e3b30cde4 (diff) |
Merge remote-tracking branch 'origin/5.5' into dev
Change-Id: Ie7b1685080b978cc1d8790823f79e98e930ca147
Diffstat (limited to 'init-repository')
-rwxr-xr-x | init-repository | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/init-repository b/init-repository index 9844f38c..9a08406e 100755 --- a/init-repository +++ b/init-repository @@ -386,18 +386,7 @@ sub git_clone_all_submodules $self->git_clone_one_submodule($subdirs{$module}, $subbases{$module}); } - if ($self->{update}) { - $self->exe('git', 'submodule', 'update', ($co_branch ? ('--remote', '--rebase') : ())); - - foreach my $module (@modules) { - if (-f $module.'/.gitmodules') { - my $orig_cwd = getcwd(); - chdir($module) or confess "chdir $module: $OS_ERROR"; - $self->git_clone_all_submodules($subbases{$module}, 0, "all"); - chdir("$orig_cwd") or confess "chdir $orig_cwd: $OS_ERROR"; - } - } - } elsif ($co_branch) { + if ($co_branch) { foreach my $module (@modules) { my $branch = $subbranches{$module}; die("No branch defined for submodule $module.\n") if (!defined($branch)); @@ -412,6 +401,20 @@ sub git_clone_all_submodules chdir("$orig_cwd") or confess "chdir $orig_cwd: $OS_ERROR"; } } + if ($self->{update}) { + my @cmd = ('git', 'submodule', 'update', '--no-fetch'); + push @cmd, '--remote', '--rebase' if ($co_branch); + $self->exe(@cmd); + + foreach my $module (@modules) { + if (-f $module.'/.gitmodules') { + my $orig_cwd = getcwd(); + chdir($module) or confess "chdir $module: $OS_ERROR"; + $self->git_clone_all_submodules($subbases{$module}, 0, "all"); + chdir("$orig_cwd") or confess "chdir $orig_cwd: $OS_ERROR"; + } + } + } return; } @@ -473,20 +476,30 @@ sub git_clone_one_submodule my $do_clone = (! -e "$submodule/.git"); if ($do_clone) { - $self->exe('git', 'clone', @reference_args, ($mirror ? $mirror : $url), $submodule); + $self->exe('git', 'clone', '--no-checkout', @reference_args, + ($mirror ? $mirror : $url), $submodule); } my $orig_cwd = getcwd(); chdir($submodule) or confess "chdir $submodule: $OS_ERROR"; - $self->exe('git', 'config', 'remote.origin.url', $url); if ($mirror) { + # This is only for the user's convenience - we make no use of it. $self->exe('git', 'config', 'remote.mirror.url', $mirror); $self->exe('git', 'config', 'remote.mirror.fetch', '+refs/heads/*:refs/remotes/mirror/*'); } if (!$do_clone && $self->{update}) { - $self->exe('git', 'fetch', ($mirror ? $mirror : $url)); + # If we didn't clone, fetch from the right location. We always update + # the origin remote, so that submodule update --remote works. + $self->exe('git', 'config', 'remote.origin.url', ($mirror ? $mirror : $url)); + $self->exe('git', 'fetch', 'origin'); + } + + if (!($do_clone || $self->{update}) || $mirror) { + # Leave the origin configured to the canonical URL. It's already correct + # if we cloned/fetched without a mirror; otherwise it may be anything. + $self->exe('git', 'config', 'remote.origin.url', $url); } my $template = getcwd()."/../.commit-template"; |