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.
This commit is contained in:
Joey Hess 2020-03-05 13:52:30 -04:00
parent 14dfd297a4
commit 662e5a5db9
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38

View file

@ -41,7 +41,7 @@ import Prelude
import Utility.Monad import Utility.Monad
import Utility.UserInfo import Utility.UserInfo
import Utility.Directory import Utility.SystemDirectory
import Utility.Split import Utility.Split
import Utility.FileSystemEncoding import Utility.FileSystemEncoding
@ -73,6 +73,8 @@ simplifyPath path = dropTrailingPathSeparator $
p' = dropTrailingPathSeparator p p' = dropTrailingPathSeparator p
{- Makes a path absolute. {- Makes a path absolute.
-
- Also simplifies it using simplifyPath.
- -
- The first parameter is a base directory (ie, the cwd) to use if the path - The first parameter is a base directory (ie, the cwd) to use if the path
- is not already absolute, and should itsef be absolute. - is not already absolute, and should itsef be absolute.
@ -123,13 +125,20 @@ dirContains a b = a == b
norm = normalise . simplifyPath norm = normalise . simplifyPath
{- Converts a filename into an absolute path. {- Converts a filename into an absolute path.
-
- Also simplifies it using simplifyPath.
- -
- Unlike Directory.canonicalizePath, this does not require the path - Unlike Directory.canonicalizePath, this does not require the path
- already exists. -} - already exists. -}
absPath :: FilePath -> IO FilePath absPath :: FilePath -> IO FilePath
absPath file = do absPath file
cwd <- getCurrentDirectory -- Avoid unncessarily getting the current directory when the path
return $ absPathFrom cwd file -- 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. {- Constructs a relative path from the CWD to a file.
- -