#!/bin/sh
# Assemble ~/Downloads/PsionLinux-netBookPro/dist for the RetroTechCollection
# archive. Everything except the project's own .md docs, restructured.
set -e
P=~/Downloads/PsionLinux-netBookPro
D=$P/PsionLX

# The 42 README.txt files in the release are HAND-WRITTEN, one per folder, and
# nothing here regenerates them. Stash them before rebuilding the tree and put
# them back afterwards, or a re-run silently throws away the documentation.
# The four top-level documents are hand-written too.
STASH=$(mktemp -d)
if [ -d "$D" ]; then
  ( cd "$D" && find . -name 'README*.txt' -o -name 'WHAT-IS-EVERYTHING.txt' \
                  -o -name 'AS-PHOTOGRAPHED.txt' ) | while read f; do
    mkdir -p "$STASH/$(dirname "$f")"
    cp -p "$D/$f" "$STASH/$f"
  done
  echo "== stashed $(find "$STASH" -type f | wc -l | tr -d ' ') hand-written documents"
fi

rm -rf "$D"
mkdir -p "$D"

R() { rsync -a --exclude='.DS_Store' "$@"; }

echo "== 1-IMAGES"
mkdir -p "$D/1-IMAGES"
R "$P/PsionLX-CF-kit/psionlx-cf-1gb.img"                 "$D/1-IMAGES/"
R "$P/PsionLX-CF-kit/psionlx-cf-1gb-asphotographed.img"  "$D/1-IMAGES/"

echo "== 2-WINDOWS-CE-RESTORE"
mkdir -p "$D/2-WINDOWS-CE-RESTORE/boost-scripts"
R "$P/nbpce-404-int-20051129.zip" "$D/2-WINDOWS-CE-RESTORE/"
for s in stepA-dump stepB-repartition-540 step2-upgrade psionlx-autoboot; do
  R "$P/CE-RESTORE-CARD/$s" "$D/2-WINDOWS-CE-RESTORE/boost-scripts/"
done
# step1-repartition is DELIBERATELY NOT COPIED: it carries "nand partition 7e8",
# which is wrong for 32 MB hardware and leaves the machine unable to boot CE.

echo "== 3-PSION-SOURCES"
mkdir -p "$D/3-PSION-SOURCES/extracted-source-trees" \
         "$D/3-PSION-SOURCES/original-images" \
         "$D/3-PSION-SOURCES/upstream-tarballs" \
         "$D/3-PSION-SOURCES/recovered"
R "$P/auditeon/netbook-linux-sources.tgz" "$D/3-PSION-SOURCES/"
R "$P/auditeon/oe-netbook"                "$D/3-PSION-SOURCES/"
R "$P/auditeon/FINDING.txt"               "$D/3-PSION-SOURCES/"
for t in linux-2.6.9 kdegames-3.3.1 gnome-games-2.6.2 linneighborhood-0.6.5 rdesktop-cvs; do
  R "$P/psion-src/$t" "$D/3-PSION-SOURCES/extracted-source-trees/"
done
for t in abiword-2.0.11.tar.gz aspell-0.50.5.tar.gz aspell-0.60.3.tar.gz \
         aspell-en-0.50-2.tar.bz2 aspell6-en-6.0-0.tar.bz2 balsa-2.2.2.tar.bz2 \
         firefox-1.0-source.tar.bz2 gnumeric-1.3.93.tar.bz2 samba-3.0.7-git.tar.gz \
         linneighborhood_0.6.5-r7_armv5te.ipk linneighborhood_0.6.5-r8_armv5te.ipk \
         linneighborhood-locale-de_0.6.5-r7_armv5te.ipk; do
  [ -e "$P/psion-src/$t" ] && R "$P/psion-src/$t" "$D/3-PSION-SOURCES/upstream-tarballs/"
