roller: Support merge rolls

Bug: b/512911021
Change-Id: Id3422de395b613e306cbf6c15185feafb6110889
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/410575
diff --git a/recipes/roller.expected/mega.json b/recipes/roller.expected/mega.json
index 5ef7a62..5822390 100644
--- a/recipes/roller.expected/mega.json
+++ b/recipes/roller.expected/mega.json
@@ -7673,6 +7673,423 @@
   },
   {
     "cmd": [],
+    "name": "staging"
+  },
+  {
+    "cmd": [
+      "git",
+      "ls-remote",
+      "--heads",
+      "https://pigweed.googlesource.com/pigweed/pigweed",
+      "staging"
+    ],
+    "env": {
+      "GIT_ADVICE": "0",
+      "GIT_CONFIG_COUNT": "3",
+      "GIT_CONFIG_KEY_0": "gc.auto",
+      "GIT_CONFIG_KEY_1": "gc.autoDetach",
+      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
+      "GIT_CONFIG_VALUE_0": "0",
+      "GIT_CONFIG_VALUE_1": "0",
+      "GIT_CONFIG_VALUE_2": "0"
+    },
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "staging.git ls-remote",
+    "timeout": 600.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@stdout@h3ll0\trefs/heads/staging@@@",
+      "@@@STEP_LOG_END@stdout@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "git",
+      "cherry",
+      "main",
+      "h3ll0"
+    ],
+    "cwd": "[START_DIR]/co",
+    "env": {
+      "GIT_ADVICE": "0",
+      "GIT_CONFIG_COUNT": "3",
+      "GIT_CONFIG_KEY_0": "gc.auto",
+      "GIT_CONFIG_KEY_1": "gc.autoDetach",
+      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
+      "GIT_CONFIG_VALUE_0": "0",
+      "GIT_CONFIG_VALUE_1": "0",
+      "GIT_CONFIG_VALUE_2": "0"
+    },
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "staging.git cherry",
+    "timeout": 300.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "rev-parse",
+      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~1"
+    ],
+    "cwd": "[START_DIR]/co",
+    "env": {
+      "GIT_ADVICE": "0",
+      "GIT_CONFIG_COUNT": "3",
+      "GIT_CONFIG_KEY_0": "gc.auto",
+      "GIT_CONFIG_KEY_1": "gc.autoDetach",
+      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
+      "GIT_CONFIG_VALUE_0": "0",
+      "GIT_CONFIG_VALUE_1": "0",
+      "GIT_CONFIG_VALUE_2": "0"
+    },
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "staging.git rev-parse",
+    "timeout": 300.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/infra/tools/luci/gitiles/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gitiles",
+      "log",
+      "-json-output",
+      "/path/to/tmp/json",
+      "-limit",
+      "500",
+      "https://pigweed.googlesource.com/pigweed/pigweed",
+      "..h3ll0"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "staging.log staging",
+    "timeout": 300.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"author\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"email\": \"fake_A@fake_0.email.com\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"Fake A\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"time\": \"Mon Jan 01 00:00:00 2015\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    },@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"committer\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"email\": \"fake_A@fake_0.email.com\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"Fake A\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"time\": \"Mon Jan 01 00:00:00 2015\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    },@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"id\": \"3e30158f2a7caccb7a9f6632a60011e7a44e1e5c\",@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"message\": \"fake A msg 0\",@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"83a7614b3b60951511be50db1b9561daff4bb447\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    ],@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"tree\": \"1b6412b24ec3add84836c8fdd1af5ac8e35b61d9\",@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"tree_diff\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_id\": \"8bea05ad53680fce6937543f0d98cd48e295b8ff\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_mode\": 33188,@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_path\": \"a.py\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"old_id\": \"0000000000000000000000000000000000000000\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"old_mode\": 0,@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"type\": \"add\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  },@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"author\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"email\": \"fake_A@fake_1.email.com\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"Fake A\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"time\": \"Mon Jan 01 00:00:00 2015\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    },@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"committer\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"email\": \"fake_A@fake_1.email.com\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"Fake A\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"time\": \"Mon Jan 01 00:00:00 2015\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    },@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"id\": \"3380b83c11e029b7291c83c44e7b1ce09d465fd1\",@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"message\": \"fake A msg 1\",@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"8675a52c73c701cb0b2c48f5ed4a9058c624e6cd\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    ],@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"tree\": \"a1b1e6aa501915989b45a95e1224ec2a88655eb3\",@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"tree_diff\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_id\": \"06bc4c79002f278528aaddae4e056a11f58c19ad\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_mode\": 33188,@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_path\": \"b.py\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"old_id\": \"0000000000000000000000000000000000000000\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"old_mode\": 0,@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"type\": \"add\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  },@@@",
+      "@@@STEP_LOG_LINE@json.output@  {@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"author\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"email\": \"fake_A@fake_2.email.com\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"Fake A\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"time\": \"Mon Jan 01 00:00:00 2015\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    },@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"committer\": {@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"email\": \"fake_A@fake_2.email.com\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"name\": \"Fake A\",@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"time\": \"Mon Jan 01 00:00:00 2015\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    },@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"id\": \"363caa907186de786cb5292cd1ab7245da954815\",@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"message\": \"fake A msg 2\",@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"parents\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      \"255c6325c4c654e17e6b35142e3912c86f1718f2\"@@@",
+      "@@@STEP_LOG_LINE@json.output@    ],@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"tree\": \"e84d4ad259e69da73d2b842e2b9709f08e8b22bd\",@@@",
+      "@@@STEP_LOG_LINE@json.output@    \"tree_diff\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_id\": \"d7f478bf423219f2f47c1a6ed344fc597a8bf18f\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_mode\": 33188,@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"new_path\": \"c.py\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"old_id\": \"0000000000000000000000000000000000000000\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"old_mode\": 0,@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"type\": \"add\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ]@@@",
+      "@@@STEP_LOG_LINE@json.output@  }@@@",
+      "@@@STEP_LOG_LINE@json.output@]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "staging.get gerrit change numbers for staging",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "staging.get gerrit change numbers for staging.old revision",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_SUMMARY_TEXT@255c6325c4c654e17e6b35142e3912c86f1718f2@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "staging.get gerrit change numbers for staging.new revision",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_SUMMARY_TEXT@3e30158f2a7caccb7a9f6632a60011e7a44e1e5c@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "staging.get gerrit change numbers for staging.3 commits",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"3e30158f2a7caccb7a9f6632a60011e7a44e1e5c\"}",
+      "-output",
+      "/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": "staging.get gerrit change numbers for staging.change details for 3e30158:https://pigweed.googlesource.com/pigweed/pigweed/+/3e30158f2a7caccb7a9f6632a60011e7a44e1e5c",
+    "timeout": 600,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"_number\": 12345@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@json.input@{@@@",
+      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"3e30158f2a7caccb7a9f6632a60011e7a44e1e5c\"@@@",
+      "@@@STEP_LOG_LINE@json.input@}@@@",
+      "@@@STEP_LOG_END@json.input@@@",
+      "@@@STEP_LINK@gerrit link@https://pigweed-review.googlesource.com/q/3e30158f2a7caccb7a9f6632a60011e7a44e1e5c@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"3380b83c11e029b7291c83c44e7b1ce09d465fd1\"}",
+      "-output",
+      "/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": "staging.get gerrit change numbers for staging.change details for 3380b83:https://pigweed.googlesource.com/pigweed/pigweed/+/3380b83c11e029b7291c83c44e7b1ce09d465fd1",
+    "timeout": 600,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"_number\": 12345@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@json.input@{@@@",
+      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"3380b83c11e029b7291c83c44e7b1ce09d465fd1\"@@@",
+      "@@@STEP_LOG_LINE@json.input@}@@@",
+      "@@@STEP_LOG_END@json.input@@@",
+      "@@@STEP_LINK@gerrit link@https://pigweed-review.googlesource.com/q/3380b83c11e029b7291c83c44e7b1ce09d465fd1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+      "change-detail",
+      "-host",
+      "https://pigweed-review.googlesource.com",
+      "-input",
+      "{\"change_id\": \"363caa907186de786cb5292cd1ab7245da954815\"}",
+      "-output",
+      "/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": "staging.get gerrit change numbers for staging.change details for 363caa9:https://pigweed.googlesource.com/pigweed/pigweed/+/363caa907186de786cb5292cd1ab7245da954815",
+    "timeout": 600,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@json.output@{@@@",
+      "@@@STEP_LOG_LINE@json.output@  \"_number\": 12345@@@",
+      "@@@STEP_LOG_LINE@json.output@}@@@",
+      "@@@STEP_LOG_END@json.output@@@",
+      "@@@STEP_LOG_LINE@json.input@{@@@",
+      "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"363caa907186de786cb5292cd1ab7245da954815\"@@@",
+      "@@@STEP_LOG_LINE@json.input@}@@@",
+      "@@@STEP_LOG_END@json.input@@@",
+      "@@@STEP_LINK@gerrit link@https://pigweed-review.googlesource.com/q/363caa907186de786cb5292cd1ab7245da954815@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "merge",
+      "h3ll0",
+      "--no-commit"
+    ],
+    "cwd": "[START_DIR]/co",
+    "env": {
+      "GIT_ADVICE": "0",
+      "GIT_CONFIG_COUNT": "3",
+      "GIT_CONFIG_KEY_0": "gc.auto",
+      "GIT_CONFIG_KEY_1": "gc.autoDetach",
+      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
+      "GIT_CONFIG_VALUE_0": "0",
+      "GIT_CONFIG_VALUE_1": "0",
+      "GIT_CONFIG_VALUE_2": "0"
+    },
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "staging.git merge",
+    "timeout": 600.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
     "name": "script.sh"
   },
   {
@@ -7709,7 +8126,7 @@
     "cmd": [],
     "name": "commit message",
     "~followup_annotations": [
-      "@@@STEP_LOG_LINE@commit message@roll: submodule, bazel-cipd/${plat}, bazel-git, project, cipd, variable-cipd, text.txt, var.txt[FOO], copy.txt, foo@@@",
+      "@@@STEP_LOG_LINE@commit message@roll: submodule, bazel-cipd/${plat}, bazel-git, project, cipd, variable-cipd, text.txt, var.txt[FOO], copy.txt, staging, foo@@@",
       "@@@STEP_LOG_LINE@commit message@@@@",
       "@@@STEP_LOG_LINE@commit message@submodule 255c632..3e30158 (3 commits)@@@",
       "@@@STEP_LOG_LINE@commit message@3e30158:https://foo-review.googlesource.com/c/submodule/+/12345 fake A msg 0@@@",
@@ -7754,6 +8171,11 @@
       "@@@STEP_LOG_LINE@commit message@To@@@",
       "@@@STEP_LOG_LINE@commit message@    new@@@",
       "@@@STEP_LOG_LINE@commit message@@@@",
+      "@@@STEP_LOG_LINE@commit message@staging 255c632..3e30158 (3 commits)@@@",
+      "@@@STEP_LOG_LINE@commit message@3e30158:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 0@@@",
+      "@@@STEP_LOG_LINE@commit message@3380b83:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 1@@@",
+      "@@@STEP_LOG_LINE@commit message@363caa9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 2@@@",
+      "@@@STEP_LOG_LINE@commit message@@@@",
       "@@@STEP_LOG_LINE@commit message@foo@@@",
       "@@@STEP_LOG_LINE@commit message@abc: changed@@@",
       "@@@STEP_LOG_LINE@commit message@def: changed@@@",
@@ -7769,10 +8191,12 @@
       "@@@STEP_LOG_LINE@commit message@Rolled-Commits: 255c6325c4c654..3e30158f2a7cac@@@",
       "@@@STEP_LOG_LINE@commit message@Rolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed@@@",
       "@@@STEP_LOG_LINE@commit message@Rolled-Commits: 255c6325c4c654..3e30158f2a7cac@@@",
-      "@@@STEP_LOG_LINE@commit message@Roll-Count: 10@@@",
+      "@@@STEP_LOG_LINE@commit message@Rolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed@@@",
+      "@@@STEP_LOG_LINE@commit message@Rolled-Commits: 255c6325c4c654..3e30158f2a7cac@@@",
+      "@@@STEP_LOG_LINE@commit message@Roll-Count: 11@@@",
       "@@@STEP_LOG_END@commit message@@@",
-      "@@@SET_BUILD_PROPERTY@_roll_count@10@@@",
-      "@@@SET_BUILD_PROPERTY@_roll_names@[\"submodule\", \"bazel-cipd/${plat}\", \"bazel-git\", \"project\", \"cipd\", \"variable-cipd\", \"text.txt\", \"var.txt[FOO]\", \"copy.txt\", \"foo\"]@@@"
+      "@@@SET_BUILD_PROPERTY@_roll_count@11@@@",
+      "@@@SET_BUILD_PROPERTY@_roll_names@[\"submodule\", \"bazel-cipd/${plat}\", \"bazel-git\", \"project\", \"cipd\", \"variable-cipd\", \"text.txt\", \"var.txt[FOO]\", \"copy.txt\", \"staging\", \"foo\"]@@@"
     ]
   },
   {
@@ -7858,6 +8282,15 @@
   },
   {
     "cmd": [],
+    "name": "commit message.staging",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_SUMMARY_TEXT@{'remote': 'https://pigweed.googlesource.com/pigweed/pigweed', 'name': 'staging', 'old': '255c6325c4c654e17e6b35142e3912c86f1718f2', 'new': '3e30158f2a7caccb7a9f6632a60011e7a44e1e5c'}@@@",
+      "@@@SET_BUILD_PROPERTY@staging@{\"name\": \"staging\", \"new\": \"3e30158f2a7caccb7a9f6632a60011e7a44e1e5c\", \"old\": \"255c6325c4c654e17e6b35142e3912c86f1718f2\", \"remote\": \"https://pigweed.googlesource.com/pigweed/pigweed\"}@@@"
+    ]
+  },
+  {
+    "cmd": [],
     "name": "commit message.foo",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
@@ -8158,7 +8591,7 @@
       "git",
       "commit",
       "-m",
-      "roll: submodule, bazel-cipd/${plat}, bazel-git, project, cipd, variable-cipd, text.txt, var.txt[FOO], copy.txt, foo\n\nsubmodule 255c632..3e30158 (3 commits)\n3e30158:https://foo-review.googlesource.com/c/submodule/+/12345 fake A msg 0\n3380b83:https://foo-review.googlesource.com/c/submodule/+/12345 fake A msg 1\n363caa9:https://foo-review.googlesource.com/c/submodule/+/12345 fake A msg 2\n\nbazel-cipd/${plat}\nFrom git_revision:8280651ad57cb9fb24a404cec2401040c28dec98\nTo git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\n\nbazel-git 255c632..3e30158 (3 commits)\n3e30158:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 0\n3380b83:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 1\n363caa9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 2\n\nproject 255c632..3e30158 (3 commits)\n3e30158:https://host-review.googlesource.com/c/prefix/project/+/12345 fake A msg 0\n3380b83:https://host-review.googlesource.com/c/prefix/project/+/12345 fake A msg 1\n363caa9:https://host-review.googlesource.com/c/prefix/project/+/12345 fake A msg 2\n\ncipd\nFrom git_revision:123\nTo git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\n\nvariable-cipd\nFrom git_revision:0000000000000000000000000000000000000000\nTo git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\n\ntext.txt 255c632..3e30158 (3 commits)\n3e30158:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 0\n3380b83:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 1\n363caa9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 2\n\nvar.txt[FOO] 255c632..3e30158 (3 commits)\n3e30158:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 0\n3380b83:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 1\n363caa9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 2\n\ncopy.txt\nFrom\n    old\nTo\n    new\n\nfoo\nabc: changed\ndef: changed\nghi: changed\n\nRolled-Repo: https://foo.googlesource.com/submodule\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRolled-Repo: https://host.googlesource.com/prefix/project\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRoll-Count: 10\nRoller-URL: https://cr-buildbucket.appspot.com/build/8945511751514863184\nCQ-Do-Not-Cancel-Tryjobs: true\nChange-Id: I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c",
+      "roll: submodule, bazel-cipd/${plat}, bazel-git, project, cipd, variable-cipd, text.txt, var.txt[FOO], copy.txt, staging, foo\n\nsubmodule 255c632..3e30158 (3 commits)\n3e30158:https://foo-review.googlesource.com/c/submodule/+/12345 fake A msg 0\n3380b83:https://foo-review.googlesource.com/c/submodule/+/12345 fake A msg 1\n363caa9:https://foo-review.googlesource.com/c/submodule/+/12345 fake A msg 2\n\nbazel-cipd/${plat}\nFrom git_revision:8280651ad57cb9fb24a404cec2401040c28dec98\nTo git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\n\nbazel-git 255c632..3e30158 (3 commits)\n3e30158:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 0\n3380b83:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 1\n363caa9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 2\n\nproject 255c632..3e30158 (3 commits)\n3e30158:https://host-review.googlesource.com/c/prefix/project/+/12345 fake A msg 0\n3380b83:https://host-review.googlesource.com/c/prefix/project/+/12345 fake A msg 1\n363caa9:https://host-review.googlesource.com/c/prefix/project/+/12345 fake A msg 2\n\ncipd\nFrom git_revision:123\nTo git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\n\nvariable-cipd\nFrom git_revision:0000000000000000000000000000000000000000\nTo git_revision:397a2597cdc237f3026e6143b683be4b9ab60540\n\ntext.txt 255c632..3e30158 (3 commits)\n3e30158:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 0\n3380b83:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 1\n363caa9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 2\n\nvar.txt[FOO] 255c632..3e30158 (3 commits)\n3e30158:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 0\n3380b83:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 1\n363caa9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 2\n\ncopy.txt\nFrom\n    old\nTo\n    new\n\nstaging 255c632..3e30158 (3 commits)\n3e30158:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 0\n3380b83:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 1\n363caa9:https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12345 fake A msg 2\n\nfoo\nabc: changed\ndef: changed\nghi: changed\n\nRolled-Repo: https://foo.googlesource.com/submodule\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRolled-Repo: https://host.googlesource.com/prefix/project\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRolled-Repo: https://pigweed.googlesource.com/pigweed/pigweed\nRolled-Commits: 255c6325c4c654..3e30158f2a7cac\nRoll-Count: 11\nRoller-URL: https://cr-buildbucket.appspot.com/build/8945511751514863184\nCQ-Do-Not-Cancel-Tryjobs: true\nChange-Id: I28135185e8ac8c69d0b894c4be54ddbb0ea69d5c",
       "-a",
       "--no-verify"
     ],
