2011-04-28 04:19:42 +00:00
|
|
|
#!/usr/bin/perl
|
2011-04-27 10:34:00 +00:00
|
|
|
#############################################################################
|
|
|
|
##
|
|
|
|
## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
|
|
|
## All rights reserved.
|
|
|
|
## Contact: Nokia Corporation (qt-info@nokia.com)
|
|
|
|
##
|
|
|
|
## This file is part of the utilities of the Qt Toolkit.
|
|
|
|
##
|
|
|
|
## $QT_BEGIN_LICENSE:LGPL$
|
|
|
|
## No Commercial Usage
|
|
|
|
## This file contains pre-release code and may not be distributed.
|
|
|
|
## You may use this file in accordance with the terms and conditions
|
|
|
|
## contained in the Technology Preview License Agreement accompanying
|
|
|
|
## this package.
|
|
|
|
##
|
|
|
|
## GNU Lesser General Public License Usage
|
|
|
|
## Alternatively, this file may be used under the terms of the GNU Lesser
|
|
|
|
## General Public License version 2.1 as published by the Free Software
|
|
|
|
## Foundation and appearing in the file LICENSE.LGPL included in the
|
|
|
|
## packaging of this file. Please review the following information to
|
|
|
|
## ensure the GNU Lesser General Public License version 2.1 requirements
|
|
|
|
## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
|
|
##
|
|
|
|
## In addition, as a special exception, Nokia gives you certain additional
|
|
|
|
## rights. These rights are described in the Nokia Qt LGPL Exception
|
|
|
|
## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
|
|
##
|
|
|
|
## If you have questions regarding the use of this file, please contact
|
|
|
|
## Nokia at qt-info@nokia.com.
|
|
|
|
##
|
|
|
|
##
|
|
|
|
##
|
|
|
|
##
|
|
|
|
##
|
|
|
|
##
|
|
|
|
##
|
|
|
|
##
|
|
|
|
## $QT_END_LICENSE$
|
|
|
|
##
|
|
|
|
#############################################################################
|
|
|
|
|
2011-04-28 04:19:42 +00:00
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
2011-04-27 10:34:00 +00:00
|
|
|
my $force = 0;
|
|
|
|
my $quiet = 0;
|
|
|
|
my $nokia_developer = 0;
|
2011-04-28 01:46:22 +00:00
|
|
|
my $no_webkit = 0;
|
2011-04-28 11:25:41 +00:00
|
|
|
my $no_update = 0;
|
2011-05-04 17:45:05 +00:00
|
|
|
my $ignore_submodules = 0;
|
2011-05-04 19:44:57 +00:00
|
|
|
my $alternates = "";
|
2011-05-04 21:07:30 +00:00
|
|
|
my $detach_alternates = 0;
|
2011-05-04 20:49:27 +00:00
|
|
|
my $mirror_url = "";
|
|
|
|
my $mirror_webkit_url = "";
|
2011-05-04 17:45:05 +00:00
|
|
|
|
2011-05-04 17:49:18 +00:00
|
|
|
my $protocol = "";
|
|
|
|
my %protocols = (
|
|
|
|
'internal' => 'git://scm.dev.nokia.troll.no',
|
|
|
|
'ssh' => 'git@scm.dev.nokia.troll.no',
|
|
|
|
'http' => 'http://git.gitorious.org'
|
|
|
|
);
|
2011-04-27 10:34:00 +00:00
|
|
|
|
|
|
|
sub system_v
|
|
|
|
{
|
|
|
|
if (!$quiet) {
|
|
|
|
print "+ ";
|
|
|
|
print @_;
|
|
|
|
print "\n";
|
|
|
|
}
|
|
|
|
return system(@_);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub printUsage
|
|
|
|
{
|
2011-05-05 01:14:50 +00:00
|
|
|
print <<EOU;
|
|
|
|
$0 <options>
|
|
|
|
-f Force initialization.
|
|
|
|
-q Quiet operation. Will exit cleanly if repository is already
|
|
|
|
initialized.
|
2011-05-04 17:49:18 +00:00
|
|
|
|
2011-05-05 01:14:50 +00:00
|
|
|
Module options
|
|
|
|
-no-webkit Skip webkit and webkit examples submodules.
|
|
|
|
-no-update Skip the 'git submodule update' command.
|
|
|
|
-ignore-submodules
|
|
|
|
Ignores submodules when doing operations on qt5 repo, such
|
|
|
|
as 'pull', 'fetch', 'diff' etc. Use
|
|
|
|
--ignore-submodules=none to override, when needed
|
2011-05-04 17:45:05 +00:00
|
|
|
|
2011-05-05 01:14:50 +00:00
|
|
|
Repository options:
|
|
|
|
-nokia-developer Switch to internal Nokia URLs.
|
|
|
|
-brisbane Switch to internal Nokia URLs, and setup the brisbane
|
|
|
|
mirrors. (Uses the -mirror and -mirror-webkit options.)
|
|
|
|
-ssh Use SSH protocol, for restrictive firewalls. Note that this
|
|
|
|
requires a user account with an uploaded SSH key on all
|
|
|
|
servers used. (Implies -nokia-developer!)
|
|
|
|
-http Use HTTP protocol, for restrictive firewalls. Note that this
|
|
|
|
only works with the external Gitorious server.
|
|
|
|
-alternates=<path to other Qt5 repo>
|
|
|
|
Adds alternates for each submodule to another full qt5
|
|
|
|
checkout. This makes this qt5 checkout very small, as it
|
|
|
|
will use the object store of the alternates before unique
|
|
|
|
objects are stored in its own object store.
|
|
|
|
PS: This option does not work with -no-update!
|
|
|
|
PSS:This will make this repo dependent on the alternate!
|
|
|
|
The dependency can be broken by running 'git repack -a'
|
|
|
|
in each submodule, where required.
|
|
|
|
-copy-objects Copies all objects from the alternates into the individual
|
|
|
|
repos, to ensure that the repositories are independent from
|
|
|
|
the source used as a reference for cloning.
|
|
|
|
-mirror=<url> Uses <url> as the base URL for cloning submodules.
|
|
|
|
-mirror=user\@machine/foo/bar
|
|
|
|
while for example clone qtbase from
|
|
|
|
user\@machine/foo/bar/qtbase.git
|
|
|
|
-mirror-webkit=<url>
|
|
|
|
Uses <url> as the URL for cloning webkit.
|
|
|
|
EOU
|
2011-04-27 10:34:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
while (@ARGV) {
|
|
|
|
my $arg = $ARGV[0];
|
|
|
|
if ($arg eq "-f") {
|
|
|
|
$force = 1;
|
|
|
|
} elsif ($arg eq "-q") {
|
|
|
|
$quiet = 1;
|
2011-05-04 17:49:18 +00:00
|
|
|
} elsif ($arg eq "-brisbane" || $arg eq "-brisbane-nokia-developer") {
|
2011-04-28 06:02:39 +00:00
|
|
|
$nokia_developer = 1;
|
2011-05-04 20:49:27 +00:00
|
|
|
$mirror_url = "git://bq-git.apac.nokia.com/qtsoftware/qt/";
|
|
|
|
$mirror_webkit_url = "git://bq-git.apac.nokia.com/qtsoftware/research/gitorious-org-webkit-qtwebkit-mirror.git";
|
2011-04-27 10:34:00 +00:00
|
|
|
} elsif ($arg eq "-nokia-developer") {
|
|
|
|
$nokia_developer = 1;
|
2011-05-04 17:49:18 +00:00
|
|
|
$protocol = "internal";
|
|
|
|
} elsif ($arg eq "-ssh" || $arg eq "-ssh-protocol") {
|
|
|
|
$protocol = "ssh";
|
|
|
|
} elsif ($arg eq "-http") {
|
2011-05-04 20:49:27 +00:00
|
|
|
if ($nokia_developer) {
|
2011-05-04 17:49:18 +00:00
|
|
|
print("*** Ignoring use of HTTP protocol, as it's only usable with external server\n");
|
|
|
|
} else {
|
|
|
|
$protocol = "http";
|
|
|
|
}
|
|
|
|
} elsif ($arg eq "/?" || $arg eq "-?" || $arg eq "/h" || $arg eq "-h" || $arg eq "--help") {
|
2011-04-27 10:34:00 +00:00
|
|
|
printUsage();
|
|
|
|
exit 0;
|
2011-04-28 01:46:22 +00:00
|
|
|
} elsif ($arg eq "-no-webkit") {
|
|
|
|
$no_webkit = 1;
|
2011-04-28 11:25:41 +00:00
|
|
|
} elsif ($arg eq "-no-update") {
|
|
|
|
$no_update = 1;
|
2011-05-04 17:45:05 +00:00
|
|
|
} elsif ($arg eq "-ignore-submodules") {
|
|
|
|
$ignore_submodules = 1;
|
2011-05-04 19:44:57 +00:00
|
|
|
} elsif ($arg =~ /-alternates=(.*)/) {
|
2011-05-04 20:49:27 +00:00
|
|
|
$alternates = "$1";
|
2011-05-04 21:07:30 +00:00
|
|
|
} elsif ($arg eq "-copy-objects") {
|
|
|
|
$detach_alternates = 1;
|
2011-05-04 20:49:27 +00:00
|
|
|
} elsif ($arg =~ /-mirror=(.*)/) {
|
|
|
|
$mirror_url = "$1/";
|
|
|
|
$mirror_url =~ s,\/\/+$,/,;
|
|
|
|
} elsif ($arg =~ /-mirror-webkit=(.*)/) {
|
|
|
|
$mirror_webkit_url = "$1"
|
2011-04-27 10:34:00 +00:00
|
|
|
} else {
|
2011-05-04 17:40:38 +00:00
|
|
|
print("*** Unknown option: $arg\n");
|
|
|
|
printUsage();
|
|
|
|
exit(1);
|
2011-04-27 10:34:00 +00:00
|
|
|
}
|
|
|
|
shift;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (`git config --get submodule.qtbase.url`) {
|
|
|
|
if ($force) {
|
|
|
|
my @configresult = `git config -l`;
|
|
|
|
foreach (@configresult) {
|
2011-05-04 17:41:59 +00:00
|
|
|
if (/(submodule\.[^.=]+)\.url=.*/) {
|
|
|
|
system_v("git config --remove-section $1");
|
2011-04-27 10:34:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
exit 0 if ($quiet);
|
|
|
|
print("Will not reinitialize already initialized repository (use -f to force)!\n");
|
|
|
|
exit 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
my $init_args = "";
|
|
|
|
$init_args = "-q" if ($quiet);
|
|
|
|
system_v("git submodule init $init_args");
|
2011-04-28 01:46:22 +00:00
|
|
|
if ($no_webkit){
|
|
|
|
system_v("git config --remove submodule.qtwebkit");
|
|
|
|
system_v("git config --remove submodule.qtwebkit-examples-and-demos");
|
|
|
|
}
|
2011-04-27 10:34:00 +00:00
|
|
|
|
2011-05-03 09:08:50 +00:00
|
|
|
my @configresult = `git config -l`;
|
2011-05-04 17:49:18 +00:00
|
|
|
my $proto = $protocols{$protocol};
|
2011-05-03 09:08:50 +00:00
|
|
|
foreach (@configresult) {
|
|
|
|
if (/(submodule\.[^.=]+\.url)=(.*)/) {
|
|
|
|
my $key = $1;
|
|
|
|
my $value = $2;
|
2011-05-04 17:49:18 +00:00
|
|
|
if ($protocol) {
|
2011-04-26 16:03:52 +00:00
|
|
|
# WebKit is special, and has only external link.
|
|
|
|
if ($key ne "submodule.qtwebkit.url") {
|
2011-04-26 16:00:16 +00:00
|
|
|
# qt-labs projects are still hosted under qt internally.
|
2011-05-04 17:49:18 +00:00
|
|
|
$value =~ s,^git://gitorious\.org/qt-labs/,$proto/qt/, if ($protocol ne "http") ;
|
|
|
|
$value =~ s,^git://gitorious\.org/,$proto/,;
|
2011-04-27 10:34:00 +00:00
|
|
|
}
|
|
|
|
}
|
2011-05-03 09:08:50 +00:00
|
|
|
system_v("git config \"$key\" \"$value\"");
|
2011-05-04 17:45:05 +00:00
|
|
|
if ($ignore_submodules) {
|
|
|
|
$key =~ s,\.url,.ignore,;
|
|
|
|
system_v("git config \"$key\" \"all\"");
|
|
|
|
}
|
2011-04-27 10:34:00 +00:00
|
|
|
}
|
2011-05-03 09:08:50 +00:00
|
|
|
}
|
|
|
|
|
2011-05-04 19:44:57 +00:00
|
|
|
# manually clone each repo here, so we can easily use reference repos, mirrors and add all staging
|
|
|
|
# repos
|
|
|
|
if (!$no_update) {
|
|
|
|
@configresult = `git config -l`;
|
|
|
|
foreach (@configresult) {
|
|
|
|
if(/submodule\.([^.=]+)\.url=(.*)/){
|
|
|
|
my $repo = $1;
|
|
|
|
my $url = $2;
|
|
|
|
my $ref = "";
|
|
|
|
if ($alternates) {
|
|
|
|
if (-d "$alternates/$repo") {
|
|
|
|
$ref = "--reference $alternates/$repo";
|
|
|
|
} else {
|
|
|
|
print(" *** $alternates/$repo not found, ignoring alternate for this submodule\n");
|
|
|
|
}
|
|
|
|
}
|
2011-05-04 20:49:27 +00:00
|
|
|
if (($mirror_url && $repo ne "qtwebkit") || ($mirror_webkit_url && $repo eq "qtwebkit") {
|
|
|
|
my $mirror = $mirror_url.$repo;
|
|
|
|
$mirror .= ".git" unless (-d $mirror); # Support local disk mirror
|
|
|
|
$mirror = $mirror_webkit_url if ($repo eq "qtwebkit");
|
|
|
|
system_v("git clone $ref $mirror $repo");
|
|
|
|
chdir($repo) or die "'cd $repo' failed...";
|
|
|
|
system_v("git config remote.origin.url $url");
|
|
|
|
system_v("git remote add mirror $mirror");
|
|
|
|
chdir("..") or die "'cd ..' failed..";
|
|
|
|
} else {
|
|
|
|
system_v("git clone $ref $url $repo");
|
2011-04-28 06:02:39 +00:00
|
|
|
}
|
2011-05-04 21:07:30 +00:00
|
|
|
if ($detach_alternates) {
|
|
|
|
chdir($repo) or die "'cd $repo' failed...";
|
|
|
|
system_v("git repack -a");
|
|
|
|
unlink(".git/objects/info/alternates");
|
|
|
|
chdir("..") or die "'cd ..' failed..";
|
|
|
|
}
|
2011-04-28 06:02:39 +00:00
|
|
|
}
|
|
|
|
}
|
2011-04-27 10:34:00 +00:00
|
|
|
}
|
|
|
|
|
2011-04-28 11:25:41 +00:00
|
|
|
unless ($no_update){
|
|
|
|
system_v("git submodule update");
|
|
|
|
}
|