From 9874dca454b483bdcf9cb1536549d5029d5b3f4c Mon Sep 17 00:00:00 2001
From: Jiahao XU <Jiahao_XU@outlook.com>
Date: Wed, 15 Feb 2023 15:24:50 +1100
Subject: [PATCH] Fix bin names in `.crates.toml` on win (#802)

`bins::BinFile::new` does not include `binary_ext` in the
`BinFile::base_name`.

Also add regression e2e-test.

Fixed #801

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
---
 crates/binstalk/src/bins.rs |  4 ++--
 e2e-tests/uninstall.sh      | 17 +++++++++++++++++
 justfile                    |  3 ++-
 3 files changed, 21 insertions(+), 3 deletions(-)
 create mode 100644 e2e-tests/uninstall.sh

diff --git a/crates/binstalk/src/bins.rs b/crates/binstalk/src/bins.rs
index e6549627..ab7fabab 100644
--- a/crates/binstalk/src/bins.rs
+++ b/crates/binstalk/src/bins.rs
@@ -4,7 +4,7 @@ use std::{
     path::{self, Component, Path, PathBuf},
 };
 
-use compact_str::CompactString;
+use compact_str::{format_compact, CompactString};
 use normalize_path::NormalizePath;
 use serde::Serialize;
 use tinytemplate::TinyTemplate;
@@ -141,7 +141,7 @@ impl BinFile {
         };
 
         Ok(Self {
-            base_name: CompactString::from(base_name),
+            base_name: format_compact!("{base_name}{binary_ext}"),
             source,
             dest,
             link,
diff --git a/e2e-tests/uninstall.sh b/e2e-tests/uninstall.sh
new file mode 100644
index 00000000..8f1cb8ca
--- /dev/null
+++ b/e2e-tests/uninstall.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+set -euxo pipefail
+
+unset CARGO_INSTALL_ROOT
+
+export CARGO_HOME=$(mktemp -d 2>/dev/null || mktemp -d -t 'cargo-home')
+othertmpdir=$(mktemp -d 2>/dev/null || mktemp -d -t 'cargo-test')
+export PATH="$CARGO_HOME/bin:$othertmpdir/bin:$PATH"
+
+mkdir -p "$othertmpdir/bin"
+# Copy it to bin to test use of env var `CARGO`
+cp "./$1" "$othertmpdir/bin/"
+
+
+cargo binstall --no-confirm cargo-watch
+cargo uninstall cargo-watch
diff --git a/justfile b/justfile
index 521332e4..bd34afad 100644
--- a/justfile
+++ b/justfile
@@ -132,6 +132,7 @@ e2e-test-strategies: (e2e-test "strategies")
 e2e-test-version-syntax: (e2e-test "version-syntax")
 e2e-test-upgrade: (e2e-test "upgrade")
 e2e-test-self-upgrade-no-symlink: (e2e-test "self-upgrade-no-symlink")
+e2e-test-uninstall: (e2e-test "uninstall")
 
 # WinTLS (Windows in CI) does not have TLS 1.3 support
 [windows]
@@ -140,7 +141,7 @@ e2e-test-tls: (e2e-test "tls" "1.2")
 [macos]
 e2e-test-tls: (e2e-test "tls" "1.2") (e2e-test "tls" "1.3")
 
-e2e-tests: e2e-test-live e2e-test-manifest-path e2e-test-other-repos e2e-test-strategies e2e-test-version-syntax e2e-test-upgrade e2e-test-tls e2e-test-self-upgrade-no-symlink
+e2e-tests: e2e-test-live e2e-test-manifest-path e2e-test-other-repos e2e-test-strategies e2e-test-version-syntax e2e-test-upgrade e2e-test-tls e2e-test-self-upgrade-no-symlink e2e-test-uninstall
 
 unit-tests:
     {{cargo-bin}} test {{cargo-build-args}}