Can now tell init-repository to only use a subset of modules master_201107072200
authorAlan Alpert <alan.alpert@nokia.com>
Wed, 6 Jul 2011 07:53:58 +0000 (17:53 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 7 Jul 2011 11:55:34 +0000 (13:55 +0200)
Still useful to use init-repository because of all the other logic, such
as repository urls. More general than --no-webkit, although it is still
a valid convenience as the most common case.

Also makes qt.pro check for existence of modules, since it is no longer
certain that you'll have everything but webkit.

Change-Id: Iaaaa30e24e0a793218e2e307bdde56067760c513
Reviewed-on: http://codereview.qt.nokia.com/1258
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
init-repository
qt.pro

index e80dcc0..abb2b93 100755 (executable)
@@ -87,6 +87,10 @@ Skip webkit and webkit examples submodules.
 It may be desirable to skip these modules due to the large size of the webkit
 git repository.
 
+=item --module-subset=<module1>,<module2>...
+
+Only initialize the specified subset of modules given as the argument. Specified
+modules must already exist in .gitmodules.
 
 =item --no-update
 
@@ -300,6 +304,7 @@ sub parse_arguments
         'protocol'            => "",
         'update'              => 1 ,
         'webkit'              => 1 ,
+        'module-subset'       => "",
     );
 
     GetOptionsFromArray(\@args,
@@ -314,6 +319,7 @@ sub parse_arguments
         'quiet'             =>  \$self->{qw{ quiet             }},
         'update!'           =>  \$self->{qw{ update            }},
         'webkit!'           =>  \$self->{qw{ webkit            }},
+        'module-subset=s'   =>  \$self->{qw{ module-subset     }},
 
         'help|?'            =>  sub { pod2usage(1);               },
         'http'              =>  sub { $self->{protocol} = 'http'; },
@@ -349,6 +355,12 @@ sub parse_arguments
     # Replace any double trailing slashes from end of mirror
     $self->{'mirror-url'} =~ s{//+$}{/};
 
+    if ($self->{'module-subset'}) {
+        $self->{'module-subset'} = {
+            map { $_ => 1 } split(qr{,}, $self->{'module-subset'})
+        };
+    }
+
     return;
 }
 
@@ -405,6 +417,21 @@ sub git_disable_webkit_submodule
     return;
 }
 
+sub git_prune_submodules
+{
+    my ($self) = @_;
+
+    my @configresult = qx(git config -l);
+    foreach my $line (@configresult) {
+        if ($line =~ /submodule\.([^.=]+)\.url=/) {
+            my $module_name = $1;
+            if (!$self->{'module-subset'}{$module_name}) {
+                $self->exe('git', 'config', '--remove', "submodule.$module_name");
+            }
+        }
+    }
+}
+
 sub git_set_submodule_config
 {
     my ($self) = @_;
@@ -593,6 +620,10 @@ sub run
         $self->git_disable_webkit_submodule;
     }
 
+    if ($self->{'module-subset'}) {
+        $self->git_prune_submodules;
+    }
+
     $self->git_set_submodule_config;
 
     if ($self->{update}) {
diff --git a/qt.pro b/qt.pro
index 0d248c4..213abe9 100644 (file)
--- a/qt.pro
+++ b/qt.pro
@@ -87,25 +87,29 @@ module_qtfeedback.depends = module_qtbase module_qtdeclarative
 # not yet enabled by default
 module_qtfeedback.CONFIG = no_default_target no_default_install
 
-SUBDIRS       = \
-                module_qtbase \
-                module_qtsvg \
-                module_qtphonon \
-                module_qtxmlpatterns \
-                module_qtscript \
-                module_qtdeclarative \
-                module_qtmultimedia \
-                module_qttools \
-                module_qttranslations \
-                module_qtdoc \
-                module_qlalr \
-                module_qtqa \
-                module_qtlocation \
-                module_qtactiveqt \
-                module_qtsensors \
-                module_qtsystems \
-                module_qtmultimediakit \
-                module_qtfeedback \
+# only qtbase is required to exist. The others may not - but it is the
+# users responsibility to ensure that all needed dependencies exist, or
+# it may not build.
+
+SUBDIRS = module_qtbase
+
+exists(qtsvg/qtsvg.pro): SUBDIRS += module_qtsvg
+exists(qtphonon/qtphonon.pro): SUBDIRS += module_qtphonon
+exists(qtxmlpatterns/qtxmlpatterns.pro): SUBDIRS += module_qtxmlpatterns
+exists(qtscript/qtscript.pro): SUBDIRS += module_qtscript
+exists(qtdeclarative/qtdeclarative.pro): SUBDIRS += module_qtdeclarative
+exists(qtmultimedia/qtmultimedia.pro): SUBDIRS += module_qtmultimedia
+exists(qttools/qttools.pro): SUBDIRS += module_qttools
+exists(qttranslations/qttranslations.pro): SUBDIRS += module_qttranslations
+exists(qtdoc/qtdoc.pro): SUBDIRS += module_qtdoc
+exists(qlalr/qlalr.pro): SUBDIRS += module_qlalr
+exists(qtqa/qtqa.pro): SUBDIRS += module_qtqa
+exists(qtlocation/qtlocation.pro): SUBDIRS += module_qtlocation
+exists(qtactiveqt/qtactiveqt.pro): SUBDIRS += module_qtactiveqt
+exists(qtsensors/qtsensors.pro): SUBDIRS += module_qtsensors
+exists(qtsystems/qtsystems.pro): SUBDIRS += module_qtsystems
+exists(qtmultimediakit/qtmultimediakit.pro): SUBDIRS += module_qtmultimediakit
+exists(qtfeedback/qtfeedback.pro): SUBDIRS += module_qtfeedback
 
 exists(qtwebkit/Tools/Scripts/build-webkit) {
     SUBDIRS +=  module_qtwebkit \