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