From 40a9033375ce0ff2d7f362b0866b480f9cf69f66 Mon Sep 17 00:00:00 2001
From: Jiahao XU <30436523+NobodyXu@users.noreply.github.com>
Date: Wed, 6 Nov 2024 17:13:12 +1100
Subject: [PATCH] Impl `self_install`

Signed-off-by: Jiahao XU <30436523+NobodyXu@users.noreply.github.com>
---
 crates/bin/src/entry.rs | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/crates/bin/src/entry.rs b/crates/bin/src/entry.rs
index 39d29ab4..aa1f9199 100644
--- a/crates/bin/src/entry.rs
+++ b/crates/bin/src/entry.rs
@@ -5,6 +5,7 @@ use std::{
     time::Duration,
 };
 
+use atomic_file_install::atomic_install;
 use binstalk::{
     errors::{BinstallError, CrateContextError},
     fetchers::{Fetcher, GhCrateMeta, QuickInstall, SignaturePolicy},
@@ -588,7 +589,6 @@ fn do_install_fetches_continue_on_failure(
 
 pub fn self_install(
     args: Args,
-    binary: &Path
 ) -> Result<()> {
     // Load .cargo/config.toml
     let cargo_home = cargo_home().map_err(BinstallError::from)?;
@@ -604,7 +604,12 @@ pub fn self_install(
         &mut config,
     )?;
 
-    // copy
+    let dest = install_path.join("cargo-binstall");
+    if cfg!(windows) {
+        assert!(dest.set_extension("exe"));
+    }
+
+    atomic_install(&env::current_exe()?, &dest)?;
 
     if let Some(manifests) = manifests {
         manifests.update(vec![CrateInfo {