diff options
Diffstat (limited to 'Annex')
-rw-r--r-- | Annex/Branch.hs | 6 | ||||
-rw-r--r-- | Annex/Direct.hs | 24 |
2 files changed, 25 insertions, 5 deletions
diff --git a/Annex/Branch.hs b/Annex/Branch.hs index 9838af25f..658ad731f 100644 --- a/Annex/Branch.hs +++ b/Annex/Branch.hs @@ -95,7 +95,7 @@ getBranch = maybe (hasOrigin >>= go >>= use) return =<< branchsha fromMaybe (error $ "failed to create " ++ show name) <$> branchsha go False = withIndex' True $ - inRepo $ Git.Branch.commit "branch created" fullname [] + inRepo $ Git.Branch.commitAlways "branch created" fullname [] use sha = do setIndexSha sha return sha @@ -249,7 +249,7 @@ commitIndex jl branchref message parents = do commitIndex' :: JournalLocked -> Git.Ref -> String -> [Git.Ref] -> Annex () commitIndex' jl branchref message parents = do updateIndex jl branchref - committedref <- inRepo $ Git.Branch.commit message fullname parents + committedref <- inRepo $ Git.Branch.commitAlways message fullname parents setIndexSha committedref parentrefs <- commitparents <$> catObject committedref when (racedetected branchref parentrefs) $ do @@ -486,7 +486,7 @@ performTransitionsLocked jl ts neednewlocalbranch transitionedrefs = do Annex.Queue.flush if neednewlocalbranch then do - committedref <- inRepo $ Git.Branch.commit message fullname transitionedrefs + committedref <- inRepo $ Git.Branch.commitAlways message fullname transitionedrefs setIndexSha committedref else do ref <- getBranch diff --git a/Annex/Direct.hs b/Annex/Direct.hs index 3fa5f9362..1034e6547 100644 --- a/Annex/Direct.hs +++ b/Annex/Direct.hs @@ -1,6 +1,6 @@ {- git-annex direct mode - - - Copyright 2012 Joey Hess <joey@kitenet.net> + - Copyright 2012, 2013 Joey Hess <joey@kitenet.net> - - Licensed under the GNU GPL version 3 or higher. -} @@ -88,7 +88,27 @@ stageDirect = do addgit file = Annex.Queue.addCommand "add" [Param "-f"] [file] - deletegit file = Annex.Queue.addCommand "rm" [Param "-f"] [file] + deletegit file = Annex.Queue.addCommand "rm" [Param "-qf"] [file] + +{- Run before a commit to update direct mode bookeeping to reflect the + - staged changes being committed. -} +preCommitDirect :: Annex Bool +preCommitDirect = do + (diffs, clean) <- inRepo $ DiffTree.diffIndex Git.Ref.headRef + makeabs <- flip fromTopFilePath <$> gitRepo + forM_ diffs (go makeabs) + liftIO clean + where + go makeabs diff = do + withkey (DiffTree.srcsha diff) (DiffTree.srcmode diff) removeAssociatedFile + withkey (DiffTree.dstsha diff) (DiffTree.dstmode diff) addAssociatedFile + where + withkey sha mode a = when (sha /= nullSha) $ do + k <- catKey sha mode + case k of + Nothing -> noop + Just key -> void $ a key $ + makeabs $ DiffTree.file diff {- Adds a file to the annex in direct mode. Can fail, if the file is - modified or deleted while it's being added. -} |