From dac82c56509227de5a5328647d7028a9e719a3b4 Mon Sep 17 00:00:00 2001 From: "verwaest@chromium.org" Date: Wed, 12 Jun 2013 10:39:52 +0000 Subject: [PATCH] Adding useful scripts to parse revision info. R=jkummerow@chromium.org Review URL: https://chromiumcodereview.appspot.com/16812003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15078 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- tools/v8-info.sh | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/v8-rolls.sh | 120 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 255 insertions(+) create mode 100755 tools/v8-info.sh create mode 100755 tools/v8-rolls.sh diff --git a/tools/v8-info.sh b/tools/v8-info.sh new file mode 100755 index 0000000..9b9eeb1 --- /dev/null +++ b/tools/v8-info.sh @@ -0,0 +1,135 @@ +#!/bin/bash +# Copyright 2013 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 + +VERSION="src/version.cc" +MAJOR="MAJOR_VERSION" +MINOR="MINOR_VERSION" +BUILD="BUILD_NUMBER" +PATCH="PATCH_LEVEL" + +V8="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +########## Function definitions + +cd $V8 + +usage() { +cat << EOF +usage: $0 OPTIONS + +Fetches V8 revision information from a git-svn checkout. + +OPTIONS: + -h Show this message. + -i Print revision info for all branches matching the V8 version. + -v Print the V8 version tag for a trunk SVN revision. + -m Print all patches that were merged to the specified V8 branch. + -p Print all patches merged to a specific V8 point-release. +EOF +} + +tags() { + git for-each-ref --format="%(objectname) %(refname:short)" refs/remotes/svn +} + +tag_revision() { + cut -d" " -f1 +} + +tag_log() { + git log --format="%h %ci %ce %s" -1 $1 +} + +v8_hash() { + tags | grep "svn/tags/$1$" | tag_revision +} + +point_merges() { + echo $1 | grep -o "r[0-9]\+" +} + +hash_to_svn() { + git svn log -1 --oneline $1 | cut -d" " -f1 +} + +tag_version() { + tags | grep svn/tags/$1 | while read tag; do + id=$(echo $tag | grep -o "[^/]*$") + rev=$(echo $tag | tag_revision) + svn=$(hash_to_svn $rev) + echo $rev $svn $id + done +} + +svn_rev() { + git svn find-rev $2 svn/$1 +} + +v8_rev() { + cd $(git rev-parse --show-toplevel) + rev=$(git show $1:$VERSION \ + | grep "#define" \ + | grep "$MAJOR\|$MINOR\|$BUILD\|$PATCH" \ + | grep -o "[0-9]\+$" \ + | tr "\\n" ".") + echo ${rev%?} +} + +merges_to_branch() { + git cherry -v svn/trunk svn/$1 | while read merge; do + h=$(echo $merge | cut -d" " -f2) + svn=$(svn_rev $1 $h) + merges=$(echo $merge | grep -o "r[0-9]\+") + echo branches/$1 r$svn $merges + done +} + +########## Option parsing + +while getopts ":hi:v:m:p:" OPTION ; do + case $OPTION in + h) usage + exit 0 + ;; + i) tag_version $OPTARG + ;; + v) v8_rev $(svn_rev trunk r$OPTARG) + ;; + m) merges_to_branch $OPTARG + ;; + p) point_merges "$(tag_log $(v8_hash $OPTARG)^1)" + ;; + ?) echo "Illegal option: -$OPTARG" + usage + exit 1 + ;; + esac +done diff --git a/tools/v8-rolls.sh b/tools/v8-rolls.sh new file mode 100755 index 0000000..590e05c --- /dev/null +++ b/tools/v8-rolls.sh @@ -0,0 +1,120 @@ +#!/bin/bash +# Copyright 2013 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 + +DEPS_STRING='"v8_revision":' +INFO=tools/v8-info.sh + +V8="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +########## Function definitions + +usage() { +cat << EOF +usage: $0 OPTIONS + +Run in chromium/src to get information about V8 rolls. + +OPTIONS: + -h Show this message. + -n Number of rolls to print information about. + -s Chromium git hash to start printing V8 information about. +EOF +} + +v8_line() { + git show $1:DEPS | grep -n $DEPS_STRING | cut -d":" -f1 +} + +v8_info() { + git blame -L$(v8_line $1),+1 $1 DEPS | grep $DEPS_STRING +} + +v8_svn() { + sed -e 's/^.*"\([0-9]\+\)",$/\1/' +} + +v8_roll() { + cut -d" " -f1 +} + +find_rev() { + git svn find-rev $1 +} + +msg() { + msg=$(git log --format="%h %ci %ce" -1 $1) + h=$(echo $msg | cut -d" " -f1) + d=$(echo $msg | cut -d" " -f2) + t=$(echo $msg | cut -d" " -f3) + a=$(echo $msg | cut -d" " -f5) + a1=$(echo $a | cut -d"@" -f1) + a2=$(echo $a | cut -d"@" -f2) + echo $h $d $t $a1@$a2 +} + +v8_revision() { + cd $V8 + $INFO -v $1 +} + +rolls() { + roll=$2 + for i in $(seq 1 $1); do + info=$(v8_info $roll) + roll=$(echo $info | v8_roll $roll) + trunk=$(echo $info | v8_svn $roll) + echo "$(v8_revision $trunk) $trunk $(find_rev $roll) $(msg $roll)" + roll=$roll^1 + done +} + +########## Option parsing + +REVISIONS=1 +START=HEAD + +while getopts ":hn:s:" OPTION ; do + case $OPTION in + h) usage + exit 0 + ;; + n) REVISIONS=$OPTARG + ;; + s) START=$OPTARG + ;; + ?) echo "Illegal option: -$OPTARG" + usage + exit 1 + ;; + esac +done + +rolls $REVISIONS $START -- 2.7.4