diff --git a/Annex/AdjustedBranch.hs b/Annex/AdjustedBranch.hs index 9de345895b..43af5d3723 100644 --- a/Annex/AdjustedBranch.hs +++ b/Annex/AdjustedBranch.hs @@ -18,6 +18,7 @@ module Annex.AdjustedBranch ( adjustToCrippledFileSystem, updateAdjustedBranch, propigateAdjustedCommits, + checkAdjustedClone, ) where import Annex.Common @@ -419,3 +420,17 @@ diffTreeToTreeItem dti = TreeItem (Git.DiffTree.file dti) (Git.DiffTree.dstmode dti) (Git.DiffTree.dstsha dti) + +{- 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. Create the origbranch. -} +checkAdjustedClone :: Annex () +checkAdjustedClone = go =<< inRepo Git.Branch.current + where + go Nothing = return () + go (Just currbranch) = case adjustedToOriginal currbranch of + Nothing -> return () + Just (_adj, origbranch) -> + unlessM (inRepo $ Git.Ref.exists origbranch) $ do + let remotebranch = Git.Ref.underBase "refs/remotes/origin" origbranch + inRepo $ Git.Branch.update' origbranch remotebranch diff --git a/Annex/Init.hs b/Annex/Init.hs index 99f8ece2c2..4edc9c914a 100644 --- a/Annex/Init.hs +++ b/Annex/Init.hs @@ -105,6 +105,7 @@ initialize' mversion = do , unlessM isBare switchHEADBack ) + checkAdjustedClone createInodeSentinalFile False uninitialize :: Annex () diff --git a/doc/design/adjusted_branches.mdwn b/doc/design/adjusted_branches.mdwn index 17c04d2546..90f880e64c 100644 --- a/doc/design/adjusted_branches.mdwn +++ b/doc/design/adjusted_branches.mdwn @@ -351,8 +351,6 @@ into adjusted view worktrees.] will make copies of the content of annexed files, so this would need to checkout the adjusted branch some other way. Maybe generalize so this more efficient checkout is available as a git-annex command? -* Cloning a repo that has an adjusted branch checked out gets into an ugly - state. * There are potentially races in code that assumes a branch like master is not being changed by someone else. In particular, propigateAdjustedCommits rebases the adjusted branch on top of master.