#!/bin/sh
#rebuild loaded or installed pfs
#VERSION 4.0
. $(which pfs)

#help
HLP(){
echo "Usage: $(basename "$0") <PACKAGE> <args for mkpfs>"
exit 1
}

case "$1" in
    "" | -h | --help)  HLP ;;
    "-"*[A-Za-z]*) echo "$(basename "$0"): invalid option -- $1" ; HLP ;;
esac

allow_only_root
package_name=$(basename ${1%.$EXT})
bundle=$(aufs-n --hidetop --raw '$bundle' |grep "$package_name" |tail -n1)
shift

fileslist="${PFSDIR}/install/${package_name}/pfs.files"
[ -f $fileslist ] || fileslist="${PFSDIR}/mount/${package_name}/pfs.files"
dirsempty=$(echo $fileslist | sed 's/pfs.files/pfs.dirs.empty/')

# find pfs files in pfs contaners
if [  -d ${prefixmp}${package_name}.${EXT}${PFSDIR}/mount/   -a ! -f $fileslist ] ; then
	package_list=$(ls ${bundle}${PFSDIR}/mount/)
	echo "$package_list"
	if [[ -n $package_list ]] ; then
		pfs_in_contaner=''
		for pack in $package_list ; do
			echo "pfsrebuild  "$pack" --nopfs"
			pfsrebuild  "$pack" --nopfs
			pfs_in_contaner="$pfs_in_contaner ./${pack%.$EXT}"
		done
		echo "mkpfs $pfs_in_contaner -o ${package_name}.$EXT $@"
		mkpfs $pfs_in_contaner -o ${package_name}.$EXT $@
		exitmsg "can't create contaner" $?
	else
		exitmsg "can't find packages" 4
	fi
exit
fi

if [ -f ${fileslist} -o ! -d "${bundle}${PFSDIR}/mount/ " ] ; then 
  buildir="./build_${package_name}/${package_name}"
  mkdir -p "$buildir"
  [ -f ${fileslist} ]  ||  mklist ${bundle} / ${package_name}
  tar -c -p --ignore-failed-read --no-recursion -T $fileslist  2>/dev/null | tar -x -p -C ${buildir}
  if [[ -f  ${dirsempty} ]] ; then
	cat $dirsempty | sed -e 's:^[^/]*::' -e 's:[\]:\\\\:g' | while read emptydir ; do
	#it is a hack to save owner and permissions for empty dirs
	cp -a --parents $emptydir/not_existing_filename ${buildir}/ 2>/dev/null
	done
  fi
  # --nopfs parameter - make build dir and exit 
  if echo "$@" | grep -q "\-nopfs" ; then 
	rm -rf ./${package_name} && mv -f ${buildir} ./
  else
	mkpfs  ${buildir} -o ${package_name}.$EXT $@
	exitmsg "can't create module" $?
  fi
  rm -rf ./build_${package_name}
  else
  echo "Package \"$package_name\" is not installed!" >&2; #exit 1
fi

exit 0
