#!/bin/bash
if [ -z "$2" ]; then
  echo "must pass at least two options: download link and destination"
  exit;
fi

dofetch() {
  COMMAND=${1//'${URI}'/$2}
  COMMAND=${COMMAND//'${DISTDIR}'/$3}
  $COMMAND
}

PATCHMIRROR=$3
FILETOGET=`basename $1`
PACKAGE_FETCHCOMMAND=${PACKAGE_FETCHCOMMAND:-'/usr/bin/wget -t 5 --passive-ftp ${URI} -P ${DISTDIR}'}
PATCH_FETCHCOMMAND=${PATCH_FETCHCOMMAND:-$PACKAGE_FETCHCOMMAND}
PATCH_RESUMECOMMAND=${PATCH_RESUMECOMMAND:-$RESUMECOMMAND}
PACKAGE_PATH=${PACKAGE_PATH:-$2}
PORTDIR=${PORTDIR:-/usr/portage}
DTULISTDIR=${DTULISTDIR:-$PORTDIR/profiles}
GENTOO_MIRROR=${1%/distfiles*}
GENTOO_PATCH_MIRRORS=${GENTOO_PATCH_MIRRORS:-$GENTOO_MIRRORS}
export PACKAGE_FETCHCOMMAND PATCH_FETCHCOMMAND PATCH_RESUMECOMMAND PACKAGE_PATH

for i in $PACKAGE_PATH; do
  if [ -f $i/$FILETOGET ]; then
    echo "found file in $i - copying to $2"
    cp $i/$FILETOGET $2/$FILETOGET
    exit;
  fi
done

for FIRST_GENTOO_MIRROR in $GENTOO_MIRRORS; do break; done
if [ $GENTOO_MIRROR == $FIRST_GENTOO_MIRROR ]; then
  if [ -f $PORTDIR/profiles/dtu.list ]; then 
    for mirror in $GENTOO_PATCH_MIRRORS; do
      cat $PORTDIR/profiles/dtu.list | fetchpatch $mirror/patchfiles/$FILETOGET $2
      if [ $? -eq 0 ]; then exit; fi
    done
  fi

  if [ ! -z $PATCHMIRROR ]; then
    if [ ! $DTULISTDIR == "$PORTDIR/profiles" ] &&
       [ ! "`find $DTULISTDIR/dtu.list.aux -mtime 0`" == "$DTULISTDIR/dtu.list.aux" ]; then
      rm $DTULISTDIR/dtu.list.aux
    fi
  
    if [ ! -f "$DTULISTDIR/dtu.list.aux" ]; then
      dofetch "$PATCH_FETCHCOMMAND" $PATCHMIRROR/dtu.list.aux $DTULISTDIR
    fi
    
    fetchpatch $PATCHMIRROR/$FILETOGET $2 < $DTULISTDIR/dtu.list.aux
    if [ $? -eq 0 ]; then 
      exit; 
    else
      echo "Trying full download"
    fi
  fi
fi
dofetch "$PACKAGE_FETCHCOMMAND" $1 $2


syntax highlighted by Code2HTML, v. 0.9.1