done
R "$P/psion-src/nBkProOs.img"                      "$D/3-PSION-SOURCES/original-images/nBkProOs.img.psion-autobuild-nexus-20050104"
R "$P/anonymous-linuxtogo/nBkProOs.img"            "$D/3-PSION-SOURCES/original-images/nBkProOs.img.fuchs-gibson-20050308"
R "$P/PsionLX-CF-kit/nBkProOs.img_cf"              "$D/3-PSION-SOURCES/original-images/nBkProOs.img_cf.fuchs-gibson-20050325"
R "$P/gpe-image-3.5.4.1-netbook-pro.rootfs.jffs2"  "$D/3-PSION-SOURCES/original-images/"
R "$P/anonymous-linuxtogo/gpe-image.jffs2"         "$D/3-PSION-SOURCES/original-images/"
R "$P/PsionLX-CF-kit/gpe-fs-cf.tar.bz2"            "$D/3-PSION-SOURCES/original-images/"
R "$P/anonymous-linuxtogo/mk-nBkProOsImg.c"        "$D/3-PSION-SOURCES/original-images/"
R "$P/anonymous-linuxtogo/nBkPro.img"              "$D/3-PSION-SOURCES/original-images/nBkPro.img.LX-PROTOTYPE-NAND-SCRIPT-DO-NOT-BOOT" 2>/dev/null || true
for f in "$P"/anonymous-linuxtogo/*.txt; do [ -e "$f" ] && R "$f" "$D/3-PSION-SOURCES/original-images/"; done
R "$P/recovered/" "$D/3-PSION-SOURCES/recovered/"

echo "== 4-BUILD-SYSTEM"
mkdir -p "$D/4-BUILD-SYSTEM"
R "$P/workspace/scripts" "$D/4-BUILD-SYSTEM/" --exclude='__pycache__'
mkdir -p "$D/4-BUILD-SYSTEM/jobs"
for f in "$P"/workspace/build/job-*.sh "$P"/workspace/build/job-*.log; do
  [ -e "$f" ] && R "$f" "$D/4-BUILD-SYSTEM/jobs/"
done
R "$P/workspace/card/root"            "$D/4-BUILD-SYSTEM/card-tree/"
for f in mknods.debugfs chown.debugfs devlist.txt removed-by-psion; do
  [ -e "$P/workspace/card/$f" ] && R "$P/workspace/card/$f" "$D/4-BUILD-SYSTEM/card-tree/"
done
R "$P/workspace/card-archival/root"   "$D/4-BUILD-SYSTEM/card-tree-asphotographed/"
for f in mknods.debugfs chown.debugfs devlist.txt removed-by-psion removed-menu-entries; do
  [ -e "$P/workspace/card-archival/$f" ] && R "$P/workspace/card-archival/$f" "$D/4-BUILD-SYSTEM/card-tree-asphotographed/"
done
R "$P/workspace/build/buildroot"      "$D/4-BUILD-SYSTEM/arm-oabi-chroot/"
mkdir -p "$D/4-BUILD-SYSTEM/debian-packages"
for f in debs Packages Packages.gz P-armel P-armel.gz kimg.deb kx; do
  [ -e "$P/workspace/build/$f" ] && R "$P/workspace/build/$f" "$D/4-BUILD-SYSTEM/debian-packages/"
done
R "$P/workspace/build/gpe-src"        "$D/4-BUILD-SYSTEM/gpe-src/"
R "$P/workspace/built"                "$D/4-BUILD-SYSTEM/built-binaries/"
R "$P/workspace/jffs2x"               "$D/4-BUILD-SYSTEM/jffs2-extracted/"
mkdir -p "$D/4-BUILD-SYSTEM/qemu"
for f in vmlinuz-versatile initramfs.gz; do
  R "$P/workspace/qemu/$f" "$D/4-BUILD-SYSTEM/qemu/"
done
R "$P/build/" "$D/4-BUILD-SYSTEM/overlay-route/"
[ -d "$P/workspace/build/initramfs" ] && R "$P/workspace/build/initramfs" "$D/4-BUILD-SYSTEM/"
[ -d "$P/workspace/build/mbpanel" ]   && R "$P/workspace/build/mbpanel"   "$D/4-BUILD-SYSTEM/"
[ -d "$P/workspace/build/out" ]       && R "$P/workspace/build/out"       "$D/4-BUILD-SYSTEM/last-build-output/"

echo "== 5-REFERENCE"
mkdir -p "$D/5-REFERENCE/other-netbookpro-linux"
R "$P/PsionLX-UI-photos" "$D/5-REFERENCE/ui-photos/"
R "$P/recovered/netbook-pro-cd" "$D/5-REFERENCE/" 2>/dev/null || true
R "$P/auditeon/BooStDongle.pdf" "$D/5-REFERENCE/"
R "$P/jlime-xfce-image-2012.3-netbookpro-20120311.rootfs.tar.bz2" "$D/5-REFERENCE/other-netbookpro-linux/"
R "$P/found" "$D/5-REFERENCE/"

echo "== 6-PARKED-ORIGINALS"
mkdir -p "$D/6-PARKED-ORIGINALS"
R "$P/parked/" "$D/6-PARKED-ORIGINALS/" --exclude='boot.fat.with-nand-erase-script'

echo "== PROVENANCE"
R "$P/PROVENANCE.txt" "$D/"

echo "== flattening the redundant nesting rsync leaves behind"
flatten() {
  [ -d "$1/$2" ] || return 0
  ( cd "$1/$2" && find . -maxdepth 1 -mindepth 1 -exec mv {} .. \; )
  rmdir "$1/$2"
}
flatten "$D/4-BUILD-SYSTEM/arm-oabi-chroot"   buildroot
flatten "$D/4-BUILD-SYSTEM/gpe-src"           gpe-src
flatten "$D/4-BUILD-SYSTEM/built-binaries"    built
flatten "$D/4-BUILD-SYSTEM/jffs2-extracted"   jffs2x
flatten "$D/4-BUILD-SYSTEM/last-build-output" out
flatten "$D/5-REFERENCE/ui-photos"            PsionLX-UI-photos

# duplicates: found/gallery/netbook.png is byte-identical to
# ui-photos/gpe-gallery-netbook.png, and netbook-pro-cd is in 5-REFERENCE
rm -rf "$D/5-REFERENCE/found" "$D/3-PSION-SOURCES/recovered/netbook-pro-cd"

echo "== restoring the hand-written documents"
if [ -d "$STASH" ]; then
  ( cd "$STASH" && find . -type f ) | while read f; do
    mkdir -p "$D/$(dirname "$f")"
    cp -p "$STASH/$f" "$D/$f"
  done
  echo "   restored $(find "$STASH" -type f | wc -l | tr -d ' ') documents"
  rm -rf "$STASH"
fi

echo "== done, sizing"
du -sh "$D"
du -sh "$D"/*
