blob: c9763ee3cec4329e29fd0f558e2bf38471346a4e [file] [log] [blame]
Tom Stellard7a6e6b12017-03-24 16:13:18 +00001# !/bin/bash
2#===-- merge-request.sh ---------------------------------------------------===#
3#
4# The LLVM Compiler Infrastructure
5#
6# This file is distributed under the University of Illinois Open Source
7# License.
8#
9#===------------------------------------------------------------------------===#
10#
11# Submit a merge request to bugzilla.
12#
13#===------------------------------------------------------------------------===#
14
15dryrun=""
16stable_version=""
Tom Stellard4d636682017-09-15 02:25:22 +000017revisions=""
Tom Stellard7a6e6b12017-03-24 16:13:18 +000018BUGZILLA_BIN=""
19BUGZILLA_CMD=""
20release_metabug=""
21bugzilla_product="new-bugs"
22bugzilla_component="new bugs"
23bugzilla_assigned_to=""
24bugzilla_user=""
25bugzilla_version=""
Tom Stellard59b664b2017-05-23 20:35:38 +000026bugzilla_url="https://bugs.llvm.org/xmlrpc.cgi"
Tom Stellard7a6e6b12017-03-24 16:13:18 +000027
28function usage() {
29 echo "usage: `basename $0` -user EMAIL -stable-version X.Y -r NUM"
30 echo ""
31 echo " -user EMAIL Your email address for logging into bugzilla."
32 echo " -stable-version X.Y The stable release version (e.g. 4.0, 5.0)."
33 echo " -r NUM Revision number to merge (e.g. 1234567)."
Tom Stellard4d636682017-09-15 02:25:22 +000034 echo " This option can be specified multiple times."
Tom Stellard7a6e6b12017-03-24 16:13:18 +000035 echo " -bugzilla-bin PATH Path to bugzilla binary (optional)."
36 echo " -assign-to EMAIL Assign bug to user with EMAIL (optional)."
37 echo " -dry-run Print commands instead of executing them."
38}
39
40while [ $# -gt 0 ]; do
41 case $1 in
42 -user)
43 shift
44 bugzilla_user="$1"
45 ;;
46 -stable-version)
47 shift
48 stable_version="$1"
49 ;;
50 -r)
51 shift
Tom Stellard4d636682017-09-15 02:25:22 +000052 revisions="$revisions $1"
Tom Stellard7a6e6b12017-03-24 16:13:18 +000053 ;;
54 -project)
55 shift
56 project="$1"
57 ;;
58 -component)
59 shift
60 bugzilla_component="$1"
61 ;;
62 -bugzilla-bin)
63 shift
64 BUGZILLA_BIN="$1"
65 ;;
66 -assign-to)
67 shift
68 bugzilla_assigned_to="--assigned_to=$1"
69 ;;
70 -dry-run)
71 dryrun="echo"
72 ;;
73 -help | --help | -h | --h | -\? )
74 usage
75 exit 0
76 ;;
77 * )
78 echo "unknown option: $1"
79 usage
80 exit 1
81 ;;
82 esac
83 shift
84done
85
86if [ -z "$stable_version" ]; then
87 echo "error: no stable version specified"
88 exit 1
89fi
90
91case $stable_version in
92 4.0)
93 release_metabug="32061"
94 ;;
Tom Stellard4d636682017-09-15 02:25:22 +000095 5.0)
96 release_metabug="34492"
97 ;;
Matt Arsenaultbb501522018-01-03 18:51:22 +000098 6.0)
Tom Stellard8019c4f2018-03-08 16:29:08 +000099 release_metabug="36649"
Matt Arsenaultbb501522018-01-03 18:51:22 +0000100 ;;
Tom Stellard70ae5432018-09-28 02:30:42 +0000101 7.0)
102 release_metabug="39106"
103 ;;
Tom Stellard18e41dc2019-03-29 03:37:22 +0000104 8.0)
105 release_metabug="41221"
106 ;;
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000107 *)
108 echo "error: invalid stable version"
109 exit 1
110esac
111bugzilla_version=$stable_version
112
Tom Stellard4d636682017-09-15 02:25:22 +0000113if [ -z "$revisions" ]; then
114 echo "error: no revisions specified"
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000115 exit 1
116fi
117
118if [ -z "$bugzilla_user" ]; then
119 echo "error: bugzilla username not specified."
120 exit 1
121fi
122
123if [ -z "$BUGZILLA_BIN" ]; then
124 BUGZILLA_BIN=`which bugzilla`
125 if [ $? -ne 0 ]; then
126 echo "error: could not find bugzilla executable."
127 echo "Make sure the bugzilla cli tool is installed on your system: "
128 echo "pip install python-bugzilla (recommended)"
129 echo ""
130 echo "Fedora: dnf install python-bugzilla"
131 echo "Ubuntu/Debian: apt-get install bugzilla-cli"
132 exit 1
133 fi
134fi
135
136BUGZILLA_MAJOR_VERSION=`$BUGZILLA_BIN --version 2>&1 | cut -d . -f 1`
137
138if [ $BUGZILLA_MAJOR_VERSION -eq 1 ]; then
139
Tom Stellard4d636682017-09-15 02:25:22 +0000140 echo "***************************** Error ** ********************************"
141 echo "You are using an older version of the bugzilla cli tool, which is not "
142 echo "supported. You need to use bugzilla cli version 2.0.0 or higher:"
143 echo "***********************************************************************"
144 exit 1
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000145fi
146
147BUGZILLA_CMD="$BUGZILLA_BIN --bugzilla=$bugzilla_url"
148
Tom Stellard4d636682017-09-15 02:25:22 +0000149rev_string=""
150for r in $revisions; do
151 rev_string="$rev_string r$r"
152done
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000153
154echo "Checking for duplicate bugs..."
155
Tom Stellard4d636682017-09-15 02:25:22 +0000156check_duplicates=`$BUGZILLA_CMD query --blocked=$release_metabug --field="cf_fixed_by_commits=$rev_string"`
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000157
158if [ -n "$check_duplicates" ]; then
159 echo "Duplicate bug found:"
160 echo $check_duplicates
161 exit 1
162fi
163
164echo "Done"
165
Tom Stellard4d636682017-09-15 02:25:22 +0000166# Get short commit summary. To avoid having a huge summary, we just
167# use the commit message for the first commit.
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000168commit_summary=''
Tom Stellard4d636682017-09-15 02:25:22 +0000169for r in $revisions; do
170 commit_msg=`svn log -r $r https://llvm.org/svn/llvm-project/`
171 if [ $? -ne 0 ]; then
172 echo "warning: failed to get commit message."
173 commit_msg=""
174 fi
175 break
176done
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000177
178if [ -n "$commit_msg" ]; then
179 commit_summary=`echo "$commit_msg" | sed '4q;d' | cut -c1-80`
180 commit_summary=" : ${commit_summary}"
181fi
182
Tom Stellard4d636682017-09-15 02:25:22 +0000183bug_summary="Merge${rev_string} into the $stable_version branch${commit_summary}"
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000184
Tom Stellard4d636682017-09-15 02:25:22 +0000185set -x
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000186
Tom Stellard4d636682017-09-15 02:25:22 +0000187# Login to bugzilla
188$BUGZILLA_CMD login $bugzilla_user
189
190bug_id=`${dryrun} $BUGZILLA_CMD --ensure-logged-in new \
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000191 -p "$bugzilla_product" \
Tom Stellard4d636682017-09-15 02:25:22 +0000192 -c "$bugzilla_component" --blocked=$release_metabug \
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000193 -o All --priority=P --arch All -v $bugzilla_version \
Tom Stellard4d636682017-09-15 02:25:22 +0000194 --field="cf_fixed_by_commits=$rev_string" \
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000195 --summary "${bug_summary}" \
Tom Stellard4d636682017-09-15 02:25:22 +0000196 -l "Is it OK to merge the following revision(s) to the $stable_version branch?" \
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000197 $bugzilla_assigned_to \
Tom Stellard4d636682017-09-15 02:25:22 +0000198 -i`
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000199
200if [ -n "$dryrun" ]; then
201 exit 0
202fi
203
Tom Stellard4d636682017-09-15 02:25:22 +0000204set +x
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000205
Tom Stellard4d636682017-09-15 02:25:22 +0000206if [ -z "$bug_id" ]; then
207 echo "Failed to create bug."
208 exit 1
Tom Stellard7a6e6b12017-03-24 16:13:18 +0000209fi
Tom Stellard4d636682017-09-15 02:25:22 +0000210
211echo " Created new bug:"
212echo https://llvm.org/PR$bug_id
213
214# Add links to revisions
215for r in $revisions; do
216 $BUGZILLA_CMD --ensure-logged-in modify -l "https://reviews.llvm.org/rL$r" $bug_id
217done