diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-03-29 13:26:06 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-03-29 13:26:06 -0400 |
commit | 86c10bc681bb12936bc12c612d6a91096bc41f7b (patch) | |
tree | 5291fac68a6e2e505690e33a65a7575d28ee4eb9 | |
parent | c079545a6a3a85f92fbf592229b5f90dbb2da856 (diff) |
git annex add in adjusted unlocked branch
Cached the current branch lookup just because it seems unnecessary overhead
to run an extra git command per add to query the current branch.
-rw-r--r-- | Annex.hs | 2 | ||||
-rw-r--r-- | Annex/AdjustedBranch.hs | 6 | ||||
-rw-r--r-- | Annex/Ingest.hs | 24 | ||||
-rw-r--r-- | doc/design/adjusted_branches.mdwn | 2 |
4 files changed, 29 insertions, 5 deletions
@@ -136,6 +136,7 @@ data AnnexState = AnnexState , workers :: [Either AnnexState (Async AnnexState)] , concurrentjobs :: Maybe Int , keysdbhandle :: Maybe Keys.DbHandle + , cachedcurrentbranch :: Maybe Git.Branch } newState :: GitConfig -> Git.Repo -> AnnexState @@ -182,6 +183,7 @@ newState c r = AnnexState , workers = [] , concurrentjobs = Nothing , keysdbhandle = Nothing + , cachedcurrentbranch = Nothing } {- Makes an Annex state object for the specified git repo. diff --git a/Annex/AdjustedBranch.hs b/Annex/AdjustedBranch.hs index 357e70e2f..b2ca7dbf6 100644 --- a/Annex/AdjustedBranch.hs +++ b/Annex/AdjustedBranch.hs @@ -12,6 +12,7 @@ module Annex.AdjustedBranch ( originalToAdjusted, adjustedToOriginal, fromAdjustedBranch, + getAdjustment, enterAdjustedBranch, updateAdjustedBranch, propigateAdjustedCommits, @@ -45,7 +46,7 @@ data Adjustment | LockAdjustment | HideMissingAdjustment | ShowMissingAdjustment - deriving (Show) + deriving (Show, Eq) reverseAdjustment :: Adjustment -> Adjustment reverseAdjustment UnlockAdjustment = LockAdjustment @@ -122,6 +123,9 @@ adjustedToOriginal b bs = fromRef b prefixlen = length adjustedBranchPrefix +getAdjustment :: Branch -> Maybe Adjustment +getAdjustment = fmap fst . adjustedToOriginal + fromAdjustedBranch :: Branch -> OrigBranch fromAdjustedBranch b = maybe b snd (adjustedToOriginal b) diff --git a/Annex/Ingest.hs b/Annex/Ingest.hs index b80f0e1e0..1bf1db146 100644 --- a/Annex/Ingest.hs +++ b/Annex/Ingest.hs @@ -35,6 +35,8 @@ import Logs.Location import qualified Annex import qualified Annex.Queue import qualified Database.Keys +import qualified Git +import qualified Git.Branch import Config import Utility.InodeCache import Annex.ReplaceFile @@ -43,6 +45,7 @@ import Utility.CopyFile import Utility.Touch import Git.FilePath import Annex.InodeSentinal +import Annex.AdjustedBranch import Control.Exception (IOException) @@ -309,15 +312,32 @@ forceParams = ifM (Annex.getState Annex.force) ) {- Whether a file should be added unlocked or not. Default is to not, - - unless symlinks are not supported. annex.addunlocked can override that. -} + - unless symlinks are not supported. annex.addunlocked can override that. + - Also, when in an adjusted unlocked branch, always add files unlocked. + -} addUnlocked :: Annex Bool addUnlocked = isDirect <||> (versionSupportsUnlockedPointers <&&> ((not . coreSymlinks <$> Annex.getGitConfig) <||> - (annexAddUnlocked <$> Annex.getGitConfig) + (annexAddUnlocked <$> Annex.getGitConfig) <||> + (maybe False (\b -> getAdjustment b == Just UnlockAdjustment) <$> cachedCurrentBranch) ) ) +cachedCurrentBranch :: Annex (Maybe Git.Branch) +cachedCurrentBranch = maybe cache (return . Just) + =<< Annex.getState Annex.cachedcurrentbranch + where + cache :: Annex (Maybe Git.Branch) + cache = do + mb <- inRepo Git.Branch.currentUnsafe + case mb of + Nothing -> return Nothing + Just b -> do + Annex.changeState $ \s -> + s { Annex.cachedcurrentbranch = Just b } + return (Just b) + {- Adds a file to the work tree for the key, and stages it in the index. - The content of the key may be provided in a temp file, which will be - moved into place. -} diff --git a/doc/design/adjusted_branches.mdwn b/doc/design/adjusted_branches.mdwn index 4ef229e1d..3cf55d1de 100644 --- a/doc/design/adjusted_branches.mdwn +++ b/doc/design/adjusted_branches.mdwn @@ -301,5 +301,3 @@ into adjusted view worktrees.] (locking will cause the commits to fail) and so the assistant should not be running, or at least should have commits disabled when entering it. -* When the adjusted branch unlocks files, behave as if annex.addunlocked is - set, so git annex add will add files unlocked. |