| #!/bin/bash |
| #===-- merge-git.sh - Merge commit to the stable branch --------------------===# |
| # |
| # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| # |
| #===------------------------------------------------------------------------===# |
| # |
| # This script will merge an svn revision to a git repo using git-svn while |
| # preserving the svn commit message. |
| # |
| # NOTE: This script has only been tested with the per-project git repositories |
| # and not with the monorepo. |
| # |
| # In order to use this script, you must: |
| # 1) Checkout the stable branch you would like to merge the revision into. |
| # 2) Correctly configure the branch as an svn-remote by adding the following to |
| # your .git/config file for your git repo (replace xy with the major/minor |
| # version of the release branch. e.g. release_50 or release_60): |
| # |
| #[svn-remote "release_xy"] |
| #url = https://llvm.org/svn/llvm-project/llvm/branches/release_xy |
| #fetch = :refs/remotes/origin/release_xy |
| # |
| # Once the script completes successfully, you can push your changes with |
| # git-svn dcommit |
| # |
| #===------------------------------------------------------------------------===# |
| |
| |
| usage() { |
| echo "usage: `basename $0` [OPTIONS]" |
| echo " -rev NUM The revision to merge into the project" |
| } |
| |
| while [ $# -gt 0 ]; do |
| case $1 in |
| -rev | --rev | -r ) |
| shift |
| rev=$1 |
| ;; |
| -h | -help | --help ) |
| usage |
| ;; |
| * ) |
| echo "unknown option: $1" |
| echo "" |
| usage |
| exit 1 |
| ;; |
| esac |
| shift |
| done |
| |
| if [ -z "$rev" ]; then |
| echo "error: need to specify a revision" |
| echo |
| usage |
| exit 1 |
| fi |
| |
| # Rebuild revision map |
| git svn find-rev r$rev origin/master &>/dev/null |
| |
| git_hash=`git svn find-rev r$rev origin/master` |
| |
| if [ -z "$git_hash" ]; then |
| echo "error: could not determine git commit for r$rev" |
| exit 1 |
| fi |
| |
| commit_msg=`svn log -r $rev https://llvm.org/svn/llvm-project/` |
| ammend="--amend" |
| |
| git cherry-pick $git_hash |
| if [ $? -ne 0 ]; then |
| echo "" |
| echo "** cherry-pick failed enter 'e' to exit or 'c' when you have finished resolving the conflicts:" |
| read option |
| case $option in |
| c) |
| ammend="" |
| ;; |
| *) |
| exit 1 |
| ;; |
| esac |
| fi |
| |
| git commit $ammend -m "Merging r$rev:" -m "$commit_msg" |