add --no-fetch option

there is no point in re-fetching all repositories just because an update
failed due to local modifications.

Change-Id: Ie9883586d77f3310058353844f0bbcfb0b775ebb
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
This commit is contained in:
Oswald Buddenhagen
2016-10-17 11:15:04 +02:00
parent d9141a32be
commit 357d29a002

View File

@@ -82,6 +82,9 @@ Options:
--no-update --no-update
Skip the `git submodule update' command. Skip the `git submodule update' command.
--no-fetch
Skip the `git fetch' commands. Implied by --no-update.
--branch --branch
Instead of checking out specific SHA1s, check out the submodule Instead of checking out specific SHA1s, check out the submodule
branches that correspond with the current supermodule commit. By branches that correspond with the current supermodule commit. By
@@ -213,6 +216,7 @@ sub parse_arguments
'ignore-submodules' => 0 , 'ignore-submodules' => 0 ,
'mirror-url' => "", 'mirror-url' => "",
'update' => 1 , 'update' => 1 ,
'fetch' => 1 ,
'module-subset' => "default", 'module-subset' => "default",
); );
@@ -227,6 +231,7 @@ sub parse_arguments
'mirror=s' => \$self->{qw{ mirror-url }}, 'mirror=s' => \$self->{qw{ mirror-url }},
'quiet' => \$self->{qw{ quiet }}, 'quiet' => \$self->{qw{ quiet }},
'update!' => \$self->{qw{ update }}, 'update!' => \$self->{qw{ update }},
'fetch!' => \$self->{qw{ fetch }},
'module-subset=s' => \$self->{qw{ module-subset }}, 'module-subset=s' => \$self->{qw{ module-subset }},
'help|?' => sub { printUsage(1); }, 'help|?' => sub { printUsage(1); },
@@ -245,6 +250,8 @@ sub parse_arguments
$self->{'module-subset'} =~ s/\bdefault\b/preview,essential,addon,deprecated/; $self->{'module-subset'} =~ s/\bdefault\b/preview,essential,addon,deprecated/;
$self->{'module-subset'} = [ split(/,/, $self->{'module-subset'}) ]; $self->{'module-subset'} = [ split(/,/, $self->{'module-subset'}) ];
$self->{'fetch'} = 0 if (!$self->{'update'});
return; return;
} }
@@ -466,9 +473,11 @@ sub git_clone_one_submodule
} }
} }
my $do_clone = (! -e "$submodule/.git");
my $url = $self->{'base-url'}.$repo_basename; my $url = $self->{'base-url'}.$repo_basename;
my $mirror; my $mirror;
if ($mirror_url) { if ($mirror_url && ($do_clone || $self->{fetch})) {
$mirror = $mirror_url.$repo_basename; $mirror = $mirror_url.$repo_basename;
} }
@@ -481,7 +490,6 @@ sub git_clone_one_submodule
} }
} }
my $do_clone = (! -e "$submodule/.git");
if ($do_clone) { if ($do_clone) {
if ($branch) { if ($branch) {
push @reference_args, '--branch', $branch; push @reference_args, '--branch', $branch;
@@ -501,14 +509,14 @@ sub git_clone_one_submodule
$self->exe('git', 'config', 'remote.mirror.fetch', '+refs/heads/*:refs/remotes/mirror/*'); $self->exe('git', 'config', 'remote.mirror.fetch', '+refs/heads/*:refs/remotes/mirror/*');
} }
if (!$do_clone && $self->{update}) { if (!$do_clone && $self->{fetch}) {
# If we didn't clone, fetch from the right location. We always update # If we didn't clone, fetch from the right location. We always update
# the origin remote, so that submodule update --remote works. # the origin remote, so that submodule update --remote works.
$self->exe('git', 'config', 'remote.origin.url', ($mirror ? $mirror : $url)); $self->exe('git', 'config', 'remote.origin.url', ($mirror ? $mirror : $url));
$self->exe('git', 'fetch', 'origin'); $self->exe('git', 'fetch', 'origin');
} }
if (!($do_clone || $self->{update}) || $mirror) { if (!($do_clone || $self->{fetch}) || $mirror) {
# Leave the origin configured to the canonical URL. It's already correct # Leave the origin configured to the canonical URL. It's already correct
# if we cloned/fetched without a mirror; otherwise it may be anything. # if we cloned/fetched without a mirror; otherwise it may be anything.
$self->exe('git', 'config', 'remote.origin.url', $url); $self->exe('git', 'config', 'remote.origin.url', $url);