#!/bin/bash

set -euxo pipefail

test_cargo_binstall_install() {
  # Test that the installed binaries can be run
  cargo binstall --help >/dev/null

  cargo_binstall_version="$(cargo binstall -V)"
  echo "$cargo_binstall_version"

  [ "$cargo_binstall_version" = "cargo-binstall 0.12.0" ]
}

unset CARGO_INSTALL_ROOT

CARGO_HOME="$(mktemp -d 2>/dev/null || mktemp -d -t 'cargo-home')"
export CARGO_HOME
export PATH="$CARGO_HOME/bin:$PATH"

GIT="$(mktemp -d 2>/dev/null || mktemp -d -t 'git')"
if [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "msys" ]; then
    # Convert it to windows path so `--git "file://$GIT"` would work
    # on windows.
    GIT="$(cygpath -w "$GIT")"
fi

git init "$GIT"
cp manifests/github-test-Cargo.toml "$GIT/Cargo.toml"
(
  cd "$GIT"
  git config user.email 'test@example.com'
  git config user.name 'test'
  git add Cargo.toml
  git commit -m "Add Cargo.toml"
)

# Install binaries using `--git`
"./$1" binstall --force --git "file://$GIT" --no-confirm cargo-binstall

test_cargo_binstall_install

cp -r manifests/workspace/* "$GIT"
(
  cd "$GIT"
  git add .
  git commit -m 'Update to workspace'
)
COMMIT_HASH="$(cd "$GIT" && git rev-parse HEAD)"

if [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "msys" ]; then
    source="(git+file:///$(cygpath -m "$GIT")#$COMMIT_HASH)"
else
    source="(git+file://$GIT#$COMMIT_HASH)"
fi

# Install cargo-binstall using `--git`
"./$1" binstall --force --git "file://$GIT" --no-confirm cargo-binstall

test_cargo_binstall_install

cat "$CARGO_HOME/.crates.toml"
grep -F "cargo-binstall 0.12.0 $source" <"$CARGO_HOME/.crates.toml"

# Install cargo-watch using `--git`
"./$1" binstall --force --git "file://$GIT" --no-confirm cargo-watch

cargo_watch_version="$(cargo watch -V)"
echo "$cargo_watch_version"

[ "$cargo_watch_version" = "cargo-watch 8.4.0" ]

cat "$CARGO_HOME/.crates.toml"
grep -F "cargo-watch 8.4.0 $source" <"$CARGO_HOME/.crates.toml"