diff options
author | Joey Hess <joey@kitenet.net> | 2012-09-29 12:27:43 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-09-29 12:27:43 -0400 |
commit | 751f7947483580f17476bd74bc8cb5703f1b926b (patch) | |
tree | cddc2e257d2b679a24d1d8c89b536cea5d3e02a6 /Assistant | |
parent | 7147b7b8b2a2bdb89e7c4f273f5f52b472c65105 (diff) |
sanitize all git remote names
Diffstat (limited to 'Assistant')
-rw-r--r-- | Assistant/MakeRemote.hs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/Assistant/MakeRemote.hs b/Assistant/MakeRemote.hs index 729b5126a..9184cb529 100644 --- a/Assistant/MakeRemote.hs +++ b/Assistant/MakeRemote.hs @@ -25,6 +25,7 @@ import Logs.Remote import qualified Data.Text as T import qualified Data.Map as M +import Data.Char {- Sets up and begins syncing with a new ssh or rsync remote. -} makeSshRemote :: ThreadState -> DaemonStatusHandle -> ScanRemoteMap -> Bool -> SshData -> IO () @@ -99,14 +100,19 @@ makeRemote basename location a = do samelocation x = Git.repoLocation x == location {- Generate an unused name for a remote, adding a number if - - necessary. -} + - necessary. + - + - Ensures that the returned name is a legal git remote name. -} uniqueRemoteName :: String -> Int -> Git.Repo -> String uniqueRemoteName basename n r | null namecollision = name - | otherwise = uniqueRemoteName basename (succ n) r + | otherwise = uniqueRemoteName legalbasename (succ n) r where namecollision = filter samename (Git.remotes r) samename x = Git.remoteName x == Just name name - | n == 0 = basename - | otherwise = basename ++ show n + | n == 0 = legalbasename + | otherwise = legalbasename ++ show n + legalbasename = filter legal basename + legal '_' = True + legal c = isAlphaNum c |