Avoid filename encoding errors when writing direct mode mappings.

This commit is contained in:
Joey Hess 2013-01-18 12:26:45 -04:00
parent bbf0e74f72
commit 5c58e9c101
2 changed files with 12 additions and 2 deletions

View file

@ -41,7 +41,10 @@ associatedFiles key = do
associatedFilesRelative :: Key -> Annex [FilePath]
associatedFilesRelative key = do
mapping <- inRepo $ gitAnnexMapping key
liftIO $ catchDefaultIO [] $ lines <$> readFile mapping
liftIO $ catchDefaultIO [] $ do
h <- openFile mapping ReadMode
fileEncoding h
hClose h `after` (lines <$> hGetContents h)
{- Changes the associated files information for a key, applying a
- transformation to the list. Returns new associatedFiles value. -}
@ -51,9 +54,15 @@ changeAssociatedFiles key transform = do
files <- associatedFilesRelative key
let files' = transform files
when (files /= files') $
liftIO $ viaTmp writeFile mapping $ unlines files'
liftIO $ viaTmp write mapping $ unlines files'
top <- fromRepo Git.repoPath
return $ map (top </>) files'
where
write file content = do
h <- openFile file WriteMode
fileEncoding h
hPutStr h content
hClose h
{- Removes an associated file. Returns new associatedFiles value. -}
removeAssociatedFile :: Key -> FilePath -> Annex [FilePath]

1
debian/changelog vendored
View file

@ -18,6 +18,7 @@ git-annex (3.20130115) UNRELEASED; urgency=low
* Fix direct mode mapping code to always store direct mode filenames
relative to the top of the repository, even when operating inside a
subdirectory.
* Avoid filename encoding errors when writing direct mode mappings.
-- Joey Hess <joeyh@debian.org> Mon, 14 Jan 2013 18:35:01 -0400