#!/bin/bash

if [ $# = 0 -o `id -u` != 0 ] || [[ "$1" == -* ]]; then
	echo "Utility to add Ubuntu PPA in your Debian machine"
	echo "usage: sudo ${0##*/} ppa:user/ppa-name [ubuntu_release]"
	echo "e.g.:  sudo ${0##*/} ppa:ubuntu-wine/ppa"
	echo "or:    sudo ${0##*/} ubuntu-wine"
	exit 1
fi

ppa=${1#ppa:}
ubuntu_release=${2:-trusty}
[[ "$ppa" == */* ]] || ppa=$ppa/ppa
ppa_user="${ppa%%/*}" ppa_archive="${ppa#*/}"
sources_list="/etc/apt/sources.list.d/ppa_${ppa_user}_${ppa_archive}.list"
echo "ppa:$ppa_user/$ppa_archive $ubuntu_release  ->  $sources_list"

(
set -e
set -o pipefail

ppa_key() {
	ppa_user="$1" ppa_archive="$2"
	curl -s "https://launchpad.net/~$ppa_user/+archive/$ppa_archive" |
	perl -ne 'm{<dl id="signing-key">}..m{</dl>} and m{<code>(.*?)</code>} and $1 =~ m{/(.*)} and print "$1\n"'
}

key=`ppa_key "$ppa_user" "$ppa_archive"`
if [ -z "$key" ]; then echo >&2 "ppa not found"; exit 1; fi
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys "$key"

echo "deb http://ppa.launchpad.net/$ppa_user/$ppa_archive/ubuntu $ubuntu_release main" \
  >"$sources_list"

apt-get update
)

[ "$?" = 0 ] && echo ok || echo fail
