Always fetch before cherry-picking changes

We cannot cherry-pick changes without having something to cherry-pick
them on top of.

Change-Id: Iee44bc0c824f6db6a1578d9dfcaf6d143ee7f6d2
Reviewed-on: https://gn-review.googlesource.com/1300
Reviewed-by: Scott Graham <scottmg@chromium.org>
diff --git a/infra/recipes/gn.expected/cq_linux.json b/infra/recipes/gn.expected/cq_linux.json
index 06ec6c6..306e218 100644
--- a/infra/recipes/gn.expected/cq_linux.json
+++ b/infra/recipes/gn.expected/cq_linux.json
@@ -19,12 +19,39 @@
     "cmd": [
       "git",
       "fetch",
+      "https://gn.googlesource.com/gn",
+      "refs/heads/master"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "infra_step": true,
+    "name": "git.fetch",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "checkout",
+      "FETCH_HEAD"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "infra_step": true,
+    "name": "git.checkout",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "fetch",
       "https://gn-review.googlesource.com/gn",
       "refs/changes/00/1000/1"
     ],
     "cwd": "[START_DIR]/gn",
     "infra_step": true,
-    "name": "git.fetch",
+    "name": "git.fetch 1000/1",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@"
     ]
@@ -37,7 +64,7 @@
     ],
     "cwd": "[START_DIR]/gn",
     "infra_step": true,
-    "name": "git.cherry-pick",
+    "name": "git.cherry-pick 1000/1",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@"
     ]
diff --git a/infra/recipes/gn.expected/cq_mac.json b/infra/recipes/gn.expected/cq_mac.json
index 06ec6c6..306e218 100644
--- a/infra/recipes/gn.expected/cq_mac.json
+++ b/infra/recipes/gn.expected/cq_mac.json
@@ -19,12 +19,39 @@
     "cmd": [
       "git",
       "fetch",
+      "https://gn.googlesource.com/gn",
+      "refs/heads/master"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "infra_step": true,
+    "name": "git.fetch",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "checkout",
+      "FETCH_HEAD"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "infra_step": true,
+    "name": "git.checkout",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "fetch",
       "https://gn-review.googlesource.com/gn",
       "refs/changes/00/1000/1"
     ],
     "cwd": "[START_DIR]/gn",
     "infra_step": true,
-    "name": "git.fetch",
+    "name": "git.fetch 1000/1",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@"
     ]
@@ -37,7 +64,7 @@
     ],
     "cwd": "[START_DIR]/gn",
     "infra_step": true,
-    "name": "git.cherry-pick",
+    "name": "git.cherry-pick 1000/1",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@"
     ]
diff --git a/infra/recipes/gn.expected/cq_win.json b/infra/recipes/gn.expected/cq_win.json
index 0bd3b48..124a4a7 100644
--- a/infra/recipes/gn.expected/cq_win.json
+++ b/infra/recipes/gn.expected/cq_win.json
@@ -19,12 +19,39 @@
     "cmd": [
       "git",
       "fetch",
+      "https://gn.googlesource.com/gn",
+      "refs/heads/master"
+    ],
+    "cwd": "[START_DIR]\\gn",
+    "infra_step": true,
+    "name": "git.fetch",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "checkout",
+      "FETCH_HEAD"
+    ],
+    "cwd": "[START_DIR]\\gn",
+    "infra_step": true,
+    "name": "git.checkout",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "fetch",
       "https://gn-review.googlesource.com/gn",
       "refs/changes/00/1000/1"
     ],
     "cwd": "[START_DIR]\\gn",
     "infra_step": true,
-    "name": "git.fetch",
+    "name": "git.fetch 1000/1",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@"
     ]
@@ -37,7 +64,7 @@
     ],
     "cwd": "[START_DIR]\\gn",
     "infra_step": true,
-    "name": "git.cherry-pick",
+    "name": "git.cherry-pick 1000/1",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@"
     ]
diff --git a/infra/recipes/gn.py b/infra/recipes/gn.py
index c27d851..33012fb 100644
--- a/infra/recipes/gn.py
+++ b/infra/recipes/gn.py
@@ -23,27 +23,25 @@
 
     with api.context(cwd=src_dir):
       build_input = api.buildbucket.build_input
-      if build_input.gerrit_changes:
-        for change in build_input.gerrit_changes:
-          api.step('fetch', [
-              'git', 'fetch',
-              'https://%s/gn' % change.host,
-              'refs/changes/%s/%s/%s' %
-              (str(change.change)[-2:], change.change, change.patchset)
-          ])
-          api.step('cherry-pick', ['git', 'cherry-pick', 'FETCH_HEAD'])
-      else:
-        ref = (
-            build_input.gitiles_commit.id
-            if build_input.gitiles_commit else 'refs/heads/master')
-        api.step('fetch',
-                 ['git', 'fetch', 'https://gn.googlesource.com/gn', ref])
-        api.step('checkout', ['git', 'checkout', 'FETCH_HEAD'])
+      ref = (
+          build_input.gitiles_commit.id
+          if build_input.gitiles_commit else 'refs/heads/master')
+      api.step('fetch', ['git', 'fetch', 'https://gn.googlesource.com/gn', ref])
+      api.step('checkout', ['git', 'checkout', 'FETCH_HEAD'])
+      for change in build_input.gerrit_changes:
+        api.step('fetch %s/%s' % (change.change, change.patchset), [
+            'git', 'fetch',
+            'https://%s/gn' % change.host,
+            'refs/changes/%s/%s/%s' %
+            (str(change.change)[-2:], change.change, change.patchset)
+        ])
+        api.step('cherry-pick %s/%s' % (change.change, change.patchset),
+                 ['git', 'cherry-pick', 'FETCH_HEAD'])
 
   with api.context(infra_steps=True):
     cipd_dir = api.path['start_dir'].join('cipd')
     packages = {
-      'infra/ninja/${platform}': 'version:1.8.2',
+        'infra/ninja/${platform}': 'version:1.8.2',
     }
     api.cipd.ensure(cipd_dir, packages)