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
1 changed files with 14 additions and 3 deletions

View File

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