aboutsummaryrefslogtreecommitdiff
path: root/Command/PostReceive.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-02-17 15:21:39 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-02-17 15:21:52 -0400
commit2c74780d475a2c9e60d8bf4d222bec7e15ca9dd6 (patch)
treeaab7ebc93be5e1533cbca8bfb8363df56fcd7e94 /Command/PostReceive.hs
parentf3affee1f111886057a5cc3083b55bfafa50bae8 (diff)
sync hack to make updateInstead work on eg FAT
sync: When syncing with a local repository located on a crippled filesystem, run the post-receive hook there, since it wouldn't get run otherwise. This makes pushing to repos on FAT-formatted removable drives update them when receive.denyCurrentBranch=updateInstead. Made Remote.Git export onLocal, which was cleaned up to not have so many caveats about its use. This commit was sponsored by Jeff Goeke-Smith on Patreon.
Diffstat (limited to 'Command/PostReceive.hs')
-rw-r--r--Command/PostReceive.hs29
1 files changed, 7 insertions, 22 deletions
diff --git a/Command/PostReceive.hs b/Command/PostReceive.hs
index 2110333f0..84652f20d 100644
--- a/Command/PostReceive.hs
+++ b/Command/PostReceive.hs
@@ -5,19 +5,13 @@
- Licensed under the GNU GPL version 3 or higher.
-}
-{-# LANGUAGE CPP #-}
-
module Command.PostReceive where
import Command
import qualified Annex
-import Config
-import Annex.Version
-import Annex.AdjustedBranch
-import Git.Branch
import Git.Types
-import Git.ConfigTypes
-import qualified Command.Merge
+import Annex.UpdateInstead
+import Command.Sync (mergeLocal, prepMerge, mergeConfig, getCurrBranch)
cmd :: Command
cmd = command "post-receive" SectionPlumbing
@@ -28,7 +22,7 @@ cmd = command "post-receive" SectionPlumbing
seek :: CmdParams -> CommandSeek
seek _ = whenM needUpdateInsteadEmulation $ do
fixPostReceiveHookEnv
- updateInsteadEmulation
+ commandAction updateInsteadEmulation
{- When run by the post-receive hook, the cwd is the .git directory,
- and GIT_DIR=. It's not clear why git does this.
@@ -46,16 +40,7 @@ fixPostReceiveHookEnv = do
}
_ -> noop
-{- receive.denyCurrentBranch=updateInstead does not work in direct mode
- - repositories or when an adjusted branch is checked out, so must be
- - emulated. -}
-needUpdateInsteadEmulation :: Annex Bool
-needUpdateInsteadEmulation = updateinsteadset <&&> (isDirect <||> isadjusted)
- where
- updateinsteadset = (== UpdateInstead) . receiveDenyCurrentBranch
- <$> Annex.getGitConfig
- isadjusted = versionSupportsUnlockedPointers
- <&&> (maybe False (isJust . getAdjustment) <$> inRepo Git.Branch.current)
-
-updateInsteadEmulation :: Annex ()
-updateInsteadEmulation = commandAction Command.Merge.mergeSynced
+updateInsteadEmulation :: CommandStart
+updateInsteadEmulation = do
+ prepMerge
+ mergeLocal mergeConfig =<< join getCurrBranch