Windows: Fix handling of views of filenames containing '%'

This commit is contained in:
Joey Hess 2014-12-30 17:48:04 -04:00
parent ae72e4a62a
commit a4cf80f460
2 changed files with 14 additions and 3 deletions

View file

@ -5,6 +5,8 @@
- Licensed under the GNU GPL version 3 or higher.
-}
{-# LANGUAGE CPP #-}
module Annex.View.ViewedFile (
ViewedFile,
MkViewedFile,
@ -43,10 +45,18 @@ viewedFileFromReference f = concat
{- To avoid collisions with filenames or directories that contain
- '%', and to allow the original directories to be extracted
- from the ViewedFile, '%' is escaped to '\%' (and '\' to '\\').
- from the ViewedFile, '%' is escaped. )
-}
escape :: String -> String
escape = replace "%" "\\%" . replace "\\" "\\\\"
escape = replace "%" (escchar:'%':[]) . replace [escchar] [escchar, escchar]
escchar :: Char
#ifndef mingw32_HOST_OS
escchar = '\\'
#else
-- \ is path separator on Windows, so instead use !
escchar = '!'
#endif
{- For use when operating already within a view, so whatever filepath
- is present in the work tree is already a ViewedFile. -}
@ -61,7 +71,7 @@ dirFromViewedFile = joinPath . drop 1 . sep [] ""
sep l _ [] = reverse l
sep l curr (c:cs)
| c == '%' = sep (reverse curr:l) "" cs
| c == '\\' = case cs of
| c == escchar = case cs of
(c':cs') -> sep l (c':curr) cs'
[] -> sep l curr cs
| otherwise = sep l (c:curr) cs

1
debian/changelog vendored
View file

@ -10,6 +10,7 @@ git-annex (5.20141220) UNRELEASED; urgency=medium
* bittorrent: Fix locking problem when using addurl file://
* Windows: Fix local rsync filepath munging (fixes 26 test suite failures).
* Windows: Got the rsync special remote working.
* Windows: Fix handling of views of filenames containing '%'
-- Joey Hess <id@joeyh.name> Mon, 22 Dec 2014 15:16:38 -0400