#!/bin/bash

# jeremy@emperorlinux.com

# This is the Python Project Administration script. Recognize.
# It's actually a very decent Bash script for keeping this shit
# running tight.

if [ -z "${1}" ]; then
	echo "Please specify one of:"
	echo "   - skel:    Creates a skeleton layout in .pypadmin."
	echo "   - clean:   Cleans all .pypadmin/clean_files files."
	echo "   - package: Creates a bzipped tarball named .pypadmin/package_name."
	echo "   - publish: Publishes package to .pypadmin/publish_host (via scp)."

elif [ "${1}" = "skel" ]; then
	if [ ! -d ".pypadmin" ]; then
		mkdir .pypadmin
	fi
			
	touch .pypadmin/package_name
	touch .pypadmin/publish_host
	touch .pypadmin/clean_files

elif [ ! -d .pypadmin ]; then
	echo "Couldn't find the .pypadmin directory; you'll need to"
	echo "create this before moving on. Perhaps try running this"
	echo "script with the \"skel\" argument."

else
	# TODO: add error checking for these
	PACKAGE_NAME="$(cat .pypadmin/package_name)"
	PUBLISH_HOST="$(cat .pypadmin/publish_host)"
	CLEAN_FILES=( $(cat .pypadmin/clean_files) )

	case "${1}" in
		
		"clean")
			for CLEAN in ${CLEAN_FILES[*]}; do
				FILES="$(find . -name "${CLEAN}")"
			
				if [ -n "${FILES}" ]; then
					echo "Removing [ ${CLEAN} ] files..."
			
					for FILE in ${FILES}; do
						rm -f "${FILE}"
					done
				else
					echo "No [ ${CLEAN} ] files found..."
				fi
			done

			if [ -f "${PACKAGE_NAME}" ]; then
				rm -f "${PACKAGE_NAME}"
			fi
		;;
		
		"package")
			FILES=( $(find . | egrep -v "/\.svn") )
			TAR_FILES=""
		
			for FILE in ${FILES[*]:1}; do
				if [ ! -d "${FILE}" -a "${FILE}" != "${PACKAGE_NAME}" ]; then
					TAR_FILES="${TAR_FILES} ${FILE}"
				fi
			done

			echo "Creating package: ${PACKAGE_NAME}..."

			tar -cjf "${PACKAGE_NAME}" ${TAR_FILES}
		;;

		"publish")
			if [ -f "${PACKAGE_NAME}" ]; then
				echo "Publishing ${PACKAGE_NAME} to ${PUBLISH_HOST}..."

				scp "${PACKAGE_NAME}" ${PUBLISH_HOST}
			else
				echo "Couldn't find package: ${PACKAGE_NAME}."
			fi
		;;
		
		*)
			echo "Unknown option: ${1}."
		;;
	
	esac
fi
