use RawFilePath for opening sqlite databases
Fix a crash opening sqlite databases when run in a non-unicode locale, with a remote that uses a non-unicode filepath. In that situation converting to Text fails. The fix needs git-annex to be built with persistent-sqlite 2.13.3. Building against older versions still works, but that version is used when building with stack. Database.RawFilePath is a lot of code copied from persistent-sqlite and lightly modified, since only 1 function in persistent-sqlite was made to support RawFilePath. This is a bit of a pain, and I hope that persistent-sqlite will eventually switch to using OsPath, allowing this module to be removed from git-annex. Sponsored-by: k0ld on Patreon
This commit is contained in:
parent
6d789c9c81
commit
8a3beabf35
8 changed files with 138 additions and 8 deletions
|
@ -53,9 +53,14 @@ import qualified Utility.RawFilePath as R
|
|||
|
||||
import Database.Persist.Sql hiding (Key)
|
||||
import Database.Persist.TH
|
||||
import Database.Persist.Sqlite (runSqlite)
|
||||
import qualified System.FilePath.ByteString as P
|
||||
|
||||
#if MIN_VERSION_persistent_sqlite(2,13,3)
|
||||
import Database.RawFilePath
|
||||
#else
|
||||
import Database.Persist.Sqlite (runSqlite)
|
||||
import qualified Data.Text as T
|
||||
#endif
|
||||
|
||||
data ContentIdentifierHandle = ContentIdentifierHandle H.DbQueue Bool
|
||||
|
||||
|
@ -102,8 +107,13 @@ openDb = do
|
|||
runMigrationSilent migrateContentIdentifier
|
||||
-- Migrate from old versions of database, which had buggy
|
||||
-- and suboptimal uniqueness constraints.
|
||||
#if MIN_VERSION_persistent_sqlite(2,13,3)
|
||||
else liftIO $ runSqlite' db $ void $
|
||||
runMigrationSilent migrateContentIdentifier
|
||||
#else
|
||||
else liftIO $ runSqlite (T.pack (fromRawFilePath db)) $ void $
|
||||
runMigrationSilent migrateContentIdentifier
|
||||
#endif
|
||||
h <- liftIO $ H.openDbQueue db "content_identifiers"
|
||||
return $ ContentIdentifierHandle h isnew
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue