917a2c6095
The smuge filter no longer provides git with annexed file content, to avoid a git memory leak, and because that did not honor annex.thin. git annex smudge --update has to be run after a checkout to update unlocked files in the working tree with annexed file contents. No hooks yet to run it. This commit was sponsored by Nick Piper on Patreon.
40 lines
1 KiB
Haskell
40 lines
1 KiB
Haskell
{- git-annex smudge log file
|
|
-
|
|
- Copyright 2018 Joey Hess <id@joeyh.name>
|
|
-
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
|
-}
|
|
|
|
module Logs.Smudge where
|
|
|
|
import Annex.Common
|
|
import Git.FilePath
|
|
import Logs.File
|
|
|
|
-- | Log a smudged file.
|
|
smudgeLog :: Key -> TopFilePath -> Annex ()
|
|
smudgeLog k f = do
|
|
logf <- fromRepo gitAnnexSmudgeLog
|
|
appendLogFile logf gitAnnexSmudgeLock $
|
|
key2file k ++ " " ++ getTopFilePath f
|
|
|
|
-- | Streams all smudged files, and then empties the log at the end.
|
|
--
|
|
-- If the action is interrupted or throws an exception, the log file is
|
|
-- left unchanged.
|
|
--
|
|
-- Locking is used to prevent new items being added to the log while this
|
|
-- is running.
|
|
streamSmudged :: (Key -> TopFilePath -> Annex ()) -> Annex ()
|
|
streamSmudged a = do
|
|
logf <- fromRepo gitAnnexSmudgeLog
|
|
streamLogFile logf gitAnnexSmudgeLock $ \l ->
|
|
case parse l of
|
|
Nothing -> noop
|
|
Just (k, f) -> a k f
|
|
where
|
|
parse l =
|
|
let (ks, f) = separate (== ' ') l
|
|
in do
|
|
k <- file2key ks
|
|
return (k, asTopFilePath f)
|