#!/bin/bash
#
# __copy1__
# __copy2__
#
CMD=`basename $0`
VERBOSE=true
DEBUG=false

usage()
{
	echo "
usage: $CMD [options] tarfile(s)...

options:
 -n|--dry-run	don't do anything (only show)
 -x|--exec	execute commands
 -v|--verbose	verbose output
 -q|--quiet	quiet output
 -D|--debug	enable debug

defaults:
  verbose	$VERBOSE
  execute	$f_exec
" >&2
	exit 1
}

get_lastdate()
{
	local file=$1
	local date=
	local seconds=
	local lastsecs="0"
	local lastdate=

	(
		case $file in
	  	  *.tar)	get_dates_tar "$file" "" ;;
	  	  *.tar.gz)	get_dates_tar "$file" "z" ;;
	  	  *.tar.bz2)	get_dates_tar "$file" "j" ;;
		  *.zip)	get_dates_zip "$file" ;;
		  *)		echo "don't know how to read $file" >&2 ;;
		esac
	) | while read date
	do
		seconds=`date '+%s' --date "$date"`
		[ $lastsecs -lt $seconds ] && {
			lastsecs=$seconds
			lastdate="$date"
		}
		$DEBUG && echo "D> $date 	$seconds	$lastsecs $lastdate" >&2
		echo "$lastdate"
	done | tail -1
}


get_dates_tar()
{
	local file=$1
	local args=${2:-""}
	local mode=
	local dummy=
	local date=
	local hour=

	tar tvf$args "$file" | while read mode dummy dummy date hour dummy
	do
		case $mode in
		   d*) continue ;;
		esac
		echo "$date $hour"
	done
}


get_dates_zip()
{
	local file=$1
	local dummy=
	local date=
	local hour=

	# Archive:  micros.zip
	#   Length      Date    Time    Name
	# ---------  ---------- -----   ----
	#         0  2002-07-09 18:48   micros/
	#       111  2002-07-09 18:48   micros/todo.txt
	# ---------                     -------
	#       111                     2 files

	unzip -l "$1" | while read dummy date hour dummy
	do
	    ##echo "D> $date $hour $dummy" >&2
	    case $date in
		[12][0-9][0-0][0-9]-[0-9][0-9]-*) echo "$date $hour" ;;
	    esac
	done
}







# (MAIN)

tarfiles=
f_exec=false

while [ $# != 0 ]
do
  case $1 in
    -v|--verbose)	VERBOSE=true ;;
    -q|--quiet)		VERBOSE=false ;;
    -D|--debug)		DEBUG=true ;;
    -n|--dry-run)	f_exec=false ;;
    -x|--exec)		f_exec=true ;;
    -h|--help)		usage ;;
    -*|"")		usage ;;
    *)			tarfiles="$tarfiles:$1" ;;
  esac
  shift
done

[ "X$tarfiles" == "X" ] && usage

oldifs="$IFS"
IFS=":"
set $tarfiles
IFS="$oldifs"


$f_exec || echo -e "\n(dry run, don't modify anything)\n"

for tarfile
do
	[ "$tarfile" == "" ] && continue
	$VERBOSE && printf "%-30s  "  "$tarfile"
	date=`get_lastdate "$tarfile"`
	$VERBOSE && echo "$date"
	$f_exec && touch --date "$date" "$tarfile"
done

exit 0
