summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex.hs2
-rw-r--r--Annex/AdjustedBranch.hs6
-rw-r--r--Annex/Ingest.hs24
-rw-r--r--doc/design/adjusted_branches.mdwn2
4 files changed, 29 insertions, 5 deletions
diff --git a/Annex.hs b/Annex.hs
index fe6802776..5ab2b748d 100644
--- a/Annex.hs
+++ b/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.
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.