direct mode mappings now updated by git annex sync

Still lots to do to make sync handle direct mode, but this is a good first
step.
This commit is contained in:
Joey Hess 2012-12-10 14:37:24 -04:00
parent 715c67a3e5
commit 514957914d
2 changed files with 74 additions and 6 deletions

View file

@ -15,6 +15,7 @@ import qualified Annex
import qualified Annex.Branch
import qualified Annex.Queue
import Annex.Content
import Annex.Content.Direct
import Annex.CatFile
import qualified Git.Command
import qualified Git.LsFiles as LsFiles
@ -129,19 +130,39 @@ pullRemote remote branch = do
{- The remote probably has both a master and a synced/master branch.
- Which to merge from? Well, the master has whatever latest changes
- were committed, while the synced/master may have changes that some
- other remote synced to this remote. So, merge them both. -}
- other remote synced to this remote. So, merge them both.
-
- In direct mode, updates associated files mappings for the files that
- were changed by the merge.
-}
mergeRemote :: Remote -> (Maybe Git.Ref) -> CommandCleanup
mergeRemote remote b = case b of
Nothing -> do
branch <- inRepo Git.Branch.currentUnsafe
all id <$> (mapM merge $ branchlist branch)
Just _ -> all id <$> (mapM merge =<< tomerge (branchlist b))
update branch $
all id <$> (mapM merge $ branchlist branch)
Just branch -> update (Just branch) $
all id <$> (mapM merge =<< tomerge (branchlist b))
where
merge = mergeFrom . remoteBranch remote
tomerge branches = filterM (changed remote) branches
branchlist Nothing = []
branchlist (Just branch) = [branch, syncBranch branch]
update Nothing a = a
update (Just branch) a = ifM isDirect
( do
old <- inRepo $ Git.Ref.sha branch
r <- a
new <- inRepo $ Git.Ref.sha branch
case (old, new) of
(Just oldsha, Just newsha) -> do
updateAssociatedFiles oldsha newsha
_ -> noop
return r
, a
)
pushRemote :: Remote -> Git.Ref -> CommandStart
pushRemote remote branch = go =<< needpush
where