#! /bin/sh
# Package Repack - @2000 by Antonio Gallo
# agx@linux.it - www.badpenguin.org - www.linux.it/~agx
# 11 Sep 2000, This script is used to rebuild a .bpp package
#              using his port directory but taking modified
#              files from the root filesystem

##### =====================      tools    =========================  #####
. /usr/local/libexec/package-library
MYVERSION="2.2.0"

##### =====================   fn_package_pack          =========================  #####

fn_package_pack() {
  #echoc CYAN "(*) packing files from filesystem"
  # Check changelist  
  if grep -q "^#" $CHANGELIST ; then
    echoc RED "! please remove ANY comments from $CHANGELIST, then try it again"
    exit 1
  fi
  # Pack
  echo -n "> analizyng the packing list: (1)"
  cat $CHANGELIST | grep -v "^install" | grep -v "^incoming" >${CHANGELIST}.temp1
  echo -n "(2)"
  cat $CHANGELIST | grep "^incoming/" | cut -b 10- >>${CHANGELIST}.temp1
  rm -f ${CHANGELIST}.temp3
  >${CHANGELIST}.temp2
  echo -n "(3)"
  RETCODE=0
  cat ${CHANGELIST}.temp1 | while read CFILE ; do
    if [ ! -d "/$CFILE" ]; then
      if [ -e "/$CFILE" ]; then
        echo "/$CFILE" >>${CHANGELIST}.temp2
      else
        # DOES NOT EXISTS ... try to zip
	case $CFILE in
	  *.gz)
            BASENAME="/`dirname $CFILE`/`basename $CFILE .gz`"
            if [ -f $BASENAME ]; then
              echoc YELLOW "> compressing $BASENAME"
              gzip -9 $BASENAME
            fi
            ;;
	  *)
	    ;;
        esac
        if [ -e "/$CFILE" ]; then
          continue
        fi
	# SORRY ... i have to give up
        echoc YELLOW "! /$CFILE does not exists !"
	touch ${CHANGELIST}.temp3
	RETCODE=1
      fi
    fi
  done
  if [ "$RETCODE" = "1" ]; then
    echoc RED "! cannot continue with errors"
    exit 1
  fi
  echo " done."
  # Check for any error
  if [ -f ${CHANGELIST}.temp3 ]; then
    echoc RED "! cannot continue with missed files"
    exit 1
  fi
  #  
  echo "> gathering files from the root filesystem ..."
  tar -O -p -T ${CHANGELIST}.temp2 -c | tar -x -p -C $PKGROOT
  if [ $? -ne 0 ]; then
    echoc RED "! error while gathering files from the filesystem"
    exit 1
  fi
  rm -f ${CHANGELIST}.temp1 ${CHANGELIST}.temp2 ${CHANGELIST}.temp3
}


##### =====================   M  A  I  N   =========================  #####

# Banner
echo "======================================================================"
echoc CYAN  "Bad Penguin - Package RePack $MYVERSION"
echo "======================================================================"

# Check Parameters
if [ "$1" = "" ]; then
  echoc RED "package-repack: need at least 1 argument !"
  exit 1
fi

# Define package subdirs
fn_read_settings $1
fn_read_pkginfo
fn_check_pkgdir

# Check CHangelist
if [ "$2" = "" ]; then
  CHANGELIST="$PKGINST/MANIFEST"
else
  CHANGELIST="$2"
fi
if [ ! -e $CHANGELIST ]; then
  echoc RED "! $CHANGELIST does not exists, unable to continue"
  exit 1
fi

# Globals
fn_package_pack
fn_run_customize
if [ "$3" != "nobuild" ]; then
  exec package-build "$1" "norepack"
fi
echoc GREEN "- repack ok"
exit 0
