#!/bin/sh
#
# vim:tabstop=3:expandtab:shiftwidth=3
#

_help_show_args=""
. $(dirname $0)/_option_processor 2> /dev/null

YW=`date +%G%V`
ZIP_DIR=$HOME/Downloads

__keep_ARG=3

Dir2CamelCase()
{
   for N in $(echo "$1" | sed 's,[^0-9A-Za-z], ,g')
   do
      printf "%s" "$(echo $N | cut -c 1  | tr '[a-z]' '[A-Z]')"
      printf "%s" "$(echo $N | cut -c 2- | tr '[A-Z]' '[a-z]')"
   done
   printf "\n"
}

# Setup dry-run var
unset Run
if [ "$___dry_run" = "yes" ]
then
   Run=(echo '<skipped>')
fi

if [ ! -d $ZIP_DIR ]
then
   if ! mkdir -p $ZIP_DIR
   then
      echo "! [ERROR] No $ZIP_DIR to zip"
      exit 1
   else
      echo "# [INFO] Directory $ZIP_DIR created"
   fi
fi

if [ ! -r $HOME/.git-zip ]
then
   echo "! [ERROR] No ~/.git-zip file (specifies the dirs to zip)"
   exit 1
fi

cd $HOME

for R in $(find . -xdev -name .git -type d 2> /dev/null | sed 's,.git$,,')
do
   R="$(echo "$R" | sed -e 's,^[./]*,,' -e 's,[/]*$,,')"
   G="$(echo "$R" | sed -e 's,$,/.*,' -e 's,^,^,')"
   if ! grep "$G" .git-zip  &> /dev/null || \
        grep "$G" .git-skip &> /dev/null
   then
      echo "Skipping $(echo "$R" | sed 's,^, ~/,')"
   else
      ZipFile="$(Dir2CamelCase "$R/.git")"
      echo "# Week zip for $(echo "$R" | sed 's,^, ~/,')" \
           "to $ZIP_DIR/$ZipFile.$YW.zip"
      ${Run[@]} zip -9 -r $ZIP_DIR/$ZipFile.$YW.zip $R/.git/

      # Show info
      echo "# Week zip to $ZIP_DIR/$ZipFile.$YW.zip done"

      if [ "$__remove_old" = "yes" ] && [ -f $ZIP_DIR/$ZipFile.$YW.zip ] && \
         echo "$__keep_ARG" | grep -q '^[1-9][0-9]*$'
      then
         echo "# Removing old files, keeping last $__keep_ARG"
         Keep="$((ls -t $ZIP_DIR/$ZipFile.*.zip | head -${__keep_ARG} | sed -e 's/^/^/' -e 's/$/$/' | tr '\n' '|' ; echo) | sed -e 's/|$//')"
         ls $ZIP_DIR/$ZipFile.*.zip | egrep -v "$Keep" | \
         while read RemoveFile
         do
            echo "# Removing $RemoveFile"
            ${Run[@]} rm $RemoveFile
         done
      fi
   fi
done

echo
ls -lrth $ZIP_DIR | egrep 'Git[.][0-9]{6}[.]zip'
echo

