#!/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 start=$(git tag -l 'v[0-9]*\.[0-9]*\.0' | tail -n 2 | head -n 1) fi if [ "x$end" = "x" ]; then end=$(git tag -l 'v[0-9]*\.[0-9]*\.0' | tail -n 1) 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\)/' bug_urls=$(git log $start..$end \ | sed -n '\,'"$urlstr"', s,\(.*\)\('"$urlstr"'\)\([0-9]*\).*,\2\4,p' \ | sort -u) 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 elif [ "$(uname)" = "Darwin" ]; then 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