#!/usr/bin/perl ############################################################################# ## ## 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$ ## ############################################################################# use strict; use warnings; my $force = 0; my $quiet = 0; my $nokia_developer = 0; my $brisbane_mirror = 0; my $ssh_protocol = 0; my $no_webkit = 0; my $no_update = 0; sub system_v { if (!$quiet) { print "+ "; print @_; print "\n"; } return system(@_); } sub printUsage { print("$0 \n"); print("-f\n\tForce initialization\n"); print("-q\n\tQuiet operation. Will exit cleanly if repository is already\n"); print("\tinitialized\n"); print("-nokia-developer\n\tSwitch to internal Nokia URLs.\n"); print("-brisbane-nokia-developer\n\tSwitch to internal Nokia URLs, and setup the brisbane mirrors.\n"); print("-ssh-protocol\n\tUse SSH protocol, for restrictive firewalls. Note that this requires\n"); print("\ta user account with an uploaded SSH key on all servers used.\n"); print("-no-webkit\n\tSkip webkit and webkit examples submodules.\n"); print("-no-update\n\t Skip the git submodule update command.\n"); } while (@ARGV) { my $arg = $ARGV[0]; if ($arg eq "-f") { $force = 1; } elsif ($arg eq "-q") { $quiet = 1; } elsif ($arg eq "-brisbane-nokia-developer") { $nokia_developer = 1; $brisbane_mirror = 1; } elsif ($arg eq "-nokia-developer") { $nokia_developer = 1; } elsif ($arg eq "-ssh-protocol") { $ssh_protocol = 1; } elsif ($arg eq "-h" || $arg eq "--help") { printUsage(); exit 0; } elsif ($arg eq "-no-webkit") { $no_webkit = 1; } elsif ($arg eq "-no-update") { $no_update = 1; } else { die("Illegal argument: $arg"); } shift; } if (`git config --get submodule.qtbase.url`) { if ($force) { my @configresult = `git config -l`; foreach (@configresult) { if (/(submodule\.[^.=]+\.url)=.*/) { system_v("git config --unset $1"); } } } 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"); if ($no_webkit){ system_v("git config --remove submodule.qtwebkit"); system_v("git config --remove submodule.qtwebkit-examples-and-demos"); } my @configresult = `git config -l`; foreach (@configresult) { if (/(submodule\.[^.=]+\.url)=(.*)/) { my $key = $1; my $value = $2; if ($nokia_developer) { # WebKit is special, and has only external link. if ($key ne "submodule.qtwebkit.url") { # qt-labs projects are still hosted under qt internally. $value =~ s,^git://gitorious\.org/qt-labs/,git://scm.dev.nokia.troll.no/qt/,; $value =~ s,^git://gitorious\.org/,git://scm.dev.nokia.troll.no/,; } } if ($ssh_protocol) { $value =~ s,git://([^/:]+)/(.*),git\@$1:$2,; } system_v("git config \"$key\" \"$value\""); } } if ($nokia_developer) { if ($brisbane_mirror) { my $mirror_url = "git://bq-git.apac.nokia.com/qtsoftware/qt/"; my %exceptions = ("qtwebkit", "git://bq-git.apac.nokia.com/qtsoftware/research/gitorious-org-webkit-qtwebkit-mirror.git"); my @configresult2 = `git config -l`; foreach (@configresult2) { if(/submodule\.([^.=]+)\.url=(.*)/){ my $repo = $1; my $url = $2; my $this_mirror_url; no warnings 'uninitialized'; if($exceptions{$repo} ne undef){ $this_mirror_url = $exceptions{$repo}; } else { $this_mirror_url = "$mirror_url$repo.git"; } print("Using mirror $this_mirror_url to clone $url\n"); unless ($no_update) { system_v("git clone $this_mirror_url $repo"); chdir($repo) or die "cd failed"; system_v("git config remote.origin.url $url"); system_v("git remote add mirror $this_mirror_url"); chdir("..") or die "cd fail"; } } } } } unless ($no_update){ system_v("git submodule update"); }