tag.sh 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #!/bin/sh
  2. #===-- tag.sh - Tag the LLVM release candidates ----------------------------===#
  3. #
  4. # The LLVM Compiler Infrastructure
  5. #
  6. # This file is distributed under the University of Illinois Open Source
  7. # License.
  8. #
  9. #===------------------------------------------------------------------------===#
  10. #
  11. # Create branches and release candidates for the LLVM release.
  12. #
  13. #===------------------------------------------------------------------------===#
  14. set -e
  15. release=""
  16. rc=""
  17. rebranch="no"
  18. projects="llvm cfe test-suite compiler-rt libcxx libcxxabi clang-tools-extra polly lldb lld openmp libunwind"
  19. dryrun=""
  20. revision="HEAD"
  21. base_url="https://llvm.org/svn/llvm-project"
  22. function usage() {
  23. echo "usage: `basename $0` -release <num> [-rebranch] [-revision <num>] [-dry-run]"
  24. echo "usage: `basename $0` -release <num> -rc <num> [-dry-run]"
  25. echo " "
  26. echo " -release <num> The version number of the release"
  27. echo " -rc <num> The release candidate number"
  28. echo " -rebranch Remove existing branch, if present, before branching"
  29. echo " -final Tag final release candidate"
  30. echo " -revision <num> Revision to branch off (default: HEAD)"
  31. echo " -dry-run Make no changes to the repository, just print the commands"
  32. }
  33. function tag_version() {
  34. set -x
  35. for proj in $projects; do
  36. if svn ls $base_url/$proj/branches/release_$branch_release > /dev/null 2>&1 ; then
  37. if [ $rebranch = "no" ]; then
  38. continue
  39. fi
  40. ${dryrun} svn remove -m "Removing old release_$branch_release branch for rebranching." \
  41. $base_url/$proj/branches/release_$branch_release
  42. fi
  43. ${dryrun} svn copy -m "Creating release_$branch_release branch off revision ${revision}" \
  44. -r ${revision} \
  45. $base_url/$proj/trunk \
  46. $base_url/$proj/branches/release_$branch_release
  47. done
  48. set +x
  49. }
  50. function tag_release_candidate() {
  51. set -x
  52. for proj in $projects ; do
  53. if ! svn ls $base_url/$proj/tags/RELEASE_$tag_release > /dev/null 2>&1 ; then
  54. ${dryrun} svn mkdir -m "Creating release directory for release_$tag_release." $base_url/$proj/tags/RELEASE_$tag_release
  55. fi
  56. if ! svn ls $base_url/$proj/tags/RELEASE_$tag_release/$rc > /dev/null 2>&1 ; then
  57. ${dryrun} svn copy -m "Creating release candidate $rc from release_$tag_release branch" \
  58. $base_url/$proj/branches/release_$branch_release \
  59. $base_url/$proj/tags/RELEASE_$tag_release/$rc
  60. fi
  61. done
  62. set +x
  63. }
  64. while [ $# -gt 0 ]; do
  65. case $1 in
  66. -release | --release )
  67. shift
  68. release=$1
  69. ;;
  70. -rc | --rc )
  71. shift
  72. rc="rc$1"
  73. ;;
  74. -rebranch | --rebranch )
  75. rebranch="yes"
  76. ;;
  77. -final | --final )
  78. rc="final"
  79. ;;
  80. -revision | --revision )
  81. shift
  82. revision="$1"
  83. ;;
  84. -dry-run | --dry-run )
  85. dryrun="echo"
  86. ;;
  87. -h | --help | -help )
  88. usage
  89. exit 0
  90. ;;
  91. * )
  92. echo "unknown option: $1"
  93. usage
  94. exit 1
  95. ;;
  96. esac
  97. shift
  98. done
  99. if [ "x$release" = "x" ]; then
  100. echo "error: need to specify a release version"
  101. echo
  102. usage
  103. exit 1
  104. fi
  105. branch_release=`echo $release | sed -e 's,\([0-9]*\.[0-9]*\).*,\1,' | sed -e 's,\.,,g'`
  106. tag_release=`echo $release | sed -e 's,\.,,g'`
  107. if [ "x$rc" = "x" ]; then
  108. tag_version
  109. else
  110. if [ "$revision" != "HEAD" ]; then
  111. echo "error: cannot use -revision with -rc"
  112. echo
  113. usage
  114. exit 1
  115. fi
  116. tag_release_candidate
  117. fi
  118. exit 0