blob: 81d577db9d62499de19ca7124b923a792dffba05 [file] [log] [blame]
Tom Stellardd7899892018-06-13 05:14:10 +00001#!/bin/bash
2#===-- merge-git.sh - Merge commit to the stable branch --------------------===#
3#
4# The LLVM Compiler Infrastructure
5#
6# This file is distributed under the University of Illinois Open Source
7# License.
8#
9#===------------------------------------------------------------------------===#
10#
11# This script will merge an svn revision to a git repo using git-svn while
12# preserving the svn commit message.
13#
14# NOTE: This script has only been tested with the per-project git repositories
15# and not with the monorepo.
16#
17# In order to use this script, you must:
18# 1) Checkout the stable branch you would like to merge the revision into.
19# 2) Correctly configure the branch as an svn-remote by adding the following to
20# your .git/config file for your git repo (replace xy with the major/minor
21# version of the release branch. e.g. release_50 or release_60):
22#
23#[svn-remote "release_xy"]
24#url = https://llvm.org/svn/llvm-project/llvm/branches/release_xy
25#fetch = :refs/remotes/origin/release_xy
26#
27# Once the script completes successfully, you can push your changes with
28# git-svn dcommit
29#
30#===------------------------------------------------------------------------===#
31
32
33usage() {
34 echo "usage: `basename $0` [OPTIONS]"
35 echo " -rev NUM The revision to merge into the project"
36}
37
38while [ $# -gt 0 ]; do
39 case $1 in
40 -rev | --rev | -r )
41 shift
42 rev=$1
43 ;;
44 -h | -help | --help )
45 usage
46 ;;
47 * )
48 echo "unknown option: $1"
49 echo ""
50 usage
51 exit 1
52 ;;
53 esac
54 shift
55done
56
57if [ -z "$rev" ]; then
58 echo "error: need to specify a revision"
59 echo
60 usage
61 exit 1
62fi
63
64# Rebuild revision map
65git svn find-rev r$rev origin/master &>/dev/null
66
67git_hash=`git svn find-rev r$rev origin/master`
68
69if [ -z "$git_hash" ]; then
70 echo "error: could not determine git commit for r$rev"
71 exit 1
72fi
73
74commit_msg=`svn log -r $rev https://llvm.org/svn/llvm-project/`
75ammend="--amend"
76
77git cherry-pick $git_hash
78if [ $? -ne 0 ]; then
79 echo ""
80 echo "** cherry-pick failed enter 'e' to exit or 'c' when you have finished resolving the conflicts:"
81 read option
82 case $option in
83 c)
84 ammend=""
85 ;;
86 *)
87 exit 1
88 ;;
89 esac
90fi
91
92git commit $ammend -m "Merging r$rev:" -m "$commit_msg"