HOWTO populate the integration branch » History » Version 11
Loïc Dachary, 04/17/2015 08:07 AM
1 | 3 | Loïc Dachary | Before a backported commit can be merged into the release branch, it must be tested in an integration branch. It serves two purposes: |
---|---|---|---|
2 | |||
3 | * Detect trivial problems that would break the upgrade tests run on the release branch (they are run at the tip of the branch, not at the latest point release) |
||
4 | * Do not pollute the release branch with reverted commits (because it cannot be rebased) |
||
5 | 1 | Loïc Dachary | |
6 | 11 | Loïc Dachary | Let say the release to be tested is *$release* (i.e. giant for instance) and your local clone has two remotes: *origin* which is your read/write fork of the official ceph repository and *ceph* which is the read only official ceph repository. |
7 | <pre> |
||
8 | ceph https://github.com/ceph/ceph.git (fetch) |
||
9 | ceph https://github.com/ceph/ceph.git (push) |
||
10 | origin git@github.com:dachary/ceph.git (fetch) |
||
11 | origin git@github.com:dachary/ceph.git (push) |
||
12 | </pre> |
||
13 | 1 | Loïc Dachary | |
14 | 11 | Loïc Dachary | * Create a $release-backport branch locally if it does not already exists: *git checkout -b $release-backports ceph/$release* |
15 | * Reset it to ceph/$release: *git reset --hard ceph/$release* |
||
16 | * Fetch all pull requests from github. Each pull request XXX has its own branch in the official ceph repository, named *pull/XXX* |
||
17 | ** Retrieve the commits of the pull request XXX: *git fetch --force ceph +refs/pull/XXX/head:refs/remotes/ceph/pull/XXX/head* |
||
18 | ** Merge the pull request in the local integration branch. The *--no-ff* ensures that even if the merge commit could be skipped, it will not be. *git merge --no-ff -m "$(echo -e "Merge XXX: $title\n\nReviewed-by: Myself <me@me.com>")" ceph/pull/XXX/head* |
||
19 | * Modify the pull requests individually to fix merge conflicts (i.e. they must merge cleanly, which may involving aggregating two pull requests into a single one designed to properly resolve the conflict). |
||
20 | * Push the integration branch to github: *git push --force origin $release-backports* |
||
21 | * Verify the integration branch compiles and passes make check |
||
22 | ** On the local machine: *./run-make-check.sh* |
||
23 | ** Via the make check bot by creating a pull request with the $release-backports* integration branch |
||
24 | * Push the integration branch to the official repository: *git push --force ceph $release-backports* (requires write permission to the ceph repository) |
||
25 | |||
26 | 1 | Loïc Dachary | The following snippet can help |
27 | 9 | Loïc Dachary | <pre> |
28 | 10 | Loïc Dachary | release=hammer |
29 | 1 | Loïc Dachary | PRS="3963 4185" |
30 | 10 | Loïc Dachary | reviewer='Loic Dachary <ldachary@redhat.com>' |
31 | git checkout -b $release-backport ceph/$release |
||
32 | git reset --hard ceph/$release |
||
33 | 9 | Loïc Dachary | git fetch --force ceph $(for ref in $PRS ; do echo +refs/pull/$ref/head:refs/remotes/ceph/pull/$ref/head ; echo +refs/pull/$ref/merge:refs/remotes/ceph/pull/$ref/merge ; done) |
34 | 11 | Loïc Dachary | for pr in $PRS ; do eval title=$(curl --silent https://api.github.com/repos/ceph/ceph/pulls/$pr | jq .title) ; echo $title ; git log --oneline ceph/pull/$pr/merge^1..ceph/pull/$pr/merge^2 ; git merge --no-ff -m "$(echo -e "Merge $pr: $title\n\nReviewed-by: $reviewer")" ceph/pull/$pr/head ; done |
35 | git push --force origin $release-backports |
||
36 | 1 | Loïc Dachary | </pre> |