update-copyright.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #!/bin/bash
  2. set -euo pipefail
  3. SCRIPT_NAME="$(basename "$0")"
  4. # Arg1: OLD_YEAR
  5. # Arg2: NEW_YEAR
  6. # Arg3: File Path
  7. replace_copyright() {
  8. local PATTERN="s|Copyright (c) 2010-${1}, Deusty, LLC|Copyright (c) 2010-${2}, Deusty, LLC|g"
  9. if [[ "$(uname -s)" = 'Darwin' ]]; then
  10. sed -i '' -e "${PATTERN}" "$3"
  11. return $?
  12. else
  13. sed -i -e "${PATTERN}" "$3"
  14. return $?
  15. fi
  16. }
  17. current_year() {
  18. date '+%Y'
  19. return $?
  20. }
  21. last_year() {
  22. date -v'-1y' '+%Y'
  23. return $?
  24. }
  25. # Arg1: Mode (full, usage_only). Defaults to 'full'.
  26. print_usage() {
  27. echo "Usage: ${SCRIPT_NAME} [OLD_YEAR NEW_YEAR]"
  28. if [[ "${1:-full}" = 'full' ]]; then
  29. echo ''
  30. echo 'If called with OLD_YEAR and NEW_YEAR arguments, updates the copyright years from OLD_YEAR to NEW_YEAR.'
  31. echo 'If called with no arguments but OLD_YEAR and NEW_YEAR environment variables defined, updates from OLD_YEAR to NEW_YEAR.'
  32. echo 'If called with no arguments and OLD_YEAR and NEW_YEAR not being defined, updates from last year to the current year.'
  33. echo ''
  34. echo 'Examples:'
  35. echo "$ ${SCRIPT_NAME} 2016 2017 # Updates from 2016 to 2017."
  36. echo "$ OLD_YEAR=2017 NEW_YEAR=2018 ${SCRIPT_NAME} # Updates from 2017 to 2018."
  37. echo "$ ${SCRIPT_NAME} # Updates from $(last_year) to $(current_year)."
  38. fi
  39. }
  40. OLD_YEAR=${OLD_YEAR:-$(last_year)}
  41. NEW_YEAR=${NEW_YEAR:-$(current_year)}
  42. if [[ $# -gt 0 ]]; then
  43. if [[ $# -eq 2 ]]; then
  44. OLD_YEAR="$1"
  45. NEW_YEAR="$2"
  46. elif [[ $# -eq 1 ]] && [[ $1 == '--help' ]] || [[ $1 == '-h' ]]; then
  47. print_usage 'full'
  48. exit 0
  49. else
  50. echo 'Specifying years via command line arguments requires two arguments (OLD_YEAR and NEW_YEAR)!'
  51. echo 'For more information use --help.'
  52. echo ''
  53. print_usage 'usage_only'
  54. exit 1
  55. fi
  56. fi
  57. # We need to export the function so that bash can call it from the find exec argument.
  58. export -f replace_copyright
  59. EXTENDED_REGEX_FLAG_POST_PATH='-regextype posix-extended'
  60. EXTENDED_REGEX_FLAG_PRE_PATH=''
  61. if [[ "$(uname -s)" = 'Darwin' ]]; then
  62. EXTENDED_REGEX_FLAG_PRE_PATH='-E'
  63. EXTENDED_REGEX_FLAG_POST_PATH=''
  64. fi
  65. pushd "$(dirname "$0")/../" > /dev/null
  66. find ${EXTENDED_REGEX_FLAG_PRE_PATH} \
  67. . \
  68. ${EXTENDED_REGEX_FLAG_POST_PATH} \
  69. -regex '.*\.([hm]|swift|pch)' \
  70. -exec bash -c "replace_copyright \"${OLD_YEAR}\" \"${NEW_YEAR}\" \"{}\"" \;
  71. replace_copyright "${OLD_YEAR}" "${NEW_YEAR}" './LICENSE'
  72. popd > /dev/null
  73. # Delete the function again
  74. unset -f replace_copyright