avoid creating work tree files in subdirectories in an edge case

A keyName could contain "/", though this is unlikely and certianly only
ever could happen with WORM keys.

The change to addunused to escape that is no problem at all.

The change to VariantFile to escape it means that different versions of
git-annex could resolve a merge conflict differently in this case, which
is unfortunate. There would be different .variant files used, so the two
resolutions would themselves merge together without additional
conflicts, but the user would have to clean up the extra .variant
files.
This commit is contained in:
Joey Hess 2019-01-14 13:07:18 -04:00
parent d3ab5e626b
commit 1791447cc8
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
3 changed files with 9 additions and 5 deletions

View file

@ -10,6 +10,8 @@ module Annex.VariantFile where
import Annex.Common
import Utility.Hash
import qualified Data.ByteString.Lazy as L
variantMarker :: String
variantMarker = ".variant-"
@ -34,10 +36,10 @@ mkVariant file variant = takeDirectory file
-}
variantFile :: FilePath -> Key -> FilePath
variantFile file key
| doubleconflict = mkVariant file (serializeKey key)
| otherwise = mkVariant file (shortHash $ serializeKey key)
| doubleconflict = mkVariant file (keyFile key)
| otherwise = mkVariant file (shortHash $ serializeKey' key)
where
doubleconflict = variantMarker `isInfixOf` file
shortHash :: String -> String
shortHash = take 4 . show . md5 . encodeBL
shortHash :: L.ByteString -> String
shortHash = take 4 . show . md5

View file

@ -27,6 +27,8 @@ git-annex (7.20181212) UNRELEASED; urgency=medium
* Improve uuid.log parser to preserve whitespace in repo descriptions.
* Improve activity.log parser to not remove unknown values,
allowing for future expansion.
* addunused, merge, assistant: Avoid creating work tree files in
subdirectories in an edge case where the key contains "/".
-- Joey Hess <id@joeyh.name> Tue, 18 Dec 2018 12:24:52 -0400

View file

@ -32,7 +32,7 @@ perform key = next $ do
addLink file key Nothing
return True
where
file = "unused." ++ serializeKey key
file = "unused." ++ keyFile key
{- The content is not in the annex, but in another directory, and
- it seems better to error out, rather than moving bad/tmp content into