| Index: update_google_patch.sh
|
| diff --git a/update_google_patch.sh b/update_google_patch.sh
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..6b7357adb8210a289d35555bcdd0d365820efffa
|
| --- /dev/null
|
| +++ b/update_google_patch.sh
|
| @@ -0,0 +1,102 @@
|
| +#!/bin/bash
|
| +
|
| +# Copyright 2014 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +# Creates an updated google.patch that reflects all checked-in changes in the
|
| +# current branch. To do this, it
|
| +# 1) Checks out the baseline from CVS into a separate /tmp directory.
|
| +# 2) Applies all changes third_party/hunspell had since baseline to the CVS dir.
|
| +# 2a) Applying google.patch at current branches upstream revision
|
| +# 2b) Applying all changes made in the current branch since upstream
|
| +# 3) Diffs the updated CVS dir against the checkout made in 1)
|
| +#
|
| +# No files in the current branch except google.patch will be modified, and
|
| +# applying google.patch to the CVS baseline catches baseline up to
|
| +# third_party/hunspell.
|
| +
|
| +cvs_dir=""
|
| +tempfiles=( )
|
| +tmplate="/tmp/`basename $0`.XXXXXX"
|
| +
|
| +# Cleanup function to be executed whenever the script exits.
|
| +function cleanup() {
|
| + if [[ $cvs_dir ]]; then
|
| + rm -r "${cvs_dir}"
|
| + fi
|
| +
|
| + if [[ ${tempfiles[@]} ]]; then
|
| + rm "${tempfiles[@]}"
|
| + fi
|
| + cd ${starting_dir}
|
| +}
|
| +trap cleanup 0
|
| +
|
| +# Generate a temp file and register it for cleanup
|
| +function tempfile() {
|
| + local result=$1
|
| + local tmpfile=$(mktemp ${tmplate}) || exit 1
|
| + tempfiles+=( "${tmpfile}" )
|
| + eval $result="'$tmpfile'"
|
| +}
|
| +
|
| +starting_dir=$(pwd)
|
| +hunspell_dir=$(dirname $(readlink -e $0))
|
| +
|
| +# Temp file with a list of all excluded files
|
| +tempfile filter_file
|
| +cat << EOF > ${filter_file}
|
| +google.patch
|
| +update_google_patch.sh
|
| +README.chromium
|
| +EOF
|
| +
|
| +# List of all files changed relative to upstream in current branch.
|
| +changed_files=$(git --no-pager diff @{u} --name-status | grep -vf ${filter_file} )
|
| +
|
| +# Check we don't actually have files that are added or deleted, because
|
| +# that can't be handled by the read-only CVS checkout.
|
| +added_files=$( echo "${changed_files}" | grep "^A")
|
| +if [[ ${added_files} ]] ; then
|
| + echo "Script cannot handle added files"
|
| + exit 1
|
| +fi
|
| +deleted_files=$( echo "${changed_files}" | grep "^D")
|
| +if [[ ${deleted_files} ]] ; then
|
| + echo "Script cannot handle deleted files"
|
| + exit 1
|
| +fi
|
| +
|
| +# Generate patch between branch point from upstream and current HEAD.
|
| +diff_files=$( echo "${changed_files}" | grep "^M" | cut -f1 --complement )
|
| +tempfile local_patch_file
|
| +echo "${diff_files}" | xargs -IXX git --no-pager diff --no-prefix @{u} -- XX > ${local_patch_file}
|
| +
|
| +# Create copy of google.patch at branch point version.
|
| +tempfile google_patch_file
|
| +git show @{u}:google.patch > ${google_patch_file}
|
| +
|
| +# Create a temporary checkout for CVS hunspell's baseline. All further work
|
| +# will happen in this temp directory.
|
| +cvs_dir=$(mktemp -d ${tmplate}) || exit 1
|
| +
|
| +# Get CVS hunspell baseline.
|
| +cd ${cvs_dir}
|
| +echo Checking out CVS version.
|
| +cvs -z3 \
|
| + -qd:pserver:anonymous@hunspell.cvs.sourceforge.net:/cvsroot/hunspell \
|
| + co -D "23 Mar 2012" -P hunspell
|
| +
|
| +# Apply google.patch and changes in current branch to CVS hunspell baseline.
|
| +cd hunspell
|
| +echo Applying google.patch.
|
| +patch -p0 -i ${google_patch_file}
|
| +echo Applying local patch.
|
| +patch -p0 -i ${local_patch_file}
|
| +
|
| +# And generate a new google.patch by diffing modified CVS hunspell against CVS
|
| +# hunspell baseline.
|
| +echo Updating google.patch.
|
| +cvs -q diff -u > ${hunspell_dir}/google.patch
|
| +
|
|
|