@@ -8196,7 +8629,7 @@
       "--push-option",
       "nokeycheck",
       "https://pigweed.googlesource.com/pigweed/pigweed",
-      "HEAD:refs/for/main%l=Commit-Queue+1,hashtag=roll%2dbazel%2dcipd%2f$%7bplat%7d,hashtag=roll%2dbazel%2dgit,hashtag=roll%2dcipd,hashtag=roll%2dcopy%2etxt,hashtag=roll%2dfoo,hashtag=roll%2dproject,hashtag=roll%2dsubmodule,hashtag=roll%2dtext%2etxt,hashtag=roll%2dvar%2etxt%5bFOO%5d,hashtag=roll%2dvariable%2dcipd"
+      "HEAD:refs/for/main%l=Commit-Queue+1,hashtag=roll%2dbazel%2dcipd%2f$%7bplat%7d,hashtag=roll%2dbazel%2dgit,hashtag=roll%2dcipd,hashtag=roll%2dcopy%2etxt,hashtag=roll%2dfoo,hashtag=roll%2dproject,hashtag=roll%2dstaging,hashtag=roll%2dsubmodule,hashtag=roll%2dtext%2etxt,hashtag=roll%2dvar%2etxt%5bFOO%5d,hashtag=roll%2dvariable%2dcipd"
     ],
     "cwd": "[START_DIR]/co",
     "env": {
diff --git a/recipes/roller.expected/noop.json b/recipes/roller.expected/noop.json
index a0f1b89..2ecefc8 100644
--- a/recipes/roller.expected/noop.json
+++ b/recipes/roller.expected/noop.json
@@ -3569,6 +3569,123 @@
   },
   {
     "cmd": [],
+    "name": "staging"
+  },
+  {
+    "cmd": [
+      "git",
+      "ls-remote",
+      "--heads",
+      "https://pigweed.googlesource.com/pigweed/pigweed",
+      "staging"
+    ],
+    "env": {
+      "GIT_ADVICE": "0",
+      "GIT_CONFIG_COUNT": "3",
+      "GIT_CONFIG_KEY_0": "gc.auto",
+      "GIT_CONFIG_KEY_1": "gc.autoDetach",
+      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
+      "GIT_CONFIG_VALUE_0": "0",
+      "GIT_CONFIG_VALUE_1": "0",
+      "GIT_CONFIG_VALUE_2": "0"
+    },
+    "name": "staging.git ls-remote",
+    "timeout": 600.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@stdout@h3ll0\trefs/heads/staging@@@",
+      "@@@STEP_LOG_END@stdout@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "git",
+      "cherry",
+      "main",
+      "h3ll0"
+    ],
+    "cwd": "[START_DIR]/co",
+    "env": {
+      "GIT_ADVICE": "0",
+      "GIT_CONFIG_COUNT": "3",
+      "GIT_CONFIG_KEY_0": "gc.auto",
+      "GIT_CONFIG_KEY_1": "gc.autoDetach",
+      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
+      "GIT_CONFIG_VALUE_0": "0",
+      "GIT_CONFIG_VALUE_1": "0",
+      "GIT_CONFIG_VALUE_2": "0"
+    },
+    "name": "staging.git cherry",
+    "timeout": 300.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@@@",
+      "@@@STEP_LOG_LINE@raw_io.output_text@+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb@@@",
+      "@@@STEP_LOG_END@raw_io.output_text@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "rev-parse",
+      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~1"
+    ],
+    "cwd": "[START_DIR]/co",
+    "env": {
+      "GIT_ADVICE": "0",
+      "GIT_CONFIG_COUNT": "3",
+      "GIT_CONFIG_KEY_0": "gc.auto",
+      "GIT_CONFIG_KEY_1": "gc.autoDetach",
+      "GIT_CONFIG_KEY_2": "gc.autoPackLimit",
+      "GIT_CONFIG_VALUE_0": "0",
+      "GIT_CONFIG_VALUE_1": "0",
+      "GIT_CONFIG_VALUE_2": "0"
+    },
+    "name": "staging.git rev-parse",
+    "timeout": 300.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd_tool/infra/tools/luci/gitiles/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gitiles",
+      "log",
+      "-json-output",
+      "/path/to/tmp/json",
+      "-limit",
+      "500",
+      "https://pigweed.googlesource.com/pigweed/pigweed",
+      "..h3ll0"
+    ],
+    "infra_step": true,
+    "name": "staging.log staging",
+    "timeout": 300.0,
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@json.output@[]@@@",
+      "@@@STEP_LOG_END@json.output@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "staging.detected backwards roll",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_TEXT@Detected backwards roll: expected  to precede h3ll0 in git history@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "staging.output property",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@SET_BUILD_PROPERTY@staging@{\"remote\": \"https://pigweed.googlesource.com/pigweed/pigweed\", \"revision\": \"h3ll0\"}@@@"
+    ]
+  },
+  {
+    "cmd": [],
     "name": "nothing to roll",
     "~followup_annotations": [
       "@@@SET_BUILD_PROPERTY@_roll_count@0@@@",
diff --git a/recipes/roller.proto b/recipes/roller.proto
index 05bb170..bf46c7f 100644
--- a/recipes/roller.proto
+++ b/recipes/roller.proto
@@ -23,6 +23,7 @@
 import "recipe_modules/pigweed/cipd_roll/package.proto";
 import "recipe_modules/pigweed/copy_roll/copy_entry.proto";
 import "recipe_modules/pigweed/environment/options.proto";
+import "recipe_modules/pigweed/merge_roll/merge.proto";
 import "recipe_modules/pigweed/module_bazel_lock_roll/module_bazel_lock.proto";
 import "recipe_modules/pigweed/repo_roll/project.proto";
 import "recipe_modules/pigweed/run_script_roll/run_script_entry.proto";
@@ -64,53 +65,56 @@
   // Submodules to update.
   repeated recipe_modules.pigweed.submodule_roll.SubmoduleEntry submodules = 11;
 
+  // Branches to merge.
+  repeated recipe_modules.pigweed.merge_roll.MergeEntry merge_entries = 12;
+
   // Txt entries to update.
-  repeated recipe_modules.pigweed.txt_roll.TxtEntry txt_entries = 12;
+  repeated recipe_modules.pigweed.txt_roll.TxtEntry txt_entries = 13;
 
   // Variable entries to update.
-  repeated recipe_modules.pigweed.variable_roll.VariableEntry variable_entries = 13;
+  repeated recipe_modules.pigweed.variable_roll.VariableEntry variable_entries = 14;
 
   // Line of text to divide the commit header and body from the footers.
-  string commit_divider = 14;
+  string commit_divider = 15;
 
   // Forge the author so rolls of single commits are attributed to the original
   // commit author.
-  bool forge_author = 15;
+  bool forge_author = 16;
 
   // Auto roller module options.
-  recipe_modules.fuchsia.auto_roller.Options auto_roller_options = 16;
+  recipe_modules.fuchsia.auto_roller.Options auto_roller_options = 17;
 
   // Overrides for auto roller module options. Needed when rollers are launched
   // via the subbuild module, which does not have a mechanism to modify an
   // existing roller's auto_roller_options (only can overwrite it).
-  recipe_modules.fuchsia.auto_roller.Options override_auto_roller_options = 17;
+  recipe_modules.fuchsia.auto_roller.Options override_auto_roller_options = 18;
 
   // String to use after "roll: " in first line of commit message. Default is
   // to auto-generate from all the rolls that modified the checkout.
-  string header_override = 18;
+  string header_override = 19;
 
   // Footers to add to the commit message.
-  repeated string footer = 19;
+  repeated string footer = 20;
 
   // Amount of time to sleep after the roll completes but before the build
   // exits. This allows GoB backends to synchronize before the next roll is
   // triggered. See b/349681242 for more.
-  int32 post_roll_sleep_secs = 20;
+  int32 post_roll_sleep_secs = 21;
 
   // We assume that if a roller is triggered by the bisector it should be
   // dry-run. Then the post-attribution-roller-retrigger would launch a
   // non-dry-run once the bisector attributes the failure to a specific change.
   // Setting this disables this functionality.
-  bool dont_dry_run_in_bisection = 21;
+  bool dont_dry_run_in_bisection = 22;
 
   // If checking out a top-level repository but updating something in a
   // submodule or other nested repository, this is the path to that nested
   // repository.
-  string subdirectory = 22;
+  string subdirectory = 23;
 
   // Id of the multi_roller build that launched this builder, if applicable.
   // String because large ints don't always get preserved through JSON.
-  string parent_build_id = 23;
+  string parent_build_id = 24;
 
   // Whether to match the destination branch to the triggering branch. This is
   // useful for rollers of release branches where the downstream change is on
@@ -119,5 +123,5 @@
   // If this is set then auto_roller_options.upstream_ref,
   // override_auto_roller_options.upstream_ref, and checkout_options.branch will
   // be overwritten.
-  bool match_triggering_branch = 24;
+  bool match_triggering_branch = 25;
 }
diff --git a/recipes/roller.py b/recipes/roller.py
index 2d4954b..e6eda71 100644
--- a/recipes/roller.py
+++ b/recipes/roller.py
@@ -51,6 +51,7 @@
 from PB.recipe_modules.pigweed.bazel_roll.git_repository import GitRepository
 from PB.recipe_modules.pigweed.cipd_roll.package import Package
 from PB.recipe_modules.pigweed.copy_roll.copy_entry import CopyEntry
+from PB.recipe_modules.pigweed.merge_roll.merge import MergeEntry
 from PB.recipe_modules.pigweed.module_bazel_lock_roll.module_bazel_lock import (
     ModuleBazelLock,
 )
@@ -79,6 +80,7 @@
     'pigweed/cipd_roll',
     'pigweed/copy_roll',
     'pigweed/environment',
+    'pigweed/merge_roll',
     'pigweed/module_bazel_lock_roll',
     'pigweed/raw_result',
     'pigweed/repo_roll',
@@ -200,6 +202,12 @@
                 api.module_bazel_lock_roll.update(checkout, lock_entry),
             )
 
