#!/bin/bash # # get-bug-attachments # Morgan Deters # Wed, 26 Sep 2012 09:40:10 -0400 # if [ $# -lt 1 ]; then echo "usage: `basename $0` bugids.." >&2 exit 1 fi while [ $# -gt 0 ]; do bugid="$1" shift function webcat { if which wget &>/dev/null; then wget -O - "$1" elif which curl &>/dev/null; then curl "$1" else echo "Please install wget or curl." >&2; exit 1 fi } function webget { if which wget &>/dev/null; then tmpfile="$(mktemp get_bug_attach.$$.XXXXXXXX)" filename="$(wget -qS -O "$tmpfile" "$1" 2>&1 | grep 'Content-disposition: attachment' | sed 's,.*filename="\(.*\)".*,\1,')" ext="$(echo "$filename" | sed 's,.*\.\(.*\),\1,')" if [ -e "$2.$ext" ] && ! diff -q "$tmpfile" "$2.$ext" &>/dev/null; then c=a while [ -e "$2$c.$ext" ] && ! diff -q "$tmpfile" "$2$c.$ext" &>/dev/null; do c=$(echo $c | tr a-y b-z) done mkdir -p "$(dirname "$2")" mv "$tmpfile" "$2$c.$ext" echo "$2$c.$ext" else mkdir -p "$(dirname "$2")" mv "$tmpfile" "$2.$ext" echo "$2.$ext" fi elif which curl &>/dev/null; then tmpfile="$(mktemp get_bug_attach.$$.XXXXXXXX)" filename="$(curl --head "$1" 2>&1 | grep 'Content-disposition: attachment' | sed 's,.*filename="\(.*\)".*,\1,')" curl "$1" >"$tmpfile" 2>/dev/null ext="$(echo "$filename" | sed 's,.*\.\(.*\),\1,')" if [ -e "$2.$ext" ] && ! diff -q "$tmpfile" "$2.$ext" &>/dev/null; then c=a while [ -e "$2$c.$ext" ] && ! diff -q "$tmpfile" "$2$c.$ext" &>/dev/null; do c=$(echo $c | tr a-y b-z) done mkdir -p "$(dirname "$2")" mv "$tmpfile" "$2$c.$ext" echo "$2$c.$ext" else mkdir -p "$(dirname "$2")" mv "$tmpfile" "$2.$ext" echo "$2.$ext" fi else echo "Please install wget or curl." >&2; exit 1 fi } count=0 for attachment in $(\ webcat "http://church.cims.nyu.edu/bugs/show_bug.cgi?id=$bugid" 2>/dev/null \ | grep ' href="attachment.cgi?id=[0-9][0-9]*' \ | sed 's,.* href="attachment.cgi?id=\([0-9][0-9]*\).*,\1,' \ | sort -nu); do let count++ printf "%-30s " "Downloading attachment $attachment..." webget "http://church.cims.nyu.edu/bugs/attachment.cgi?id=$attachment" "test/regress/regress0/bug$bugid" done if [ $count -eq 0 ]; then echo "There are no bug attachments for bug #$bugid." else s=s [ $count -eq 1 ] && s= echo "Downloaded $count bug attachment$s for bug #$bugid." fi done