get submodule urls from .gitmodules

keeping a redundant copy in the script is plain backwards.

Change-Id: Ibdd1bab9d2cb5af7d7747d5caa2afc7d6e7571ad
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
This commit is contained in:
Oswald Buddenhagen
2014-08-15 21:24:21 +02:00
parent 3ade7c4567
commit 4553d9ec11

View File

@@ -191,47 +191,6 @@ use Getopt::Long qw( GetOptionsFromArray );
use Pod::Usage qw( pod2usage );
use Cwd qw( getcwd );
my %GERRIT_REPOS = map { $_ => "qt/$_" } qw(
qt3d
qt5
qtactiveqt
qtandroidextras
qtbase
qtconnectivity
qtdeclarative
qtdoc
qtdocgallery
qtenginio
qtfeedback
qtgraphicaleffects
qtimageformats
qtjsondb
qtlocation
qtmacextras
qtmultimedia
qtpim
qtqa
qtquick1
qtquickcontrols
qtrepotools
qtscript
qtsensors
qtserialport
qtsvg
qtsystems
qttools
qttranslations
qtwayland
qtwebchannel
qtwebengine
qtwebkit
qtwebkit-examples
qtwebsockets
qtwinextras
qtx11extras
qtxmlpatterns
);
my @DEFAULT_REPOS = qw(
qtactiveqt
qtandroidextras
@@ -399,16 +358,33 @@ sub git_submodule_init
sub git_clone_all_submodules
{
my ($self, @subset) = @_;
my ($self, $my_repo_base, @subset) = @_;
my %subdirs = ();
my %subbases = ();
my @submodconfig = qx(git config -l -f .gitmodules);
foreach my $line (@submodconfig) {
# Example line: submodule.qtqa.url=../qtqa.git
next if ($line !~ /^submodule\.([^.=]+)\.([^.=]+)=(.*)$/);
if ($2 eq "path") {
$subdirs{$1} = $3;
} elsif ($2 eq "url") {
my ($mod, $base) = ($1, $3);
next if ($base !~ /^\.\.\//);
$base = $my_repo_base.'/'.$base;
while ($base =~ s,/(?!\.\./)[^/]+/\.\./,/,g) {}
$subbases{$mod} = $base;
} elsif ($2 eq "update") {
push @subset, '-'.$1 if ($3 eq 'ignore');
}
}
my %include = ();
my %exclude = ();
my $include_all = 0;
foreach my $mod (@subset) {
if ($mod eq "all") {
$include_all = 1;
map { $include{$_} = 1; } keys %subbases;
} elsif ($mod =~ s/^-//) {
$exclude{$mod} = 1;
delete $include{$mod};
} else {
$include{$mod} = 1;
}
@@ -423,7 +399,7 @@ sub git_clone_all_submodules
next if ($line !~ /submodule\.([^.=]+)\.url=(.*)/);
my ($module, $url) = ($1, $2);
if (defined($exclude{$module}) || (!$include_all && !defined($include{$module}))) {
if (!defined($include{$module})) {
$self->exe('git', 'config', '--remove-section', "submodule.$module");
next;
}
@@ -432,13 +408,13 @@ sub git_clone_all_submodules
$self->exe('git', 'config', "submodule.$module.ignore", 'all');
}
$self->git_clone_one_submodule($module, $url);
$self->git_clone_one_submodule($subdirs{$module}, $subbases{$module}, $url);
if ($module eq "qtwebengine") {
$self->exe('git', 'submodule', 'update', $module);
my $orig_cwd = getcwd();
chdir($module) or confess "chdir $module: $OS_ERROR";
$self->exe('git', 'submodule', 'init');
$self->git_clone_all_submodules("all");
$self->git_clone_all_submodules($subbases{$module}, "all");
chdir("$orig_cwd") or confess "chdir $orig_cwd: $OS_ERROR";
}
}
@@ -452,35 +428,26 @@ sub git_clone_all_submodules
sub git_add_remotes
{
my ($self, $repo_basename) = @_;
my ($self, $gerrit_repo_basename) = @_;
my $gerrit_repo_basename = $GERRIT_REPOS{$repo_basename};
if ($gerrit_repo_basename) {
my $gerrit_repo_url;
# If given a username, make a "verbose" remote.
# Otherwise, rely on proper SSH configuration.
if ($self->{'codereview-username'}) {
$gerrit_repo_url = $GERRIT_SSH_BASE;
$gerrit_repo_url =~ s,\@USER\@,$self->{'codereview-username'}\@,;
$gerrit_repo_url =~ s,\@PORT\@,:29418,;
}
else {
$gerrit_repo_url = $GERRIT_SSH_BASE;
$gerrit_repo_url =~ s,\@[^\@]+\@,,g;
}
$gerrit_repo_url .= $gerrit_repo_basename;
$self->exe('git', 'config', 'remote.gerrit.url', $gerrit_repo_url);
$self->exe('git', 'config', 'remote.gerrit.fetch', '+refs/heads/*:refs/remotes/gerrit/*', '/heads/');
my $gerrit_repo_url = $GERRIT_SSH_BASE;
# If given a username, make a "verbose" remote.
# Otherwise, rely on proper SSH configuration.
if ($self->{'codereview-username'}) {
$gerrit_repo_url =~ s,\@USER\@,$self->{'codereview-username'}\@,;
$gerrit_repo_url =~ s,\@PORT\@,:29418,;
} else {
$gerrit_repo_url =~ s,\@[^\@]+\@,,g;
}
return;
$gerrit_repo_url .= $gerrit_repo_basename;
$self->exe('git', 'config', 'remote.gerrit.url', $gerrit_repo_url);
$self->exe('git', 'config', 'remote.gerrit.fetch', '+refs/heads/*:refs/remotes/gerrit/*', '/heads/');
}
sub git_clone_one_submodule
{
my ($self, $submodule, $url) = @_;
my ($self, $submodule, $repo_basename, $url) = @_;
my $alternates = $self->{ 'alternates' };
my $mirror_url = $self->{ 'mirror-url' };
@@ -537,7 +504,7 @@ sub git_clone_one_submodule
$self->exe('git', 'config', 'commit.template', $template);
}
$self->git_add_remotes($submodule);
$self->git_add_remotes($repo_basename);
if ($self->{'detach-alternates'}) {
$self->exe('git', 'repack', '-a');
@@ -591,9 +558,9 @@ sub run
$self->check_if_already_initialized;
$self->git_clone_all_submodules(@{$self->{'module-subset'}});
$self->git_clone_all_submodules('qt/qt5', @{$self->{'module-subset'}});
$self->git_add_remotes('qt5');
$self->git_add_remotes('qt/qt5');
$self->git_install_hooks;