| 
									
										
										
										
											2016-09-21 21:42:22 +02:00
										 |  |  | #!/bin/sh
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # This script checks the git log for URLs to the QEMU launchpad bugtracker | 
					
						
							|  |  |  | # and optionally checks whether the corresponding bugs are not closed yet. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | show_help () { | 
					
						
							|  |  |  |     echo "Usage:" | 
					
						
							|  |  |  |     echo "  -s <commit>  : Start searching at this commit" | 
					
						
							|  |  |  |     echo "  -e <commit>  : End searching at this commit" | 
					
						
							|  |  |  |     echo "  -c           : Check if bugs are still open" | 
					
						
							|  |  |  |     echo "  -b           : Open bugs in browser" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | while getopts "s:e:cbh" opt; do | 
					
						
							|  |  |  |    case "$opt" in | 
					
						
							|  |  |  |     s)  start="$OPTARG" ;; | 
					
						
							|  |  |  |     e)  end="$OPTARG" ;; | 
					
						
							|  |  |  |     c)  check_if_open=1 ;; | 
					
						
							|  |  |  |     b)  show_in_browser=1 ;; | 
					
						
							|  |  |  |     h)  show_help ; exit 0 ;; | 
					
						
							|  |  |  |     *)   echo "Use -h for help." ; exit 1 ;; | 
					
						
							|  |  |  |    esac | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [ "x$start" = "x" ]; then | 
					
						
							| 
									
										
										
										
											2018-10-15 17:17:36 +08:00
										 |  |  |     start=$(git tag -l 'v[0-9]*\.[0-9]*\.0' | tail -n 2 | head -n 1) | 
					
						
							| 
									
										
										
										
											2016-09-21 21:42:22 +02:00
										 |  |  | fi | 
					
						
							|  |  |  | if [ "x$end" = "x" ]; then | 
					
						
							| 
									
										
										
										
											2018-10-15 17:17:36 +08:00
										 |  |  |     end=$(git tag -l  'v[0-9]*\.[0-9]*\.0' | tail -n 1) | 
					
						
							| 
									
										
										
										
											2016-09-21 21:42:22 +02:00
										 |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [ "x$start" = "x" ] || [ "x$end" = "x" ]; then | 
					
						
							|  |  |  |     echo "Could not determine start or end revision ... Please note that this" | 
					
						
							|  |  |  |     echo "script must be run from a checked out git repository of QEMU." | 
					
						
							|  |  |  |     exit 1 | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo "Searching git log for bugs in the range $start..$end" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | urlstr='https://bugs.launchpad.net/\(bugs\|qemu/+bug\)/' | 
					
						
							| 
									
										
										
										
											2018-10-15 17:17:36 +08:00
										 |  |  | bug_urls=$(git log $start..$end \
 | 
					
						
							| 
									
										
										
										
											2016-09-21 21:42:22 +02:00
										 |  |  |   | sed -n '\,'"$urlstr"', s,\(.*\)\('"$urlstr"'\)\([0-9]*\).*,\2\4,p' \
 | 
					
						
							| 
									
										
										
										
											2018-10-15 17:17:36 +08:00
										 |  |  |   | sort -u) | 
					
						
							| 
									
										
										
										
											2016-09-21 21:42:22 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | echo Found bug URLs: | 
					
						
							|  |  |  | for i in $bug_urls ; do echo " $i" ; done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [ "x$check_if_open" = "x1" ]; then | 
					
						
							|  |  |  |     echo | 
					
						
							|  |  |  |     echo "Checking which ones are still open..." | 
					
						
							|  |  |  |     for i in $bug_urls ; do | 
					
						
							|  |  |  |         if ! curl -s -L "$i" | grep "value status" | grep -q "Fix Released" ; then | 
					
						
							|  |  |  |             echo " $i" | 
					
						
							|  |  |  |             final_bug_urls="$final_bug_urls $i" | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |     done | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     final_bug_urls=$bug_urls | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [ "x$final_bug_urls" = "x" ]; then | 
					
						
							|  |  |  |     echo "No open bugs found." | 
					
						
							|  |  |  | elif [ "x$show_in_browser" = "x1" ]; then | 
					
						
							|  |  |  |     # Try to determine which browser we should use | 
					
						
							|  |  |  |     if [ "x$BROWSER" != "x" ]; then | 
					
						
							|  |  |  |         bugbrowser="$BROWSER" | 
					
						
							|  |  |  |     elif command -v xdg-open >/dev/null 2>&1; then | 
					
						
							|  |  |  |         bugbrowser=xdg-open | 
					
						
							|  |  |  |     elif command -v gnome-open >/dev/null 2>&1; then | 
					
						
							|  |  |  |         bugbrowser=gnome-open | 
					
						
							| 
									
										
										
										
											2018-10-15 17:17:36 +08:00
										 |  |  |     elif [ "$(uname)" = "Darwin" ]; then | 
					
						
							| 
									
										
										
										
											2016-09-21 21:42:22 +02:00
										 |  |  |         bugbrowser=open | 
					
						
							|  |  |  |     elif command -v sensible-browser >/dev/null 2>&1; then | 
					
						
							|  |  |  |         bugbrowser=sensible-browser | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         echo "Please set the BROWSER variable to the browser of your choice." | 
					
						
							|  |  |  |         exit 1 | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  |     # Now show the bugs in the browser | 
					
						
							|  |  |  |     first=1 | 
					
						
							|  |  |  |     for i in $final_bug_urls; do | 
					
						
							|  |  |  |         "$bugbrowser" "$i" | 
					
						
							|  |  |  |         if [ $first = 1 ]; then | 
					
						
							|  |  |  |             # if it is the first entry, give the browser some time to start | 
					
						
							|  |  |  |             # (to avoid messages like "Firefox is already running, but is | 
					
						
							|  |  |  |             # not responding...") | 
					
						
							|  |  |  |             sleep 4 | 
					
						
							|  |  |  |             first=0 | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |     done | 
					
						
							|  |  |  | fi |