optimise getUUID
This avoids a Map lookup each time it's called, instead the GitConfig field lazily looks it up once and then caches.
This commit is contained in:
parent
737e45156e
commit
23ff58cd4f
2 changed files with 14 additions and 5 deletions
|
@ -6,7 +6,7 @@
|
|||
- UUIDs of remotes are cached in git config, using keys named
|
||||
- remote.<name>.annex-uuid
|
||||
-
|
||||
- Copyright 2010-2013 Joey Hess <id@joeyh.name>
|
||||
- Copyright 2010-2016 Joey Hess <id@joeyh.name>
|
||||
-
|
||||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
@ -29,6 +29,7 @@ module Annex.UUID (
|
|||
) where
|
||||
|
||||
import Annex.Common
|
||||
import qualified Annex
|
||||
import qualified Git
|
||||
import qualified Git.Config
|
||||
import Config
|
||||
|
@ -58,9 +59,10 @@ gCryptNameSpace = U5.generateNamed U5.namespaceURL $
|
|||
|
||||
{- Get current repository's UUID. -}
|
||||
getUUID :: Annex UUID
|
||||
getUUID = getRepoUUID =<< gitRepo
|
||||
getUUID = annexUUID <$> Annex.getGitConfig
|
||||
|
||||
{- Looks up a repo's UUID, caching it in .git/config if it's not already. -}
|
||||
{- Looks up a remote repo's UUID, caching it in .git/config if
|
||||
- it's not already. -}
|
||||
getRepoUUID :: Git.Repo -> Annex UUID
|
||||
getRepoUUID r = do
|
||||
c <- toUUID <$> getConfig cachekey ""
|
||||
|
@ -78,7 +80,9 @@ getRepoUUID r = do
|
|||
cachekey = remoteConfig r "uuid"
|
||||
|
||||
removeRepoUUID :: Annex ()
|
||||
removeRepoUUID = unsetConfig configkey
|
||||
removeRepoUUID = do
|
||||
unsetConfig configkey
|
||||
storeUUID NoUUID
|
||||
|
||||
getUncachedUUID :: Git.Repo -> UUID
|
||||
getUncachedUUID = toUUID . Git.Config.get key ""
|
||||
|
@ -98,7 +102,9 @@ prepUUID = whenM ((==) NoUUID <$> getUUID) $
|
|||
storeUUID =<< liftIO genUUID
|
||||
|
||||
storeUUID :: UUID -> Annex ()
|
||||
storeUUID = storeUUIDIn configkey
|
||||
storeUUID u = do
|
||||
Annex.changeGitConfig $ \c -> c { annexUUID = u }
|
||||
storeUUIDIn configkey u
|
||||
|
||||
storeUUIDIn :: ConfigKey -> UUID -> Annex ()
|
||||
storeUUIDIn configfield = setConfig configfield . fromUUID
|
||||
|
|
|
@ -19,6 +19,7 @@ import qualified Git.Construct
|
|||
import Git.SharedRepository
|
||||
import Utility.DataUnits
|
||||
import Config.Cost
|
||||
import Types.UUID
|
||||
import Types.Distribution
|
||||
import Types.Availability
|
||||
import Types.NumCopies
|
||||
|
@ -32,6 +33,7 @@ import Utility.ThreadScheduler (Seconds(..))
|
|||
- such as annex.foo -}
|
||||
data GitConfig = GitConfig
|
||||
{ annexVersion :: Maybe String
|
||||
, annexUUID :: UUID
|
||||
, annexNumCopies :: Maybe NumCopies
|
||||
, annexDiskReserve :: Integer
|
||||
, annexDirect :: Bool
|
||||
|
@ -75,6 +77,7 @@ data GitConfig = GitConfig
|
|||
extractGitConfig :: Git.Repo -> GitConfig
|
||||
extractGitConfig r = GitConfig
|
||||
{ annexVersion = notempty $ getmaybe (annex "version")
|
||||
, annexUUID = maybe NoUUID toUUID $ getmaybe (annex "uuid")
|
||||
, annexNumCopies = NumCopies <$> getmayberead (annex "numcopies")
|
||||
, annexDiskReserve = fromMaybe onemegabyte $
|
||||
readSize dataUnits =<< getmaybe (annex "diskreserve")
|
||||
|
|
Loading…
Reference in a new issue