doc_upgrade_arc.sh 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #!/bin/bash
  2. set -eu
  3. TARGET_INFO_FILE="$(realpath $1)"
  4. if [ ! -f $TARGET_INFO_FILE ]; then
  5. echo "File $TARGET_INFO_FILE doesn't exist. Creating new one"
  6. if [ "$2" == "" ]; then
  7. echo "Expected source folder as the second argument" >&2
  8. exit 1
  9. fi
  10. if [ ! -d "$2" ]; then
  11. echo "Expected $2 to be a directory" >&2
  12. exit 1
  13. fi
  14. FROM=$(realpath $2)
  15. ARC_ROOT=$(cd $FROM; arc root)
  16. HEAD=$(cd $FROM; arc rev-parse HEAD)
  17. # Normalize FROM relativly to the arc root
  18. ARC_FROM=${FROM#$ARC_ROOT/}
  19. echo "$HEAD;$ARC_FROM" > $TARGET_INFO_FILE
  20. echo "Filled in $TARGET_INFO_FILE"
  21. exit
  22. fi
  23. IFS=';' read -r BASE_REV ARC_FROM < "$TARGET_INFO_FILE"
  24. TO=$(dirname $(realpath "$TARGET_INFO_FILE"))
  25. HEAD_REV=$(cd $TO; arc rev-parse HEAD)
  26. ARC_ROOT=$(cd $TO; arc root)
  27. FROM="$ARC_ROOT/$ARC_FROM"
  28. ARC_TO=${TO#$ARC_ROOT/}
  29. DATETIME=$(date '+%Y-%m-%d-%H-%M-%S')
  30. echo "Base revision: $BASE_REV"
  31. echo "Head revision: $HEAD_REV"
  32. echo "Arc root: $ARC_ROOT"
  33. echo "Source: $ARC_FROM"
  34. echo "Target: $ARC_TO"
  35. if [ "$(cd $TO; arc status -s -u all | wc -l)" != "0" ]; then
  36. echo "Target $TO has uncommited changes" >&2
  37. exit
  38. fi
  39. cd $ARC_ROOT
  40. PATCH_FILE=$(mktemp)
  41. EXPORT_DIR=$(mktemp -d)
  42. echo "Use $EXPORT_DIR export dir"
  43. arc export $BASE_REV "$ARC_FROM" --to "$EXPORT_DIR"
  44. rsync -r --delete --filter='. -' "$EXPORT_DIR/$ARC_FROM/" "$TO" << EOF
  45. + /*/
  46. + *.md
  47. + toc_*.yaml
  48. - /*
  49. EOF
  50. rm -rf "$EXPORT_DIR" || true
  51. arc add -A $ARC_TO
  52. arc diff --cached --reverse --relative=$ARC_TO > $PATCH_FILE
  53. arc reset --hard
  54. arc clean -d
  55. arc status
  56. rsync -r --delete --filter='. -' "$FROM/" "$TO" << EOF
  57. + /*/
  58. + *.md
  59. + toc_*.yaml
  60. P _assets/*
  61. - /*
  62. EOF
  63. patch -d "$TO" -p0 -N -E --no-backup-if-mismatch --merge -i $PATCH_FILE -t || echo "Patch has conflicts. Consider to review them before commit"
  64. if [ "$(cd $TO; arc status -s -u all | wc -l)" != "0" ]; then
  65. echo "$HEAD_REV;$ARC_FROM" > $TARGET_INFO_FILE
  66. else
  67. echo "Nothing changed"
  68. fi
  69. if [ -v KEEP_PATCH ]; then
  70. mv "$PATCH_FILE" "$TO/$DATETIME.patch"
  71. else
  72. rm "$PATCH_FILE"
  73. fi