summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-12-16 16:43:37 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-12-16 16:43:37 -0400
commit633c4f4cf0e4c4e387fb42889d996de1ecd8bfd6 (patch)
treead58b620727a0b066f2286f57f267c062e458b31
parent6aa7e136b5d246228723f4c9996bda11f66c4445 (diff)
p2p: Added --one-way option.
This commit was sponsored by Fernando Jimenez on Patreon.
-rw-r--r--CHANGELOG1
-rw-r--r--Command/P2P.hs38
-rw-r--r--doc/git-annex-p2p.mdwn5
3 files changed, 30 insertions, 14 deletions
diff --git a/CHANGELOG b/CHANGELOG
index faadc132e..c4d3e2712 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -17,6 +17,7 @@ git-annex (6.20161211) UNRELEASED; urgency=medium
* p2p --link now defaults to setting up a bi-directional link;
both the local and remote git repositories get remotes added
pointing at one-another.
+ * p2p: Added --one-way option.
-- Joey Hess <id@joeyh.name> Sun, 11 Dec 2016 21:29:51 -0400
diff --git a/Command/P2P.hs b/Command/P2P.hs
index 323906f36..817840d07 100644
--- a/Command/P2P.hs
+++ b/Command/P2P.hs
@@ -24,10 +24,13 @@ data P2POpts
= GenAddresses
| LinkRemote
-optParser :: CmdParamsDesc -> Parser (P2POpts, Maybe RemoteName)
-optParser _ = (,)
+data LinkDirection = BiDirectional | OneWay
+
+optParser :: CmdParamsDesc -> Parser (P2POpts, Maybe RemoteName, LinkDirection)
+optParser _ = (,,)
<$> (genaddresses <|> linkremote)
<*> optional name
+ <*> direction
where
genaddresses = flag' GenAddresses
( long "gen-addresses"
@@ -42,13 +45,17 @@ optParser _ = (,)
<> metavar paramName
<> help "name of remote"
)
+ direction = flag BiDirectional OneWay
+ ( long "one-way"
+ <> help "make one-way link, rather than default bi-directional link"
+ )
-seek :: (P2POpts, Maybe RemoteName) -> CommandSeek
-seek (GenAddresses, _) = genAddresses =<< loadP2PAddresses
-seek (LinkRemote, Just name) = commandAction $
- linkRemote (Git.Remote.makeLegalName name)
-seek (LinkRemote, Nothing) = commandAction $
- linkRemote =<< unusedPeerRemoteName
+seek :: (P2POpts, Maybe RemoteName, LinkDirection) -> CommandSeek
+seek (GenAddresses, _, _) = genAddresses =<< loadP2PAddresses
+seek (LinkRemote, Just name, direction) = commandAction $
+ linkRemote direction (Git.Remote.makeLegalName name)
+seek (LinkRemote, Nothing, direction) = commandAction $
+ linkRemote direction =<< unusedPeerRemoteName
-- Only addresses are output to stdout, to allow scripting.
genAddresses :: [P2PAddress] -> Annex ()
@@ -62,8 +69,8 @@ genAddresses addrs = do
map (`P2PAddressAuth` authtoken) addrs
-- Address is read from stdin, to avoid leaking it in shell history.
-linkRemote :: RemoteName -> CommandStart
-linkRemote remotename = do
+linkRemote :: LinkDirection -> RemoteName -> CommandStart
+linkRemote direction remotename = do
showStart "p2p link" remotename
next $ next prompt
where
@@ -81,9 +88,12 @@ linkRemote remotename = do
liftIO $ hPutStrLn stderr "Unable to parse that address, please check its format and try again."
prompt
Just addr -> do
- myaddrs <- loadP2PAddresses
- authtoken <- liftIO $ genAuthToken 128
- storeP2PAuthToken authtoken
- let linkbackto = map (`P2PAddressAuth` authtoken) myaddrs
+ linkbackto <- case direction of
+ OneWay -> return []
+ BiDirectional -> do
+ myaddrs <- loadP2PAddresses
+ authtoken <- liftIO $ genAuthToken 128
+ storeP2PAuthToken authtoken
+ return $ map (`P2PAddressAuth` authtoken) myaddrs
linkAddress addr linkbackto remotename
>>= either giveup return
diff --git a/doc/git-annex-p2p.mdwn b/doc/git-annex-p2p.mdwn
index cefa116d6..dcfb36a3f 100644
--- a/doc/git-annex-p2p.mdwn
+++ b/doc/git-annex-p2p.mdwn
@@ -39,6 +39,11 @@ services.
Specify a name to use when setting up a git remote.
+* `--one-way`
+
+ Use with `--link` to create a one-way link with a peer, rather than the
+ default bi-directional link.
+
# SEE ALSO
[[git-annex]](1)