update-phpdoc-list.sh 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/usr/bin/env bash
  2. ##
  3. # Updates the phpDoc list
  4. #
  5. # @author Daniel Rudolf
  6. # @link http://picocms.org
  7. # @license http://opensource.org/licenses/MIT
  8. #
  9. set -e
  10. # parameters
  11. LIST_FILE_PATH="$1" # target file path
  12. LIST_ID="$2" # phpDoc ID
  13. LIST_TYPE="$3" # phpDoc type
  14. LIST_TITLE="$4" # phpDoc title
  15. LIST_LAST_UPDATE="$5" # phpDoc last update
  16. # print parameters
  17. echo "Updating phpDoc list..."
  18. printf 'LIST_FILE_PATH="%s"\n' "$LIST_FILE_PATH"
  19. printf 'LIST_ID="%s"\n' "$LIST_ID"
  20. printf 'LIST_TYPE="%s"\n' "$LIST_TYPE"
  21. printf 'LIST_TITLE="%s"\n' "$LIST_TITLE"
  22. printf 'LIST_LAST_UPDATE="%s"\n' "$LIST_LAST_UPDATE"
  23. echo
  24. # create temporary file
  25. printf 'Creating temporary file...\n'
  26. LIST_TMP_FILE="$(mktemp)"
  27. [ -n "$LIST_TMP_FILE" ] || exit 1
  28. exec 3> "$LIST_TMP_FILE"
  29. # walk through phpDoc list
  30. printf 'Walking through phpDoc list...\n'
  31. DO_REPLACE="no"
  32. DID_REPLACE="no"
  33. while IFS='' read -r LINE || [[ -n "$LINE" ]]; do
  34. if [ "$DO_REPLACE" == "yes" ]; then
  35. # skip lines until next entry is reached
  36. [ "${LINE:0:2}" == " " ] && continue
  37. DO_REPLACE="no"
  38. elif [ "$LINE" == "- id: $LIST_ID" ]; then
  39. # update existing entry
  40. printf 'Updating existing entry...\n'
  41. printf -- '- id: %s\n' "$LIST_ID" >&3
  42. printf -- ' type: %s\n' "$LIST_TYPE" >&3
  43. printf -- ' title: %s\n' "$LIST_TITLE" >&3
  44. printf -- ' last_update: %s\n' "$LIST_LAST_UPDATE" >&3
  45. DO_REPLACE="yes"
  46. DID_REPLACE="yes"
  47. continue
  48. fi
  49. echo "$LINE" >&3
  50. done < "$LIST_FILE_PATH"
  51. # add new entry
  52. if [ "$DID_REPLACE" == "no" ]; then
  53. printf 'Adding new entry...\n'
  54. printf -- '- id: %s\n' "$LIST_ID" >&3
  55. printf -- ' type: %s\n' "$LIST_TYPE" >&3
  56. printf -- ' title: %s\n' "$LIST_TITLE" >&3
  57. printf -- ' last_update: %s\n' "$LIST_LAST_UPDATE" >&3
  58. fi
  59. exec 3>&-
  60. # move temporary file
  61. printf 'Replacing phpDoc list...\n'
  62. mv "$LIST_TMP_FILE" "$LIST_FILE_PATH"
  63. echo