| # Branching Perfetto for Chrome milestones |
| |
| Merging a (set of) Perfetto change(s) to a Chrome milestone release requires |
| creation of a branch in the perfetto repo, cherry-picking of the change(s) to |
| the branch, and updating the `DEPS` file in Chrome's milestone branch to point |
| to the new perfetto branch's head. |
| |
| ## Creating the perfetto branch {#branch} |
| |
| 1. Determine the branch name: **`chromium/XXXX`**, where `XXXX` is the branch |
| number of the milestone (see |
| [Chromium Dash](https://chromiumdash.appspot.com/branches)). Example for |
| M87: `chromium/4280`. |
| |
| 1. Check if the branch already exists: if yes, skip to |
| [cherry-picking](#all-tables). To check, you can search for it in |
| [Gerrit's branch page](https://android-review.googlesource.com/admin/repos/platform/external/perfetto,branches). |
| |
| 1. Look up the appropriate base revision for the branch. You should use the |
| revision that Chromium's `DEPS` of the milestone branch points to (search |
| for `perfetto` in the file). The `DEPS` file for branch XXXX is at: |
| |
| `https://chromium.googlesource.com/chromium/src.git/+/refs/branch-heads/XXXX/DEPS` |
| |
| Example for M87: |
| [`DEPS`](https://chromium.googlesource.com/chromium/src.git/+/refs/branch-heads/4280/DEPS) |
| (at time of writing) points to `f4cf78e052c9427d8b6c49faf39ddf2a2e236069`. |
| |
| 1. Create the branch - the easiest way to do this is via |
| [Gerrit's branch page](https://android-review.googlesource.com/admin/repos/platform/external/perfetto,branches). |
| The `NEW BRANCH` button on the top right opens a wizard - fill in the branch |
| name and base revision determined above. If this fails with a permission |
| issue, contact the [Discord chat](https://discord.gg/35ShE3A) or |
| [perfetto-dev](https://groups.google.com/forum/#!forum/perfetto-dev) mailing |
| list. |
| |
| ## Cherry-picking the change(s) {#cherry-pick} |
| |
| 1. If there are no merge conflicts, cherry-picking via Gerrit will be easiest. |
| To attempt this, open your change in Gerrit and use the `Cherry pick` entry |
| in the overflow menu on the top right, providing the `chromium/XXXX` branch |
| name (see [above](#branch)). |
| |
| 1. Otherwise, merge the patch locally into a branch tracking |
| `origin/chromium/XXXX` and upload a Gerrit change as usual: |
| |
| ``` |
| $ git fetch origin |
| $ git checkout -tb cpick origin/chromium/XXXX |
| $ git cherry-pick -x <commit hash> # Resolve conflicts manually. |
| $ tools/gen_all out/xxx # If necessary. |
| $ git cl upload # Remove "Change-Id:" lines from commit message. |
| ``` |
| |
| 1. Send the patch for review and land it. Note the commit's revision hash. |
| |
| ## Updating the DEPS file in Chromium |
| |
| 1. Create, send for review, and land a Chromium patch that edits the top-level |
| `DEPS` file on the Chromium's milestone branch. You can also combine this |
| step with cherry-picks of any chromium changes. For details, see |
| [Chromium's docs](https://www.chromium.org/developers/how-tos/drover). It |
| amounts to: |
| |
| ``` |
| $ gclient sync --with_branch_heads |
| $ git fetch |
| $ git checkout -tb perfetto_uprev refs/remotes/branch-heads/XXXX |
| $ ... # Edit DEPS. |
| $ git cl upload |
| ``` |