#!/bin/sh
# TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
# repack - TazPkg module
# Create SliTaz package archive from an installed package

. /lib/libtaz.sh
. /usr/libexec/tazpkg/getenv
unset EXTRAVERSION; . "$INSTALLED/$1/receipt"
title 'Repacking "%s"' "$PACKAGE-$VERSION$EXTRAVERSION.tazpkg"
if grep -qs ^NO_REPACK= "$INSTALLED/$PACKAGE/receipt"; then
_ "Can't repack package \"%s\"" "$PACKAGE"
exit 1
fi
if [ -s "$INSTALLED/$PACKAGE/modifiers" ]; then
_ "Can't repack, \"%s\" files have been modified by:" "$PACKAGE"
sed 's|.*|  \0|' "$INSTALLED/$PACKAGE/modifiers"
exit 1
fi
MISSING=''
while read i; do
[ -e "$i" ] && continue
[ -L "$i" ] || MISSING="$MISSING\n  $i"
done < "$INSTALLED/$PACKAGE/files.list"
if [ -n "$MISSING" ]; then
_n "Can't repack, the following files are lost:"
echo -e "$MISSING"
exit 1
fi
TMP_DIR=$(mktemp -d)
cd "$TMP_DIR"
FILES="fs.cpio.lzma\n"
for i in $(ls "$INSTALLED/$PACKAGE"); do
case $i in
volatile.cpio.gz|modifiers);;
*) cp "$INSTALLED/$PACKAGE/$i" .; FILES="$FILES$i\n";;
esac
done
ln -s / rootfs
mkdir tmp
sed 's/^/rootfs/' < files.list | cpio -o -H newc --quiet | \
{ cd tmp ; cpio -idm --quiet >/dev/null; cd ..; }
mv tmp/rootfs fs
if [ -f  "$INSTALLED/$PACKAGE/volatile.cpio.gz" ]; then
zcat "$INSTALLED/$PACKAGE/volatile.cpio.gz" | \
{ cd fs; cpio -idm --quiet; cd ..; }
fi
if fgrep -q repack_cleanup "$INSTALLED/$PACKAGE/receipt"; then
. "$INSTALLED/$PACKAGE/receipt"
repack_cleanup fs
fi
if [ -f "$INSTALLED/$PACKAGE/$CHECKSUM" ]; then
sed 's,  ,  fs,' < "$INSTALLED/$PACKAGE/$CHECKSUM" | $CHECKSUM -s -c || {
_ "Can't repack, %s error." "$CHECKSUM"
cd "$TOP_DIR"
rm -rf "$TMP_DIR"
exit 1
}
fi
find fs | cpio -o -H newc --quiet | lzma e fs.cpio.lzma -si
echo -e "$FILES" | cpio -o -H newc --quiet > "$TOP_DIR/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg"
cd "$TOP_DIR"
_ 'Package "%s" repacked successfully.' "$PACKAGE"
_ 'Size: %s' "$(du -sh "$PACKAGE-$VERSION$EXTRAVERSION.tazpkg")"
newline
