From 40768c36887bb33ab41ed16d4eac7226a5aa7dac Mon Sep 17 00:00:00 2001 From: Tiago Melo Date: Tue, 4 Jun 2019 12:28:26 +0100 Subject: [PATCH] script/ceph-backport.sh: Add prepare function Add a new flag, --prepare, that when used will fetch all necessary info and cherrypick all original commits automatically. It will also prevent the main code to be executed. After running with --prepare, and if there were no conflicts, you can simply remove the flag from the command and run the script again. This time it will run the main code and create the PR and update the backport issue. p.e.: ceph-backport.sh 19206 jewel --prepare ceph-backport.sh 19206 jewel Signed-off-by: Tiago Melo --- src/script/ceph-backport.sh | 55 +++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/src/script/ceph-backport.sh b/src/script/ceph-backport.sh index e40c7559ab619..9d680ebab3d8c 100755 --- a/src/script/ceph-backport.sh +++ b/src/script/ceph-backport.sh @@ -31,17 +31,19 @@ # # Once you have the actual values for the above variables, create a file # $HOME/bin/backport_common.sh with the following contents -# +# # redmine_key=[your_redmine_key] # redmine_user_id=[your_redmine_user_id] # github_token=[your_github_personal_access_token] # github_user=[your_github_username] # -# You can also optionally add the remote repo's name in this file, like +# You can also optionally add yours and ceph remote repo's name in this file, +# like # # github_repo=[your_github_repo_name] +# ceph_repo=[ceph_github_repo_name] # -# If you don't add it, it will default to "origin". +# If you don't add it, it will default to "origin" and "upstream", respectively. # # Obviously, since this file contains secrets, you should protect it from # exposure using all available means (restricted file privileges, encrypted @@ -58,6 +60,13 @@ # http://tracker.ceph.com/issues/19206 (a jewel backport) # becomes something like this: # +# For simple backports you can just run: +# +# ceph-backport.sh 19206 jewel --prepare +# ceph-backport.sh 19206 jewel +# +# alternatively, you can prepare the backport manually: +# # git remote add ceph http://github.com/ceph/ceph.git # git fetch ceph # git checkout -b wip-19206-jewel ceph/jewel @@ -84,10 +93,11 @@ test "$redmine_user_id" || failed_required_variable_check redmine_user_id test "$github_token" || failed_required_variable_check github_token test "$github_user" || failed_required_variable_check github_user : "${github_repo:=origin}" +: "${ceph_repo:=upstream}" function usage () { echo "Usage:" - echo " $0 [BACKPORT_TRACKER_ISSUE_NUMBER] [MILESTONE]" + echo " $0 [BACKPORT_TRACKER_ISSUE_NUMBER] [MILESTONE] [--prepare]" echo echo "Example:" echo " $0 19206 jewel" @@ -132,7 +142,42 @@ then fi title=$(curl --silent 'http://tracker.ceph.com/issues/'$issue.json?key=$redmine_key | jq .issue.subject | tr -d '\\"') -echo "Issue title: $title" +echo "Issue title: $title" + +function prepare () { + related_issue=$(curl --silent http://tracker.ceph.com/issues/$issue.json?include=relations | + jq '.issue.relations[] | select(.relation_type | contains("copied_to")) | .issue_id') + [ -z "$related_issue" ] && echo "Could not find original issue." && return 1 + echo "Original issue: $related_issue" + + pr=$(curl --silent http://tracker.ceph.com/issues/$related_issue.json | + jq '.issue.custom_fields[] | select(.id | contains(21)) | .value' | + tr -d '\\"') + [ -z "$pr" ] && echo "Could not find PR." && return 1 + echo "Original PR: $pr" + + number=$(curl --silent 'https://api.github.com/repos/ceph/ceph/pulls/'$pr | jq .commits) + [ -z "$number" ] && echo "Could not determine the number of commits." && return 1 + echo "Found $number commit(s)" + + git fetch $ceph_repo + echo "fetch latest $milestone branch." + + git checkout $ceph_repo/$milestone -b wip-$issue-$milestone + + git fetch $ceph_repo pull/$pr/head:pr-$pr + + git cherry-pick -x pr-$pr~$number..pr-$pr + echo "cherry picked pr-$pr into wip-$issue-$milestone" + + exit 0 +} + +if [[ $* == *--prepare* ]] +then + echo "'--prepare' found, will only prepare the backport" + prepare +fi git push -u $github_repo wip-$issue-$milestone -- 2.39.5