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.
This commit is contained in:
parent
4226ae1040
commit
42b7ccc89f
4 changed files with 29 additions and 5 deletions
2
Annex.hs
2
Annex.hs
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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. -}
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue