teach init-repository about branches

specifically, add the --branch option and the necessary keys to
.gitmodules.

Change-Id: I09e2df6bd012629f76a35238d66697637bdffe44
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
This commit is contained in:
Oswald Buddenhagen
2014-11-10 18:08:58 +01:00
committed by Jani Heikkinen
parent e8053418e4
commit d5946d420f
2 changed files with 65 additions and 4 deletions

36
.gitmodules vendored
View File

@@ -1,139 +1,175 @@
[submodule "qtbase"]
path = qtbase
url = ../qtbase.git
branch = 5.4.0
initrepo = true
[submodule "qtsvg"]
path = qtsvg
url = ../qtsvg.git
branch = 5.4.0
initrepo = true
[submodule "qtdeclarative"]
path = qtdeclarative
url = ../qtdeclarative.git
branch = 5.4.0
initrepo = true
[submodule "qtactiveqt"]
path = qtactiveqt
url = ../qtactiveqt.git
branch = 5.4.0
initrepo = true
[submodule "qtscript"]
path = qtscript
url = ../qtscript.git
branch = 5.4.0
initrepo = true
[submodule "qtmultimedia"]
path = qtmultimedia
url = ../qtmultimedia.git
branch = 5.4.0
initrepo = true
[submodule "qttools"]
path = qttools
url = ../qttools.git
branch = 5.4.0
initrepo = true
[submodule "qtxmlpatterns"]
path = qtxmlpatterns
url = ../qtxmlpatterns.git
branch = 5.4.0
initrepo = true
[submodule "qttranslations"]
path = qttranslations
url = ../qttranslations.git
branch = 5.4.0
initrepo = true
[submodule "qtdoc"]
path = qtdoc
url = ../qtdoc.git
branch = 5.4.0
initrepo = true
[submodule "qtrepotools"]
path = qtrepotools
url = ../qtrepotools.git
branch = master
initrepo = true
[submodule "qtwebkit"]
path = qtwebkit
url = ../qtwebkit.git
branch = 5.4.0
initrepo = true
[submodule "qtwebkit-examples"]
path = qtwebkit-examples
url = ../qtwebkit-examples.git
branch = 5.4.0
initrepo = true
[submodule "qtqa"]
path = qtqa
url = ../qtqa.git
branch = master
initrepo = true
[submodule "qtlocation"]
path = qtlocation
url = ../qtlocation.git
branch = 5.4.0
initrepo = true
[submodule "qtsensors"]
path = qtsensors
url = ../qtsensors.git
branch = 5.4.0
initrepo = true
[submodule "qtsystems"]
path = qtsystems
url = ../qtsystems.git
branch = dev
[submodule "qtfeedback"]
path = qtfeedback
url = ../qtfeedback.git
branch = master
[submodule "qtdocgallery"]
path = qtdocgallery
url = ../qtdocgallery.git
branch = master
[submodule "qtpim"]
path = qtpim
url = ../qtpim.git
branch = dev
[submodule "qtconnectivity"]
path = qtconnectivity
url = ../qtconnectivity.git
branch = 5.4.0
initrepo = true
[submodule "qtwayland"]
path = qtwayland
url = ../qtwayland.git
branch = 5.4.0
initrepo = true
[submodule "qt3d"]
path = qt3d
url = ../qt3d.git
branch = dev
[submodule "qtimageformats"]
path = qtimageformats
url = ../qtimageformats.git
branch = 5.4.0
initrepo = true
[submodule "qtquick1"]
path = qtquick1
url = ../qtquick1.git
branch = 5.4.0
initrepo = true
[submodule "qtgraphicaleffects"]
path = qtgraphicaleffects
url = ../qtgraphicaleffects.git
branch = 5.4.0
initrepo = true
[submodule "qtquickcontrols"]
path = qtquickcontrols
url = ../qtquickcontrols.git
branch = 5.4.0
initrepo = true
[submodule "qtserialport"]
path = qtserialport
url = ../qtserialport.git
branch = 5.4.0
initrepo = true
[submodule "qtx11extras"]
path = qtx11extras
url = ../qtx11extras.git
branch = 5.4.0
initrepo = true
[submodule "qtmacextras"]
path = qtmacextras
url = ../qtmacextras.git
branch = 5.4.0
initrepo = true
[submodule "qtwinextras"]
path = qtwinextras
url = ../qtwinextras.git
branch = 5.4.0
initrepo = true
[submodule "qtandroidextras"]
path = qtandroidextras
url = ../qtandroidextras.git
branch = 5.4.0
initrepo = true
[submodule "qtenginio"]
path = qtenginio
url = ../qtenginio.git
branch = 1.1.0
initrepo = true
[submodule "qtwebsockets"]
path = qtwebsockets
url = ../qtwebsockets.git
branch = 5.4.0
initrepo = true
[submodule "qtwebchannel"]
path = qtwebchannel
url = ../qtwebchannel.git
branch = 5.4.0
initrepo = true
[submodule "qtwebengine"]
path = qtwebengine
url = ../qtwebengine.git
branch = 5.4.0
initrepo = true

