Roll recipe dependencies (nontrivial).

This is an automated CL created by the recipe roller. This CL rolls
recipe changes from upstream projects (fuchsia) into this repository.

The build that created this CL was
https://ci.chromium.org/b/8814612592868067121

Please review the expectation changes, and LGTM+CQ.

fuchsia:
https://fuchsia.googlesource.com/infra/recipes/+/d08f498519dc2f4f2cd8d89bf64af496f4450365
  d08f498 (mohrr@google.com)
      [ensure_tool] Handle repeated identical calls

More info is at https://goo.gl/zkKdpD. Use https://goo.gl/noib3a to file a bug.

R=mohrr@google.com, tpudlik@google.com

Recipe-Tryjob-Bypass-Reason: Autoroller
Ignore-Freeze: Autoroller
Bugdroid-Send-Email: False
Change-Id: I0eb489cf571027acab5e4cad2adcf00f22fd8ce8
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/93954
Pigweed-Auto-Submit: Rob Mohr <mohrr@google.com>
Commit-Queue: Recipe Deps Roller <recipe-deps-roller@pigweed.google.com.iam.gserviceaccount.com>
Reviewed-by: Rob Mohr <mohrr@google.com>
Commit-Queue: Rob Mohr <mohrr@google.com>
diff --git a/infra/config/recipes.cfg b/infra/config/recipes.cfg
index e7f16aa..3c774b2 100644
--- a/infra/config/recipes.cfg
+++ b/infra/config/recipes.cfg
@@ -21,7 +21,7 @@
   "deps": {
     "fuchsia": {
       "branch": "refs/heads/main",
-      "revision": "01d215e953de2100db5bed9c8906c90482120c06",
+      "revision": "d08f498519dc2f4f2cd8d89bf64af496f4450365",
       "url": "https://fuchsia.googlesource.com/infra/recipes"
     },
     "recipe_engine": {
diff --git a/recipes/pw_presubmit.expected/sign.json b/recipes/pw_presubmit.expected/sign.json
index b580f4f..492d9ff 100644
--- a/recipes/pw_presubmit.expected/sign.json
+++ b/recipes/pw_presubmit.expected/sign.json
@@ -1859,170 +1859,6 @@
   },
   {
     "cmd": [],
-    "name": "upload.ensure gsutil (2)",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "RECIPE_MODULE[fuchsia::gsutil]/resources/tool_manifest.json",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "upload.ensure gsutil (2).read manifest",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@{@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"path\": \"path/to/gsutil\",@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"version\": \"version:pinned-version\"@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@}@@@",
-      "@@@STEP_LOG_END@tool_manifest.json@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "upload.ensure gsutil (3)",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "RECIPE_MODULE[fuchsia::gsutil]/resources/tool_manifest.json",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "upload.ensure gsutil (3).read manifest",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@{@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"path\": \"path/to/gsutil\",@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"version\": \"version:pinned-version\"@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@}@@@",
-      "@@@STEP_LOG_END@tool_manifest.json@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "upload.ensure gsutil (4)",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "RECIPE_MODULE[fuchsia::gsutil]/resources/tool_manifest.json",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "upload.ensure gsutil (4).read manifest",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@{@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"path\": \"path/to/gsutil\",@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"version\": \"version:pinned-version\"@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@}@@@",
-      "@@@STEP_LOG_END@tool_manifest.json@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "upload.ensure gsutil (5)",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "RECIPE_MODULE[fuchsia::gsutil]/resources/tool_manifest.json",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "upload.ensure gsutil (5).read manifest",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@{@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"path\": \"path/to/gsutil\",@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"version\": \"version:pinned-version\"@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@}@@@",
-      "@@@STEP_LOG_END@tool_manifest.json@@@"
-    ]
-  },
-  {
-    "cmd": [],
     "name": "upload.ensure gsutil.install path/to/gsutil",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@2@@@"
@@ -2107,6 +1943,42 @@
       "RECIPE_MODULE[fuchsia::gsutil]/resources/gsutil.vpython",
       "[START_DIR]/cipd_tool/path/to/gsutil/version%3Apinned-version/gsutil",
       "-h",
+      "Custom-Time:2012-05-14T12:53:23.000000Z",
+      "-o",
+      "GSUtil:software_update_check_period=0",
+      "-m",
+      "rsync",
+      "-r",
+      "-u",
+      "[START_DIR]/checkout_upload",
+      "gs://bucket/builds/123-1234567890/checkout"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "upload.upload checkout to bucket",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@checkout@https://console.cloud.google.com/storage/browser/bucket/builds/123-1234567890/checkout@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-vpython-spec",
+      "RECIPE_MODULE[fuchsia::gsutil]/resources/gsutil.vpython",
+      "[START_DIR]/cipd_tool/path/to/gsutil/version%3Apinned-version/gsutil",
+      "-h",
       "Custom-Time:2012-05-14T12:53:24.500000Z",
       "-o",
       "GSUtil:software_update_check_period=0",
@@ -2245,42 +2117,6 @@
       "RECIPE_MODULE[fuchsia::gsutil]/resources/gsutil.vpython",
       "[START_DIR]/cipd_tool/path/to/gsutil/version%3Apinned-version/gsutil",
       "-h",
-      "Custom-Time:2012-05-14T12:53:23.000000Z",
-      "-o",
-      "GSUtil:software_update_check_period=0",
-      "-m",
-      "rsync",
-      "-r",
-      "-u",
-      "[START_DIR]/checkout_upload",
-      "gs://bucket/builds/123-1234567890/checkout"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:ci"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "upload.upload checkout to bucket",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LINK@checkout@https://console.cloud.google.com/storage/browser/bucket/builds/123-1234567890/checkout@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-vpython-spec",
-      "RECIPE_MODULE[fuchsia::gsutil]/resources/gsutil.vpython",
-      "[START_DIR]/cipd_tool/path/to/gsutil/version%3Apinned-version/gsutil",
-      "-h",
       "Custom-Time:2012-05-14T12:53:30.500000Z",
       "-o",
       "GSUtil:software_update_check_period=0",
diff --git a/recipes/pw_presubmit.expected/step.json b/recipes/pw_presubmit.expected/step.json
index 80aab11..d428b52 100644
--- a/recipes/pw_presubmit.expected/step.json
+++ b/recipes/pw_presubmit.expected/step.json
@@ -2603,88 +2603,6 @@
   },
   {
     "cmd": [],
-    "name": "upload.ensure gsutil (2)",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "RECIPE_MODULE[fuchsia::gsutil]/resources/tool_manifest.json",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:try"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "upload.ensure gsutil (2).read manifest",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@{@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"path\": \"path/to/gsutil\",@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"version\": \"version:pinned-version\"@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@}@@@",
-      "@@@STEP_LOG_END@tool_manifest.json@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "upload.ensure gsutil (3)",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "RECIPE_MODULE[fuchsia::gsutil]/resources/tool_manifest.json",
-      "/path/to/tmp/json"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:try"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "upload.ensure gsutil (3).read manifest",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@{@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"path\": \"path/to/gsutil\",@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@  \"version\": \"version:pinned-version\"@@@",
-      "@@@STEP_LOG_LINE@tool_manifest.json@}@@@",
-      "@@@STEP_LOG_END@tool_manifest.json@@@"
-    ]
-  },
-  {
-    "cmd": [],
     "name": "upload.ensure gsutil.install path/to/gsutil",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@2@@@"
@@ -2769,6 +2687,42 @@
       "RECIPE_MODULE[fuchsia::gsutil]/resources/gsutil.vpython",
       "[START_DIR]/cipd_tool/path/to/gsutil/version%3Apinned-version/gsutil",
       "-h",
+      "Custom-Time:2020-09-13T12:27:40.000000Z",
+      "-o",
+      "GSUtil:software_update_check_period=0",
+      "-m",
+      "rsync",
+      "-r",
+      "-u",
+      "[START_DIR]/checkout_upload",
+      "gs://bucket/builds/8945511751514863184/checkout"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "upload.upload checkout to bucket",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LINK@checkout@https://console.cloud.google.com/storage/browser/bucket/builds/8945511751514863184/checkout@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-vpython-spec",
+      "RECIPE_MODULE[fuchsia::gsutil]/resources/gsutil.vpython",
+      "[START_DIR]/cipd_tool/path/to/gsutil/version%3Apinned-version/gsutil",
+      "-h",
       "Custom-Time:2020-09-13T12:28:00.000000Z",
       "-o",
       "GSUtil:software_update_check_period=0",
@@ -2837,42 +2791,6 @@
       "RECIPE_MODULE[fuchsia::gsutil]/resources/gsutil.vpython",
       "[START_DIR]/cipd_tool/path/to/gsutil/version%3Apinned-version/gsutil",
       "-h",
-      "Custom-Time:2020-09-13T12:27:40.000000Z",
-      "-o",
-      "GSUtil:software_update_check_period=0",
-      "-m",
-      "rsync",
-      "-r",
-      "-u",
-      "[START_DIR]/checkout_upload",
-      "gs://bucket/builds/8945511751514863184/checkout"
-    ],
-    "infra_step": true,
-    "luci_context": {
-      "realm": {
-        "name": "project:try"
-      },
-      "resultdb": {
-        "current_invocation": {
-          "name": "invocations/build:8945511751514863184",
-          "update_token": "token"
-        },
-        "hostname": "rdbhost"
-      }
-    },
-    "name": "upload.upload checkout to bucket",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LINK@checkout@https://console.cloud.google.com/storage/browser/bucket/builds/8945511751514863184/checkout@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-vpython-spec",
-      "RECIPE_MODULE[fuchsia::gsutil]/resources/gsutil.vpython",
-      "[START_DIR]/cipd_tool/path/to/gsutil/version%3Apinned-version/gsutil",
-      "-h",
       "Custom-Time:2020-09-13T12:28:40.000000Z",
       "-o",
       "GSUtil:software_update_check_period=0",