summaryrefslogtreecommitdiff
path: root/Command/XMPPGit.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-11-09 12:51:54 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-11-09 13:35:23 -0400
commitd8331995cd692d6b81895114e23dc7b1939fc6d1 (patch)
tree63a52a18b7a6b809c1262740cea491e347f0110f /Command/XMPPGit.hs
parent164d9439a1f87c69aaa61f0314428ddfb68ee886 (diff)
use xmpp::user@host for xmpp remotes
Inject the required git-remote-xmpp into PATH when running xmpp git push. Rest of the time it will not be in PATH, and git won't be able to talk to xmpp remotes.
Diffstat (limited to 'Command/XMPPGit.hs')
-rw-r--r--Command/XMPPGit.hs17
1 files changed, 17 insertions, 0 deletions
diff --git a/Command/XMPPGit.hs b/Command/XMPPGit.hs
index ca7058c12..9df4f5d66 100644
--- a/Command/XMPPGit.hs
+++ b/Command/XMPPGit.hs
@@ -20,5 +20,22 @@ seek = [withWords start]
start :: [String] -> CommandStart
start _ = do
+ liftIO gitRemoteHelper
liftIO xmppGitRelay
stop
+
+{- A basic implementation of the git-remote-helpers protocol. -}
+gitRemoteHelper :: IO ()
+gitRemoteHelper = do
+ expect "capabilities"
+ respond ["connect"]
+ expect "connect git-receive-pack"
+ respond []
+ where
+ expect s = do
+ cmd <- getLine
+ unless (cmd == s) $
+ error $ "git-remote-helpers protocol error: expected: " ++ s ++ ", but got: " ++ cmd
+ respond l = do
+ mapM_ putStrLn l
+ putStrLn ""