| #!/usr/bin/env 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. skipping "index" and hidden files |
| for L in $(find -L . -mount -depth -maxdepth 1 -type f ! -name 'index' ! -name '.*' -prune -printf "<a href=\"%f\">%f|@_@%Td-%Tb-%TY %Tk:%TM @%f@\n"|sort|column -t -s '|' | 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 |