Home | History | Annotate | Line # | Download | only in sets
makesums revision 1.15.4.1
      1       1.1        is #!/bin/sh
      2       1.1        is #
      3  1.15.4.1  sborrill # $NetBSD: makesums,v 1.15.4.1 2009/10/09 12:06:03 sborrill Exp $
      4       1.1        is #
      5       1.2    toddpw # Make checksum files for files in ``tardir''.  Usage:
      6       1.7     lukem # makesums [-a] [-t tardir] [setname [...]]
      7       1.2    toddpw #
      8       1.2    toddpw # If -t is omitted, RELEASEDIR must be set and not empty.
      9       1.2    toddpw # The ``setname'' arguments comprise a list of files to checksum,
     10       1.2    toddpw # and may be omitted (in which case ``*.tgz'' is used).
     11      1.10       jmc # If -A is given, then the checksum are appended to possibly existing files.
     12      1.10       jmc # NOTE: Don't use this when running parallel jobs
     13       1.7     lukem # If -a is given, then the list of sets is ignored, and ``*'' is used.
     14       1.2    toddpw #
     15       1.2    toddpw # After shell glob expansion, the list of sets is filtered to remove known
     16       1.9       jmc # output file names (of the form *SUM, SHA512 and MD5), non-existent files, and
     17       1.2    toddpw # subdirectories. If this filtering leaves no files, then no output files are
     18  1.15.4.1  sborrill # produced. Otherwise the resulting list of files are checksummed and two
     19  1.15.4.1  sborrill # output files (MD5 and SHA512) are produced.
     20       1.1        is #
     21       1.1        is 
     22      1.14       apb prog="${0##*/}"
     23      1.12       apb rundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/"
     24      1.12       apb . "${rundir}/sets.subr"
     25       1.7     lukem 
     26       1.1        is # set defaults
     27      1.14       apb targetdir="${RELEASEDIR}"
     28       1.2    toddpw dash_all=no
     29      1.10       jmc append=\>
     30       1.1        is 
     31       1.7     lukem usage()
     32       1.7     lukem {
     33       1.7     lukem 	cat 1>&2 <<USAGE
     34      1.10       jmc Usage: ${prog} [-A] [-a] [-t targetdir] [setname [...]]
     35      1.10       jmc 	-A		Append to possible existing checksum files 
     36       1.7     lukem 	-a		checksum all plain files instead of [setname [...]]
     37      1.14       apb 	-t targetdir	\${RELEASEDIR}		[${targetdir}]
     38       1.7     lukem 	setname [...]	sets to checksum 	[*.tgz]
     39       1.7     lukem USAGE
     40       1.7     lukem 	exit 1
     41       1.7     lukem }
     42       1.7     lukem 
     43       1.1        is # handle args
     44      1.10       jmc while getopts aAt: ch; do
     45       1.7     lukem 	case ${ch} in
     46      1.10       jmc 	A)
     47      1.10       jmc 		append=\>\>
     48      1.10       jmc 		;;
     49       1.7     lukem 	a)
     50       1.2    toddpw 		dash_all=yes
     51       1.1        is 		;;
     52       1.7     lukem 	t)	
     53      1.14       apb 		targetdir="${OPTARG}"
     54       1.1        is 		;;
     55       1.1        is 	*)
     56       1.7     lukem 		usage
     57       1.1        is 		;;
     58       1.1        is 	esac
     59       1.1        is done
     60       1.7     lukem shift $((${OPTIND} - 1))
     61       1.1        is 
     62      1.14       apb if [ -z "${targetdir}" ]; then
     63      1.15       apb 	echo >&2 "${prog}: \${RELEASEDIR} must be set or provided with -t"
     64       1.1        is 	exit 1
     65       1.1        is fi
     66       1.1        is 
     67      1.14       apb cd "${targetdir}"
     68       1.2    toddpw pat="$*"
     69      1.14       apb if [ "${dash_all}" = yes ]; then
     70       1.2    toddpw 	pat='*'
     71      1.14       apb elif [ -z "${pat}" ]; then
     72       1.2    toddpw 	pat='*.tgz'
     73       1.2    toddpw fi
     74      1.14       apb lists="$(${FIND} ${pat} -prune \( -type f -o -type l \) \
     75      1.14       apb 	\! -name '*SUM' \! -name MD5 \! -name SHA512 2>/dev/null)"
     76      1.14       apb if [ -n "${lists}" ]; then
     77      1.14       apb 	eval ${CKSUM} -a md5  ${lists} ${append} MD5
     78      1.14       apb 	eval ${CKSUM} -a sha512  ${lists} ${append} SHA512
     79       1.1        is fi
     80