| Index: tools/dartium/start_dartium_roll.sh
|
| diff --git a/tools/dartium/start_dartium_roll.sh b/tools/dartium/start_dartium_roll.sh
|
| deleted file mode 100755
|
| index d908620a6c92ac894b0687801d565d242fa8d10a..0000000000000000000000000000000000000000
|
| --- a/tools/dartium/start_dartium_roll.sh
|
| +++ /dev/null
|
| @@ -1,1001 +0,0 @@
|
| -#!/usr/bin/env bash
|
| -
|
| -set -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
|
| -
|
|
|