+        for merge_entry in props.merge_entries:
+            attempts += 1
+            rolls.extend(
+                api.merge_roll.merge(checkout, merge_entry),
+            )
+
         for run_script_entry in props.run_script_entries:
             attempts += 1
             rolls.extend(
@@ -343,6 +351,7 @@
         cipd_packages: SequenceOrScalar[Package] = (),
         cipd_variables: SequenceOrScalar[CipdVariableEntry] = (),
         copy_entries: SequenceOrScalar[CopyEntry] = (),
+        merge_entries: SequenceOrScalar[MergeEntry] = (),
         module_bazel_lock_entries: SequenceOrScalar[ModuleBazelLock] = (),
         repo_tool_projects: SequenceOrScalar[Project] = (),
         run_script_entries: SequenceOrScalar[RunScriptEntry] = (),
@@ -364,6 +373,7 @@
         props.cipd_packages.extend(ensure_list(cipd_packages))
         props.cipd_variables.extend(ensure_list(cipd_variables))
         props.copy_entries.extend(ensure_list(copy_entries))
+        props.merge_entries.extend(ensure_list(merge_entries))
         props.module_bazel_lock_entries.extend(
             ensure_list(module_bazel_lock_entries),
         )
@@ -413,6 +423,7 @@
                 variable='FOO',
             ),
             copy_entries=api.copy_roll.entry('copy.txt'),
