# Copyright 2015 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.

## This file is designed to be sourced from a bash script whose name takes the
## form 'command-name'. This script will then instead invoke
## '[depot_tools]/command_name.py' correctly under mingw as well
## as posix-ey systems, passing along all other command line flags.

## Example:
## echo ". python_runner.sh" > git-foo-command
## ./git-foo-command  #=> runs `python git_foo_command.py`

## Constants
PYTHONDONTWRITEBYTECODE=1

## "Input parameters".
# If set before the script is sourced, then we'll use the pre-set values.
#
# SCRIPT defaults to the basename of $0, with dashes replaced with underscores

# "$0" can have several different formats depending on how the script was called
# and the environment being used, including having different formats even in the
# same environment (e.g. in msys, 'git cl' causes $0 to have a Windows-style
# path, but calling 'git-cl' results in a POSIX-style path), so don't assume a
# particular format.
# First try to split it using Windows format ...
DEPOT_TOOLS="${0%\\*}"
if [[ "$DEPOT_TOOLS" = "$0" ]]; then
  # If that didn't work, try POSIX format ...
  DEPOT_TOOLS="${0%/*}"
  if [[ "$DEPOT_TOOLS" = "$0" ]]; then
    # Sometimes commands will run with no path (e.g. a git command run from
    # within the depot_tools dir itself). In that case, treat it as if run like:
    # "./command"
    DEPOT_TOOLS="."
    BASENAME="$0"
  else
    BASENAME="${0##*/}"
  fi
else
  BASENAME="${0##*\\}"
fi

SCRIPT="${SCRIPT-${BASENAME//-/_}.py}"

if [[ $PYTHON_DIRECT = 1 ]]; then
  python.exe "$DEPOT_TOOLS\\$SCRIPT" "$@"
else
  if [[ -e "$DEPOT_TOOLS/python.bat" && $OSTYPE = msys ]]; then
    cmd.exe //c "$DEPOT_TOOLS\\python.bat" "$DEPOT_TOOLS\\$SCRIPT" "$@"
  else
    exec "$DEPOT_TOOLS/$SCRIPT" "$@"
  fi
fi
