aboutsummaryrefslogtreecommitdiff
path: root/Command/P2P.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-12-16 15:36:59 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-12-16 15:37:50 -0400
commit353b59a000dd0e4941b3c36a7fd02d23f3cf44a1 (patch)
tree3d39f2107a921d9cf3bc6bb6c922a58046c460a8 /Command/P2P.hs
parent6c59cea78aa11aea9031eb162b4158fa1d955f4f (diff)
p2p: --link no longer takes a remote name, instead the --name option can be used.
Diffstat (limited to 'Command/P2P.hs')
-rw-r--r--Command/P2P.hs36
1 files changed, 27 insertions, 9 deletions
diff --git a/Command/P2P.hs b/Command/P2P.hs
index ea4dd7c65..d59d774c4 100644
--- a/Command/P2P.hs
+++ b/Command/P2P.hs
@@ -27,25 +27,43 @@ cmd = command "p2p" SectionSetup
data P2POpts
= GenAddresses
- | LinkRemote RemoteName
+ | LinkRemote
-optParser :: CmdParamsDesc -> Parser P2POpts
-optParser _ = genaddresses <|> linkremote
+optParser :: CmdParamsDesc -> Parser (P2POpts, Maybe RemoteName)
+optParser _ = (,)
+ <$> (genaddresses <|> linkremote)
+ <*> optional name
where
genaddresses = flag' GenAddresses
( long "gen-addresses"
<> help "generate addresses that allow accessing this repository over P2P networks"
)
- linkremote = LinkRemote <$> strOption
+ linkremote = flag' LinkRemote
( long "link"
- <> metavar paramRemote
- <> help "specify name to use for git remote"
+ <> help "set up a P2P link to a git remote"
+ )
+ name = strOption
+ ( long "name"
+ <> metavar paramName
+ <> help "name of remote"
)
-seek :: P2POpts -> CommandSeek
-seek GenAddresses = genAddresses =<< loadP2PAddresses
-seek (LinkRemote name) = commandAction $
+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
+
+unusedPeerRemoteName :: Annex RemoteName
+unusedPeerRemoteName = go (1 :: Integer) =<< usednames
+ where
+ usednames = mapMaybe remoteName . remotes <$> Annex.gitRepo
+ go n names = do
+ let name = "peer" ++ show n
+ if name `elem` names
+ then go (n+1) names
+ else return name
-- Only addresses are output to stdout, to allow scripting.
genAddresses :: [P2PAddress] -> Annex ()