From 662e5a5db9bfb9442933226c36f21bdb47a7c4b5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 5 Mar 2020 13:52:30 -0400 Subject: [PATCH] small opt to absPath Noticed that it gets the CWD unncessarily when the path is absolute. I have not benchmarked this, but I guess that the small overhead of isAbsolute is so tiny compared to the system call that it's worth it even if most of the time relative paths are passed to absPath. --- Utility/Path.hs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Utility/Path.hs b/Utility/Path.hs index ecc752c123..a8ab918afa 100644 --- a/Utility/Path.hs +++ b/Utility/Path.hs @@ -41,7 +41,7 @@ import Prelude import Utility.Monad import Utility.UserInfo -import Utility.Directory +import Utility.SystemDirectory import Utility.Split import Utility.FileSystemEncoding @@ -73,6 +73,8 @@ simplifyPath path = dropTrailingPathSeparator $ p' = dropTrailingPathSeparator p {- Makes a path absolute. + - + - Also simplifies it using simplifyPath. - - The first parameter is a base directory (ie, the cwd) to use if the path - is not already absolute, and should itsef be absolute. @@ -123,13 +125,20 @@ dirContains a b = a == b norm = normalise . simplifyPath {- Converts a filename into an absolute path. + - + - Also simplifies it using simplifyPath. - - Unlike Directory.canonicalizePath, this does not require the path - already exists. -} absPath :: FilePath -> IO FilePath -absPath file = do - cwd <- getCurrentDirectory - return $ absPathFrom cwd file +absPath file + -- Avoid unncessarily getting the current directory when the path + -- is already absolute. absPathFrom uses simplifyPath + -- so also used here for consistency. + | isAbsolute file = return $ simplifyPath file + | otherwise = do + cwd <- getCurrentDirectory + return $ absPathFrom cwd file {- Constructs a relative path from the CWD to a file. -