Add option --codereview-user <username> to add Gerrit repos
authorMarius Storm-Olsen <marius.storm-olsen@nokia.com>
Wed, 1 Jun 2011 18:16:09 +0000 (13:16 -0500)
committerMarius Storm-Olsen <marius.storm-olsen@nokia.com>
Wed, 1 Jun 2011 18:16:09 +0000 (13:16 -0500)
By providing the username used for codereviews, the script will
add the proper URLs for the repos currently under Gerrit control.

For repos not under Gerrit control, 'gerrit' will simply refer
to the staging repo, or origin.

init-repository

index 47371be..819e042 100755 (executable)
@@ -135,6 +135,14 @@ protocol is blocked by a firewall.  Note that this only works with the
 external Gitorious server.
 
 
+=item --codereview-username <Gerrit/JIRA username>
+
+Adds a gerrit alias to repos under Gerrit codereview management.
+This requires a username for SSH access to the codereview.qt.nokia.com
+server, which will be the same username you have for the bugtracker at
+bugreports.qt.nokia.com.
+
+
 =item --alternates <path to other Qt5 repo>
 
 Adds alternates for each submodule to another full qt5 checkout. This makes
@@ -213,6 +221,10 @@ my %STAGING_REPOS = map { $_ => "git://gitorious.org/qt/$_-staging.git" } qw(
     qtsensors
 );
 
+my %GERRIT_REPOS = map { $_ => "codereview.qt.nokia.com:qt/$_.git" } qw(
+    qtbase
+);
+
 my $BNE_MIRROR_URL_BASE
     = 'git://bq-git.apac.nokia.com/qtsoftware/qt/';
 
@@ -252,6 +264,7 @@ sub parse_arguments
 
     %{$self} = (%{$self},
         'alternates'          => "",
+        'codereview-username' => "",
         'detach-alternates'   => 0 ,
         'force'               => 0 ,
         'ignore-submodules'   => 0 ,
@@ -265,6 +278,7 @@ sub parse_arguments
 
     GetOptionsFromArray(\@args,
         'alternates=s'      =>  \$self->{qw{ alternates        }},
+        'codereview-username=s' => \$self->{qw{ codereview-username }},
         'copy-objects'      =>  \$self->{qw{ detach-alternates }},
         'force'             =>  \$self->{qw{ force             }},
         'ignore-submodules' =>  \$self->{qw{ ignore-submodules }},
@@ -413,7 +427,7 @@ sub git_clone_all_submodules
     return;
 }
 
-sub git_add_staging_remote
+sub git_add_remotes
 {
     my ($self, $repo_basename) = @_;
 
@@ -426,23 +440,17 @@ sub git_add_staging_remote
         $current_remotes{$line} = 1;
     }
 
-    my @staging = grep { /^$repo_basename$/; } keys %STAGING_REPOS;
-
-    if (!@staging) {
-        # Add origin's URL as staging's URL, since this repo has no separate staging area
-        unless ($current_remotes{'staging'}) {
-            my @configresult = qx(git remote -v);
-            foreach (@configresult) {
-                if (/origin\s+(\S+) \(fetch\)/) {
-                    $self->exe('git', 'remote', 'add', 'staging', $1);
-                }
-            }
+    my @gerrit = grep { /^$repo_basename$/; } keys %GERRIT_REPOS;
+    if (!$current_remotes{'gerrit'} && $self->{'codereview-username'}) {
+        foreach my $gerrit_repo (@gerrit) {
+            my $gerrit_repo_url = $GERRIT_REPOS{$gerrit_repo};
+            $self->exe('git', 'remote', 'add', 'gerrit', $self->{'codereview-username'}."@".$gerrit_repo_url);
         }
-    } else {
-        foreach my $staging_repo (@staging) {
-            # nothing to do if remote already exists
-            next if ($current_remotes{'staging'});
+    }
 
+    my @staging = grep { /^$repo_basename$/; } keys %STAGING_REPOS;
+    if (!$current_remotes{'staging'}) {
+        foreach my $staging_repo (@staging) {
             my $staging_repo_url = $STAGING_REPOS{$staging_repo};
             if ($protocol) {
                 if ($protocol ne 'http') {
@@ -454,6 +462,34 @@ sub git_add_staging_remote
         }
     }
 
+    # if repo has no staging repo defined, alias it to gerrit or origin
+    if (!$current_remotes{'staging'} && !@staging) {
+        my @configresult = qx(git remote -v);
+        my $staging_set = 0;
+        foreach (@configresult) {
+            if (/^gerrit\s+(\S+) \(fetch\)/) {
+                $self->exe('git', 'remote', 'add', 'staging', $1);
+                $staging_set = 1;
+            }
+        }
+        unless($staging_set) {
+            foreach (@configresult) {
+                if (/^origin\s+(\S+) \(fetch\)/) {
+                    $self->exe('git', 'remote', 'add', 'staging', $1);
+                }
+            }
+        }
+    }
+    #if repo has no gerrit repo defined, alias it to whatever staging now points to (could be origin)
+    if (!$current_remotes{'gerrit'} && !@gerrit) {
+        my @configresult = qx(git remote -v);
+        foreach (@configresult) {
+            if (/^staging\s+(\S+) \(fetch\)/) {
+                $self->exe('git', 'remote', 'add', 'gerrit', $1);
+            }
+        }
+    }
+
     return;
 }
 
@@ -515,7 +551,7 @@ sub git_clone_one_submodule
         $self->exe('git', 'remote', 'add', 'mirror', $mirror);
     }
 
-    $self->git_add_staging_remote($submodule);
+    $self->git_add_remotes($submodule);
 
     if ($self->{'detach-alternates'}) {
         $self->exe('git', 'repack', '-a');
@@ -546,7 +582,7 @@ sub run
         $self->git_clone_all_submodules;
     }
 
-    $self->git_add_staging_remote('qt5');
+    $self->git_add_remotes('qt5');
 
     return;
 }