From 9d3188e1279ad6c4888f3ce99bd802517bdd68b3 Mon Sep 17 00:00:00 2001 From: Jens Petersen Date: Fri, 2 Oct 2020 18:51:41 +0800 Subject: [PATCH] install: create hls hardlinks instead of copies except on Windows This saves quite a bit of diskspace --- install/src/Cabal.hs | 10 ++++++---- install/src/Stack.hs | 13 ++++++++----- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/install/src/Cabal.hs b/install/src/Cabal.hs index af38070860..eec70edb96 100644 --- a/install/src/Cabal.hs +++ b/install/src/Cabal.hs @@ -5,6 +5,7 @@ import Development.Shake import Development.Shake.FilePath import Control.Monad import System.Directory ( copyFile ) +import System.Info ( os ) import Version import Print @@ -74,9 +75,11 @@ cabalInstallHls versionNumber args = do let minorVerExe = "haskell-language-server-" ++ versionNumber <.> exe majorVerExe = "haskell-language-server-" ++ dropExtension versionNumber <.> exe - liftIO $ do - copyFile (localBin "haskell-language-server" <.> exe) (localBin minorVerExe) - copyFile (localBin "haskell-language-server" <.> exe) (localBin majorVerExe) + let copyCmd old new = if os == "mingw32" + then liftIO $ copyFile old new + else command [] "ln" ["-f", old, new] + copyCmd (localBin "haskell-language-server" <.> exe) (localBin minorVerExe) + copyCmd (localBin "haskell-language-server" <.> exe) (localBin majorVerExe) printLine $ "Copied executables " ++ ("haskell-language-server-wrapper" <.> exe) ++ ", " @@ -141,4 +144,3 @@ getVerbosityArg v = "-v" ++ cabalVerbosity Chatty -> "2" #endif Diagnostic -> "3" - diff --git a/install/src/Stack.hs b/install/src/Stack.hs index a8e18adc6a..012abf9594 100644 --- a/install/src/Stack.hs +++ b/install/src/Stack.hs @@ -6,6 +6,7 @@ import Development.Shake.FilePath import Control.Monad import System.Directory ( copyFile ) -- import System.FilePath ( () ) +import System.Info ( os ) import Version import Print @@ -32,11 +33,13 @@ stackInstallHls mbVersionNumber args = do localBinDir <- getLocalBin args let hls = "haskell-language-server" <.> exe - liftIO $ do - copyFile (localBinDir hls) - (localBinDir "haskell-language-server-" ++ versionNumber <.> exe) - copyFile (localBinDir hls) - (localBinDir "haskell-language-server-" ++ dropExtension versionNumber <.> exe) + copyCmd old new = if os == "mingw32" + then liftIO $ copyFile old new + else command [] "ln" ["-f", old, new] + copyCmd (localBinDir hls) + (localBinDir "haskell-language-server-" ++ versionNumber <.> exe) + copyCmd (localBinDir hls) + (localBinDir "haskell-language-server-" ++ dropExtension versionNumber <.> exe) getGhcVersionOfCfgFile :: String -> [String] -> Action VersionNumber getGhcVersionOfCfgFile stackFile args = do