diff options
author | 2016-06-02 15:58:22 -0400 | |
---|---|---|
committer | 2016-06-02 16:10:30 -0400 | |
commit | d8b894c5cbb430c17e61f8c2d001c03b567bfb12 (patch) | |
tree | b9e2eb70b02d102e2caaa30998ec87cd8d50d3c8 /Annex/AdjustedBranch.hs | |
parent | 914cf84bdb8441746f3388391f0218a5f1f63443 (diff) |
better avoid switching to direct mode in clone of adjusted branch repo
Diffstat (limited to 'Annex/AdjustedBranch.hs')
-rw-r--r-- | Annex/AdjustedBranch.hs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/Annex/AdjustedBranch.hs b/Annex/AdjustedBranch.hs index 2d2a98531..67c36f399 100644 --- a/Annex/AdjustedBranch.hs +++ b/Annex/AdjustedBranch.hs @@ -20,6 +20,7 @@ module Annex.AdjustedBranch ( adjustToCrippledFileSystem, updateAdjustedBranch, propigateAdjustedCommits, + AdjustedClone(..), checkAdjustedClone, isGitVersionSupported, checkVersionSupported, @@ -539,6 +540,8 @@ diffTreeToTreeItem dti = TreeItem (Git.DiffTree.dstmode dti) (Git.DiffTree.dstsha dti) +data AdjustedClone = InAdjustedClone | NotInAdjustedClone | NeedUpgradeForAdjustedClone + {- Cloning a repository that has an adjusted branch checked out will - result in the clone having the same adjusted branch checked out -- but - the origbranch won't exist in the clone, nor will the basis. @@ -547,12 +550,12 @@ diffTreeToTreeItem dti = TreeItem - The repository may also need to be upgraded to a new version, if the - current version is too old to support adjusted branches. Returns True - when this is the case. -} -checkAdjustedClone :: Annex Bool +checkAdjustedClone :: Annex AdjustedClone checkAdjustedClone = go =<< inRepo Git.Branch.current where - go Nothing = return False + go Nothing = return NotInAdjustedClone go (Just currbranch) = case adjustedToOriginal currbranch of - Nothing -> return False + Nothing -> return NotInAdjustedClone Just (adj, origbranch) -> do let remotebranch = Git.Ref.underBase "refs/remotes/origin" origbranch let basis@(BasisBranch bb) = basisBranch (originalToAdjusted origbranch adj) @@ -560,7 +563,10 @@ checkAdjustedClone = go =<< inRepo Git.Branch.current setBasisBranch basis remotebranch unlessM (inRepo $ Git.Ref.exists origbranch) $ inRepo $ Git.Branch.update' origbranch remotebranch - not <$> versionSupportsUnlockedPointers + ifM versionSupportsUnlockedPointers + ( return InAdjustedClone + , return NeedUpgradeForAdjustedClone + ) -- git 2.2.0 needed for GIT_COMMON_DIR which is needed -- by updateAdjustedBranch to use withWorkTreeRelated. |