View File

@@ -105,6 +105,12 @@ Module names may be prefixed with a dash to exclude them from a bigger set.
Skip the `git submodule update' command.
=item --branch
Instead of checking out specific SHA1s, check out the submodule branches that
correspond with the current supermodule commit.
By default, this option will cause local commits in the submodules to be rebased.
With --no-update, the branches will be checked out, but their heads will not move.
=item --ignore-submodules
@@ -233,6 +239,7 @@ sub parse_arguments
%{$self} = (%{$self},
'alternates' => "",
'branch' => 0,
'codereview-username' => "",
'detach-alternates' => 0 ,
'force' => 0 ,
@@ -246,6 +253,7 @@ sub parse_arguments
GetOptionsFromArray(\@args,
'alternates=s' => \$self->{qw{ alternates }},
'branch' => \$self->{qw{ branch }},
'codereview-username=s' => \$self->{qw{ codereview-username }},
'copy-objects' => \$self->{qw{ detach-alternates }},
'force|f' => \$self->{qw{ force }},
@@ -313,9 +321,10 @@ sub git_submodule_init
sub git_clone_all_submodules
{
my ($self, $my_repo_base, @subset) = @_;
my ($self, $my_repo_base, $co_branch, @subset) = @_;
my %subdirs = ();
my %subbranches = ();
my %subbases = ();
my %subinits = ();
my @submodconfig = qx(git config -l -f .gitmodules);
@@ -324,6 +333,8 @@ sub git_clone_all_submodules
next if ($line !~ /^submodule\.([^.=]+)\.([^.=]+)=(.*)$/);
if ($2 eq "path") {
$subdirs{$1} = $3;
} elsif ($2 eq "branch") {
$subbranches{$1} = $3;
} elsif ($2 eq "url") {
my ($mod, $base) = ($1, $3);
next if ($base !~ /^\.\.\//);
@@ -376,16 +387,30 @@ sub git_clone_all_submodules
}
if ($self->{update}) {
$self->exe('git', 'submodule', 'update');
$self->exe('git', 'submodule', 'update', ($co_branch ? ('--remote', '--rebase') : ()));
foreach my $module (@modules) {
if (-f $module.'/.gitmodules') {
my $orig_cwd = getcwd();
chdir($module) or confess "chdir $module: $OS_ERROR";
$self->git_clone_all_submodules($subbases{$module}, "all");
$self->git_clone_all_submodules($subbases{$module}, 0, "all");
chdir("$orig_cwd") or confess "chdir $orig_cwd: $OS_ERROR";
}
}
} elsif ($co_branch) {
foreach my $module (@modules) {
my $branch = $subbranches{$module};
die("No branch defined for submodule $module.\n") if (!defined($branch));
my $orig_cwd = getcwd();
chdir($module) or confess "chdir $module: $OS_ERROR";
my $br = qx(git rev-parse -q --verify $branch);
if (!$br) {
$self->exe('git', 'checkout', '-b', $branch, "origin/$branch");
} else {
$self->exe('git', 'checkout', $branch);
}
chdir("$orig_cwd") or confess "chdir $orig_cwd: $OS_ERROR";
}
}
return;
@@ -532,7 +557,7 @@ sub run
$url =~ s,qt/qt5$,,;
$self->{'base-url'} = $url;
$self->git_clone_all_submodules('qt/qt5', @{$self->{'module-subset'}});
$self->git_clone_all_submodules('qt/qt5', $self->{branch}, @{$self->{'module-subset'}});
$self->git_add_remotes('qt/qt5');