summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-01-18 12:26:45 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-01-18 12:26:45 -0400
commit8a90ce164c90aef0fd9b7e992bb36935e7a963c5 (patch)
tree4cbcf7a848e258c6798387367bd80d4f8710f432
parent72445900116cfce9daa8841097096db3b64a3b16 (diff)
Avoid filename encoding errors when writing direct mode mappings.
-rw-r--r--Annex/Content/Direct.hs13
-rw-r--r--debian/changelog1
2 files changed, 12 insertions, 2 deletions
diff --git a/Annex/Content/Direct.hs b/Annex/Content/Direct.hs
index 822ae0608..889c27231 100644
--- a/Annex/Content/Direct.hs
+++ b/Annex/Content/Direct.hs
@@ -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]
diff --git a/debian/changelog b/debian/changelog
index 182439acd..a8a75c906 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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