+            merge_entries=api.merge_roll.entry('staging'),
             module_bazel_lock_entries=api.module_bazel_lock_roll.entry(),
             repo_tool_projects=api.repo_roll.project('project'),
             submodules=api.submodule_roll.entry('submodule'),
@@ -446,6 +457,7 @@
         api.step_data(
             'copy.txt.read source copy.txt', api.file.read_text('abc')
         ),
+        api.gitiles.log('staging.log staging', 'A', n=0),
         api.repo_roll.read_step_data('project'),
         api.gitiles.log('project.log project', 'A', n=0),
         api.submodule_roll.gitmodules(
@@ -625,6 +637,7 @@
                 variable='FOO',
             ),
             copy_entries=api.copy_roll.entry('copy.txt'),
+            merge_entries=api.merge_roll.entry('staging'),
             module_bazel_lock_entries=api.module_bazel_lock_roll.entry(),
             repo_tool_projects=api.repo_roll.project('project'),
             run_script_entries=api.run_script_roll.entry('script.sh'),
@@ -668,6 +681,12 @@
             'copy.txt.read source copy.txt', api.file.read_text('new')
         ),
         expected_roll('copy.txt', old='old', new='new'),
+        api.gitiles.log('staging.log staging', 'A'),
+        expected_roll(
+            'staging',
+            old='255c6325c4c654e17e6b35142e3912c86f1718f2',
+            new='3e30158f2a7caccb7a9f6632a60011e7a44e1e5c',
+        ),
         api.repo_roll.read_step_data('project'),
         api.gitiles.log('project.log project', 'A'),
         expected_roll(
@@ -699,6 +718,6 @@
         ),
         api.auto_roller.success(),
         api.post_check(post_process.MustRun, 'sleep 61'),
-        api.post_check(post_process.PropertyEquals, '_roll_count', 10),
+        api.post_check(post_process.PropertyEquals, '_roll_count', 11),
         # api.post_process(post_process.DropExpectation),
     )