nice git ack space optimisation when setting the same metadata value for multiple files
This commit is contained in:
parent
0e9a72b356
commit
a18eae9a0f
2 changed files with 22 additions and 14 deletions
|
@ -31,6 +31,7 @@ module Logs.MetaData (
|
|||
setMetaData,
|
||||
unsetMetaData,
|
||||
addMetaData,
|
||||
addMetaData',
|
||||
currentMetaData,
|
||||
) where
|
||||
|
||||
|
@ -70,12 +71,17 @@ setMetaData' isset k field s = addMetaData k $
|
|||
{- Adds in some metadata, which can override existing values, or unset
|
||||
- them, but otherwise leaves any existing metadata as-is. -}
|
||||
addMetaData :: Key -> MetaData -> Annex ()
|
||||
addMetaData k metadata = do
|
||||
now <- liftIO getPOSIXTime
|
||||
Annex.Branch.change (metaDataLogFile k) $
|
||||
showLog . simplifyLog
|
||||
. S.insert (LogEntry now metadata)
|
||||
. parseLog
|
||||
addMetaData k metadata = addMetaData' k metadata =<< liftIO getPOSIXTime
|
||||
|
||||
{- Reusing the same timestamp when making changes to the metadata
|
||||
- of multiple keys is a nice optimisation. The same metadata lines
|
||||
- will tend to be generated across the different log files, and so
|
||||
- git will be able to pack the data more efficiently. -}
|
||||
addMetaData' :: Key -> MetaData -> POSIXTime -> Annex ()
|
||||
addMetaData' k metadata now = Annex.Branch.change (metaDataLogFile k) $
|
||||
showLog . simplifyLog
|
||||
. S.insert (LogEntry now metadata)
|
||||
. parseLog
|
||||
|
||||
{- Simplify a log, removing historical values that are no longer
|
||||
- needed.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue