| OLD | NEW | 
|---|
| 1 #!/bin/bash | 1 #!/bin/bash | 
| 2 # Copyright 2012 the V8 project authors. All rights reserved. | 2 # Copyright 2012 the V8 project authors. All rights reserved. | 
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without | 
| 4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are | 
| 5 # met: | 5 # met: | 
| 6 # | 6 # | 
| 7 #     * Redistributions of source code must retain the above copyright | 7 #     * Redistributions of source code must retain the above copyright | 
| 8 #       notice, this list of conditions and the following disclaimer. | 8 #       notice, this list of conditions and the following disclaimer. | 
| 9 #     * Redistributions in binary form must reproduce the above | 9 #     * Redistributions in binary form must reproduce the above | 
| 10 #       copyright notice, this list of conditions and the following | 10 #       copyright notice, this list of conditions and the following | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 62   source $COMMIT_HASHES_FILE | 62   source $COMMIT_HASHES_FILE | 
| 63 } | 63 } | 
| 64 | 64 | 
| 65 restore_patch_commit_hashes_if_unset() { | 65 restore_patch_commit_hashes_if_unset() { | 
| 66   [[ "${#PATCH_COMMIT_HASHES[@]}" == 0 ]] && restore_patch_commit_hashes | 66   [[ "${#PATCH_COMMIT_HASHES[@]}" == 0 ]] && restore_patch_commit_hashes | 
| 67   [[ "${#PATCH_COMMIT_HASHES[@]}" == 0 ]] && [[ -z "$EXTRA_PATCH" ]] && \ | 67   [[ "${#PATCH_COMMIT_HASHES[@]}" == 0 ]] && [[ -z "$EXTRA_PATCH" ]] && \ | 
| 68       die "Variable PATCH_COMMIT_HASHES could not be restored." | 68       die "Variable PATCH_COMMIT_HASHES could not be restored." | 
| 69 } | 69 } | 
| 70 | 70 | 
| 71 ########## Option parsing | 71 ########## Option parsing | 
|  | 72 REVERT_FROM_BLEEDING_EDGE=0 | 
| 72 | 73 | 
| 73 while getopts ":hs:fp:rm:" OPTION ; do | 74 while getopts ":hs:fp:rm:R" OPTION ; do | 
| 74   case $OPTION in | 75   case $OPTION in | 
| 75     h)  usage | 76     h)  usage | 
| 76         exit 0 | 77         exit 0 | 
| 77         ;; | 78         ;; | 
| 78     p)  EXTRA_PATCH=$OPTARG | 79     p)  EXTRA_PATCH=$OPTARG | 
| 79         ;; | 80         ;; | 
| 80     f)  rm -f "$ALREADY_MERGING_SENTINEL_FILE" | 81     f)  rm -f "$ALREADY_MERGING_SENTINEL_FILE" | 
| 81         ;; | 82         ;; | 
| 82     r)  REVERSE_PATCH="--reverse" | 83     r)  REVERSE_PATCH="--reverse" | 
| 83         ;; | 84         ;; | 
| 84     m)  NEW_COMMIT_MSG=$OPTARG | 85     m)  NEW_COMMIT_MSG=$OPTARG | 
| 85         ;; | 86         ;; | 
| 86     s)  START_STEP=$OPTARG | 87     s)  START_STEP=$OPTARG | 
| 87         ;; | 88         ;; | 
|  | 89     R)  REVERSE_PATCH="--reverse" | 
|  | 90         REVERT_FROM_BLEEDING_EDGE=1 | 
|  | 91         ;; | 
| 88     ?)  echo "Illegal option: -$OPTARG" | 92     ?)  echo "Illegal option: -$OPTARG" | 
| 89         usage | 93         usage | 
| 90         exit 1 | 94         exit 1 | 
| 91         ;; | 95         ;; | 
| 92   esac | 96   esac | 
| 93 done | 97 done | 
| 94 let OPTION_COUNT=$OPTIND-1 | 98 let OPTION_COUNT=$OPTIND-1 | 
| 95 shift $OPTION_COUNT | 99 shift $OPTION_COUNT | 
| 96 | 100 | 
| 97 ########## Regular workflow | 101 ########## Regular workflow | 
| 98 | 102 | 
| 99 # If there is a merge in progress, abort. | 103 # If there is a merge in progress, abort. | 
| 100 [[ -e "$ALREADY_MERGING_SENTINEL_FILE" ]] && [[ $START_STEP -eq 0 ]] \ | 104 [[ -e "$ALREADY_MERGING_SENTINEL_FILE" ]] && [[ $START_STEP -eq 0 ]] \ | 
| 101    && die "A merge is already in progress" | 105    && die "A merge is already in progress" | 
| 102 touch "$ALREADY_MERGING_SENTINEL_FILE" | 106 touch "$ALREADY_MERGING_SENTINEL_FILE" | 
| 103 | 107 | 
| 104 initial_environment_checks | 108 initial_environment_checks | 
| 105 | 109 | 
| 106 if [ $START_STEP -le $CURRENT_STEP ] ; then | 110 if [ $START_STEP -le $CURRENT_STEP ] ; then | 
| 107   if [ ${#@} -lt 2 ] ; then | 111   let MIN_EXPECTED_ARGS=2-$REVERT_FROM_BLEEDING_EDGE | 
|  | 112   if [ ${#@} -lt $MIN_EXPECTED_ARGS ] ; then | 
| 108     if [ -z "$EXTRA_PATCH" ] ; then | 113     if [ -z "$EXTRA_PATCH" ] ; then | 
| 109       die "Either a patch file or revision numbers must be specified" | 114       die "Either a patch file or revision numbers must be specified" | 
| 110     fi | 115     fi | 
| 111     if [ -z "$NEW_COMMIT_MSG" ] ; then | 116     if [ -z "$NEW_COMMIT_MSG" ] ; then | 
| 112       die "You must specify a merge comment if no patches are specified" | 117       die "You must specify a merge comment if no patches are specified" | 
| 113     fi | 118     fi | 
| 114   fi | 119   fi | 
| 115   echo ">>> Step $CURRENT_STEP: Preparation" | 120   echo ">>> Step $CURRENT_STEP: Preparation" | 
| 116   MERGE_TO_BRANCH=$1 | 121   if [ $REVERT_FROM_BLEEDING_EDGE==1 ] ; then | 
| 117   [[ -n "$MERGE_TO_BRANCH" ]] || die "Please specify a branch to merge to" | 122     MERGE_TO_BRANCH="bleeding_edge" | 
| 118   shift | 123   else | 
|  | 124     MERGE_TO_BRANCH=$1 | 
|  | 125     [[ -n "$MERGE_TO_BRANCH" ]] || die "Please specify a branch to merge to" | 
|  | 126     shift | 
|  | 127   fi | 
| 119   persist "MERGE_TO_BRANCH" | 128   persist "MERGE_TO_BRANCH" | 
| 120   common_prepare | 129   common_prepare | 
| 121 fi | 130 fi | 
| 122 | 131 | 
| 123 let CURRENT_STEP+=1 | 132 let CURRENT_STEP+=1 | 
| 124 if [ $START_STEP -le $CURRENT_STEP ] ; then | 133 if [ $START_STEP -le $CURRENT_STEP ] ; then | 
| 125   echo ">>> Step $CURRENT_STEP: Create a fresh branch for the patch." | 134   echo ">>> Step $CURRENT_STEP: Create a fresh branch for the patch." | 
| 126   restore_if_unset "MERGE_TO_BRANCH" | 135   restore_if_unset "MERGE_TO_BRANCH" | 
| 127   git checkout -b $BRANCHNAME svn/$MERGE_TO_BRANCH \ | 136   git checkout -b $BRANCHNAME svn/$MERGE_TO_BRANCH \ | 
| 128     || die "Creating branch $BRANCHNAME failed." | 137     || die "Creating branch $BRANCHNAME failed." | 
| 129 fi | 138 fi | 
| 130 | 139 | 
| 131 let CURRENT_STEP+=1 | 140 let CURRENT_STEP+=1 | 
| 132 if [ $START_STEP -le $CURRENT_STEP ] ; then | 141 if [ $START_STEP -le $CURRENT_STEP ] ; then | 
| 133   echo ">>> Step $CURRENT_STEP: Find the git \ | 142   echo ">>> Step $CURRENT_STEP: Find the git \ | 
| 134 revisions associated with the patches." | 143 revisions associated with the patches." | 
| 135   current=0 | 144   current=0 | 
| 136   for REVISION in "$@" ; do | 145   for REVISION in "$@" ; do | 
| 137     NEXT_HASH=$(git svn find-rev "r$REVISION" svn/bleeding_edge) | 146     NEXT_HASH=$(git svn find-rev "r$REVISION" svn/bleeding_edge) | 
| 138     [[ -n "$NEXT_HASH" ]] \ | 147     [[ -n "$NEXT_HASH" ]] \ | 
| 139       || die "Cannot determine git hash for r$REVISION" | 148       || die "Cannot determine git hash for r$REVISION" | 
| 140     PATCH_COMMIT_HASHES[$current]="$NEXT_HASH" | 149     PATCH_COMMIT_HASHES[$current]="$NEXT_HASH" | 
| 141     [[ -n "$REVISION_LIST" ]] && REVISION_LIST="$REVISION_LIST," | 150     [[ -n "$REVISION_LIST" ]] && REVISION_LIST="$REVISION_LIST," | 
| 142     REVISION_LIST="$REVISION_LIST r$REVISION" | 151     REVISION_LIST="$REVISION_LIST r$REVISION" | 
| 143     let current+=1 | 152     let current+=1 | 
| 144   done | 153   done | 
| 145   if [ -n "$REVISION_LIST" ] ; then | 154   if [ -n "$REVISION_LIST" ] ; then | 
| 146     if [ -n "$REVERSE_PATCH" ] ; then | 155     if [ -n "$REVERSE_PATCH" ] ; then | 
| 147       NEW_COMMIT_MSG="Rollback of$REVISION_LIST in $MERGE_TO_BRANCH branch." | 156       if [ $REVERT_FROM_BLEEDING_EDGE -eq 0 ] ; then | 
|  | 157         NEW_COMMIT_MSG="Rollback of$REVISION_LIST in $MERGE_TO_BRANCH branch." | 
|  | 158       else | 
|  | 159         NEW_COMMIT_MSG="Revert$REVISION_LIST." | 
|  | 160       fi | 
| 148     else | 161     else | 
| 149       NEW_COMMIT_MSG="Merged$REVISION_LIST into $MERGE_TO_BRANCH branch." | 162       NEW_COMMIT_MSG="Merged$REVISION_LIST into $MERGE_TO_BRANCH branch." | 
| 150     fi; | 163     fi; | 
| 151   fi; | 164   fi; | 
| 152 | 165 | 
| 153   echo "$NEW_COMMIT_MSG" > $COMMITMSG_FILE | 166   echo "$NEW_COMMIT_MSG" > $COMMITMSG_FILE | 
| 154   echo "" >> $COMMITMSG_FILE | 167   echo "" >> $COMMITMSG_FILE | 
| 155   for HASH in ${PATCH_COMMIT_HASHES[@]} ; do | 168   for HASH in ${PATCH_COMMIT_HASHES[@]} ; do | 
| 156     PATCH_MERGE_DESCRIPTION=$(git log -1 --format=%s $HASH) | 169     PATCH_MERGE_DESCRIPTION=$(git log -1 --format=%s $HASH) | 
| 157     echo "$PATCH_MERGE_DESCRIPTION" >> $COMMITMSG_FILE | 170     echo "$PATCH_MERGE_DESCRIPTION" >> $COMMITMSG_FILE | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 182     echo "Applying patch for $HASH to $MERGE_TO_BRANCH..." | 195     echo "Applying patch for $HASH to $MERGE_TO_BRANCH..." | 
| 183     git log -1 -p $HASH > "$TEMPORARY_PATCH_FILE" | 196     git log -1 -p $HASH > "$TEMPORARY_PATCH_FILE" | 
| 184     apply_patch "$TEMPORARY_PATCH_FILE" | 197     apply_patch "$TEMPORARY_PATCH_FILE" | 
| 185   done | 198   done | 
| 186   if [ -n "$EXTRA_PATCH" ] ; then | 199   if [ -n "$EXTRA_PATCH" ] ; then | 
| 187     apply_patch "$EXTRA_PATCH" | 200     apply_patch "$EXTRA_PATCH" | 
| 188   fi | 201   fi | 
| 189 fi | 202 fi | 
| 190 | 203 | 
| 191 let CURRENT_STEP+=1 | 204 let CURRENT_STEP+=1 | 
| 192 if [ $START_STEP -le $CURRENT_STEP ] ; then | 205 if [ $START_STEP -le $CURRENT_STEP ] && [ $REVERT_FROM_BLEEDING_EDGE -eq 0 ] ; t
     hen | 
| 193   echo ">>> Step $CURRENT_STEP: Prepare $VERSION_FILE." | 206   echo ">>> Step $CURRENT_STEP: Prepare $VERSION_FILE." | 
| 194   # These version numbers are used again for creating the tag | 207   # These version numbers are used again for creating the tag | 
| 195   read_and_persist_version | 208   read_and_persist_version | 
| 196 fi | 209 fi | 
| 197 | 210 | 
| 198 let CURRENT_STEP+=1 | 211 let CURRENT_STEP+=1 | 
| 199 if [ $START_STEP -le $CURRENT_STEP ] ; then | 212 if [ $START_STEP -le $CURRENT_STEP ] && [ $REVERT_FROM_BLEEDING_EDGE -eq 0 ] ; t
     hen | 
| 200   echo ">>> Step $CURRENT_STEP: Increment version number." | 213   echo ">>> Step $CURRENT_STEP: Increment version number." | 
| 201   restore_if_unset "PATCH" | 214   restore_if_unset "PATCH" | 
| 202   NEWPATCH=$(($PATCH + 1)) | 215   NEWPATCH=$(($PATCH + 1)) | 
| 203   confirm "Automatically increment PATCH_LEVEL? (Saying 'n' will fire up \ | 216   confirm "Automatically increment PATCH_LEVEL? (Saying 'n' will fire up \ | 
| 204 your EDITOR on $VERSION_FILE so you can make arbitrary changes. When \ | 217 your EDITOR on $VERSION_FILE so you can make arbitrary changes. When \ | 
| 205 you're done, save the file and exit your EDITOR.)" | 218 you're done, save the file and exit your EDITOR.)" | 
| 206   if [ $? -eq 0 ] ; then | 219   if [ $? -eq 0 ] ; then | 
| 207     echo $NEWPATCH $VERSION_FILE | 220     echo $NEWPATCH $VERSION_FILE | 
| 208     sed -e "/#define PATCH_LEVEL/s/[0-9]*$/$NEWPATCH/" \ | 221     sed -e "/#define PATCH_LEVEL/s/[0-9]*$/$NEWPATCH/" \ | 
| 209         -i.bak "$VERSION_FILE" || die "Could not increment patch level" | 222         -i.bak "$VERSION_FILE" || die "Could not increment patch level" | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 227   echo ">>> Step $CURRENT_STEP: Commit to the repository." | 240   echo ">>> Step $CURRENT_STEP: Commit to the repository." | 
| 228   restore_if_unset "MERGE_TO_BRANCH" | 241   restore_if_unset "MERGE_TO_BRANCH" | 
| 229   git checkout $BRANCHNAME \ | 242   git checkout $BRANCHNAME \ | 
| 230     || die "cannot ensure that the current branch is $BRANCHNAME" | 243     || die "cannot ensure that the current branch is $BRANCHNAME" | 
| 231   wait_for_lgtm | 244   wait_for_lgtm | 
| 232   PRESUBMIT_TREE_CHECK="skip" git cl dcommit \ | 245   PRESUBMIT_TREE_CHECK="skip" git cl dcommit \ | 
| 233     || die "failed to commit to $MERGE_TO_BRANCH" | 246     || die "failed to commit to $MERGE_TO_BRANCH" | 
| 234 fi | 247 fi | 
| 235 | 248 | 
| 236 let CURRENT_STEP+=1 | 249 let CURRENT_STEP+=1 | 
| 237 if [ $START_STEP -le $CURRENT_STEP ] ; then | 250 if [ $START_STEP -le $CURRENT_STEP ] && [ $REVERT_FROM_BLEEDING_EDGE -eq 0 ] ; t
     hen | 
| 238   echo ">>> Step $CURRENT_STEP: Determine svn commit revision" | 251   echo ">>> Step $CURRENT_STEP: Determine svn commit revision" | 
| 239   restore_if_unset "NEW_COMMIT_MSG" | 252   restore_if_unset "NEW_COMMIT_MSG" | 
| 240   restore_if_unset "MERGE_TO_BRANCH" | 253   restore_if_unset "MERGE_TO_BRANCH" | 
| 241   git svn fetch || die "'git svn fetch' failed." | 254   git svn fetch || die "'git svn fetch' failed." | 
| 242   COMMIT_HASH=$(git log -1 --format=%H --grep="$NEW_COMMIT_MSG" \ | 255   COMMIT_HASH=$(git log -1 --format=%H --grep="$NEW_COMMIT_MSG" \ | 
| 243     svn/$MERGE_TO_BRANCH) | 256     svn/$MERGE_TO_BRANCH) | 
| 244   [[ -z "$COMMIT_HASH" ]] && die "Unable to map git commit to svn revision" | 257   [[ -z "$COMMIT_HASH" ]] && die "Unable to map git commit to svn revision" | 
| 245   SVN_REVISION=$(git svn find-rev $COMMIT_HASH) | 258   SVN_REVISION=$(git svn find-rev $COMMIT_HASH) | 
| 246   echo "subversion revision number is r$SVN_REVISION" | 259   echo "subversion revision number is r$SVN_REVISION" | 
| 247   persist "SVN_REVISION" | 260   persist "SVN_REVISION" | 
| 248 fi | 261 fi | 
| 249 | 262 | 
| 250 let CURRENT_STEP+=1 | 263 let CURRENT_STEP+=1 | 
| 251 if [ $START_STEP -le $CURRENT_STEP ] ; then | 264 if [ $START_STEP -le $CURRENT_STEP ] && [ $REVERT_FROM_BLEEDING_EDGE -eq 0 ] ; t
     hen | 
| 252   echo ">>> Step $CURRENT_STEP: Create the tag." | 265   echo ">>> Step $CURRENT_STEP: Create the tag." | 
| 253   restore_if_unset "SVN_REVISION" | 266   restore_if_unset "SVN_REVISION" | 
| 254   restore_version_if_unset "NEW" | 267   restore_version_if_unset "NEW" | 
| 255   echo "Creating tag svn/tags/$NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH" | 268   echo "Creating tag svn/tags/$NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH" | 
| 256   if [ "$MERGE_TO_BRANCH" == "trunk" ] ; then | 269   if [ "$MERGE_TO_BRANCH" == "trunk" ] ; then | 
| 257     TO_URL="$MERGE_TO_BRANCH" | 270     TO_URL="$MERGE_TO_BRANCH" | 
| 258   else | 271   else | 
| 259     TO_URL="branches/$MERGE_TO_BRANCH" | 272     TO_URL="branches/$MERGE_TO_BRANCH" | 
| 260   fi | 273   fi | 
| 261   svn copy -r $SVN_REVISION \ | 274   svn copy -r $SVN_REVISION \ | 
| 262     https://v8.googlecode.com/svn/$TO_URL \ | 275     https://v8.googlecode.com/svn/$TO_URL \ | 
| 263     https://v8.googlecode.com/svn/tags/$NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH \ | 276     https://v8.googlecode.com/svn/tags/$NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH \ | 
| 264     -m "Tagging version $NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH" | 277     -m "Tagging version $NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH" | 
| 265   persist "TO_URL" | 278   persist "TO_URL" | 
| 266 fi | 279 fi | 
| 267 | 280 | 
| 268 let CURRENT_STEP+=1 | 281 let CURRENT_STEP+=1 | 
| 269 if [ $START_STEP -le $CURRENT_STEP ] ; then | 282 if [ $START_STEP -le $CURRENT_STEP ] ; then | 
| 270   echo ">>> Step $CURRENT_STEP: Cleanup." | 283   echo ">>> Step $CURRENT_STEP: Cleanup." | 
| 271   restore_if_unset "SVN_REVISION" | 284   restore_if_unset "SVN_REVISION" | 
| 272   restore_if_unset "TO_URL" | 285   restore_if_unset "TO_URL" | 
| 273   restore_if_unset "REVISION_LIST" | 286   restore_if_unset "REVISION_LIST" | 
| 274   restore_version_if_unset "NEW" | 287   restore_version_if_unset "NEW" | 
| 275   common_cleanup | 288   common_cleanup | 
| 276   echo "*** SUMMARY ***" | 289   if [ $REVERT_FROM_BLEEDING_EDGE==0 ] ; then | 
| 277   echo "version: $NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH" | 290     echo "*** SUMMARY ***" | 
| 278   echo "branch: $TO_URL" | 291     echo "version: $NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH" | 
| 279   echo "svn revision: $SVN_REVISION" | 292     echo "branch: $TO_URL" | 
| 280   [[ -n "$REVISION_LIST" ]] && echo "patches:$REVISION_LIST" | 293     echo "svn revision: $SVN_REVISION" | 
|  | 294     [[ -n "$REVISION_LIST" ]] && echo "patches:$REVISION_LIST" | 
|  | 295   fi | 
| 281 fi | 296 fi | 
| OLD | NEW | 
|---|