1 #!/usr/bin/env bash 2 # 3 # Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. 4 # 5 # Licensed under the OpenSSL license (the "License"). You may not use 6 # this file except in compliance with the License. You can obtain a copy 7 # in the file LICENSE in the source distribution or at 8 # https://www.openssl.org/source/license.html 9 10 11 myname="$(basename $0)" 12 13 this_year="$(date '+%Y')" 14 some_year="[12][0-9][0-9][0-9]" 15 year_range="(${some_year})(-${some_year})?" 16 17 copyright_owner="The OpenSSL Project" 18 copyright="Copyright .*${year_range} .*${copyright_owner}" 19 20 # sed_script: 21 # for all lines that contain ${copyright} : { 22 # replace years yyyy-zzzz (or year yyyy) by yyyy-${this_year} 23 # replace repeated years yyyy-yyyy by yyyy 24 # } 25 sed_script="/${copyright}/{ s/${year_range}/\1-${this_year}/ ; s/(${some_year})-\1/\1/ }" 26 27 function usage() { 28 cat >&2 <<EOF 29 usage: $myname [-h|--help] [file|directory] ... 30 31 Updates the year ranges of all OpenSSL copyright statements in the given 32 files or directories. (Directories are traversed recursively.) 33 EOF 34 } 35 36 if [ $# -eq 0 ]; then 37 usage 38 exit 0 39 fi 40 41 42 for arg in "$@"; do 43 case $arg in 44 -h|--help) 45 usage 46 exit 0 47 ;; 48 -*) 49 echo -e "illegal option: $arg\n" >& 2 50 usage 51 exit 1 52 ;; 53 *) 54 if [ -f "$arg" ]; then 55 sed -E -i "${sed_script}" "$arg" 56 elif [ -d "$arg" ]; then 57 find "$arg" -name '.[a-z]*' -prune -o -type f -exec sed -E -i "${sed_script}" {} + 58 else 59 echo "$arg: no such file or directory" >&2 60 fi 61 ;; 62 esac 63 done 64