store content in hashDirLower directories in bare repositories

When storing content in bare repositories, use the hashDirLower
directories. Bare repositories can be on USB drives, which might
use the FAT filesystem, and fall afoul of recent bugs in linux's handling
of mixed case on FAT. Using hashDirLower avoids that.
This commit is contained in:
Joey Hess 2011-11-28 22:47:11 -04:00
parent da9cd315be
commit f4bf444ae0
3 changed files with 12 additions and 4 deletions

View file

@ -75,7 +75,10 @@ annexLocations key = [using hashDirMixed, using hashDirLower]
gitAnnexLocation :: Key -> Git.Repo -> IO FilePath
gitAnnexLocation key r
| Git.repoIsLocalBare r =
go (Git.workTree r) $ annexLocations key
-- bare repositories default to hashDirLower for new
-- content, as it's more portable, so check locations
-- in reverse order
go (Git.workTree r) $ reverse $ annexLocations key
| otherwise =
go (Git.workTree r </> ".git") $ annexLocations key
where

8
debian/changelog vendored
View file

@ -1,7 +1,11 @@
git-annex (3.20111123) UNRELEASED; urgency=low
* Put a workaround in the directory special remote for strange behavior
with VFAT filesystems on Linux (mounted with shortname=mixed)
* The VFAT filesystem on recent versions of Linux, when mounted with
shortname=mixed, does not get along well with git-annex's mixed case
.git/annex/objects hash directories. To better support it, bare
repositories (and the directory special remote) now store content
in all-lowercase hash directories. Mixed case hash directories are
still used for non-bare directories, which cannot be put in VFAT.
* Flush json output, avoiding a buffering problem that could result in
doubled output.
* Avoid needing haskell98 and other fixes for new ghc. Thanks, Mark Wright.

View file

@ -42,4 +42,5 @@ I wonder if the directory remote should use hashDirLower instead of hashDirMixed
>> and for the even more unlikely configuration of a rsync special remote
>> stored on VFAT. --[[Joey]]
[[!meta title="bare git repository not supported on VFAT"]]
>>> Bare repositories now use lowercase. rsync is the only remaining
>>> unsupported possibility. --[[Joey]]