OLD | NEW |
| (Empty) |
1 #!/bin/bash | |
2 | |
3 # Copyright 2014 The Chromium Authors. All rights reserved. | |
4 # Use of this source code is governed by a BSD-style license that can be | |
5 # found in the LICENSE file. | |
6 | |
7 # Creates an updated google.patch that reflects all checked-in changes in the | |
8 # current branch. To do this, it | |
9 # 1) Checks out the baseline from CVS into a separate /tmp directory. | |
10 # 2) Applies all changes third_party/hunspell had since baseline to the CVS dir. | |
11 # 2a) Applying google.patch at current branches upstream revision | |
12 # 2b) Applying all changes made in the current branch since upstream | |
13 # 3) Diffs the updated CVS dir against the checkout made in 1) | |
14 # | |
15 # No files in the current branch except google.patch will be modified, and | |
16 # applying google.patch to the CVS baseline catches baseline up to | |
17 # third_party/hunspell. | |
18 | |
19 cvs_dir="" | |
20 tempfiles=( ) | |
21 tmplate="/tmp/`basename $0`.XXXXXX" | |
22 | |
23 # Cleanup function to be executed whenever the script exits. | |
24 function cleanup() { | |
25 if [[ $cvs_dir ]]; then | |
26 rm -r "${cvs_dir}" | |
27 fi | |
28 | |
29 if [[ ${tempfiles[@]} ]]; then | |
30 rm "${tempfiles[@]}" | |
31 fi | |
32 cd ${starting_dir} | |
33 } | |
34 trap cleanup 0 | |
35 | |
36 # Generate a temp file and register it for cleanup | |
37 function tempfile() { | |
38 local result=$1 | |
39 local tmpfile=$(mktemp ${tmplate}) || exit 1 | |
40 tempfiles+=( "${tmpfile}" ) | |
41 eval $result="'$tmpfile'" | |
42 } | |
43 | |
44 starting_dir=$(pwd) | |
45 hunspell_dir=$(dirname $(readlink -e $0)) | |
46 | |
47 # Temp file with a list of all excluded files | |
48 tempfile filter_file | |
49 cat << EOF > ${filter_file} | |
50 google.patch | |
51 update_google_patch.sh | |
52 README.chromium | |
53 EOF | |
54 | |
55 # List of all files changed relative to upstream in current branch. | |
56 changed_files=$(git --no-pager diff @{u} --name-status | grep -vf ${filter_file}
) | |
57 | |
58 # Check we don't actually have files that are added or deleted, because | |
59 # that can't be handled by the read-only CVS checkout. | |
60 added_files=$( echo "${changed_files}" | grep "^A") | |
61 if [[ ${added_files} ]] ; then | |
62 echo "Script cannot handle added files" | |
63 exit 1 | |
64 fi | |
65 deleted_files=$( echo "${changed_files}" | grep "^D") | |
66 if [[ ${deleted_files} ]] ; then | |
67 echo "Script cannot handle deleted files" | |
68 exit 1 | |
69 fi | |
70 | |
71 # Generate patch between branch point from upstream and current HEAD. | |
72 diff_files=$( echo "${changed_files}" | grep "^M" | cut -f1 --complement ) | |
73 tempfile local_patch_file | |
74 echo "${diff_files}" | xargs -IXX git --no-pager diff --no-prefix @{u} -- XX > $
{local_patch_file} | |
75 | |
76 # Create copy of google.patch at branch point version. | |
77 tempfile google_patch_file | |
78 git show @{u}:google.patch > ${google_patch_file} | |
79 | |
80 # Create a temporary checkout for CVS hunspell's baseline. All further work | |
81 # will happen in this temp directory. | |
82 cvs_dir=$(mktemp -d ${tmplate}) || exit 1 | |
83 | |
84 # Get CVS hunspell baseline. | |
85 cd ${cvs_dir} | |
86 echo Checking out CVS version. | |
87 cvs -z3 \ | |
88 -qd:pserver:anonymous@hunspell.cvs.sourceforge.net:/cvsroot/hunspell \ | |
89 co -D "23 Mar 2012" -P hunspell | |
90 | |
91 # Apply google.patch and changes in current branch to CVS hunspell baseline. | |
92 cd hunspell | |
93 echo Applying google.patch. | |
94 patch -p0 -i ${google_patch_file} | |
95 echo Applying local patch. | |
96 patch -p0 -i ${local_patch_file} | |
97 | |
98 # And generate a new google.patch by diffing modified CVS hunspell against CVS | |
99 # hunspell baseline. | |
100 echo Updating google.patch. | |
101 cvs -q diff -u > ${hunspell_dir}/google.patch | |
102 | |
OLD | NEW |