Added -ssh-protocol option for those with very restrictive firewalls.
[mirror/qt/qt5.git] / init-repository
1 #!/usr/bin/perl -w
2 #############################################################################
3 ##
4 ## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
5 ## All rights reserved.
6 ## Contact: Nokia Corporation (qt-info@nokia.com)
7 ##
8 ## This file is part of the utilities of the Qt Toolkit.
9 ##
10 ## $QT_BEGIN_LICENSE:LGPL$
11 ## No Commercial Usage
12 ## This file contains pre-release code and may not be distributed.
13 ## You may use this file in accordance with the terms and conditions
14 ## contained in the Technology Preview License Agreement accompanying
15 ## this package.
16 ##
17 ## GNU Lesser General Public License Usage
18 ## Alternatively, this file may be used under the terms of the GNU Lesser
19 ## General Public License version 2.1 as published by the Free Software
20 ## Foundation and appearing in the file LICENSE.LGPL included in the
21 ## packaging of this file.  Please review the following information to
22 ## ensure the GNU Lesser General Public License version 2.1 requirements
23 ## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ##
25 ## In addition, as a special exception, Nokia gives you certain additional
26 ## rights.  These rights are described in the Nokia Qt LGPL Exception
27 ## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ##
29 ## If you have questions regarding the use of this file, please contact
30 ## Nokia at qt-info@nokia.com.
31 ##
32 ##
33 ##
34 ##
35 ##
36 ##
37 ##
38 ##
39 ## $QT_END_LICENSE$
40 ##
41 #############################################################################
42
43 my $force = 0;
44 my $quiet = 0;
45 my $nokia_developer = 0;
46 my $brisbane_mirror = 0;
47 my $ssh_protocol = 0;
48 my $no_webkit = 0;
49 my $no_update = 0;
50
51 sub system_v
52 {
53     if (!$quiet) {
54         print "+ ";
55         print @_;
56         print "\n";
57     }
58     return system(@_);
59 }
60
61 sub printUsage
62 {
63     print("$0 <options>\n");
64     print("-f\n\tForce initialization\n");
65     print("-q\n\tQuiet operation. Will exit cleanly if repository is already\n");
66     print("\tinitialized\n");
67     print("-nokia-developer\n\tSwitch to internal Nokia URLs.\n");
68     print("-brisbane-nokia-developer\n\tSwitch to internal Nokia URLs, and setup the brisbane mirrors.\n");
69     print("-ssh-protocol\n\tUse SSH protocol, for restrictive firewalls. Note that this requires\n");
70     print("\ta user account with an uploaded SSH key on all servers used.\n");
71     print("-no-webkit\n\tSkip webkit and webkit examples submodules.\n");
72     print("-no-update\n\t Skip the git submodule update command.\n");
73 }
74
75 while (@ARGV) {
76     my $arg = $ARGV[0];
77     if ($arg eq "-f") {
78         $force = 1;
79     } elsif ($arg eq "-q") {
80         $quiet = 1;
81     } elsif ($arg eq "-brisbane-nokia-developer") {
82         $nokia_developer = 1;
83         $brisbane_mirror = 1;
84     } elsif ($arg eq "-nokia-developer") {
85         $nokia_developer = 1;
86     } elsif ($arg eq "-ssh-protocol") {
87         $ssh_protocol = 1;
88     } elsif ($arg eq "-h" || $arg eq "--help") {
89         printUsage();
90         exit 0;
91     } elsif ($arg eq "-no-webkit") {
92         $no_webkit = 1;
93     } elsif ($arg eq "-no-update") {
94         $no_update = 1;
95     } else {
96         die("Illegal argument: $arg");
97     }
98     shift;
99 }
100
101 if (`git config --get submodule.qtbase.url`) {
102     if ($force) {
103         my @configresult = `git config -l`;
104         foreach (@configresult) {
105             if (/(submodule\.[^.=]+\.url)=.*/) {
106                 system_v("git config --unset $1");
107             }
108         }
109     } else {
110         exit 0 if ($quiet);
111         print("Will not reinitialize already initialized repository (use -f to force)!\n");
112         exit 1;
113     }
114 }
115
116 my $init_args = "";
117 $init_args = "-q" if ($quiet);
118 system_v("git submodule init $init_args");
119 if ($no_webkit){
120     system_v("git config --remove submodule.qtwebkit");
121     system_v("git config --remove submodule.qtwebkit-examples-and-demos");
122 }
123
124 my @configresult = `git config -l`;
125 foreach (@configresult) {
126     if (/(submodule\.[^.=]+\.url)=(.*)/) {
127         my $key = $1;
128         my $value = $2;
129         if ($nokia_developer) {
130             # WebKit is special, and has only external link.
131             if ($key ne "submodule.qtwebkit.url") {
132                 # qt-labs projects are still hosted under qt internally.
133                 $value =~ s,^git://gitorious\.org/qt-labs/,git://scm.dev.nokia.troll.no/qt/,;
134                 $value =~ s,^git://gitorious\.org/,git://scm.dev.nokia.troll.no/,;
135             }
136         }
137         if ($ssh_protocol) {
138             $value =~ s,git://([^/:]+)/(.*),git\@$1:$2,;
139         }
140         system_v("git config \"$key\" \"$value\"");
141     }
142 }
143
144 if ($nokia_developer) {
145     if ($brisbane_mirror) {
146         my $mirror_url = "git://bq-git.apac.nokia.com/qtsoftware/qt/";
147         my %exceptions = ("qtwebkit", "git://bq-git.apac.nokia.com/qtsoftware/research/gitorious-org-webkit-qtwebkit-mirror.git");
148         my @configresult2 = `git config -l`;
149         foreach (@configresult2) {
150             if(/submodule\.([^.=]+)\.url=(.*)/){
151                 my $repo = $1;
152                 my $url = $2;
153                 my $this_mirror_url;
154                 no warnings 'uninitialized';
155                 if($exceptions{$repo} ne undef){
156                     $this_mirror_url = $exceptions{$repo};
157                 } else {
158                     $this_mirror_url = "$mirror_url$repo.git";
159                 }
160                 print("Using mirror $this_mirror_url to clone $url\n");
161                 unless ($no_update) {
162                     system_v("git clone $this_mirror_url $repo");
163                     chdir($repo) or die "cd failed";
164                     system_v("git config remote.origin.url $url");
165                     system_v("git remote add mirror $this_mirror_url");
166                     chdir("..") or die "cd fail";
167                 }
168             }
169         }
170     }
171 }
172
173 unless ($no_update){
174     system_v("git submodule update");
175 }