diff --git a/Database/Export.hs b/Database/Export.hs index 1491d0df5f..71ff67dcd7 100644 --- a/Database/Export.hs +++ b/Database/Export.hs @@ -130,7 +130,7 @@ addExportedLocation :: ExportHandle -> Key -> ExportLocation -> IO () addExportedLocation h k el = queueDb h $ do void $ insertUnique $ Exported k ef let edirs = map - (\ed -> ExportedDirectory (toSFilePath (fromRawFilePath (fromExportDirectory ed))) ef) + (\ed -> ExportedDirectory (SFilePath (fromExportDirectory ed)) ef) (exportDirectories el) putMany edirs where diff --git a/Database/Keys/SQL.hs b/Database/Keys/SQL.hs index 7950eb3074..3846aaf625 100644 --- a/Database/Keys/SQL.hs +++ b/Database/Keys/SQL.hs @@ -86,7 +86,7 @@ addAssociatedFile k f = queueDb $ do deleteWhere [AssociatedFile ==. af, AssociatedKey !=. k] void $ insertUnique $ Associated k af where - af = toSFilePath (fromRawFilePath (getTopFilePath f)) + af = SFilePath (getTopFilePath f) -- Does not remove any old association for a file, but less expensive -- than addAssociatedFile. Calling dropAllAssociatedFiles first and then @@ -94,7 +94,7 @@ addAssociatedFile k f = queueDb $ do addAssociatedFileFast :: Key -> TopFilePath -> WriteHandle -> IO () addAssociatedFileFast k f = queueDb $ void $ insertUnique $ Associated k af where - af = toSFilePath (fromRawFilePath (getTopFilePath f)) + af = SFilePath (getTopFilePath f) dropAllAssociatedFiles :: WriteHandle -> IO () dropAllAssociatedFiles = queueDb $ @@ -105,7 +105,7 @@ dropAllAssociatedFiles = queueDb $ getAssociatedFiles :: Key -> ReadHandle -> IO [TopFilePath] getAssociatedFiles k = readDb $ do l <- selectList [AssociatedKey ==. k] [] - return $ map (asTopFilePath . toRawFilePath . associatedFile . entityVal) l + return $ map (asTopFilePath . (\(SFilePath f) -> f) . associatedFile . entityVal) l {- Gets any keys that are on record as having a particular associated file. - (Should be one or none but the database doesn't enforce that.) -} @@ -114,13 +114,13 @@ getAssociatedKey f = readDb $ do l <- selectList [AssociatedFile ==. af] [] return $ map (associatedKey . entityVal) l where - af = toSFilePath (fromRawFilePath (getTopFilePath f)) + af = SFilePath (getTopFilePath f) removeAssociatedFile :: Key -> TopFilePath -> WriteHandle -> IO () removeAssociatedFile k f = queueDb $ deleteWhere [AssociatedKey ==. k, AssociatedFile ==. af] where - af = toSFilePath (fromRawFilePath (getTopFilePath f)) + af = SFilePath (getTopFilePath f) addInodeCaches :: Key -> [InodeCache] -> WriteHandle -> IO () addInodeCaches k is = queueDb $ diff --git a/Database/Types.hs b/Database/Types.hs index 9f41ebc551..ac6aad2748 100644 --- a/Database/Types.hs +++ b/Database/Types.hs @@ -28,7 +28,6 @@ import Foreign.C.Types import Key import Utility.InodeCache import Utility.FileSize -import Utility.FileSystemEncoding import Git.Types import Types.UUID import Types.Import @@ -79,16 +78,10 @@ instance PersistField ContentIdentifier where instance PersistFieldSql ContentIdentifier where sqlType _ = SqlBlob --- A serialized FilePath. Stored as a ByteString to avoid encoding problems. +-- A serialized RawFilePath. newtype SFilePath = SFilePath S.ByteString deriving (Eq, Show) -toSFilePath :: FilePath -> SFilePath -toSFilePath = SFilePath . encodeBS - -fromSFilePath :: SFilePath -> FilePath -fromSFilePath (SFilePath b) = decodeBS b - instance PersistField SFilePath where toPersistValue (SFilePath b) = toPersistValue b fromPersistValue v = SFilePath <$> fromPersistValue v diff --git a/Upgrade/V7.hs b/Upgrade/V7.hs index 7b53794ddf..600f91e206 100644 --- a/Upgrade/V7.hs +++ b/Upgrade/V7.hs @@ -95,14 +95,14 @@ removeOldDb getdb = do populateKeysDb :: Annex () populateKeysDb = do top <- fromRepo Git.repoPath - (l, cleanup) <- inRepo $ LsFiles.inodeCaches [toRawFilePath top] + (l, cleanup) <- inRepo $ LsFiles.inodeCaches [top] forM_ l $ \case (_f, Nothing) -> giveup "Unable to parse git ls-files --debug output while upgrading git-annex sqlite databases." (f, Just ic) -> unlessM (liftIO $ isSymbolicLink <$> getSymbolicLinkStatus f) $ do catKeyFile (toRawFilePath f) >>= \case Nothing -> noop Just k -> do - topf <- inRepo $ toTopFilePath f + topf <- inRepo $ toTopFilePath $ toRawFilePath f Database.Keys.runWriter $ \h -> liftIO $ do Database.Keys.SQL.addAssociatedFileFast k topf h Database.Keys.SQL.addInodeCaches k [ic] h