diff options
-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. |