#!/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 $no_webkit = 0; my $no_update = 0; my $ignore_submodules = 0; my $protocol = ""; my %protocols = ( 'internal' => 'git://scm.dev.nokia.troll.no', 'ssh' => 'git@scm.dev.nokia.troll.no', 'http' => 'http://git.gitorious.org' ); sub system_v { if (!$quiet) { print "+ "; print @_; print "\n"; } return system(@_); } sub printUsage { print("$0 \n"); print(" -f Force initialization.\n"); print(" -q Quiet operation. Will exit cleanly if repository is already\n"); print(" initialized.\n\n"); print("Module options\n"); print(" -no-webkit Skip webkit and webkit examples submodules.\n"); print(" -no-update Skip the 'git submodule update' command.\n"); print(" -ignore-submodules\n"); print(" Ignores submodules when doing operations on qt5 repo, such\n"); print(" as 'pull', 'fetch', 'diff' etc. Use\n"); print(" --ignore-submodules=none to override, when needed\n\n"); print("Repository options:\n"); print(" -nokia-developer Switch to internal Nokia URLs.\n"); print(" -brisbane Switch to internal Nokia URLs, and setup the brisbane\n"); print(" mirrors.\n"); print(" -ssh Use SSH protocol, for restrictive firewalls. Note that this\n"); print(" requires a user account with an uploaded SSH key on all\n"); print(" servers used. (Implies -nokia-developer!)\n"); print(" -http Use HTTP protocol, for restrictive firewalls. Note that this\n"); print(" only works with the external Gitorious server.\n"); } while (@ARGV) { my $arg = $ARGV[0]; if ($arg eq "-f") { $force = 1; } elsif ($arg eq "-q") { $quiet = 1; } elsif ($arg eq "-brisbane" || $arg eq "-brisbane-nokia-developer") { $nokia_developer = 1; $brisbane_mirror = 1; } elsif ($arg eq "-nokia-developer") { $nokia_developer = 1; $protocol = "internal"; } elsif ($arg eq "-ssh" || $arg eq "-ssh-protocol") { $protocol = "ssh"; } elsif ($arg eq "-http") { if ($nokia_developer || $brisbane_mirror) { 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") { printUsage(); exit 0; } elsif ($arg eq "-no-webkit") { $no_webkit = 1; } elsif ($arg eq "-no-update") { $no_update = 1; } elsif ($arg eq "-ignore-submodules") { $ignore_submodules = 1; } else { print("*** Unknown option: $arg\n"); printUsage(); exit(1); } shift; } if (`git config --get submodule.qtbase.url`) { if ($force) { my @configresult = `git config -l`; foreach (@configresult) { if (/(submodule\.[^.=]+)\.url=.*/) { system_v("git config --remove-section $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`; my $proto = $protocols{$protocol}; foreach (@configresult) { if (/(submodule\.[^.=]+\.url)=(.*)/) { my $key = $1; my $value = $2; if ($protocol) { # 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/,$proto/qt/, if ($protocol ne "http") ; $value =~ s,^git://gitorious\.org/,$proto/,; } } system_v("git config \"$key\" \"$value\""); if ($ignore_submodules) { $key =~ s,\.url,.ignore,; system_v("git config \"$key\" \"all\""); } } } 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"); }