|  | #!/usr/bin/env bash | 
|  | # | 
|  | # Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. | 
|  | # | 
|  | # Licensed under the OpenSSL license (the "License").  You may not use | 
|  | # this file except in compliance with the License.  You can obtain a copy | 
|  | # in the file LICENSE in the source distribution or at | 
|  | # https://www.openssl.org/source/license.html | 
|  |  | 
|  |  | 
|  | myname="$(basename $0)" | 
|  |  | 
|  | this_year="$(date '+%Y')" | 
|  | some_year="[12][0-9][0-9][0-9]" | 
|  | year_range="(${some_year})(-${some_year})?" | 
|  |  | 
|  | copyright_owner="The OpenSSL Project" | 
|  | copyright="Copyright .*${year_range} .*${copyright_owner}" | 
|  |  | 
|  | # sed_script: | 
|  | #   for all lines that contain ${copyright} : { | 
|  | #     replace years yyyy-zzzz (or year yyyy) by yyyy-${this_year} | 
|  | #     replace repeated years yyyy-yyyy by yyyy | 
|  | #   } | 
|  | sed_script="/${copyright}/{ s/${year_range}/\1-${this_year}/ ; s/(${some_year})-\1/\1/ }" | 
|  |  | 
|  | function usage() { | 
|  | cat >&2 <<EOF | 
|  | usage: $myname [-h|--help] [file|directory] ... | 
|  |  | 
|  | Updates the year ranges of all OpenSSL copyright statements in the given | 
|  | files or directories. (Directories are traversed recursively.) | 
|  | EOF | 
|  | } | 
|  |  | 
|  | if [ $# -eq 0 ]; then | 
|  | usage | 
|  | exit 0 | 
|  | fi | 
|  |  | 
|  |  | 
|  | for arg in "$@"; do | 
|  | case $arg in | 
|  | -h|--help) | 
|  | usage | 
|  | exit 0 | 
|  | ;; | 
|  | -*) | 
|  | echo -e "illegal option: $arg\n" >& 2 | 
|  | usage | 
|  | exit 1 | 
|  | ;; | 
|  | *) | 
|  | if [ -f "$arg" ]; then | 
|  | sed -E -i "${sed_script}" "$arg" | 
|  | elif [ -d "$arg" ]; then | 
|  | find "$arg" -name '.[a-z]*' -prune -o -type f -exec sed -E -i "${sed_script}" {} + | 
|  | else | 
|  | echo "$arg: no such file or directory" >&2 | 
|  | fi | 
|  | ;; | 
|  | esac | 
|  | done |