#!/bin/bash
set -e

# This script generates index files for the directory structure
# of the apt and yum repos

: ${DOCKER_RELEASE_DIR:=$DEST}
APTDIR=$DOCKER_RELEASE_DIR/apt
YUMDIR=$DOCKER_RELEASE_DIR/yum

if [ ! -d $APTDIR ] && [ ! -d $YUMDIR ]; then
	echo >&2 'release-rpm or release-deb must be run before generate-index-listing'
	exit 1
fi

create_index() {
	local directory=$1
	local original=$2
	local cleaned=${directory#$original}

	# the index file to create
	local index_file="${directory}/index"

	# cd into dir & touch the index file
	cd $directory
	touch $index_file

	# print the html header
	cat <<-EOF > "$index_file"
	<!DOCTYPE html>
	<html>
	<head><title>Index of ${cleaned}/</title></head>
	<body bgcolor="white">
	<h1>Index of ${cleaned}/</h1><hr>
	<pre><a href="../">../</a>
	EOF

	# start of content output
	(
	# change IFS locally within subshell so the for loop saves line correctly to L var
	IFS=$'\n';

	# pretty sweet, will mimick the normal apache output
	for L in $(find -L . -mount -depth -maxdepth 1 -type f ! -name 'index' -printf "<a href=\"%f\">%-44f@_@%Td-%Tb-%TY %Tk:%TM  @%f@\n"|sort|sed 's,\([\ ]\+\)@_@,</a>\1,g');
	do
		# file
		F=$(sed -e 's,^.*@\([^@]\+\)@.*$,\1,g'<<<"$L");

		# file with file size
		F=$(du -bh $F | cut -f1);

		# output with correct format
		sed -e 's,\ @.*$, '"$F"',g'<<<"$L";
	done;
	) >> $index_file;

	# now output a list of all directories in this dir (maxdepth 1) other than '.' outputting in a sorted manner exactly like apache
	find -L . -mount -depth -maxdepth 1 -type d ! -name '.' -printf "<a href=\"%f\">%-43f@_@%Td-%Tb-%TY %Tk:%TM  -\n"|sort -d|sed 's,\([\ ]\+\)@_@,/</a>\1,g' >> $index_file

	# print the footer html
	echo "</pre><hr></body></html>" >> $index_file

}

get_dirs() {
	local directory=$1

	for d in `find ${directory} -type d`; do
		create_index $d $directory
	done
}

get_dirs $APTDIR
get_dirs $YUMDIR
