optimise literalOsPath

Taking a ShortByteString and using OverloadedStrings should avoid it
being converted from a String.

The reason there is no IsString instance for OsPath is presumably the
bad behavior of IsString for ByteString on unicode btw. But
literalOsPath won't be used with unicode in git-annex.

Sponsored-by: unqueued
This commit is contained in:
Joey Hess 2025-01-27 15:54:24 -04:00
parent 8bafe05500
commit 98a0a9ddff
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
10 changed files with 23 additions and 7 deletions

View file

@ -5,6 +5,7 @@
- Licensed under the GNU AGPL version 3 or higher. - Licensed under the GNU AGPL version 3 or higher.
-} -}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-} {-# LANGUAGE CPP #-}
module Annex.Magic ( module Annex.Magic (

View file

@ -5,6 +5,7 @@
- Licensed under the GNU AGPL version 3 or higher. - Licensed under the GNU AGPL version 3 or higher.
-} -}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-} {-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-tabs #-} {-# OPTIONS_GHC -fno-warn-tabs #-}

View file

@ -6,6 +6,7 @@
- Licensed under the GNU AGPL version 3 or higher. - Licensed under the GNU AGPL version 3 or higher.
-} -}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE CPP #-} {-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-tabs #-} {-# OPTIONS_GHC -fno-warn-tabs #-}

View file

@ -5,6 +5,7 @@
- Licensed under the GNU AGPL version 3 or higher. - Licensed under the GNU AGPL version 3 or higher.
-} -}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-tabs #-} {-# OPTIONS_GHC -fno-warn-tabs #-}
module Config.Files where module Config.Files where

View file

@ -10,6 +10,7 @@
- License: BSD-2-clause - License: BSD-2-clause
-} -}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-tabs #-} {-# OPTIONS_GHC -fno-warn-tabs #-}
module Utility.FreeDesktop ( module Utility.FreeDesktop (

View file

@ -5,6 +5,7 @@
- License: BSD-2-clause - License: BSD-2-clause
-} -}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-tabs #-} {-# OPTIONS_GHC -fno-warn-tabs #-}
module Utility.OSX ( module Utility.OSX (
@ -18,7 +19,9 @@ import Common
import Utility.UserInfo import Utility.UserInfo
autoStartBase :: String -> OsPath autoStartBase :: String -> OsPath
autoStartBase label = literalOsPath "Library" </> literalOsPath "LaunchAgents" </> literalOsPath (label ++ ".plist") autoStartBase label = literalOsPath "Library"
</> literalOsPath "LaunchAgents"
</> toOsPath label <> literalOsPath ".plist"
systemAutoStart :: String -> OsPath systemAutoStart :: String -> OsPath
systemAutoStart label = literalOsPath "/" </> autoStartBase label systemAutoStart label = literalOsPath "/" </> autoStartBase label

View file

@ -46,10 +46,6 @@ instance OsPathConv FilePath where
toOsPath = toOsPath . toRawFilePath toOsPath = toOsPath . toRawFilePath
fromOsPath = fromRawFilePath . fromOsPath fromOsPath = fromRawFilePath . fromOsPath
{- Used for string constants. -}
literalOsPath :: String -> OsPath
literalOsPath = toOsPath
#ifdef WITH_OSPATH #ifdef WITH_OSPATH
instance OsPathConv RawFilePath where instance OsPathConv RawFilePath where
toOsPath = bytesToOsPath . S.toShort toOsPath = bytesToOsPath . S.toShort
@ -80,6 +76,10 @@ bytesFromOsPath = getPosixString . getOsString
getSearchPath :: IO [OsPath] getSearchPath :: IO [OsPath]
getSearchPath = map toOsPath <$> PB.getSearchPath getSearchPath = map toOsPath <$> PB.getSearchPath
{- Used for string constants. -}
literalOsPath :: ShortByteString -> OsPath
literalOsPath = bytesToOsPath
#else #else
{- When not building with WITH_OSPATH, use RawFilePath. {- When not building with WITH_OSPATH, use RawFilePath.
-} -}
@ -97,4 +97,7 @@ instance OsPathConv ShortByteString where
unsafeFromChar :: Char -> Word8 unsafeFromChar :: Char -> Word8
unsafeFromChar = fromIntegral . ord unsafeFromChar = fromIntegral . ord
literalOsPath :: RawFilePath -> OsPath
literalOsPath = id
#endif #endif

View file

@ -5,6 +5,8 @@
- License: BSD-2-clause - License: BSD-2-clause
-} -}
{-# LANGUAGE OverloadedStrings #-}
module Utility.SshConfig ( module Utility.SshConfig (
SshConfig(..), SshConfig(..),
Comment(..), Comment(..),

View file

@ -7,6 +7,7 @@
{-# LANGUAGE CPP #-} {-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-tabs #-} {-# OPTIONS_GHC -fno-warn-tabs #-}
{-# LANGUAGE OverloadedStrings #-}
module Utility.Tmp.Dir ( module Utility.Tmp.Dir (
withTmpDir, withTmpDir,

View file

@ -5,6 +5,8 @@
- Licensed under the GNU AGPL version 3 or higher. - Licensed under the GNU AGPL version 3 or higher.
-} -}
{-# LANGUAGE OverloadedStrings #-}
module Utility.Tor ( module Utility.Tor (
OnionPort, OnionPort,
OnionAddress(..), OnionAddress(..),
@ -143,7 +145,7 @@ hiddenServiceHostnameFile appname uid ident =
hiddenServiceSocketFile :: AppName -> UserID -> UniqueIdent -> OsPath hiddenServiceSocketFile :: AppName -> UserID -> UniqueIdent -> OsPath
hiddenServiceSocketFile appname uid ident = hiddenServiceSocketFile appname uid ident =
varLibDir </> toOsPath appname varLibDir </> toOsPath appname
</> toOsPath (show uid ++ "_" ++ ident) </> toOsPath "s" </> toOsPath (show uid ++ "_" ++ ident) </> literalOsPath "s"
-- | Parse torrc, to get the socket file used for a hidden service with -- | Parse torrc, to get the socket file used for a hidden service with
-- the specified UniqueIdent. -- the specified UniqueIdent.
@ -155,7 +157,7 @@ getHiddenServiceSocketFile _appname uid ident =
parse [] = Nothing parse [] = Nothing
parse (("HiddenServiceDir":hsdir:[]):("HiddenServicePort":_hsport:hsaddr:[]):rest) parse (("HiddenServiceDir":hsdir:[]):("HiddenServicePort":_hsport:hsaddr:[]):rest)
| "unix:" `isPrefixOf` hsaddr && hasident (toOsPath hsdir) = | "unix:" `isPrefixOf` hsaddr && hasident (toOsPath hsdir) =
Just $ toOsPath $ drop (length "unix:") hsaddr Just $ toOsPath $ drop (length ("unix:" :: String)) hsaddr
| otherwise = parse rest | otherwise = parse rest
parse (_:rest) = parse rest parse (_:rest) = parse rest