| Index: tools/dartium/start_dartium_roll.sh
|
| diff --git a/tools/dartium/start_dartium_roll.sh b/tools/dartium/start_dartium_roll.sh
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..41aebbf78a975bcd9a66f0ec07c4acb55a5171f8
|
| --- /dev/null
|
| +++ b/tools/dartium/start_dartium_roll.sh
|
| @@ -0,0 +1,999 @@
|
| +#!/bin/bash -e
|
| +
|
| +# Requirements:
|
| +# sudo apt-get install xclip
|
| +
|
| +
|
| +# e.g. 1908 ROLL
|
| +# ./start_dartium_roll.sh --verbose --directory ~/dartium-roll --old-branch 1847 --old-revision 251904 --new-branch 1908 --new-revision 259084 --chrome --pre-roll
|
| +# ./start_dartium_roll.sh --verbose --directory ~/dartium-roll --old-branch 1847 --old-revision 251904 --new-branch 1908 --new-revision 259084 --chrome --roll
|
| +# ./start_dartium_roll.sh --verbose --directory ~/dartium-roll --old-branch 1847 --old-revision 251904 --new-branch 1908 --new-revision 259084 --chrome --info
|
| +# ./start_dartium_roll.sh --verbose --directory ~/dartium-roll --old-branch 1847 --old-revision 167304 --new-branch 1908 --new-revision 169907 --blink --pre-roll
|
| +# ./start_dartium_roll.sh --verbose --directory ~/dartium-roll --old-branch 1847 --old-revision 167304 --new-branch 1908 --new-revision 169907 --blink --roll
|
| +# ./start_dartium_roll.sh --verbose --directory ~/dartium-roll --old-branch 1847 --old-revision 167304 --new-branch 1908 --new-revision 169907 --blink --info
|
| +
|
| +# e.g., 1916 ROLL
|
| +# ~/./start_dartium_roll.sh --verbose --directory /media/TB/dartium-1916 --old-branch 1908 --old-revision 259084 --new-branch 1916 --new-revision 260298 --chrome --pre-roll
|
| +
|
| +# ~/./start_dartium_roll.sh --verbose --directory /media/TB/dartium-1916 --old-branch 1908 --old-revision 169907 --new-branch 1916 --new-revision 170313 --blink --pre-roll
|
| +
|
| +E_INVALID_ARG=128
|
| +
|
| +function usage {
|
| + echo "Usage: $0 [--options]"
|
| + echo "Options:"
|
| + echo " --[no-]verbose: display information about each step"
|
| + echo " --directory base: base directory of local git repository"
|
| + echo " (e.g., ~/dartium-roll implies directory"
|
| + echo " ~/dartium-roll/src and"
|
| + echo " ~/dartium-roll/src/third_party/WebKit)**"
|
| + echo " --chrome: for the Chrome branch (not with --blink)**"
|
| + echo " --blink: for the Blink branch (not with --chrome)**"
|
| + echo " --old-branch name: name of previous true branch (e.g., use 1847"
|
| + echo " for version 34.0.1847.92) *"
|
| + echo " --old-revision revision: revision of base trunk for $OLD version *"
|
| + echo " --new-branch name: name of new true branch to create *"
|
| + echo " --new-revision revision: revision of base trunk for new branch *"
|
| + echo " --pre-roll: display commands to prepare for the roll"
|
| + echo " --roll: display Git commands to execute for creating"
|
| + echo " branches for the roll"
|
| + echo " --info: display hashes for $BASE and $LAST on each"
|
| + echo " branch (stripped$OLD, trunkdata$OLD, and"
|
| + echo " trunkdata$NEW)"
|
| + echo " --help: this message"
|
| + echo
|
| + echo "* - required"
|
| + echo
|
| + echo "* Script will prompt interactively if options not given."
|
| + echo "** Argument must be specified."
|
| + echo
|
| + exit 1
|
| +}
|
| +
|
| +
|
| +function verbose_message {
|
| + if [ "$do_verbose" = 1 ]; then
|
| + if [ "${1}" = "" ]; then
|
| + echo
|
| + else
|
| + echo -e "...${1}..."
|
| + fi
|
| + fi
|
| +}
|
| +
|
| +
|
| +# Does the file src/.git/config contains the added lines pointing to the chrome
|
| +# remote dart$OLD and dart$NEW branches for src/ (e.g, dart1847 and dart1908):
|
| +#
|
| +# [svn-remote "dart$OLD"]
|
| +# url = svn://svn.chromium.org/chrome/branches/dart/$OLD/src
|
| +# fetch = :refs/remotes/dart1847
|
| +# [svn-remote "dart$NEW"]
|
| +# url = svn://svn.chromium.org/chrome/branches/dart/$NEW/src
|
| +# fetch = :refs/remotes/dart1908
|
| +#
|
| +# and does the file src/third_party/WebKit/.git/config contains the added lines
|
| +# for blink:
|
| +#
|
| +# [svn-remote "dart$OLD"]
|
| +# url = svn://svn.chromium.org/blink/branches/dart/$OLD/src
|
| +# fetch = :refs/remotes/dart1847
|
| +# [svn-remote "dart$NEW"]
|
| +# url = svn://svn.chromium.org/blink/branches/dart/$NEW/src
|
| +# fetch = :refs/remotes/dart1908
|
| +#
|
| +function validate_remotes {
|
| + verbose_message "Validating Remotes"
|
| +
|
| + if [ "$do_which" = "chrome" ]; then
|
| + # Ensure remote for old Dartium release exist (e.g., remotes/dart1847)
|
| + remote_dart_last=$(git branch -a | grep "remotes/dart${do_old_branch}")
|
| + # Ensure remote for new Dartium release exist (e.g., remotes/dart1908)
|
| + remote_dart_new=$(git branch -a | grep "remotes/dart${do_new_branch}")
|
| + if [ "$remote_dart_last" = "" ]; then
|
| + $(display_error "missing old remotes/dart${do_old_branch}")
|
| + exit -1
|
| + fi
|
| + if [ "$remote_dart_new" = "" ]; then
|
| + $(display_error "missing new remotes/dart${do_new_branch}")
|
| + exit -1
|
| + fi
|
| + elif [ "$do_which" = "blink" ]; then
|
| + # Ensure remote for old Dartium release exist (e.g., remotes/dart1847)
|
| + remote_dart_last=$(git branch -a | grep "remotes/blink-svn/${do_old_branch}")
|
| + # Ensure remote for new Dartium release exist (e.g., remotes/dart1908)
|
| + remote_dart_new=$(git branch -a | grep "remotes/blink-svn/multivm-${do_new_branch}")
|
| +
|
| + if [ "$remote_dart_last" = "" ]; then
|
| + $(display_error "missing old remotes/blink-svn/${do_old_branch}")
|
| + exit -1
|
| + fi
|
| + if [ "$remote_dart_new" = "" ]; then
|
| + $(display_error "missing new remotes/blink-svn/multivm-${do_new_branch}")
|
| + exit -1
|
| + fi
|
| + else
|
| + $(display_error "--chrome or --blink must be specified")
|
| + exit -1
|
| + fi
|
| +}
|
| +
|
| +function stripped_exist {
|
| + local branch_name=$(git branch --no-color --list $(stripped_name) | sed 's/^[ \t\*]*//')
|
| + echo $branch_name
|
| +}
|
| +
|
| +# Does the branch trunkdart$OLD or trunkdart$NEW exist where $OLD is previous
|
| +# branch (e.g. 1847) and $NEW is new branch to roll (e.g., 1908)
|
| +# $(trunk_exist ${do_old_branch}) or $(trunk_exist ${do_new_branch})
|
| +# Strip out the spaces and * (implies current branch) then return the branch name.
|
| +function trunk_exist {
|
| + local branch_name=$(git branch --list --no-color trunkdart${1} | sed 's/^[ \t\*]*//' | tail -n 1)
|
| + echo $branch_name
|
| +}
|
| +
|
| +function validate_repository {
|
| + verbose_message "Validating Repository"
|
| +
|
| + strip_branch=${stripped_name}
|
| +
|
| + # Validate that branches exist.
|
| + stripped_found=${stripped_exist}
|
| + old_branch_found=$(trunk_exist ${do_old_branch})
|
| + new_branch_found=$(trunk_exist ${do_new_branch})
|
| +
|
| + if [ "$stripped_found" != "" ]; then
|
| + $(display_error "branch ${strip_branch} already exist")
|
| + exit -1
|
| + fi
|
| +
|
| + if [ "$old_branch_found" != "" ]; then
|
| + $(display_error "branch trunkdart${do_old_branch} already exist")
|
| + exit -1
|
| + fi
|
| +
|
| + if [ "$new_branch_found" != "" ]; then
|
| + $(display_error "branch trunkdart${do_new_branch} already exist")
|
| + exit -1
|
| + fi
|
| +}
|
| +
|
| +function display_error() {
|
| + echo -e "\n\e[1;31mERROR: ${1}\e[0m\n" >&2
|
| + exit 1
|
| +}
|
| +
|
| +
|
| +# Given a revision number $1 return the trunk's hash code for that revision.
|
| +function hash_trunk_revision {
|
| + # Chrome trunk hash code for [NewChromeCommit]
|
| + hash_trunk=$(git log master --grep=src@${1} --pretty=format:'%H' -n 1)
|
| +}
|
| +
|
| +
|
| +# Return the last revision for a branch. Used by new trunk roll for the
|
| +# DEPS file for the last revision to use during build.
|
| +function last_revision() {
|
| + echo $(git svn log ${1} --oneline -1 | cut -d '|' -f1 | sed "s/r//")
|
| +}
|
| +
|
| +
|
| +# Return the branch for strippedOOOO use bash line:
|
| +# $(stripped_name)
|
| +function stripped_name {
|
| + echo "stripped${do_old_branch}"
|
| +}
|
| +
|
| +
|
| +# Give a branch name return the trunk release for that branch.
|
| +function trunkdart_name {
|
| + echo "trunkdart${1}"
|
| +}
|
| +
|
| +
|
| +# Compute the hash codes for the previous branch hash_base is the first commit
|
| +# and hash_last is final commit.
|
| +function hash_codes_base_last {
|
| + # Get the first commit for previous Dartium roll on chrome branch.
|
| + hash_base=$(git rev-list ${1} --pretty=format:'%H' | tail -n 1)
|
| +
|
| + # Get the last commit for previous Dartium roll on chrome branch.
|
| + hash_last=$(git log ${1} --pretty=format:'%H' -1)
|
| +}
|
| +
|
| +
|
| +# Compute the hash codes for the previous branch hash_base is the first commit
|
| +# and hash_last is final commit.
|
| +function hash_codes_base2_last2 {
|
| + # Get the last commit for previous Dartium roll on chrome branch.
|
| + hash_last2=$(git log ${1} --pretty=format:'%H' -1)
|
| +
|
| + local search
|
| + if [ "$do_which" = "chrome" ]; then
|
| + search="chrome/trunk/src@${do_old_revision}"
|
| + else
|
| + search="blink/branches/dart/multivm-${do_new_revision}@${do_old_revision}"
|
| + fi
|
| +
|
| + # Get the first commit for previous Dartium roll on chrome branch.
|
| + hash_base2=$(git log ${1} --grep=@${do_old_revision} --pretty=format:'%H' | tail -1)
|
| +}
|
| +
|
| +
|
| +# Pad right/left up to 80 spaces.
|
| +# Parameter $1 string to pad.
|
| +# Parameter $2 is max length to post-pad with spaces.
|
| +# Parameter $3 if specified padd to the right otherwise pad to the right.
|
| +# Returns string right padded with spaces.
|
| +function space_pad() {
|
| + local spaces=$(printf '%0.1s' " "{1..80})
|
| + local spaces_pad=${spaces:0:$2}
|
| + local padding=$(printf "%s" "${spaces_pad:${#1}}")
|
| +
|
| + if [[ "$3" = "" ]]; then
|
| + # Pad to the right [default].
|
| + echo "${1}${padding}"
|
| + else
|
| + # Pad to the left.
|
| + echo "${padding}${1}"
|
| + fi
|
| +}
|
| +
|
| +
|
| +# Format the line '| URL: <url> |'.
|
| +# Paramter $1 - url to format
|
| +# Returns the formatted and space padded line for display_hashes.
|
| +function display_url() {
|
| + # Line length is 65, skipped # 9 characters at beginning '| URL: '
|
| + # and last character '|'. Up to 55 characters of padding.
|
| + local format_url=$(space_pad $1 55)
|
| + local valid_url=$(valid_branch_url $1)
|
| + if [[ "$valid_url" = "" ]]; then
|
| + # Error format padding is same as above remote_url 55;
|
| + local format_err=$(space_pad "WARNING ON TRUNK - FIX IMMEDIATELY" 55)
|
| + # Output in red, the problem, both lines the URL and the warning message.
|
| + echo -e "| URL: \e[1;31m${format_url}\e[0m|\n| \e[1;31m${format_err}\e[0m|"
|
| + else
|
| + # URL looks good.
|
| + echo "| URL: ${format_url}|"
|
| + fi
|
| +}
|
| +
|
| +
|
| +function display_hashes {
|
| + if [ "$do_info_hashes" = 1 ]; then
|
| + local format_which=$(space_pad $do_which 6 1)
|
| + stripped_branch=$(stripped_name)
|
| + # stripped$OLD found
|
| + stripped_found=$(stripped_exist)
|
| + if [ "$stripped_found" != "" ]; then
|
| + hash_codes_base_last ${stripped_branch}
|
| + hash_trunk_revision ${do_old_revision}
|
| + # Display the first/last commit hash for stripped$OLD branch and the
|
| + # trunk hash for $OLD@do_last_revsion.
|
| + echo "================================================================="
|
| + local format_branch=$(space_pad $stripped_branch 32 1)
|
| + echo "| \$OLD: ${format_which} dart${do_old_branch}@${do_old_revision}${format_branch} |"
|
| + local remote_url=$(url_branch $stripped_branch)
|
| +
|
| +# TODO(terry): Testing failure below remove before checkin
|
| +# local remote_url=$(url_branch "master")
|
| +
|
| + echo "$(display_url $remote_url)"
|
| + echo "|---------------------------------------------------------------|"
|
| + local format_hash=$(space_pad $hash_base 51)
|
| + echo "| \$BASE | ${format_hash} |"
|
| + echo "|---------------------------------------------------------------|"
|
| + format_hash=$(space_pad $hash_last 51)
|
| + echo "| \$LAST | ${format_hash} |"
|
| + echo "================================================================="
|
| + echo
|
| + else
|
| + echo "${stripped_branch} not found"
|
| + echo
|
| + fi
|
| +
|
| + # trunkdart$OLD found
|
| + branch_trunkdart_old=$(trunkdart_name ${do_old_branch})
|
| + old_branch_found=$(trunk_exist ${do_old_branch})
|
| + if [ "$old_branch_found" != "" ]; then
|
| + hash_codes_base2_last2 ${branch_trunkdart_old}
|
| + hash_trunk_revision ${do_old_revision}
|
| + # Display the first/last commit hash for trunkdart$OLD branch and the
|
| + # trunk hash for $OLD@do_last_revsion.
|
| + echo "================================================================="
|
| + local format_branch=$(space_pad $branch_trunkdart_old 32 1)
|
| + echo "| \$OLD ${format_which} dart${do_old_branch}@${do_old_revision}${format_branch} |"
|
| + local remote_url=$(url_branch $branch_trunkdart_old)
|
| + echo "$(display_url $remote_url)"
|
| + echo "|---------------------------------------------------------------|"
|
| + local format_base2=$(space_pad $hash_base2 51)
|
| + echo "| \$BASE2 | ${format_base2} |"
|
| + echo "|---------------------------------------------------------------|"
|
| + local format_last2=$(space_pad $hash_last2 51)
|
| + echo "| \$LAST2 | ${format_last2} |"
|
| + echo "================================================================="
|
| + echo
|
| + else
|
| + echo "${branch_trunkdart_old} not found"
|
| + echo
|
| + fi
|
| +
|
| + # trunkdart$NEW found
|
| + branch_trunkdart_new=$(trunkdart_name ${do_new_branch})
|
| + new_branch_found=$(trunk_exist ${do_new_branch})
|
| + if [ "$new_branch_found" != "" ]; then
|
| + hash_trunk_revision ${do_new_revision}
|
| + # Display the trunk hash for $NEW@do_new_revsion.
|
| + echo "================================================================="
|
| + local format_branch=$(space_pad $branch_trunkdart_new 32 1)
|
| + echo "| \$NEW ${format_which} dart${do_new_branch}@${do_new_revision}${format_branch} |"
|
| + local remote_url=$(url_branch $branch_trunkdart_new)
|
| + echo "$(display_url $remote_url)"
|
| + echo "|---------------------------------------------------------------|"
|
| + local revision=$(last_revision $branch_trunkdart_new)
|
| + local format_revision=$(space_pad $revision 43)
|
| + echo "| last revision | ${format_revision} |"
|
| + echo "================================================================="
|
| + echo
|
| + else
|
| + echo "${branch_trunkdart_new} not found"
|
| + echo
|
| + fi
|
| + fi
|
| +}
|
| +
|
| +
|
| +function switch_branch() {
|
| + $(git checkout ${1} --quiet)
|
| + local curr_branch=$(git name-rev --name-only HEAD)
|
| + if [[ "$curr_branch" != "$1" ]]; then
|
| + $(display_error "Unable to switch to branch $1 - pending commits/add?")
|
| + exit -1
|
| + fi
|
| + echo $curr_branch
|
| +}
|
| +
|
| +
|
| +# Check that the branch is not pointing to either blink or chrome trunk.
|
| +# These branches should be pointing to either:
|
| +# svn://svn.chromium.org/chrome/branches/dart/NNNN
|
| +# svn://svn.chromium.org/blink/branches/dart/NNNN
|
| +#
|
| +# $1 parameter - branch-name to make current branch and check repository
|
| +# name.
|
| +function check_branch() {
|
| + local old_branch=$(git name-rev --name-only HEAD)
|
| + local curr_branch=$(switch_branch $1)
|
| + local trunk_url;
|
| +
|
| + if [ "$do_which" = "chrome" ]; then
|
| + # Chrome
|
| + trunk_url='Committing to svn://svn.chromium.org/chrome/trunk/src ...'
|
| + elif [ "$do_which" = "blink" ]; then
|
| + # Blink
|
| + trunk_url='Committing to svn://svn.chromium.org/blink/trunk ...'
|
| + else
|
| + $(display_error "Neither blink or chrome specified")
|
| + exit -1
|
| + fi
|
| +
|
| + local remote_commit=$(git svn dcommit --dry-run | head -1 | grep "${trunk_url}")
|
| +
|
| + curr_branch=$(switch_branch $old_branch)
|
| + if [[ "$curr_branch" != "$old_branch" ]]; then
|
| + $(display_error "Unable to switch back to original branch ${old_branch}")
|
| + exit -1
|
| + fi
|
| +
|
| + if [[ "$remote_commit" != "" ]]; then
|
| + $(display_error "Branch ${1} is NOT pointing to the Dart branch repository but pointing to trunk.")
|
| + exit -1
|
| + fi
|
| +
|
| + echo "Local branch '${1}' is based on the remote branch/dart repository."
|
| +}
|
| +
|
| +
|
| +# Given an URL of a remote repository passed as parameter $1 (e.g., from
|
| +# url_branch function) return the URL passed in if valid or return empty
|
| +# string "".
|
| +function valid_branch_url() {
|
| + # Compute what the remote repository should be:
|
| + # svn://svn.chromium.org/${do_which}/branches/dart/${do_old_branch}/src
|
| + # e.g., svn://svn.chromium.org/chrome/branches/dart/1847/src
|
| + # or blink:
|
| + # svn://svn.chromium.org/blink/branches/dart/${do_old_branch}
|
| + # e.g., svn://svn.chromium.org/blink/branches/dart/1847
|
| + local src_dir=""
|
| + if [[ "$do_which" = "chrome" ]]; then
|
| + src_dir="/src"
|
| + fi
|
| + local old_remote="svn://svn.chromium.org/${do_which}/branches/dart/${do_old_branch}${src_dir}"
|
| + local new_remote="svn://svn.chromium.org/${do_which}/branches/dart/${do_new_branch}${src_dir}"
|
| +
|
| + echo $(echo "$1" | grep -e "${old_remote}" -e "${new_remote}")
|
| +}
|
| +
|
| +
|
| +# Returns the remote repository URL associated with a branch.
|
| +# Parameter $1 is the branch name.
|
| +function url_branch() {
|
| + local old_branch=$(git name-rev --name-only HEAD)
|
| + local curr_branch=$(switch_branch $1)
|
| +
|
| + local remote_commit=$(git svn dcommit --dry-run | head -1 | sed 's/Committing to //' | sed 's/ ...//')
|
| +
|
| + curr_branch=$(switch_branch $old_branch)
|
| +
|
| + echo "${remote_commit}"
|
| +}
|
| +
|
| +
|
| +# Ensure that any created branches (stripped$OLD, trunkdart$OLD and
|
| +# trunkdart$NEW) are not pointing to either the blink or chrome trunks.
|
| +function validate_branches() {
|
| + # stripped branch
|
| + local stripped_found=$(stripped_exist)
|
| + if [ "$stripped_found" != "" ]; then
|
| + local branch_name=$(stripped_name)
|
| + local check_result=$(check_branch ${branch_name})
|
| + printf "%s\n" "$check_result"
|
| + fi
|
| +
|
| + # trunkdart$OLD
|
| + local branch_trunkdart_old=$(trunkdart_name ${do_old_branch})
|
| + local old_branch_found=$(trunk_exist ${do_old_branch})
|
| + if [ "$old_branch_found" != "" ]; then
|
| + local check_result=$(check_branch $branch_trunkdart_old)
|
| + printf "%s\n" "$check_result"
|
| + fi
|
| +
|
| + # trunkdart$NEW
|
| + local branch_trunkdart_new=$(trunkdart_name ${do_new_branch})
|
| + local new_branch_found=$(trunk_exist ${do_new_branch})
|
| + if [ "$new_branch_found" != "" ]; then
|
| + local check_result=$(check_branch $branch_trunkdart_new)
|
| + printf "%s\n" "$check_result"
|
| + fi
|
| +}
|
| +
|
| +
|
| +function display_roll_commands() {
|
| + if [ "$roll_branches" = 1 ]; then
|
| + if [ "$do_which" = "chrome" ]; then
|
| + roll_chrome_commands
|
| + elif [ "$do_which" = "blink" ]; then
|
| + roll_blink_commands
|
| + fi
|
| + fi
|
| +}
|
| +
|
| +
|
| +# Show commands to create SVN branch folder and remote repository for new roll.
|
| +function display_remote_repository_creation() {
|
| +# TODO(terry): Use the diretory passed in instead of hard-coded dartium-NNNN
|
| +# TODO(terry): Should execute each command with a Y or N and command runs.
|
| +# TODO(terry): Echo output from commands especially clone and rebase using "OUTPUT=$(git cl rebase); echo $OUTPUT"
|
| +# TODO(terry): Add ability to copy to clipboard programmatically us 'echo "hi" | xclip -selection clipboard'
|
| +# copies hi to clipboard.
|
| + echo "Do the following pre-roll setup"
|
| + if [ "$do_which" = "chrome" ]; then
|
| + echo " mkdir dartium-${do_new_branch}"
|
| + echo " cd dartium-${do_new_branch}"
|
| + echo " svn mkdir -m \"Preparing Chrome 35/${do_new_branch} branch\" "\
|
| + "svn://svn.chromium.org/chrome/branches/dart/${do_new_branch}"
|
| + echo " svn cp -m \"Branching for ${do_new_branch} @${do_new_revision}\" "\
|
| + "svn://svn.chromium.org/chrome/trunk/src@${do_new_revision} "\
|
| + "svn://svn.chromium.org/chrome/branches/dart/${do_new_branch}/src"
|
| + echo " git svn clone -r241107 svn://svn.chromium.org/chrome/trunk/src src"
|
| + echo
|
| + echo " cd src"
|
| + echo " git cl rebase"
|
| + echo
|
| + echo "-----After rebase finishes-----"
|
| + echo
|
| + echo " 1. Add the below lines to src/.git/config"
|
| + echo
|
| + echo "[svn-remote \"dart${do_old_branch}\"]"
|
| + echo " url = svn://svn.chromium.org/chrome/branches/dart/${do_old_branch}/src"
|
| + echo " fetch = :refs/remotes/dart${do_old_branch}"
|
| + echo "[svn-remote \"dart${do_new_branch}\"]"
|
| + echo " url = svn://svn.chromium.org/chrome/branches/dart/${do_new_branch}/src"
|
| + echo " fetch = :refs/remotes/dart${do_new_branch}"
|
| + echo
|
| + echo " 2. Get the code"
|
| + echo
|
| + echo " cd src"
|
| + echo " git svn fetch dart${do_old_branch} && git svn fetch dart${do_new_branch}"
|
| + elif [ "$do_which" = "blink" ]; then
|
| + echo " Directory dartium-${do_new_branch} exists."
|
| + echo " cd dartium-${do_new_branch}"
|
| + echo " svn cp -m \"Branching ${do_new_branch} @${do_new_revision}\" "\
|
| + "svn://svn.chromium.org/blink/trunk@${do_new_revision} "\
|
| + "svn://svn.chromium.org/blink/branches/dart/${do_new_branch}"
|
| +
|
| + echo " git svn clone --trunk=trunk --branches=branches/dart"\
|
| + " --prefix=blink-svn/ -r165883:HEAD " \
|
| + "svn://svn.chromium.org/blink src/third_party/WebKit"
|
| + echo
|
| + echo " cd src/third_party/WebKit"
|
| + echo " git cl rebase"
|
| + echo
|
| + echo "-----After rebase finishes-----"
|
| + echo
|
| + echo " 1. Add the below lines to src/third_party/WebKit/.git/config"
|
| + echo
|
| + echo "[svn-remote \"dart${do_old_branch}\"]"
|
| + echo " url = svn://svn.chromium.org/blink/branches/dart/${do_old_branch}"
|
| + echo " fetch = :refs/remotes/dart${do_old_branch}"
|
| + echo "[svn-remote \"dart${do_new_branch}\"]"
|
| + echo " url = svn://svn.chromium.org/blink/branches/dart/${do_new_branch}"
|
| + echo " fetch = :refs/remotes/dart${do_new_branch}"
|
| + echo
|
| + echo " 2. Get the code"
|
| + echo
|
| + echo " cd src/third_party/WebKit"
|
| + #TODO(terry): Should the fetch be remotes/blink-svn/multivm-${do_new_branch}
|
| + echo " git svn fetch dart${do_old_branch} && git svn fetch dart${do_new_branch}"
|
| + fi
|
| +}
|
| +
|
| +# Displays each of the 3 steps, of GIT commands, to create the
|
| +# branches for a Dartium roll.
|
| +#
|
| +# Givin the following Dartium roll information:
|
| +# Previous Dartium roll 1847 @251094 ($OLD)
|
| +# New Dartium roll to make 1908 @ 259084 ($NEW)
|
| +#
|
| +# Three branches will be created a stripped[$OLD], trunkdart[$OLD]
|
| +# and trunkdart[$NEW].
|
| +#
|
| +# |==============================================|
|
| +# | $OLD | 1847 |
|
| +# |----------------------------------------------|
|
| +# | $OLD_REV | 251094 |
|
| +# |----------------------------------------------|
|
| +# | $NEW | 1908 |
|
| +# |----------------------------------------------|
|
| +# | $NEW_REV | 259084 |
|
| +# |==============================================|
|
| +#
|
| +# stripped$OLD - Branch with upstream patches stripped out.
|
| +# trunkdart$OLD - Branch with all patches for $OLD.
|
| +# trunkdart$NEW - Branch of a new Chromium/Blink release with
|
| +# cherry-picked $OLD commits from trunkdart$OLD.
|
| +#
|
| +# stripped$OLD, trunkdart$OLD points the SVN remote repository
|
| +#
|
| +# svn://svn.chromium.org/chrome/branches/dart/1847/src
|
| +#
|
| +# trunkdart$NEW points to the SVN remote repository
|
| +# svn://svn.chromium.org/chrome/branches/dart/1908/src
|
| +#
|
| +# STEP 1.
|
| +# -------
|
| +# Create the stripped$OLD:
|
| +# > git checkout -b stripped$OLD dart$OLD
|
| +# > git rebase -i $BASE
|
| +#
|
| +# e.g., git checkout -b stripped1847 dart1847
|
| +# git rebase -i 3345f6a26911beda2ed352e887549bc514acb4bd
|
| +#
|
| +# Rebasing with -i will launch an editor, show all commits after $BASE and let
|
| +# you interactively remove any upstream commits from trunk. Upstream commits
|
| +# have a format of "Incrementing VERSION to 32.0.1847.78". Then save and quit
|
| +# the editor.
|
| +#
|
| +# $BASE and $LAST are computed by this script and is returned in the
|
| +# 'git rebase -i <hash-code>' command.
|
| +#
|
| +# NOTE: How $BASE and $LAST are computed:
|
| +# ---------------------------------------
|
| +# $BASE, first commit in $OLD, is computed by:
|
| +# > git rev-list stripped1847 --pretty=format:'%H' | tail -n 1
|
| +# Return a GIT hash code e.g., 3345f6a26911beda2ed352e887549bc514acb4bd
|
| +#
|
| +# $LAST, last commit in $NEW, is computed by:
|
| +# > git log stripped1847 --pretty=format:'%H' -1
|
| +# Return a GIT hash code e.g., 44d12cd4b7e041f8d06f8735f1af08abb66825c4
|
| +#
|
| +# STEP 2.
|
| +# -------
|
| +# Create the trunkdart$OLD e.g.,
|
| +# > git checkout -b trunkdart$OLD $BASE
|
| +# > git cherry-pick $BASE..$LAST
|
| +#
|
| +# e.g., git checkout -b trunkdart1847
|
| +#
|
| +# Create branch trunkdart$OLD and reapplies all Dart-related work on $OLD (from
|
| +# the stripped branch created in Step1.). This cherry-pick should not have any
|
| +# conflicts as you are rebasing onto exactly the same source code layout.
|
| +#
|
| +# STEP 3.
|
| +# -------
|
| +# Create the branch for $NEW (trunkdart$NEW):
|
| +# > git checkout -b trunkdart$NEW dart$NEW
|
| +# > git cherry-pick $BASE2..$LAST2
|
| +#
|
| +# Important points trunkdart$NEW is attached to the remote SVN repository created
|
| +# in pre-steps.
|
| +#
|
| +# e.g., git checkout -b trunkdart1908 dart1908
|
| +# git cherry-pick xxxx..xxxx
|
| +#
|
| +# $BASE2 should be the same as $BASE to validate with:
|
| +#
|
| +# > git log trunkdart$OLD --grep=@$OLD_REV --pretty=format:'%H' | tail -1
|
| +#
|
| +# e.g., git log trunkdart1847 --grep=251094 --pretty=format:'%H' | tail -1
|
| +# 3345f6a26911beda2ed352e887549bc514acb4bd
|
| +#
|
| +# $LAST2 is the last commit in $OLD in trunkdart$OLD computed by:
|
| +#
|
| +# > git log trunkdart$OLD --pretty=format:'%H' -1
|
| +#
|
| +# e.g., > git log trunkdart1847 --pretty=format:'%H' -1
|
| +# 2549d8ecd211ee6fed6699d70f319e077b425be4
|
| +#
|
| +# The we'll cherry-pick commits from $OLD.
|
| +# e.g.,
|
| +# > git cherry-pick 3345f6a26911beda2ed352e887549bc514acb4bd..2549d8ecd211ee6fed6699d70f319e077b425be4
|
| +#
|
| +# Cherry picking is an iterative process. Each commit in the $OLD branch is
|
| +# applied to the $NEW branch any conflicts will need to fixed.
|
| +#
|
| +# Fix each file conflict(s) in a particular commit:
|
| +#
|
| +# > vim <filename>
|
| +# > git add <filename>
|
| +#
|
| +# When all file conflicts for a particular commit are done then:
|
| +#
|
| +# > git commit -a -m "Merged $OLD"
|
| +#
|
| +# Continue the original cherry-picking
|
| +# > git cherry-pick --continue
|
| +#
|
| +#
|
| +# ********************************************************************
|
| +# * IMPORTANT: *
|
| +# ********************************************************************
|
| +#
|
| +# When all commits are made to our new trunk (trunkdart$NEW). Then try an
|
| +# initial dcommit with the --dry-run option.
|
| +#
|
| +# > git svn dcommit --dry-run
|
| +#
|
| +# e.g., git svn dcommit --dry-run
|
| +# Committing to svn://svn.chromium.org/chrome/branches/dart/1908/src ...
|
| +# diff-tree 48e85b5f247696c432d9dbb55c37f88f4df8a06a~1 48e85b5f247696c432d9dbb55c37f88f4df8a06a
|
| +# ...
|
| +#
|
| +# It is important to check the first line "Committing to " the repository
|
| +# should be the new remote SVN e.g., svn://svn.chromium.org/chrome/branches/dart/1908/src ...
|
| +#
|
| +# IT SHOULD NOT BE "svn://svn.chromium.org/chrome/trunk/src ..." this will
|
| +# dcommit the changes to the chrome trunk and break the chromium build.
|
| +#
|
| +function roll_chrome_commands() {
|
| + stripped_found=$(stripped_exist)
|
| + old_branch_found=$(trunk_exist ${do_old_branch})
|
| + new_branch_found=$(trunk_exist ${do_new_branch})
|
| +
|
| + echo
|
| + echo "================================================"
|
| + echo "| git commands to run: |"
|
| + echo "================================================"
|
| +
|
| + remoteOld=dart${do_old_branch}
|
| + strip_branch=$(stripped_name)
|
| +
|
| + if [ "$stripped_found" = "" ]; then
|
| + echo "------------------ Step 1. ---------------------"
|
| + echo
|
| +
|
| + # Git command to create stripped old branch.
|
| + echo "git checkout -b ${strip_branch} ${remoteOld}"
|
| +
|
| + # Get hashes for base for do_old_branch.
|
| + hash_codes_base_last ${remoteOld}
|
| +
|
| + echo "git rebase -i ${hash_base}"
|
| + echo
|
| + elif [ "$old_branch_found" = "" ]; then
|
| + echo "------------------ Step 2. ---------------------"
|
| + echo
|
| +
|
| + # Get hashes for base, last and base hash from trunk for the last branch.
|
| + hash_codes_base_last ${strip_branch}
|
| +
|
| + # Git command to create old branch with only changes from base to last
|
| + # commits for that branch. Checkout based on stripped$OLD first commit
|
| + # $BASE.
|
| + branch_trunkdart_old=$(trunkdart_name ${do_old_branch})
|
| + echo "git checkout -b ${branch_trunkdart_old} ${hash_base}"
|
| +
|
| + echo "git cherry-pick ${hash_base}..${hash_last}"
|
| + echo
|
| + elif [ "$new_branch_found" = "" ]; then
|
| + echo "------------------ Step 3. ---------------------"
|
| + echo
|
| +
|
| + # Git command to create new branch to roll.
|
| + branch_trunkdart_new=$(trunkdart_name ${do_new_branch})
|
| +
|
| + # get base and last commit hashes of the trunkdart$OLD
|
| + hash_codes_base2_last2 ${branch_trunkdart_old}
|
| +
|
| + echo "git checkout -b ${branch_trunkdart_new} ${remoteOld}"
|
| +
|
| + echo "git cherry-pick ${hash_base2}..${hash_last2}"
|
| + echo
|
| + else
|
| + echo "===== Nothing to do - Roll setup complete. ====="
|
| + fi
|
| +
|
| + echo "================================================"
|
| +}
|
| +
|
| +
|
| +function roll_blink_commands() {
|
| + stripped_found=$(stripped_exist)
|
| + old_branch_found=$(trunk_exist ${do_old_branch})
|
| + new_branch_found=$(trunk_exist ${do_new_branch})
|
| +
|
| + echo
|
| + echo "================================================"
|
| + echo "| git commands to run: |"
|
| + echo "================================================"
|
| +
|
| + remoteOld=dart${do_old_branch}
|
| + strip_branch=$(stripped_name)
|
| +
|
| + if [ "$stripped_found" = "" ]; then
|
| + echo "------------------ Step 1. ---------------------"
|
| + echo
|
| +
|
| + # Git command to create stripped old branch.
|
| + echo "git checkout -b ${strip_branch} ${remoteOld}"
|
| +
|
| + # Get hashes for base dir do_old_branch.
|
| + hash_codes_base_last ${remoteOld}
|
| +
|
| + eho "git rebase -i ${hash_base}"
|
| + echo
|
| + elif [ "$old_branch_found" = "" ]; then
|
| + echo "------------------ Step 2. ---------------------"
|
| + echo
|
| +
|
| + # Get hashes for base, last and base hash from trunk for the last branch.
|
| + hash_codes_base_last ${strip_branch}
|
| +
|
| + # Git command to create old branch with only changes from base to last
|
| + # commits for that branch. Checkout based on stripped$OLD first commit
|
| + # $BASE.
|
| + branch_trunkdart_old=$(trunkdart_name ${do_old_branch})
|
| + echo "git checkout -b ${branch_trunkdart_old} ${hash_base}"
|
| +
|
| + echo "git cherry-pick ${hash_base}..${hash_last}"
|
| + echo
|
| + elif [ "$new_branch_found" = "" ]; then
|
| + echo "------------------ Step 3. ---------------------"
|
| + echo
|
| +
|
| +
|
| + # Git command to create new branch to roll.
|
| + branch_trunkdart_new=$(trunkdart_name ${do_new_branch})
|
| +
|
| + # get base and last commit hashes of the trunkdart$OLD
|
| + hash_codes_base2_last2 ${branch_trunkdart_old}
|
| +
|
| + echo "git checkout -b ${branch_trunkdart_new} ${remoteOld}"
|
| +
|
| + echo "git cherry-pick ${hash_base2}..${hash_last2}"
|
| + echo
|
| + else
|
| + echo "===== Nothing to do - Roll setup complete. ====="
|
| + fi
|
| +
|
| + echo "================================================"
|
| +}
|
| +
|
| +
|
| +# checkout strippedOOOO and trunkdartNNNN
|
| +create_branches=0
|
| +
|
| +do_info_hashes=0
|
| +
|
| +base_dir=""
|
| +
|
| +# Display the pre-roll commands; if specified nothing else is displayed.
|
| +do_pre_roll=0
|
| +
|
| +# which branch chrome or blink
|
| +do_which=""
|
| +
|
| +# Display detail information about all major steps
|
| +do_verbose=0
|
| +
|
| +# $OLD branch
|
| +do_old_branch=""
|
| +do_old_revision=""
|
| +
|
| +# $NEW branch
|
| +do_new_branch=""
|
| +do_new_revision=""
|
| +
|
| +curr_switch=""
|
| +for var in "$@"
|
| +do
|
| + case "$var" in
|
| + --help)
|
| + usage
|
| + exit
|
| + ;;
|
| + --verbose)
|
| + do_verbose=1
|
| + curr_switch=""
|
| + ;;
|
| + --no-verbose)
|
| + do_verbose=0
|
| + curr_switch=""
|
| + ;;
|
| + --chrome)
|
| + if [ "$do_which" != "" ]; then
|
| + $(display_error "--chrome can not be specified with --blink")
|
| + exit $E_INVALID_ARG
|
| + fi
|
| + do_which="chrome"
|
| + curr_switch=""
|
| + ;;
|
| + --blink)
|
| + if [ "$do_which" != "" ]; then
|
| + $(display_error "--blink can not be specified with --chrome")
|
| + exit $E_INVALID_ARG
|
| + fi
|
| + do_which="blink"
|
| + curr_switch=""
|
| + ;;
|
| + --pre-roll)
|
| + do_pre_roll=1
|
| + curr_switch=""
|
| + ;;
|
| + --roll)
|
| + roll_branches=1
|
| + curr_switch=""
|
| + ;;
|
| + --info)
|
| + do_info_hashes=1
|
| + curr_switch=""
|
| + ;;
|
| + --directory)
|
| + curr_switch="base-directory" # takes an argument.
|
| + ;;
|
| + --old-branch)
|
| + curr_switch="old-branch" # takes an argument.
|
| + ;;
|
| + --new-branch)
|
| + curr_switch="new-branch" # takes an argument.
|
| + ;;
|
| + --old-revision)
|
| + curr_switch="old-revision" # takes an argument.
|
| + ;;
|
| + --new-revision)
|
| + curr_switch="new-revision" # takes an argument.
|
| + ;;
|
| + *)
|
| + prefix=${var:0:2}
|
| + if [ "$prefix" = "--" ]; then
|
| + $(display_error "unexpected switch ${var}")
|
| + exit $E_INVALID_ARG
|
| + fi
|
| + case "$curr_switch" in
|
| + base-directory)
|
| + base_dir="${var}"
|
| + ;;
|
| + old-branch)
|
| + do_old_branch="${var}"
|
| + ;;
|
| + old-revision)
|
| + do_old_revision="${var}"
|
| + ;;
|
| + new-branch)
|
| + do_new_branch="${var}"
|
| + ;;
|
| + new-revision)
|
| + do_new_revision="${var}"
|
| + ;;
|
| + *)
|
| + if [ "$curr_switch" != "" ]; then
|
| + $(display_error "unexpected paramter for ${curr_switch}")
|
| + exit $E_INVALID_ARG
|
| + else
|
| + $(display_error "unexpected switch ${var}")
|
| + exit $E_INVALID_ARG
|
| + fi
|
| + ;;
|
| + esac
|
| + curr_switch=""
|
| + ;;
|
| + esac
|
| +done
|
| +
|
| +# Insure that everything is known otherwise prompt information.
|
| +if [ "$base_dir" = "" ]; then
|
| + echo "--directory switch must be specified."
|
| + exit $E_INVALID_ARG
|
| +fi
|
| +
|
| +if [ "$do_which" == "" ]; then
|
| + echo "--chrome or --blink switch must be specified."
|
| + exit $E_INVALID_ARG
|
| +fi
|
| +
|
| +if [ "$do_old_branch" = "" ]; then
|
| + echo "Enter LAST ${do_which} true branch (e.g., Chrome version 34.0.1847.92 true branch is 1847)"
|
| + read do_old_branch
|
| +fi
|
| +
|
| +if [ "$do_old_revision" = "" ]; then
|
| + echo "Enter LAST ${do_which} base trunk revision #"
|
| + read do_old_revision
|
| +fi
|
| +
|
| +if [ "$do_new_branch" = "" ]; then
|
| + echo "Enter NEW ${do_which} true branch (e.g., Chrome version 35.0.1908.4 true branch is 1908)"
|
| + read do_new_branch
|
| +fi
|
| +
|
| +if [ "$do_new_revision" = "" ]; then
|
| + echo "Enter NEW ${do_which} base trunk revision #"
|
| + read do_new_revision
|
| +fi
|
| +
|
| +echo
|
| +echo "Rolling new branch ${do_new_branch}@${do_new_revision}"
|
| +
|
| +verbose_message
|
| +verbose_message "Previous branch ${do_old_branch}@${do_old_revision}"
|
| +verbose_message "New branch ${do_new_branch}@${do_new_revision}"
|
| +verbose_message
|
| +
|
| +if [[ "$do_pre_roll" = "1" ]]; then
|
| + display_remote_repository_creation
|
| + exit 1
|
| +fi
|
| +
|
| +pushd . > /dev/null
|
| +
|
| +if [ "$base_dir" != "" ]; then
|
| + cd ${base_dir}
|
| +fi
|
| +
|
| +cd src
|
| +
|
| +if [ "$do_which" = "blink" ]; then
|
| + cd third_party/WebKit
|
| +fi
|
| +
|
| +# Disable ^C and ^Z while running script.
|
| +trap '' INT
|
| +trap '' TSTP
|
| +
|
| +validate_remotes
|
| +
|
| +display_roll_commands
|
| +
|
| +display_hashes
|
| +
|
| +# Insure that all local branches for the roll are NOT based on the chrome or
|
| +# blink trunks.
|
| +validate_branches
|
| +
|
| +# Re-enable ^C and ^Z.
|
| +trap - INT
|
| +trap - TSTP
|
| +
|
| +popd > /dev/null
|
| +
|
|
|