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

Side by Side Diff: tools/merge-to-branch.sh

Issue 9835048: Allow a patch file to be specified to merge-to-branch.sh (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: review feedback Created 8 years, 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/bin/bash 1 #!/bin/bash
2 # Copyright 2012 the V8 project authors. All rights reserved. 2 # Copyright 2012 the V8 project authors. All rights reserved.
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are 4 # modification, are permitted provided that the following conditions are
5 # met: 5 # met:
6 # 6 #
7 # * Redistributions of source code must retain the above copyright 7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above 9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following 10 # copyright notice, this list of conditions and the following
(...skipping 30 matching lines...) Expand all
41 usage() { 41 usage() {
42 cat << EOF 42 cat << EOF
43 usage: $0 [OPTIONS]... [BRANCH] [REVISION]... 43 usage: $0 [OPTIONS]... [BRANCH] [REVISION]...
44 44
45 Performs the necessary steps to merge revisions from bleeding_edge 45 Performs the necessary steps to merge revisions from bleeding_edge
46 to other branches, including trunk. 46 to other branches, including trunk.
47 47
48 OPTIONS: 48 OPTIONS:
49 -h Show this message 49 -h Show this message
50 -s Specify the step where to start work. Default: 0. 50 -s Specify the step where to start work. Default: 0.
51 -p Specify a patch file to apply as part of the merge
51 EOF 52 EOF
52 } 53 }
53 54
54 persist_patch_commit_hashes() { 55 persist_patch_commit_hashes() {
55 echo "PATCH_COMMIT_HASHES=( ${PATCH_COMMIT_HASHES[@]} )" > $COMMIT_HASHES_FILE 56 echo "PATCH_COMMIT_HASHES=( ${PATCH_COMMIT_HASHES[@]} )" > $COMMIT_HASHES_FILE
56 } 57 }
57 58
58 restore_patch_commit_hashes() { 59 restore_patch_commit_hashes() {
59 source $COMMIT_HASHES_FILE 60 source $COMMIT_HASHES_FILE
60 } 61 }
61 62
62 restore_patch_commit_hashes_if_unset() { 63 restore_patch_commit_hashes_if_unset() {
63 [[ "${#PATCH_COMMIT_HASHES[@]}" == 0 ]] && restore_patch_commit_hashes 64 [[ "${#PATCH_COMMIT_HASHES[@]}" == 0 ]] && restore_patch_commit_hashes
64 [[ "${#PATCH_COMMIT_HASHES[@]}" == 0 ]] && \ 65 [[ "${#PATCH_COMMIT_HASHES[@]}" == 0 ]] && [[ -z "$EXTRA_PATCH" ]] && \
65 die "Variable PATCH_COMMIT_HASHES could not be restored." 66 die "Variable PATCH_COMMIT_HASHES could not be restored."
66 } 67 }
67 68
68 ########## Option parsing 69 ########## Option parsing
69 70
70 while getopts ":hs:f" OPTION ; do 71 while getopts ":hs:fp:" OPTION ; do
71 case $OPTION in 72 case $OPTION in
72 h) usage 73 h) usage
73 exit 0 74 exit 0
74 ;; 75 ;;
76 p) EXTRA_PATCH=$OPTARG
77 ;;
75 f) rm -f "$ALREADY_MERGING_SENTINEL_FILE" 78 f) rm -f "$ALREADY_MERGING_SENTINEL_FILE"
76 ;; 79 ;;
77 s) START_STEP=$OPTARG 80 s) START_STEP=$OPTARG
78 ;; 81 ;;
79 ?) echo "Illegal option: -$OPTARG" 82 ?) echo "Illegal option: -$OPTARG"
80 usage 83 usage
81 exit 1 84 exit 1
82 ;; 85 ;;
83 esac 86 esac
84 done 87 done
85 let OPTION_COUNT=$OPTIND-1 88 let OPTION_COUNT=$OPTIND-1
86 shift $OPTION_COUNT 89 shift $OPTION_COUNT
87 90
88 ########## Regular workflow 91 ########## Regular workflow
89 92
90 # If there is a merge in progress, abort. 93 # If there is a merge in progress, abort.
91 [[ -e "$ALREADY_MERGING_SENTINEL_FILE" ]] && [[ $START_STEP -eq 0 ]] \ 94 [[ -e "$ALREADY_MERGING_SENTINEL_FILE" ]] && [[ $START_STEP -eq 0 ]] \
92 && die "A merge is already in progress" 95 && die "A merge is already in progress"
93 touch "$ALREADY_MERGING_SENTINEL_FILE" 96 touch "$ALREADY_MERGING_SENTINEL_FILE"
94 97
95 initial_environment_checks 98 initial_environment_checks
96 99
97 if [ $START_STEP -le $CURRENT_STEP ] ; then 100 if [ $START_STEP -le $CURRENT_STEP ] ; then
101 if [ ${#@} -lt 2 ] && [ -z "$EXTRA_PATCH" ] ; then
102 die "Either a patch file or revision numbers must be specified"
103 fi
98 echo ">>> Step $CURRENT_STEP: Preparation" 104 echo ">>> Step $CURRENT_STEP: Preparation"
99 MERGE_TO_BRANCH=$1 105 MERGE_TO_BRANCH=$1
100 [[ -n "$MERGE_TO_BRANCH" ]] || die "Please specify a branch to merge to" 106 [[ -n "$MERGE_TO_BRANCH" ]] || die "Please specify a branch to merge to"
101 shift 107 shift
102 persist "MERGE_TO_BRANCH" 108 persist "MERGE_TO_BRANCH"
103 common_prepare 109 common_prepare
104 fi 110 fi
105 111
106 let CURRENT_STEP+=1 112 let CURRENT_STEP+=1
107 if [ $START_STEP -le $CURRENT_STEP ] ; then 113 if [ $START_STEP -le $CURRENT_STEP ] ; then
108 echo ">>> Step $CURRENT_STEP: Create a fresh branch for the patch." 114 echo ">>> Step $CURRENT_STEP: Create a fresh branch for the patch."
109 restore_if_unset "MERGE_TO_BRANCH" 115 restore_if_unset "MERGE_TO_BRANCH"
110 git checkout -b $BRANCHNAME svn/$MERGE_TO_BRANCH \ 116 git checkout -b $BRANCHNAME svn/$MERGE_TO_BRANCH \
111 || die "Creating branch $BRANCHNAME failed." 117 || die "Creating branch $BRANCHNAME failed."
112 fi 118 fi
113 119
114 let CURRENT_STEP+=1 120 let CURRENT_STEP+=1
115 if [ $START_STEP -le $CURRENT_STEP ] ; then 121 if [ $START_STEP -le $CURRENT_STEP ] ; then
116 echo ">>> Step $CURRENT_STEP: Find the git \ 122 echo ">>> Step $CURRENT_STEP: Find the git \
117 revisions associated with the patches." 123 revisions associated with the patches."
118 current=0 124 current=0
119 for REVISION in "$@" ; do 125 for REVISION in "$@" ; do
120 NEXT_HASH=$(git svn find-rev "r$REVISION" svn/bleeding_edge) 126 NEXT_HASH=$(git svn find-rev "r$REVISION" svn/bleeding_edge)
121 [[ -n "$NEXT_HASH" ]] \ 127 [[ -n "$NEXT_HASH" ]] \
122 || die "Cannot determine git hash for r$REVISION" 128 || die "Cannot determine git hash for r$REVISION"
123 PATCH_COMMIT_HASHES[$current]="$NEXT_HASH" 129 PATCH_COMMIT_HASHES[$current]="$NEXT_HASH"
124 [[ -n "$NEW_COMMIT_MSG" ]] && NEW_COMMIT_MSG="$NEW_COMMIT_MSG," 130 [[ -n "$REVISION_LIST" ]] && REVISION_LIST="$REVISION_LIST,"
125 NEW_COMMIT_MSG="$NEW_COMMIT_MSG r$REVISION" 131 REVISION_LIST="$REVISION_LIST r$REVISION"
126 let current+=1 132 let current+=1
127 done 133 done
128 NEW_COMMIT_MSG="Merged$NEW_COMMIT_MSG into $MERGE_TO_BRANCH branch." 134 if [ -z "$REVISION_LIST" ] ; then
135 NEW_COMMIT_MSG="Applied patch to $MERGE_TO_BRANCH branch."
136 else
137 NEW_COMMIT_MSG="Merged$REVISION_LIST into $MERGE_TO_BRANCH branch."
138 fi;
129 139
130 echo "$NEW_COMMIT_MSG" > $COMMITMSG_FILE 140 echo "$NEW_COMMIT_MSG" > $COMMITMSG_FILE
131 echo "" >> $COMMITMSG_FILE 141 echo "" >> $COMMITMSG_FILE
132 for HASH in ${PATCH_COMMIT_HASHES[@]} ; do 142 for HASH in ${PATCH_COMMIT_HASHES[@]} ; do
133 PATCH_MERGE_DESCRIPTION=$(git log -1 --format=%s $HASH) 143 PATCH_MERGE_DESCRIPTION=$(git log -1 --format=%s $HASH)
134 echo "$PATCH_MERGE_DESCRIPTION" >> $COMMITMSG_FILE 144 echo "$PATCH_MERGE_DESCRIPTION" >> $COMMITMSG_FILE
135 echo "" >> $COMMITMSG_FILE 145 echo "" >> $COMMITMSG_FILE
136 done 146 done
137 for HASH in ${PATCH_COMMIT_HASHES[@]} ; do 147 for HASH in ${PATCH_COMMIT_HASHES[@]} ; do
138 BUG=$(git log -1 $HASH | grep "BUG=" | awk -F '=' '{print $NF}') 148 BUG=$(git log -1 $HASH | grep "BUG=" | awk -F '=' '{print $NF}')
139 if [ -n "$BUG" ] ; then 149 if [ -n "$BUG" ] ; then
140 [[ -n "$BUG_AGGREGATE" ]] && BUG_AGGREGATE="$BUG_AGGREGATE," 150 [[ -n "$BUG_AGGREGATE" ]] && BUG_AGGREGATE="$BUG_AGGREGATE,"
141 BUG_AGGREGATE="$BUG_AGGREGATE$BUG" 151 BUG_AGGREGATE="$BUG_AGGREGATE$BUG"
142 fi 152 fi
143 done 153 done
144 if [ -n "$BUG_AGGREGATE" ] ; then 154 if [ -n "$BUG_AGGREGATE" ] ; then
145 echo "BUG=$BUG_AGGREGATE" >> $COMMITMSG_FILE 155 echo "BUG=$BUG_AGGREGATE" >> $COMMITMSG_FILE
146 fi 156 fi
147 persist "NEW_COMMIT_MSG" 157 persist "NEW_COMMIT_MSG"
158 persist "REVISION_LIST"
148 persist_patch_commit_hashes 159 persist_patch_commit_hashes
149 fi 160 fi
150 161
151 let CURRENT_STEP+=1 162 let CURRENT_STEP+=1
152 if [ $START_STEP -le $CURRENT_STEP ] ; then 163 if [ $START_STEP -le $CURRENT_STEP ] ; then
153 echo ">>> Step $CURRENT_STEP: Apply patches for selected revisions." 164 echo ">>> Step $CURRENT_STEP: Apply patches for selected revisions."
154 restore_if_unset "MERGE_TO_BRANCH" 165 restore_if_unset "MERGE_TO_BRANCH"
155 restore_patch_commit_hashes_if_unset "PATCH_COMMIT_HASHES" 166 restore_patch_commit_hashes_if_unset "PATCH_COMMIT_HASHES"
156 rm -f "$TOUCHED_FILES_FILE" 167 rm -f "$TOUCHED_FILES_FILE"
157 for HASH in ${PATCH_COMMIT_HASHES[@]} ; do 168 for HASH in ${PATCH_COMMIT_HASHES[@]} ; do
158 echo "Applying patch for $HASH to $MERGE_TO_BRANCH..." 169 echo "Applying patch for $HASH to $MERGE_TO_BRANCH..."
159 git log -1 -p $HASH > "$TEMPORARY_PATCH_FILE" 170 git log -1 -p $HASH > "$TEMPORARY_PATCH_FILE"
160 apply_patch "$TEMPORARY_PATCH_FILE" 171 apply_patch "$TEMPORARY_PATCH_FILE"
161 done 172 done
173 if [ -n "$EXTRA_PATCH" ] ; then
174 apply_patch "$EXTRA_PATCH"
175 fi
162 stage_files 176 stage_files
163 fi 177 fi
164 178
165 let CURRENT_STEP+=1 179 let CURRENT_STEP+=1
166 if [ $START_STEP -le $CURRENT_STEP ] ; then 180 if [ $START_STEP -le $CURRENT_STEP ] ; then
167 echo ">>> Step $CURRENT_STEP: Prepare $VERSION_FILE." 181 echo ">>> Step $CURRENT_STEP: Prepare $VERSION_FILE."
168 # These version numbers are used again for creating the tag 182 # These version numbers are used again for creating the tag
169 read_and_persist_version 183 read_and_persist_version
170 fi 184 fi
171 185
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 echo "Creating tag svn/tags/$NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH" 241 echo "Creating tag svn/tags/$NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH"
228 if [ "$MERGE_TO_BRANCH" == "trunk" ] ; then 242 if [ "$MERGE_TO_BRANCH" == "trunk" ] ; then
229 TO_URL="$MERGE_TO_BRANCH" 243 TO_URL="$MERGE_TO_BRANCH"
230 else 244 else
231 TO_URL="branches/$MERGE_TO_BRANCH" 245 TO_URL="branches/$MERGE_TO_BRANCH"
232 fi 246 fi
233 svn copy -r $SVN_REVISION \ 247 svn copy -r $SVN_REVISION \
234 https://v8.googlecode.com/svn/$TO_URL \ 248 https://v8.googlecode.com/svn/$TO_URL \
235 https://v8.googlecode.com/svn/tags/$NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH \ 249 https://v8.googlecode.com/svn/tags/$NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH \
236 -m "Tagging version $NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH" 250 -m "Tagging version $NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH"
251 persist "TO_URL"
237 fi 252 fi
238 253
239 let CURRENT_STEP+=1 254 let CURRENT_STEP+=1
240 if [ $START_STEP -le $CURRENT_STEP ] ; then 255 if [ $START_STEP -le $CURRENT_STEP ] ; then
241 echo ">>> Step $CURRENT_STEP: Cleanup." 256 echo ">>> Step $CURRENT_STEP: Cleanup."
257 restore_if_unset "SVN_REVISION"
258 restore_if_unset "TO_URL"
259 restore_if_unset "REVISION_LIST"
260 restore_version_if_unset "NEW"
242 common_cleanup 261 common_cleanup
262 echo "*** SUMMARY ***"
263 echo "version: $NEWMAJOR.$NEWMINOR.$NEWBUILD.$NEWPATCH"
264 echo "branch: $TO_URL"
265 echo "svn revision: $SVN_REVISION"
266 [[ -n "$REVISION_LIST" ]] && echo "patches:$REVISION_LIST"
243 fi 267 fi
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698