339136ac0cee73613a881c0c07a3f8f6c16556a0
3 # Copyright (c) 2016 ARM Limited
6 # The license below extends only to copyright in the software and shall
7 # not be construed as granting a license to any other intellectual
8 # property including but not limited to intellectual property relating
9 # to a hardware implementation of the functionality of the software
10 # licensed hereunder. You may use the software subject to the license
11 # terms below provided that you ensure that this notice is replicated
12 # unmodified and in its entirety in all distributions of the software,
13 # modified or unmodified, in source code or in binary form.
15 # Redistribution and use in source and binary forms, with or without
16 # modification, are permitted provided that the following conditions are
17 # met: redistributions of source code must retain the above copyright
18 # notice, this list of conditions and the following disclaimer;
19 # redistributions in binary form must reproduce the above copyright
20 # notice, this list of conditions and the following disclaimer in the
21 # documentation and/or other materials provided with the distribution;
22 # neither the name of the copyright holders nor the names of its
23 # contributors may be used to endorse or promote products derived from
24 # this software without specific prior written permission.
26 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 # Authors: Andreas Sandberg
43 REL_SCRIPT_DIR
=`dirname "$0"`
44 SCRIPT_NAME
=`basename "$0"`
45 SCRIPT_DIR
=$
(cd "$REL_SCRIPT_DIR" && echo "$(pwd -P)")
46 MSG_FILTER
="$SCRIPT_DIR"/upstream_msg_filter.
sed
48 PATCH_DIR
="./patches/"
49 UPSTREAM
="upstream/master"
54 $SCRIPT_NAME [OPTION]... [BRANCH]
55 Format a patch series suitable for upstream consumption.
58 -u BRANCH Upstream branch
59 -d DIR Patch directory
60 -h Show this help string.
62 This script creates a series of patches suitable from upstream
63 consumption from a git branch. By default, the script works on the
64 currently checked out branch (HEAD). When invoked, the script executes
65 the following operations in order:
67 1. Rebase the patches in the current branch onto the upstream
69 2. Filter commit messages.
70 3. Generate a set of patches in git format.
76 git rev-parse
--verify -q "$1" > /dev
/null
79 while getopts ":u:d:h" OPT
; do
93 echo "$0: invalid option -- '$OPTARG'" >&2
94 echo "Try '$0 -h' for more information." >&2
98 echo "$0: option requires an argument -- '$OPTARG'" >&2
102 echo "Unhandled getopt return:" >&2
104 echo "OPTARG: $OPTARG" >&2
110 shift $
((OPTIND
- 1))
114 if ! branch_exists
"$BRANCH"; then
115 echo "Error: Patch branch '$BRANCH' doesn't exist" 1>&2
119 if ! branch_exists
"$UPSTREAM"; then
120 echo "Error: Upstream branch '$UPSTREAM' doesn't exist." 1>&2
124 SHA_PATCHES
=`git rev-parse "$BRANCH"`
125 OLD_BRANCH
=`git symbolic-ref --short -q HEAD`
126 SHA_UPSTREAM
=`git rev-parse "$UPSTREAM"`
128 echo "Upstream branch: $UPSTREAM"
129 echo "Patch directory: $PATCH_DIR"
131 echo "Preparing detached head..."
132 git checkout
-q --detach "$SHA_PATCHES"
134 # Create an exit trap to checkout the old branch when we're done
136 git checkout
-q "$OLD_BRANCH"
140 echo "Rebasing onto upstream master..."
141 git rebase
"$UPSTREAM"
143 echo "Filtering commit messages..."
144 git filter-branch
-f \
145 --msg-filter "$MSG_FILTER" \
146 "$SHA_UPSTREAM"..HEAD
> /dev
/null
148 echo "Creating patches..."
149 git format-patch
-p -o "$PATCH_DIR" "$UPSTREAM"