fix init in cripped filesystem version issues

* init: When a crippled filesystem causes an adjusted unlocked branch to
  be used, set repo version to 7, which it neglected to do before.
* init: When on a crippled filesystem, and the git version is too old
  to use an adjusted unlocked branch, fall back to using direct mode.

This commit was sponsored by Ilya Shlyakhter on Patreon.
This commit is contained in:
Joey Hess 2018-12-03 12:57:23 -04:00
parent 89abe04eb8
commit 865d556103
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
4 changed files with 34 additions and 6 deletions

View file

@ -28,6 +28,7 @@ module Annex.AdjustedBranch (
checkAdjustedClone,
isSupported,
checkVersionSupported,
isGitVersionSupported,
) where
import Annex.Common
@ -227,6 +228,7 @@ updateAdjustedBranch adj@(LinkAdjustment _) _ origbranch = preventCommits $ \com
adjustToCrippledFileSystem :: Annex ()
adjustToCrippledFileSystem = do
warning "Entering an adjusted branch where files are unlocked as this filesystem does not support locked files."
checkVersionSupported
whenM (isNothing <$> originalBranch) $
void $ inRepo $ Git.Branch.commitCommand Git.Branch.AutomaticCommit
[ Param "--quiet"

View file

@ -23,6 +23,7 @@ import qualified Annex
import qualified Git
import qualified Git.Config
import qualified Git.Objects
import qualified Git.LsFiles
import qualified Annex.Branch
import Logs.UUID
import Logs.Trust.Basic
@ -32,11 +33,12 @@ import Types.RepoVersion
import Annex.Version
import Annex.Difference
import Annex.UUID
import Annex.Link
import Annex.WorkTree
import Config
import Config.Smudge
import Annex.Direct
import Annex.AdjustedBranch
import qualified Annex.AdjustedBranch as AdjustedBranch
import Annex.Environment
import Annex.Hook
import Annex.InodeSentinal
@ -114,13 +116,13 @@ initialize' ai mversion = checkCanInitialize ai $ do
unlessM isBareRepo $ do
hookWrite postCheckoutHook
hookWrite postMergeHook
checkAdjustedClone >>= \case
NeedUpgradeForAdjustedClone ->
AdjustedBranch.checkAdjustedClone >>= \case
AdjustedBranch.NeedUpgradeForAdjustedClone ->
void $ upgrade True versionForAdjustedClone
InAdjustedClone -> return ()
NotInAdjustedClone ->
AdjustedBranch.InAdjustedClone -> return ()
AdjustedBranch.NotInAdjustedClone ->
ifM (crippledFileSystem <&&> (not <$> isBareRepo))
( adjustToCrippledFileSystem
( adjustToCrippledFilesystem
-- Handle case where this repo was cloned from a
-- direct mode repo
, unlessM isBareRepo
@ -282,3 +284,20 @@ propigateSecureHashesOnly :: Annex ()
propigateSecureHashesOnly =
maybe noop (setConfig (ConfigKey "annex.securehashesonly"))
=<< getGlobalConfig "annex.securehashesonly"
adjustToCrippledFilesystem :: Annex ()
adjustToCrippledFilesystem = ifM (liftIO $ AdjustedBranch.isGitVersionSupported)
( do
void $ upgrade True versionForCrippledFilesystem
AdjustedBranch.adjustToCrippledFileSystem
, enableDirectMode
)
enableDirectMode :: Annex ()
enableDirectMode = unlessM isDirect $ do
warning "Enabling direct mode."
top <- fromRepo Git.repoPath
(l, clean) <- inRepo $ Git.LsFiles.inRepo [top]
forM_ l $ \f ->
maybe noop (`toDirect` f) =<< isAnnexLink f
void $ liftIO clean

View file

@ -28,6 +28,9 @@ supportedVersions = map RepoVersion [5, 7]
versionForAdjustedClone :: RepoVersion
versionForAdjustedClone = RepoVersion 7
versionForCrippledFilesystem :: RepoVersion
versionForCrippledFilesystem = RepoVersion 7
upgradableVersions :: [RepoVersion]
#ifndef mingw32_HOST_OS
upgradableVersions = map RepoVersion [0..6]

View file

@ -5,6 +5,10 @@ git-annex (7.20181122) UNRELEASED; urgency=medium
Thanks, Robert Schütz
* When running youtube-dl to get a filename, pass --no-playlist.
* Fix build without concurrent-output.
* init: When a crippled filesystem causes an adjusted unlocked branch to
be used, set repo version to 7, which it neglected to do before.
* init: When on a crippled filesystem, and the git version is too old
to use an adjusted unlocked branch, fall back to using direct mode.
-- Joey Hess <id@joeyh.name> Tue, 27 Nov 2018 12:29:27 -0400