#!/usr/bin/env 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.

branch_name=""
checkout_branch=no
create_branch=no
quiet=no
svn_lkgr=

while [ $# -gt 0 ]; do
  case "$1" in
    --checkout|--force-branch)
      checkout_branch=yes
      create_branch=yes
      ;;
    --closest)
      use_closest=yes
      ;;
    --create)
      create_branch=yes
      ;;
    -n|--name)
      branch_name=$2
      create_branch=yes
      shift
      ;;
    -q|--quiet)
      quiet=yes
      ;;
    -r|--revision)
      svn_lkgr="$2"
      shift
      ;;
    *)
      echo "Unknown option: $1"
      echo "Usage:"
      echo "  --checkout         Create a branch and check it out."
      echo "  --create           Create a branch."
      echo "  --closest          Use closest git commit to the target svn revision."
      echo "                       Otherwise --checkout may be required to create"
      echo "                       a git commit for a specific svn revision."
      echo "  -n, --name <name>  Specify the name of branch to create or reset."
      echo "                       This will force the branch using 'git branch -f '."
      echo "  -q, --quiet        Quiet."
      echo "  -r, --revision <r> Svn revision number use instead of server provided lkgr."
      exit 1
      ;;
  esac
  shift
done

if [ -z "$svn_lkgr" ]; then
  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
fi

if [ "${svn_lkgr:0:1}" = "r" ]; then
  svn_lkgr="${svn_lkgr: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 <<EOF 1>&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 <<EOF 1>&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
  closest_commit=
  closest_svn_commit=
else
  closest_svn_commit=`git rev-list -n 1 ${closest_commit}^1`
  if [ $? != 0 -o -z "$closest_svn_commit" ]; then
    cat <<EOF 1>&2
  I am thoroughly confused.  Please file a bug report at http://new.crbug.com.
EOF
    exit 1
  fi
  closest_svn=`git svn find-rev ${closest_svn_commit}`
fi

if [ "${use_closest}" = "yes" ]; then
  svn_lkgr="${closest_svn}"
  git_lkgr="${closest_svn_commit}"
fi

# Determine lkgr_branch:
if [ "${branch_name}" != "" ]; then
  # Use the provided name for the branch.
  lkgr_branch="${branch_name}"

  # If the branch already exists, force the update to it.
  git rev-parse --verify -q "${branch_name}" >/dev/null
  if [ $? -eq 0 ]; then
    old_branch_value=`git rev-parse "${branch_name}"`
    echo "Will update branch ${lkgr_branch}, it previously was at ${old_branch_value}."
    force_branch="--force"
  fi
else
  # 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="lkgr_r${svn_lkgr}"
  digit=1
  git rev-parse --verify -q "${lkgr_branch}" >/dev/null
  while [ $? -eq 0 ]; do
    lkgr_branch="lkgr_r${svn_lkgr}_${digit}"
    digit=`expr $digit + 1`
    git rev-parse --verify -q "${lkgr_branch}" >/dev/null
  done
fi

if [ "${closest_svn_commit}" = "${git_lkgr}" ]; then
  echo "${closest_commit}"
  if [ "$create_branch" = "yes" ]; then
    echo "Creating branch ${lkgr_branch}"
    git branch ${force_branch} "${lkgr_branch}" "${closest_commit}" || exit 1
  fi
  if [ "$checkout_branch" = "yes" ]; then
    git checkout "${lkgr_branch}"
  fi
  exit 0
elif [ "${quiet}" = "yes" ]; then
  exit 1
elif [ "${checkout_branch}" = "no" ]; then
  echo "There is no master commit which corresponds exactly to svn revision ${svn_lkgr}."
  echo "Call 'git lkgr --checkout' to create a branch with a commit to match ${svn_lkgr}."
  if [ -n "$closest_commit" ]; then
    echo "The closest commit is r${closest_svn}, ${closest_commit}."
    echo "Use the --closest option to use the closest instead of the target revision."
  fi
  exit 0
fi

current_head=`git branch | grep '^\*' | cut -c3-`
if [ "${current_head}" = "(no branch)" ]; then
  current_head=`git rev-parse HEAD`
fi

git checkout --detach "${git_lkgr}" &&
python tools/deps2git/deps2git.py -d DEPS -o .DEPS.git -w .. &&
git add .DEPS.git &&
python tools/deps2git/deps2submodules.py .DEPS.git &&
git commit -m "SVN changes up to revision $svn_lkgr" &&
git branch ${force_branch} "${lkgr_branch}" HEAD

if [ $? != 0 ]; then
  cat <<EOF

--------------------------------------------------------------------------------
Something went wrong!  Restoring your previous state by checking out
$current_head

Please file a bug report at http://new.crbug.com.
--------------------------------------------------------------------------------

EOF
  git checkout --force $current_head
  exit 1
fi

git checkout "${lkgr_branch}"

cat <<EOF

--------------------------------------------------------------------------------
The new branch "$lkgr_branch" was branched from this commit:

$git_lkgr

... which maps to the svn commit r${svn_lkgr}.  The new branch
has one additional commit, to bring .DEPS.git, .gitmodules, and the
invisible git submodule files up to date with DEPS.

To create a working branch, do this:

\$ git branch --track my_new_branch $lkgr_branch

'git-cl upload' will do the right thing, i.e., it will cherry-pick all
your changes from my_new_branch, but *not* the .DEPS.git+.gitmodules+submodules
commit on $lkgr_branch.
--------------------------------------------------------------------------------

EOF
