p2p: Added --one-way option.

This commit was sponsored by Fernando Jimenez on Patreon.
This commit is contained in:
Joey Hess 2016-12-16 16:43:37 -04:00
parent 3037feb1bf
commit bd811d3853
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
3 changed files with 30 additions and 14 deletions

View file

@ -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

View file

@ -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

View file

@ -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)