141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org#!/bin/bash 241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# Copyright 2013 the V8 project authors. All rights reserved. 341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# Redistribution and use in source and binary forms, with or without 441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# modification, are permitted provided that the following conditions are 541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# met: 641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# 741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# * Redistributions of source code must retain the above copyright 841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# notice, this list of conditions and the following disclaimer. 941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# * Redistributions in binary form must reproduce the above 1041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# copyright notice, this list of conditions and the following 1141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# disclaimer in the documentation and/or other materials provided 1241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# with the distribution. 1341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# * Neither the name of Google Inc. nor the names of its 1441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# contributors may be used to endorse or promote products derived 1541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# from this software without specific prior written permission. 1641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# 1741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 2941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 3041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org########## Global variable definitions 3141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 3241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgBASE_URL="https://code.google.com/p/v8/source/list" 3341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgVERSION="src/version.cc" 3441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgMAJOR="MAJOR_VERSION" 3541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgMINOR="MINOR_VERSION" 3641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgBUILD="BUILD_NUMBER" 3741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgPATCH="PATCH_LEVEL" 3841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 3941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgV8="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" 4041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 4141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org########## Function definitions 4241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 4341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgcd $V8 4441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 4541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgusage() { 4641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgcat << EOF 4741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgusage: $0 OPTIONS 4841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 4941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgFetches V8 revision information from a git-svn checkout. 5041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 5141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgOPTIONS: 5241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org -h Show this message. 5341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 5441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org -i Print revision info for all branches matching the V8 version. 5541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org Example usage: $0 -i 3.19.10$ 5641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org Output format: [Git hash] [SVN revision] [V8 version] 5741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 5841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org -v Print the V8 version tag for a trunk SVN revision. 5941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org Example usage: $0 -v 14981 6041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org Output format: [V8 version] 6141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 6241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org -m Print all patches that were merged to the specified V8 branch. 6341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org Example usage: $0 -m 3.18 6441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org Output format: [V8 version] [SVN revision] [SVN patch merged]*. 6541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 6641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org -p Print all patches merged to a specific V8 point-release. 6741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org Example usage: $0 -p 3.19.12.1 6841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org Output format: [SVN patch merged]* 6941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 7041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org -u Print a link to all SVN revisions between two V8 revision tags. 7141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org Example usage: $0 -u 3.19.10:3.19.11 7241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgEOF 7341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 7441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 7541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgtags() { 7641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org git for-each-ref --format="%(objectname) %(refname:short)" refs/remotes/svn 7741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 7841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 7941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgtag_revision() { 8041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org cut -d" " -f1 8141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 8241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 8341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgtag_log() { 8441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org git log --format="%h %ci %ce %s" -1 $1 8541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 8641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 8741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgv8_hash() { 8841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org tags | grep "svn/tags/$1$" | tag_revision 8941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 9041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 9141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgpoint_merges() { 9241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org echo $1 | grep -o "r[0-9]\+" 9341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 9441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 9541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orghash_to_svn() { 9641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org git svn log -1 --oneline $1 | cut -d" " -f1 9741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 9841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 9941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgtag_version() { 10041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org tags | grep svn/tags/$1 | while read tag; do 10141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org id=$(echo $tag | grep -o "[^/]*$") 10241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org rev=$(echo $tag | tag_revision) 10341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org svn=$(hash_to_svn $rev) 10441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org echo $rev $svn $id 10541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org done 10641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 10741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 10841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgsvn_rev() { 10941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org git svn find-rev $2 svn/$1 11041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 11141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 11241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgv8_rev() { 11341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org cd $(git rev-parse --show-toplevel) 11441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org rev=$(git show $1:$VERSION \ 11541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org | grep "#define" \ 11641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org | grep "$MAJOR\|$MINOR\|$BUILD\|$PATCH" \ 11741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org | grep -o "[0-9]\+$" \ 11841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org | tr "\\n" ".") 11941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org echo ${rev%?} 12041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 12141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 12241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgmerges_to_branch() { 12341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org git cherry -v svn/trunk svn/$1 | while read merge; do 12441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org h=$(echo $merge | cut -d" " -f2) 12541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org svn=$(svn_rev $1 $h) 12641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org merges=$(echo $merge | grep -o "r[0-9]\+") 12741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org rev=$(v8_rev $h) 12841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org echo $rev r$svn $merges 12941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org done 13041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 13141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 13241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgurl_for() { 13341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org first=$(svn_rev trunk $(v8_hash $(echo $1 | cut -d":" -f1))) 13441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org last=$(svn_rev trunk $(v8_hash $(echo $1 | cut -d":" -f2))) 13541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org num=$[ $last - $first] 13641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org echo "$BASE_URL?num=$num&start=$last" 13741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 13841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 13941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org########## Option parsing 14041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 14141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgwhile getopts ":hi:v:m:p:u:" OPTION ; do 14241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org case $OPTION in 14341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org h) usage 14441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org exit 0 14541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org ;; 14641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org i) tag_version $OPTARG 14741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org ;; 14841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org v) v8_rev $(svn_rev trunk r$OPTARG) 14941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org ;; 15041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org m) merges_to_branch $OPTARG 15141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org ;; 15241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org p) echo $(point_merges "$(tag_log $(v8_hash $OPTARG)^1)") 15341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org ;; 15441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org u) url_for $OPTARG 15541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org ;; 15641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org ?) echo "Illegal option: -$OPTARG" 15741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org usage 15841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org exit 1 15941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org ;; 16041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org esac 16141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgdone 162