#!/bin/bash
declare -a oldlist newlist dtulist
declare -i numallpatches

add_dtu_upgrade () {
  let "numallpatches+=1"
  oldlist[numallpatches]=$1
  newlist[numallpatches]=$2
  dtulist[numallpatches]=$3
}

try_dtu_upgrade () {
  if [ -f $3 ]; then
    add_dtu_upgrade $1 $2 $3
  else
    echo "removing $3" >&2
  fi
}

add_dtuline () {
  patch=$1
  output=`edelta -pi $patch`
  if [ ! -z "$output" ]; then
    fname1=${output% -> *}
    output=${output#* -> }
    fname2=${output%:*}
    if [ "${patch##*.}" = "dtu" ]; then
      add_dtu_upgrade $fname1 $fname2 $patch
    fi
#    if [ "${patch##*.}" = "fdtu" ] &&
#       [ "${patch%.*}" = "${fname1%.t*}" ]; then
#      add_dtu_upgrade $fname1 $fname2 $patch
#      exit
#    fi 
    
#    if [ "${patch##*.}" = "bdtu" ] &&
#       [ "${patch%.*}" = "${fname1%.t*}" ]; then
#      add_dtu_upgrade $fname1 $fname2 $patch
#      exit
#    fi
  fi
}


if [ -z $1 ]; then
  while read format option1 option2 option3
  do
    case $format in
      "0")
    	  try_dtu_upgrade $option1 $option2 $option3
	  ;;
      "1")
    	  try_dtu_upgrade $option1 $option2 ${option1%.t*}.fdtu
	  ;;
      "2")
    	  try_dtu_upgrade $option2 $option1 ${option2%.t*}.bdtu
	  ;;
    esac
  done
  for j in *dtu; do
    unset found
    for i in $(seq $numallpatches); do
      if [ "$j" = "${dtulist[i]}" ]; then found="yes"; fi
    done
    if [ -z $found ]; then 
      echo "adding $j" >&2
      add_dtuline $j
    fi
  done

else for patch in $*; do
  add_dtuline $patch
done
fi

for i in $(seq $numallpatches); do
  patch=${dtulist[i]}
  if [ "${patch##*.}" = "bdtu" ]; then  
    echo "2 ${newlist[i]} ${oldlist[i]}"
  fi
  if [ "${patch##*.}" = "fdtu" ]; then  
    echo "1 ${oldlist[i]} ${newlist[i]}"
  fi
  if [ "${patch##*.}" = "dtu" ]; then  
    echo "0 ${oldlist[i]} ${newlist[i]} $patch"
  fi
done


syntax highlighted by Code2HTML, v. 0.9.1