Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Unified Diff: tools/dartium/start_dartium_roll.sh

Issue 244643006: Migrate dartium_tools from chrome branch to dart repo (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Replace obsolete roll scripts with terry's Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
+

Powered by Google App Engine
This is Rietveld 408576698