diff options
Diffstat (limited to 'chromium/v8/tools/push-to-trunk.sh')
-rwxr-xr-x | chromium/v8/tools/push-to-trunk.sh | 412 |
1 files changed, 0 insertions, 412 deletions
diff --git a/chromium/v8/tools/push-to-trunk.sh b/chromium/v8/tools/push-to-trunk.sh deleted file mode 100755 index c91cd19f9a7..00000000000 --- a/chromium/v8/tools/push-to-trunk.sh +++ /dev/null @@ -1,412 +0,0 @@ -#!/bin/bash -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -########## Global variable definitions - -BRANCHNAME=prepare-push -TRUNKBRANCH=trunk-push -PERSISTFILE_BASENAME=/tmp/v8-push-to-trunk-tempfile -CHROME_PATH= - -########## Function definitions - -source $(dirname $BASH_SOURCE)/common-includes.sh - -usage() { -cat << EOF -usage: $0 OPTIONS - -Performs the necessary steps for a V8 push to trunk. Only works for \ -git checkouts. - -OPTIONS: - -h Show this message - -s Specify the step where to start work. Default: 0. - -l Manually specify the git commit ID of the last push to trunk. - -c Specify the path to your Chromium src/ directory to automate the - V8 roll. -EOF -} - -########## Option parsing - -while getopts ":hs:l:c:" OPTION ; do - case $OPTION in - h) usage - exit 0 - ;; - s) START_STEP=$OPTARG - ;; - l) LASTPUSH=$OPTARG - ;; - c) CHROME_PATH=$OPTARG - ;; - ?) echo "Illegal option: -$OPTARG" - usage - exit 1 - ;; - esac -done - - -########## Regular workflow - -initial_environment_checks - -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Preparation" - common_prepare - delete_branch $TRUNKBRANCH -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Create a fresh branch." - git checkout -b $BRANCHNAME svn/bleeding_edge \ - || die "Creating branch $BRANCHNAME failed." -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Detect commit ID of last push to trunk." - [[ -n "$LASTPUSH" ]] || LASTPUSH=$(git log -1 --format=%H ChangeLog) - LOOP=1 - while [ $LOOP -eq 1 ] ; do - # Print assumed commit, circumventing git's pager. - git log -1 $LASTPUSH | cat - confirm "Is the commit printed above the last push to trunk?" - if [ $? -eq 0 ] ; then - LOOP=0 - else - LASTPUSH=$(git log -1 --format=%H $LASTPUSH^ ChangeLog) - fi - done - persist "LASTPUSH" -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Prepare raw ChangeLog entry." - # These version numbers are used again later for the trunk commit. - read_and_persist_version - - DATE=$(date +%Y-%m-%d) - persist "DATE" - echo "$DATE: Version $MAJOR.$MINOR.$BUILD" > "$CHANGELOG_ENTRY_FILE" - echo "" >> "$CHANGELOG_ENTRY_FILE" - COMMITS=$(git log $LASTPUSH..HEAD --format=%H) - for commit in $COMMITS ; do - # Get the commit's title line. - git log -1 $commit --format="%w(80,8,8)%s" >> "$CHANGELOG_ENTRY_FILE" - # Grep for "BUG=xxxx" lines in the commit message and convert them to - # "(issue xxxx)". - git log -1 $commit --format="%B" \ - | grep "^BUG=" | grep -v "BUG=$" | grep -v "BUG=none$" \ - | sed -e 's/^/ /' \ - | sed -e 's/BUG=v8:\(.*\)$/(issue \1)/' \ - | sed -e 's/BUG=chromium:\(.*\)$/(Chromium issue \1)/' \ - | sed -e 's/BUG=\(.*\)$/(Chromium issue \1)/' \ - >> "$CHANGELOG_ENTRY_FILE" - # Append the commit's author for reference. - git log -1 $commit --format="%w(80,8,8)(%an)" >> "$CHANGELOG_ENTRY_FILE" - echo "" >> "$CHANGELOG_ENTRY_FILE" - done - echo " Performance and stability improvements on all platforms." \ - >> "$CHANGELOG_ENTRY_FILE" -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Edit ChangeLog entry." - echo -n "Please press <Return> to have your EDITOR open the ChangeLog entry, \ -then edit its contents to your liking. When you're done, save the file and \ -exit your EDITOR. " - read ANSWER - $EDITOR "$CHANGELOG_ENTRY_FILE" - NEWCHANGELOG=$(mktemp) - # Eliminate any trailing newlines by going through a shell variable. - # Also (1) eliminate tabs, (2) fix too little and (3) too much indentation, - # and (4) eliminate trailing whitespace. - CHANGELOGENTRY=$(cat "$CHANGELOG_ENTRY_FILE" \ - | sed -e 's/\t/ /g' \ - | sed -e 's/^ \{1,7\}\([^ ]\)/ \1/g' \ - | sed -e 's/^ \{9,80\}\([^ ]\)/ \1/g' \ - | sed -e 's/ \+$//') - [[ -n "$CHANGELOGENTRY" ]] || die "Empty ChangeLog entry." - echo "$CHANGELOGENTRY" > "$NEWCHANGELOG" - echo "" >> "$NEWCHANGELOG" # Explicitly insert two empty lines. - echo "" >> "$NEWCHANGELOG" - cat ChangeLog >> "$NEWCHANGELOG" - mv "$NEWCHANGELOG" ChangeLog -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Increment version number." - restore_if_unset "BUILD" - NEWBUILD=$(($BUILD + 1)) - confirm "Automatically increment BUILD_NUMBER? (Saying 'n' will fire up \ -your EDITOR on $VERSION_FILE so you can make arbitrary changes. When \ -you're done, save the file and exit your EDITOR.)" - if [ $? -eq 0 ] ; then - sed -e "/#define BUILD_NUMBER/s/[0-9]*$/$NEWBUILD/" \ - -i "$VERSION_FILE" - else - $EDITOR "$VERSION_FILE" - fi - read_and_persist_version "NEW" -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Commit to local branch." - restore_version_if_unset "NEW" - PREPARE_COMMIT_MSG="Prepare push to trunk. \ -Now working on version $NEWMAJOR.$NEWMINOR.$NEWBUILD." - persist "PREPARE_COMMIT_MSG" - git commit -a -m "$PREPARE_COMMIT_MSG" \ - || die "'git commit -a' failed." -fi - -upload_step - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Commit to the repository." - wait_for_lgtm - # Re-read the ChangeLog entry (to pick up possible changes). - cat ChangeLog | awk --posix '{ - if ($0 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}:/) { - if (in_firstblock == 1) { - exit 0; - } else { - in_firstblock = 1; - } - }; - print $0; - }' > "$CHANGELOG_ENTRY_FILE" - PRESUBMIT_TREE_CHECK="skip" git cl dcommit \ - || die "'git cl dcommit' failed, please try again." -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Fetch straggler commits that sneaked in \ -since this script was started." - git svn fetch || die "'git svn fetch' failed." - git checkout svn/bleeding_edge - restore_if_unset "PREPARE_COMMIT_MSG" - PREPARE_COMMIT_HASH=$(git log -1 --format=%H --grep="$PREPARE_COMMIT_MSG") - persist "PREPARE_COMMIT_HASH" -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Squash commits into one." - # Instead of relying on "git rebase -i", we'll just create a diff, because - # that's easier to automate. - restore_if_unset "PREPARE_COMMIT_HASH" - git diff svn/trunk $PREPARE_COMMIT_HASH > "$PATCH_FILE" - # Convert the ChangeLog entry to commit message format: - # - remove date - # - remove indentation - # - merge paragraphs into single long lines, keeping empty lines between them. - restore_if_unset "DATE" - CHANGELOGENTRY=$(cat "$CHANGELOG_ENTRY_FILE") - echo "$CHANGELOGENTRY" \ - | sed -e "s/^$DATE: //" \ - | sed -e 's/^ *//' \ - | awk '{ - if (need_space == 1) { - printf(" "); - }; - printf("%s", $0); - if ($0 ~ /^$/) { - printf("\n\n"); - need_space = 0; - } else { - need_space = 1; - } - }' > "$COMMITMSG_FILE" || die "Commit message editing failed." - rm -f "$CHANGELOG_ENTRY_FILE" -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Create a new branch from trunk." - git checkout -b $TRUNKBRANCH svn/trunk \ - || die "Checking out a new branch '$TRUNKBRANCH' failed." -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Apply squashed changes." - rm -f "$TOUCHED_FILES_FILE" - apply_patch "$PATCH_FILE" - rm -f "$PATCH_FILE" -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Set correct version for trunk." - restore_version_if_unset - sed -e "/#define MAJOR_VERSION/s/[0-9]*$/$MAJOR/" \ - -e "/#define MINOR_VERSION/s/[0-9]*$/$MINOR/" \ - -e "/#define BUILD_NUMBER/s/[0-9]*$/$BUILD/" \ - -e "/#define PATCH_LEVEL/s/[0-9]*$/0/" \ - -e "/#define IS_CANDIDATE_VERSION/s/[0-9]*$/0/" \ - -i "$VERSION_FILE" || die "Patching $VERSION_FILE failed." -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Commit to local trunk branch." - git add "$VERSION_FILE" - git commit -F "$COMMITMSG_FILE" || die "'git commit' failed." - rm -f "$COMMITMSG_FILE" -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Sanity check." - confirm "Please check if your local checkout is sane: Inspect $VERSION_FILE, \ -compile, run tests. Do you want to commit this new trunk revision to the \ -repository?" - [[ $? -eq 0 ]] || die "Execution canceled." -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Commit to SVN." - git svn dcommit 2>&1 | tee >(grep -E "^Committed r[0-9]+" \ - | sed -e 's/^Committed r\([0-9]\+\)/\1/' \ - > "$TRUNK_REVISION_FILE") \ - || die "'git svn dcommit' failed." - TRUNK_REVISION=$(cat "$TRUNK_REVISION_FILE") - # Sometimes grepping for the revision fails. No idea why. If you figure - # out why it is flaky, please do fix it properly. - if [ -z "$TRUNK_REVISION" ] ; then - echo "Sorry, grepping for the SVN revision failed. Please look for it in \ -the last command's output above and provide it manually (just the number, \ -without the leading \"r\")." - while [ -z "$TRUNK_REVISION" ] ; do - echo -n "> " - read TRUNK_REVISION - done - fi - persist "TRUNK_REVISION" - rm -f "$TRUNK_REVISION_FILE" -fi - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Tag the new revision." - restore_version_if_unset - git svn tag $MAJOR.$MINOR.$BUILD -m "Tagging version $MAJOR.$MINOR.$BUILD" \ - || die "'git svn tag' failed." -fi - -if [ -z "$CHROME_PATH" ] ; then - echo ">>> (asking for Chromium checkout)" - echo -n "Do you have a \"NewGit\" Chromium checkout and want this script \ -to automate creation of the roll CL? If yes, enter the path to (and including) \ -the \"src\" directory here, otherwise just press <Return>: " - read CHROME_PATH -fi - -if [ -n "$CHROME_PATH" ] ; then - - let CURRENT_STEP+=1 - if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Switch to Chromium checkout." - V8_PATH=$(pwd) - persist "V8_PATH" - cd "$CHROME_PATH" - initial_environment_checks - # Check for a clean workdir. - [[ -z "$(git status -s -uno)" ]] \ - || die "Workspace is not clean. Please commit or undo your changes." - # Assert that the DEPS file is there. - [[ -w "DEPS" ]] || die "DEPS file not present or not writable; \ -current directory is: $(pwd)." - fi - - let CURRENT_STEP+=1 - if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Update the checkout and create a new branch." - git checkout master || die "'git checkout master' failed." - git pull || die "'git pull' failed, please try again." - restore_if_unset "TRUNK_REVISION" - git checkout -b "v8-roll-$TRUNK_REVISION" \ - || die "Failed to checkout a new branch." - fi - - let CURRENT_STEP+=1 - if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Create and upload CL." - # Patch DEPS file. - sed -r -e "/\"v8_revision\": /s/\"[0-9]+\"/\"$TRUNK_REVISION\"/" \ - -i DEPS - restore_version_if_unset - echo -n "Please enter the email address of a reviewer for the roll CL: " - read REVIEWER - git commit -am "Update V8 to version $MAJOR.$MINOR.$BUILD. - -TBR=$REVIEWER" || die "'git commit' failed." - git cl upload --send-mail \ - || die "'git cl upload' failed, please try again." - echo "CL uploaded." - fi - - let CURRENT_STEP+=1 - if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Returning to V8 checkout." - restore_if_unset "V8_PATH" - cd "$V8_PATH" - fi -fi # if [ -n "$CHROME_PATH" ] - -let CURRENT_STEP+=1 -if [ $START_STEP -le $CURRENT_STEP ] ; then - echo ">>> Step $CURRENT_STEP: Done!" - restore_version_if_unset - restore_if_unset "TRUNK_REVISION" - if [ -n "$CHROME_PATH" ] ; then - echo "Congratulations, you have successfully created the trunk revision \ -$MAJOR.$MINOR.$BUILD and rolled it into Chromium. Please don't forget to \ -update the v8rel spreadsheet:" - else - echo "Congratulations, you have successfully created the trunk revision \ -$MAJOR.$MINOR.$BUILD. Please don't forget to roll this new version into \ -Chromium, and to update the v8rel spreadsheet:" - fi - echo -e "$MAJOR.$MINOR.$BUILD\ttrunk\t$TRUNK_REVISION" - common_cleanup - [[ "$TRUNKBRANCH" != "$CURRENT_BRANCH" ]] && git branch -D $TRUNKBRANCH -fi |