#!/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
