#!/bin/bash # Copyright (c) 2012 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. force_branch=no quiet=no while [ $# -gt 0 ]; do case "$1" in --force-branch) force_branch=yes ;; -q|--quiet) quiet=yes ;; *) echo "Unknown option: $1" ;; esac shift done svn_lkgr=`curl -s http://chromium-status.appspot.com/lkgr` if [ $? != 0 -o -z "$svn_lkgr" ]; then echo 'Could not get svn lkgr from chromium-status.appspot.com/lkgr' exit 1 fi # Run a trivial git-svn command to force it to update the revision cache # (which causes spew that might otherwise confuse the next command). git svn info > /dev/null if [ $? != 0 ]; then cat <&2 Could not run a trivial git-svn command. You probably need to set up your working directory for git-svn, by following these instructions: http://code.google.com/p/chromium/wiki/UsingNewGit#Initial_checkout EOF exit 1 fi git_lkgr=`git svn find-rev r${svn_lkgr}` if [ $? != 0 -o -z "$git_lkgr" ]; then cat <&2 Could not map svn revision ${svn_lkgr} to a git commit. You may need to `git fetch` and try again. EOF exit 1 fi set -o pipefail closest_commit=`git rev-list --ancestry-path \ --grep='SVN changes up to revision [0-9]*' \ ${git_lkgr}..refs/remotes/origin/master | tail -1` if [ $? != 0 -o -z "$closest_commit" ]; then cat <&2 Could not find a blessed git commit (with accurate .DEPS.git and submodules) after svn lkgr revision $svn_lkgr. EOF exit 1 fi closest_svn_commit=`git rev-list -n 1 ${closest_commit}^1` if [ $? != 0 -o -z "$closest_svn_commit" ]; then cat <&2 I am thoroughly confused. Please file a bug report at http://new.crbug.com. EOF exit 1 fi # Pick a name for the new branch. Use `git rev-parse` to make sure the branch # doesn't already exist; if it does, iterate an integer suffix to uniquify it. lkgr_branch="git_lkgr_r${svn_lkgr}" digit=1 git rev-parse --verify -q "${lkgr_branch}" >/dev/null while [ $? -eq 0 ]; do lkgr_branch="git_lkgr_r${svn_lkgr}_${digit}" digit=`expr $digit + 1` git rev-parse --verify -q "${lkgr_branch}" >/dev/null done if [ "${closest_svn_commit}" = "${git_lkgr}" ]; then echo "${closest_commit}" if [ "$force_branch" = "yes" ]; then git checkout -b "${lkgr_branch}" "${closest_commit}" fi exit 0 elif [ "${quiet}" = "yes" ]; then exit 1 elif [ "${force_branch}" = "no" ]; then cat <