add file-io to build-depends when building with OsPath flag
Partly converted code to use functions from it, though more remain unconverted. Most of withFile and openFile now use it.
This commit is contained in:
parent
85efc13e3a
commit
1faa3af9cd
20 changed files with 178 additions and 68 deletions
25
Logs/File.hs
25
Logs/File.hs
|
@ -26,6 +26,7 @@ import Annex.Perms
|
|||
import Annex.LockFile
|
||||
import Annex.ReplaceFile
|
||||
import Utility.Tmp
|
||||
import qualified Utility.FileIO as F
|
||||
|
||||
import qualified Data.ByteString as S
|
||||
import qualified Data.ByteString.Char8 as S8
|
||||
|
@ -52,7 +53,7 @@ withLogHandle f a = do
|
|||
where
|
||||
setup tmp = do
|
||||
setAnnexFilePerm tmp
|
||||
liftIO $ openFile (fromRawFilePath tmp) WriteMode
|
||||
liftIO $ F.openFile (toOsPath tmp) WriteMode
|
||||
cleanup h = liftIO $ hClose h
|
||||
|
||||
-- | Appends a line to a log file, first locking it to prevent
|
||||
|
@ -61,11 +62,9 @@ appendLogFile :: RawFilePath -> RawFilePath -> L.ByteString -> Annex ()
|
|||
appendLogFile f lck c =
|
||||
createDirWhenNeeded f $
|
||||
withExclusiveLock lck $ do
|
||||
liftIO $ withFile f' AppendMode $
|
||||
liftIO $ F.withFile (toOsPath f) AppendMode $
|
||||
\h -> L8.hPutStrLn h c
|
||||
setAnnexFilePerm (toRawFilePath f')
|
||||
where
|
||||
f' = fromRawFilePath f
|
||||
setAnnexFilePerm f
|
||||
|
||||
-- | Modifies a log file.
|
||||
--
|
||||
|
@ -93,14 +92,13 @@ modifyLogFile f lck modf = withExclusiveLock lck $ do
|
|||
checkLogFile :: RawFilePath -> RawFilePath -> (L.ByteString -> Bool) -> Annex Bool
|
||||
checkLogFile f lck matchf = withSharedLock lck $ bracket setup cleanup go
|
||||
where
|
||||
setup = liftIO $ tryWhenExists $ openFile f' ReadMode
|
||||
setup = liftIO $ tryWhenExists $ F.openFile (toOsPath f) ReadMode
|
||||
cleanup Nothing = noop
|
||||
cleanup (Just h) = liftIO $ hClose h
|
||||
go Nothing = return False
|
||||
go (Just h) = do
|
||||
!r <- liftIO (any matchf . fileLines <$> L.hGetContents h)
|
||||
return r
|
||||
f' = fromRawFilePath f
|
||||
|
||||
-- | Folds a function over lines of a log file to calculate a value.
|
||||
calcLogFile :: RawFilePath -> RawFilePath -> t -> (L.ByteString -> t -> t) -> Annex t
|
||||
|
@ -111,7 +109,7 @@ calcLogFile f lck start update =
|
|||
calcLogFileUnsafe :: RawFilePath -> t -> (L.ByteString -> t -> t) -> Annex t
|
||||
calcLogFileUnsafe f start update = bracket setup cleanup go
|
||||
where
|
||||
setup = liftIO $ tryWhenExists $ openFile f' ReadMode
|
||||
setup = liftIO $ tryWhenExists $ F.openFile (toOsPath f) ReadMode
|
||||
cleanup Nothing = noop
|
||||
cleanup (Just h) = liftIO $ hClose h
|
||||
go Nothing = return start
|
||||
|
@ -120,7 +118,6 @@ calcLogFileUnsafe f start update = bracket setup cleanup go
|
|||
go' v (l:ls) = do
|
||||
let !v' = update l v
|
||||
go' v' ls
|
||||
f' = fromRawFilePath f
|
||||
|
||||
-- | Streams lines from a log file, passing each line to the processor,
|
||||
-- and then empties the file at the end.
|
||||
|
@ -134,19 +131,19 @@ calcLogFileUnsafe f start update = bracket setup cleanup go
|
|||
--
|
||||
-- Locking is used to prevent writes to to the log file while this
|
||||
-- is running.
|
||||
streamLogFile :: FilePath -> RawFilePath -> Annex () -> (String -> Annex ()) -> Annex ()
|
||||
streamLogFile :: RawFilePath -> RawFilePath -> Annex () -> (String -> Annex ()) -> Annex ()
|
||||
streamLogFile f lck finalizer processor =
|
||||
withExclusiveLock lck $ do
|
||||
streamLogFileUnsafe f finalizer processor
|
||||
liftIO $ writeFile f ""
|
||||
setAnnexFilePerm (toRawFilePath f)
|
||||
liftIO $ F.writeFile' (toOsPath f) mempty
|
||||
setAnnexFilePerm f
|
||||
|
||||
-- Unsafe version that does not do locking, and does not empty the file
|
||||
-- at the end.
|
||||
streamLogFileUnsafe :: FilePath -> Annex () -> (String -> Annex ()) -> Annex ()
|
||||
streamLogFileUnsafe :: RawFilePath -> Annex () -> (String -> Annex ()) -> Annex ()
|
||||
streamLogFileUnsafe f finalizer processor = bracketOnError setup cleanup go
|
||||
where
|
||||
setup = liftIO $ tryWhenExists $ openFile f ReadMode
|
||||
setup = liftIO $ tryWhenExists $ F.openFile (toOsPath f) ReadMode
|
||||
cleanup Nothing = noop
|
||||
cleanup (Just h) = liftIO $ hClose h
|
||||
go Nothing = finalizer
|
||||
|
|
|
@ -79,7 +79,7 @@ logMigration old new = do
|
|||
-- | Commits a migration to the git-annex branch.
|
||||
commitMigration :: Annex ()
|
||||
commitMigration = do
|
||||
logf <- fromRawFilePath <$> fromRepo gitAnnexMigrateLog
|
||||
logf <- fromRepo gitAnnexMigrateLog
|
||||
lckf <- fromRepo gitAnnexMigrateLock
|
||||
nv <- liftIO $ newTVarIO (0 :: Integer)
|
||||
g <- Annex.gitRepo
|
||||
|
|
|
@ -14,6 +14,7 @@ import Git.FilePath
|
|||
import Logs.File
|
||||
import Utility.InodeCache
|
||||
import Annex.LockFile
|
||||
import qualified Utility.FileIO as F
|
||||
|
||||
import qualified Data.ByteString as S
|
||||
import qualified Data.ByteString.Lazy as L
|
||||
|
@ -48,21 +49,20 @@ streamRestageLog :: Annex () -> (TopFilePath -> InodeCache -> Annex ()) -> Annex
|
|||
streamRestageLog finalizer processor = do
|
||||
logf <- fromRepo gitAnnexRestageLog
|
||||
oldf <- fromRepo gitAnnexRestageLogOld
|
||||
let oldf' = fromRawFilePath oldf
|
||||
lckf <- fromRepo gitAnnexRestageLock
|
||||
|
||||
withExclusiveLock lckf $ liftIO $
|
||||
whenM (R.doesPathExist logf) $
|
||||
ifM (R.doesPathExist oldf)
|
||||
( do
|
||||
h <- openFile oldf' AppendMode
|
||||
h <- F.openFile (toOsPath oldf) AppendMode
|
||||
hPutStr h =<< readFile (fromRawFilePath logf)
|
||||
hClose h
|
||||
liftIO $ removeWhenExistsWith R.removeLink logf
|
||||
, moveFile logf oldf
|
||||
)
|
||||
|
||||
streamLogFileUnsafe oldf' finalizer $ \l ->
|
||||
streamLogFileUnsafe oldf finalizer $ \l ->
|
||||
case parseRestageLog l of
|
||||
Just (f, ic) -> processor f ic
|
||||
Nothing -> noop
|
||||
|
|
|
@ -34,7 +34,7 @@ streamSmudged :: (Key -> TopFilePath -> Annex ()) -> Annex ()
|
|||
streamSmudged a = do
|
||||
logf <- fromRepo gitAnnexSmudgeLog
|
||||
lckf <- fromRepo gitAnnexSmudgeLock
|
||||
streamLogFile (fromRawFilePath logf) lckf noop $ \l ->
|
||||
streamLogFile logf lckf noop $ \l ->
|
||||
case parse l of
|
||||
Nothing -> noop
|
||||
Just (k, f) -> a k f
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue