Support absolute submodule urls

This is needed for qttools.

Fixes: QTBUG-93850
Change-Id: I59a7f8a56d8d7143521b67d0c385150e62338209
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Kai Köhne
2021-05-19 16:40:28 +02:00
committed by Kai Koehne
parent 7cda9fd97b
commit 7374ef8e38

View File

@@ -301,6 +301,12 @@ use constant {
STS_ADDITIONAL => 6 STS_ADDITIONAL => 6
}; };
sub has_url_scheme
{
my ($url) = @_;
return $url =~ "^[a-z][a-z0-9+\-.]*://";
}
sub git_clone_all_submodules sub git_clone_all_submodules
{ {
my ($self, $my_repo_base, $co_branch, $alternates, @subset) = @_; my ($self, $my_repo_base, $co_branch, $alternates, @subset) = @_;
@@ -319,8 +325,9 @@ sub git_clone_all_submodules
$subbranches{$1} = $3; $subbranches{$1} = $3;
} elsif ($2 eq "url") { } elsif ($2 eq "url") {
my ($mod, $base) = ($1, $3); my ($mod, $base) = ($1, $3);
next if ($base !~ /^\.\.\//); if (!has_url_scheme($base)) {
$base = $my_repo_base.'/'.$base; $base = $my_repo_base.'/'.$base;
}
while ($base =~ s,(?!\.\./)[^/]+/\.\./,,g) {} while ($base =~ s,(?!\.\./)[^/]+/\.\./,,g) {}
$subbases{$mod} = $base; $subbases{$mod} = $base;
} elsif ($2 eq "update") { } elsif ($2 eq "update") {
@@ -519,7 +526,11 @@ sub git_clone_one_submodule
my $do_clone = (! -e "$submodule/.git"); my $do_clone = (! -e "$submodule/.git");
my $url = $self->{'base-url'}.$repo_basename; my $url = $repo_basename;
if (!has_url_scheme($url)) {
$url = $self->{'base-url'}.$url;
}
my $mirror; my $mirror;
if ($mirror_url && ($do_clone || $self->{fetch})) { if ($mirror_url && ($do_clone || $self->{fetch})) {
$mirror = $mirror_url.$repo_basename; $mirror = $mirror_url.$repo_basename;